From a2318e586a22172a13f48dc76e2037cd230d8d76 Mon Sep 17 00:00:00 2001 From: langed Date: Mon, 20 Nov 2023 02:51:09 +0000 Subject: [PATCH 001/412] Initial commit --- LICENSE | 373 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 373 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..a612ad9 --- /dev/null +++ b/LICENSE @@ -0,0 +1,373 @@ +Mozilla Public License Version 2.0 +================================== + +1. Definitions +-------------- + +1.1. "Contributor" + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. + +1.2. "Contributor Version" + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + (a) that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or + + (b) that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. + +1.6. "Executable Form" + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. + +1.8. "License" + means this document. + +1.9. "Licensable" + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. + +1.10. "Modifications" + means any of the following: + + (a) any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or + + (b) any new file in Source Code Form that contains any Covered + Software. + +1.11. "Patent Claims" of a Contributor + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. + +1.12. "Secondary License" + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those + licenses. + +1.13. "Source Code Form" + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, "control" means (a) the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. + +2. License Grants and Conditions +-------------------------------- + +2.1. Grants + +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + +(a) under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + +(b) under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + +2.3. Limitations on Grant Scope + +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + +(a) for any code that a Contributor has removed from Covered Software; + or + +(b) for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + +(c) under Patent Claims infringed by Covered Software in the absence of + its Contributions. + +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). + +2.5. Representation + +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + +2.7. Conditions + +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. + +3. Responsibilities +------------------- + +3.1. Distribution of Source Form + +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code +Form. + +3.2. Distribution of Executable Form + +If You distribute Covered Software in Executable Form then: + +(a) such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and + +(b) You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). + +3.4. Notices + +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. + +4. Inability to Comply Due to Statute or Regulation +--------------------------------------------------- + +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: (a) comply with +the terms of this License to the maximum extent possible; and (b) +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. + +5. Termination +-------------- + +5.1. The rights granted under this License will terminate automatically +if You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated (a) provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and (b) on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all +end user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. + +************************************************************************ +* * +* 6. Disclaimer of Warranty * +* ------------------------- * +* * +* Covered Software is provided under this License on an "as is" * +* basis, without warranty of any kind, either expressed, implied, or * +* statutory, including, without limitation, warranties that the * +* Covered Software is free of defects, merchantable, fit for a * +* particular purpose or non-infringing. The entire risk as to the * +* quality and performance of the Covered Software is with You. * +* Should any Covered Software prove defective in any respect, You * +* (not any Contributor) assume the cost of any necessary servicing, * +* repair, or correction. This disclaimer of warranty constitutes an * +* essential part of this License. No use of any Covered Software is * +* authorized under this License except under this disclaimer. * +* * +************************************************************************ + +************************************************************************ +* * +* 7. Limitation of Liability * +* -------------------------- * +* * +* Under no circumstances and under no legal theory, whether tort * +* (including negligence), contract, or otherwise, shall any * +* Contributor, or anyone who distributes Covered Software as * +* permitted above, be liable to You for any direct, indirect, * +* special, incidental, or consequential damages of any character * +* including, without limitation, damages for lost profits, loss of * +* goodwill, work stoppage, computer failure or malfunction, or any * +* and all other commercial damages or losses, even if such party * +* shall have been informed of the possibility of such damages. This * +* limitation of liability shall not apply to liability for death or * +* personal injury resulting from such party's negligence to the * +* extent applicable law prohibits such limitation. Some * +* jurisdictions do not allow the exclusion or limitation of * +* incidental or consequential damages, so this exclusion and * +* limitation may not apply to You. * +* * +************************************************************************ + +8. Litigation +------------- + +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. + +9. Miscellaneous +---------------- + +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. + +10. Versions of the License +--------------------------- + +10.1. New Versions + +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. + +10.2. Effect of New Versions + +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. + +10.3. Modified Versions + +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary +Licenses + +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice +------------------------------------------- + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice +--------------------------------------------------------- + + This Source Code Form is "Incompatible With Secondary Licenses", as + defined by the Mozilla Public License, v. 2.0. From 599c023d71c253a0aab177d9ed4be88e347e5e8f Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 20 Nov 2023 02:51:09 +0000 Subject: [PATCH 002/412] Initial commit --- LICENSE | 373 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 373 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..a612ad9 --- /dev/null +++ b/LICENSE @@ -0,0 +1,373 @@ +Mozilla Public License Version 2.0 +================================== + +1. Definitions +-------------- + +1.1. "Contributor" + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. + +1.2. "Contributor Version" + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + (a) that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or + + (b) that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. + +1.6. "Executable Form" + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. + +1.8. "License" + means this document. + +1.9. "Licensable" + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. + +1.10. "Modifications" + means any of the following: + + (a) any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or + + (b) any new file in Source Code Form that contains any Covered + Software. + +1.11. "Patent Claims" of a Contributor + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. + +1.12. "Secondary License" + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those + licenses. + +1.13. "Source Code Form" + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, "control" means (a) the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. + +2. License Grants and Conditions +-------------------------------- + +2.1. Grants + +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + +(a) under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + +(b) under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + +2.3. Limitations on Grant Scope + +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + +(a) for any code that a Contributor has removed from Covered Software; + or + +(b) for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + +(c) under Patent Claims infringed by Covered Software in the absence of + its Contributions. + +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). + +2.5. Representation + +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + +2.7. Conditions + +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. + +3. Responsibilities +------------------- + +3.1. Distribution of Source Form + +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code +Form. + +3.2. Distribution of Executable Form + +If You distribute Covered Software in Executable Form then: + +(a) such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and + +(b) You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). + +3.4. Notices + +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. + +4. Inability to Comply Due to Statute or Regulation +--------------------------------------------------- + +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: (a) comply with +the terms of this License to the maximum extent possible; and (b) +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. + +5. Termination +-------------- + +5.1. The rights granted under this License will terminate automatically +if You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated (a) provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and (b) on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all +end user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. + +************************************************************************ +* * +* 6. Disclaimer of Warranty * +* ------------------------- * +* * +* Covered Software is provided under this License on an "as is" * +* basis, without warranty of any kind, either expressed, implied, or * +* statutory, including, without limitation, warranties that the * +* Covered Software is free of defects, merchantable, fit for a * +* particular purpose or non-infringing. The entire risk as to the * +* quality and performance of the Covered Software is with You. * +* Should any Covered Software prove defective in any respect, You * +* (not any Contributor) assume the cost of any necessary servicing, * +* repair, or correction. This disclaimer of warranty constitutes an * +* essential part of this License. No use of any Covered Software is * +* authorized under this License except under this disclaimer. * +* * +************************************************************************ + +************************************************************************ +* * +* 7. Limitation of Liability * +* -------------------------- * +* * +* Under no circumstances and under no legal theory, whether tort * +* (including negligence), contract, or otherwise, shall any * +* Contributor, or anyone who distributes Covered Software as * +* permitted above, be liable to You for any direct, indirect, * +* special, incidental, or consequential damages of any character * +* including, without limitation, damages for lost profits, loss of * +* goodwill, work stoppage, computer failure or malfunction, or any * +* and all other commercial damages or losses, even if such party * +* shall have been informed of the possibility of such damages. This * +* limitation of liability shall not apply to liability for death or * +* personal injury resulting from such party's negligence to the * +* extent applicable law prohibits such limitation. Some * +* jurisdictions do not allow the exclusion or limitation of * +* incidental or consequential damages, so this exclusion and * +* limitation may not apply to You. * +* * +************************************************************************ + +8. Litigation +------------- + +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. + +9. Miscellaneous +---------------- + +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. + +10. Versions of the License +--------------------------- + +10.1. New Versions + +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. + +10.2. Effect of New Versions + +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. + +10.3. Modified Versions + +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary +Licenses + +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice +------------------------------------------- + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice +--------------------------------------------------------- + + This Source Code Form is "Incompatible With Secondary Licenses", as + defined by the Mozilla Public License, v. 2.0. From ed3d2e8ef8d4893b2709d8faccba090161442a06 Mon Sep 17 00:00:00 2001 From: langedev Date: Sun, 19 Nov 2023 19:03:46 -0800 Subject: [PATCH 003/412] Initial commit lol --- flake.lock | 48 +++++++++++++++ flake.nix | 23 +++++++ home.nix | 54 ++++++++++++++++ programs/alacritty/default.nix | 32 ++++++++++ programs/fish/default.nix | 43 +++++++++++++ programs/fish/functions/fish_prompt.fish | 13 ++++ .../fish/functions/fish_right_prompt.fish | 61 +++++++++++++++++++ programs/fish/functions/git_branch_name.fish | 4 ++ programs/fish/functions/git_is_dirty.fish | 1 + programs/fish/functions/git_is_repo.fish | 5 ++ programs/fish/functions/git_is_staged.fish | 3 + programs/fish/functions/git_is_touched.fish | 6 ++ programs/fish/functions/git_is_worktree.fish | 2 + programs/fish/functions/n.fish | 30 +++++++++ programs/fish/functions/ssh.fish | 1 + programs/nnn/default.nix | 11 ++++ programs/pywal/default.nix | 8 +++ programs/rofi/default.nix | 30 +++++++++ 18 files changed, 375 insertions(+) create mode 100644 flake.lock create mode 100644 flake.nix create mode 100644 home.nix create mode 100644 programs/alacritty/default.nix create mode 100644 programs/fish/default.nix create mode 100644 programs/fish/functions/fish_prompt.fish create mode 100644 programs/fish/functions/fish_right_prompt.fish create mode 100644 programs/fish/functions/git_branch_name.fish create mode 100644 programs/fish/functions/git_is_dirty.fish create mode 100644 programs/fish/functions/git_is_repo.fish create mode 100644 programs/fish/functions/git_is_staged.fish create mode 100644 programs/fish/functions/git_is_touched.fish create mode 100644 programs/fish/functions/git_is_worktree.fish create mode 100644 programs/fish/functions/n.fish create mode 100644 programs/fish/functions/ssh.fish create mode 100644 programs/nnn/default.nix create mode 100644 programs/pywal/default.nix create mode 100644 programs/rofi/default.nix diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..e1632a9 --- /dev/null +++ b/flake.lock @@ -0,0 +1,48 @@ +{ + "nodes": { + "home-manager": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1700013383, + "narHash": "sha256-ZBhrew3BrUEv48i+3Mp2pDjLU6dcue8BKMz6tCDSyfc=", + "owner": "langedev", + "repo": "home-manager", + "rev": "6498661f3856a685c4fa7a19d0f8cbe17c08d8bd", + "type": "github" + }, + "original": { + "owner": "langedev", + "repo": "home-manager", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1699825797, + "narHash": "sha256-W2m42mVt4/O6CJFbECPfLApmi8bO+qscbmSeEKrSHEg=", + "owner": "langedev", + "repo": "nixpkgs", + "rev": "a69768a1c385042d46ff57396c49d26df5ac035c", + "type": "github" + }, + "original": { + "owner": "langedev", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "home-manager": "home-manager", + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..ec6e780 --- /dev/null +++ b/flake.nix @@ -0,0 +1,23 @@ +{ + description = "Home Manager configuration of pan"; + + inputs = { + # Specify the source of Home Manager and Nixpkgs. + nixpkgs.url = "github:langedev/nixpkgs/nixos-unstable"; + home-manager = { + url = "github:langedev/home-manager"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; + + outputs = { nixpkgs, home-manager, ... }: + let + system = "x86_64-linux"; + pkgs = nixpkgs.legacyPackages.${system}; + in { + homeConfigurations."pan" = home-manager.lib.homeManagerConfiguration { + inherit pkgs; + modules = [ ./home.nix ]; + }; + }; +} diff --git a/home.nix b/home.nix new file mode 100644 index 0000000..b5b997e --- /dev/null +++ b/home.nix @@ -0,0 +1,54 @@ +{ config, pkgs, ... }: + +{ + nixpkgs.config.allowUnfree = true; + home.username = "pan"; + home.homeDirectory = "/home/pan"; + + xdg.enable = true; + + imports = [ + ./programs/alacritty + ./programs/pywal + ./programs/fish + ./programs/nnn + ./programs/rofi + ]; + + home.packages = with pkgs; [ + eww-wayland # eww widgets + socat # For hyprland scripts + swww # Wallpaper engine + trash-cli # Trash application + dunst # Notification Manager + wlr-randr # Xrandr for wayland + + # Applications + syncthing # For syncing files between computers + discord # Chat app + gimp # Photo editting + mpv # Video player + pamixer # Volume control + playerctl # Control media + wget # Download web stuff + zathura # PDF viewer + feh # Image viewer + sshfs # SSH File system + appimage-run # Lets you run app images + + # Development stuff, can be removed + nodejs # For compiling JS stuff + jq # May be critical for scripts? + ]; + # home.file = {}; + + home.sessionVariables = { + EDITOR = "nvim"; + VISUAL = "nvim"; + BROWSER = "librewolf"; + }; + + # Let Home Manager install and manage itself. + programs.home-manager.enable = true; + home.stateVersion = "23.05"; # don't change lol, u know why +} diff --git a/programs/alacritty/default.nix b/programs/alacritty/default.nix new file mode 100644 index 0000000..49c8763 --- /dev/null +++ b/programs/alacritty/default.nix @@ -0,0 +1,32 @@ +{ config, pkgs, ... }: + +{ + programs.alacritty.enable = true; + + + programs.alacritty.settings = { + font = let fam = "Cascadia Code"; in { + normal = { + family = fam; + style = "Regular"; + }; + bold = { + family = fam; + style = "Bold"; + }; + italic = { + family = fam; + style = "Italic"; + }; + bold_italic = { + family = fam; + style = "Bold Italic"; + }; + offset = { + x = 0; + y = 0; + }; + size = 24.0; + }; + }; +} diff --git a/programs/fish/default.nix b/programs/fish/default.nix new file mode 100644 index 0000000..93c6018 --- /dev/null +++ b/programs/fish/default.nix @@ -0,0 +1,43 @@ +{ config, pkgs, ... }: + +{ + programs.fish.enable = true; + + programs.fish.interactiveShellInit = '' + cat ~/.cache/wal/sequences + ''; + + programs.fish.functions = { + fish_greeting = ""; + fish_prompt = '' + ${builtins.readFile ./functions/fish_prompt.fish} + ''; + fish_right_prompt = '' + ${builtins.readFile ./functions/fish_right_prompt.fish} + ''; + git_branch_name = '' + ${builtins.readFile ./functions/git_branch_name.fish} + ''; + git_is_dirty = '' + ${builtins.readFile ./functions/git_is_dirty.fish} + ''; + git_is_repo = '' + ${builtins.readFile ./functions/git_is_repo.fish} + ''; + git_is_staged = '' + ${builtins.readFile ./functions/git_is_staged.fish} + ''; + git_is_touched = '' + ${builtins.readFile ./functions/git_is_touched.fish} + ''; + git_is_worktree = '' + ${builtins.readFile ./functions/git_is_worktree.fish} + ''; + n = '' + ${builtins.readFile ./functions/n.fish} + ''; + ssh = '' + ${builtins.readFile ./functions/ssh.fish} + ''; + }; +} diff --git a/programs/fish/functions/fish_prompt.fish b/programs/fish/functions/fish_prompt.fish new file mode 100644 index 0000000..1740f57 --- /dev/null +++ b/programs/fish/functions/fish_prompt.fish @@ -0,0 +1,13 @@ +set -l last_command_status $status + +set -l symbol 'τ' + +set -l normal_color (set_color normal) +set -l symbol_color (set_color blue -o) +set -l error_color (set_color red -o) + +if test $last_command_status -eq 0 + echo -n -s $symbol_color $symbol " " $normal_color +else + echo -n -s $error_color $symbol " " $normal_color +end diff --git a/programs/fish/functions/fish_right_prompt.fish b/programs/fish/functions/fish_right_prompt.fish new file mode 100644 index 0000000..f46799d --- /dev/null +++ b/programs/fish/functions/fish_right_prompt.fish @@ -0,0 +1,61 @@ +set -l cwd +set -l cwd_color (set_color blue) +set -l normal_color (set_color normal) +set -l branch_color (set_color yellow) +set -l meta_color (set_color red) + +if git_is_repo + echo -n -s $branch_color (git_branch_name) $normal_color + set -l git_meta "" + if test (command git ls-files --others --exclude-standard | wc -w 2> /dev/null) -gt 0 + set git_meta "$git_meta?" + end + if test (command git rev-list --walk-reflogs --count refs/stash 2> /dev/null) + set git_meta "$git_meta\$" + end + if git_is_touched + git_is_dirty && set git_meta "$git_meta⨯" + git_is_staged && set git_meta "$git_meta●" + end + set -l commit_count (command git rev-list --count --left-right (git remote)/(git_branch_name)"...HEAD" 2> /dev/null) + if test $commit_count + set -l behind (echo $commit_count | cut -f 1) + set -l ahead (echo $commit_count | cut -f 2) + if test $behind -gt 0 + set git_meta "$git_meta🠋" + end + if test $ahead -gt 0 + set git_meta "$git_meta🠉" + end + end + if test $git_meta + echo -n -s $meta_color " " $git_meta " " $normal_color + else + echo -n -s " " + end + + + set root_folder (command git rev-parse --show-toplevel 2> /dev/null) + set parent_root_folder (dirname $root_folder) + set cwd (echo $PWD | sed -e "s|$parent_root_folder/||") +else + set cwd (prompt_pwd) +end + + +echo -n -s $cwd_color "$cwd" +set_color --dim + +set -l S (math $CMD_DURATION/1000) +set -l M (math $S/60) + + +echo -n -s " " +if test $M -gt 1 + echo -n -s $M m +else if test $S -gt 1 + echo -n -s $S s +else + echo -n -s $CMD_DURATION ms +end +set_color normal diff --git a/programs/fish/functions/git_branch_name.fish b/programs/fish/functions/git_branch_name.fish new file mode 100644 index 0000000..20b4149 --- /dev/null +++ b/programs/fish/functions/git_branch_name.fish @@ -0,0 +1,4 @@ +git_is_repo; and begin + command git symbolic-ref --short HEAD 2> /dev/null; + or command git show-ref --head -s --abbrev | head -n1 2> /dev/null +end diff --git a/programs/fish/functions/git_is_dirty.fish b/programs/fish/functions/git_is_dirty.fish new file mode 100644 index 0000000..f92e54d --- /dev/null +++ b/programs/fish/functions/git_is_dirty.fish @@ -0,0 +1 @@ +git_is_worktree; and not command git diff --no-ext-diff --quiet --exit-code diff --git a/programs/fish/functions/git_is_repo.fish b/programs/fish/functions/git_is_repo.fish new file mode 100644 index 0000000..00a2cfc --- /dev/null +++ b/programs/fish/functions/git_is_repo.fish @@ -0,0 +1,5 @@ +test -d .git +or begin + set -l info (command git rev-parse --git-dir --is-bare-repository 2>/dev/null) + and test $info[2] = false +end diff --git a/programs/fish/functions/git_is_staged.fish b/programs/fish/functions/git_is_staged.fish new file mode 100644 index 0000000..ef6b7ac --- /dev/null +++ b/programs/fish/functions/git_is_staged.fish @@ -0,0 +1,3 @@ +git_is_repo; and begin + not command git diff --cached --no-ext-diff --quiet --exit-code +end diff --git a/programs/fish/functions/git_is_touched.fish b/programs/fish/functions/git_is_touched.fish new file mode 100644 index 0000000..5605630 --- /dev/null +++ b/programs/fish/functions/git_is_touched.fish @@ -0,0 +1,6 @@ +git_is_worktree; and begin + # The first checks for staged changes, the second for unstaged ones. + # We put them in this order because checking staged changes is *fast*. + not command git diff-index --cached --quiet HEAD -- >/dev/null 2>&1 + or not command git diff --no-ext-diff --quiet --exit-code >/dev/null 2>&1 +end diff --git a/programs/fish/functions/git_is_worktree.fish b/programs/fish/functions/git_is_worktree.fish new file mode 100644 index 0000000..8b2c700 --- /dev/null +++ b/programs/fish/functions/git_is_worktree.fish @@ -0,0 +1,2 @@ +git_is_repo +and test (command git rev-parse --is-inside-git-dir) = false diff --git a/programs/fish/functions/n.fish b/programs/fish/functions/n.fish new file mode 100644 index 0000000..86eb7c3 --- /dev/null +++ b/programs/fish/functions/n.fish @@ -0,0 +1,30 @@ +# Block nesting of nnn in subshells +if test -n "$NNNLVL" + if [ (expr $NNNLVL + 0) -ge 1 ] + exit + return + end +end + +# The default behaviour is to cd on quit (nnn checks if NNN_TMPFILE is set) +# To cd on quit only on ^G, remove the "-x" as in: +# set NNN_TMPFILE "$XDG_CONFIG_HOME/nnn/.lastd" +# NOTE: NNN_TMPFILE is fixed, should not be modified +if test -n "$XDG_CONFIG_HOME" + set -x NNN_TMPFILE "$XDG_CONFIG_HOME/nnn/.lastd" +else + set -x NNN_TMPFILE "$HOME/.config/nnn/.lastd" +end + +# Unmask ^Q (, ^V etc.) (if required, see `stty -a`) to Quit nnn +# stty start undef +# stty stop undef +# stty lwrap undef +# stty lnext undef + +nnn -T v $argv + +if test -e $NNN_TMPFILE + source $NNN_TMPFILE + rm $NNN_TMPFILE +end diff --git a/programs/fish/functions/ssh.fish b/programs/fish/functions/ssh.fish new file mode 100644 index 0000000..ec2b82e --- /dev/null +++ b/programs/fish/functions/ssh.fish @@ -0,0 +1 @@ +command ssh -o IPQoS=0 $argv; diff --git a/programs/nnn/default.nix b/programs/nnn/default.nix new file mode 100644 index 0000000..e5f27c9 --- /dev/null +++ b/programs/nnn/default.nix @@ -0,0 +1,11 @@ +{ config, pkgs, ... }: + +{ + programs.nnn.enable = true; + home.sessionVariables = { + NNN_FCOLORS = "0000E6310000000000000000"; + NNN_OPTS = "eH"; + NNN_FIFO = "/tmp/nnn.fifo"; + NNN_TRASH = "1"; + }; +} diff --git a/programs/pywal/default.nix b/programs/pywal/default.nix new file mode 100644 index 0000000..f754d3e --- /dev/null +++ b/programs/pywal/default.nix @@ -0,0 +1,8 @@ +{ config, pkgs, ... }: + +{ + programs.pywal.enable = true; + home.packages = with pkgs; [ + pywalfox # Update librewolf's colorscheme based on pywal + ]; +} diff --git a/programs/rofi/default.nix b/programs/rofi/default.nix new file mode 100644 index 0000000..e24db42 --- /dev/null +++ b/programs/rofi/default.nix @@ -0,0 +1,30 @@ +{ config, pkgs, ... }: + +{ + programs.rofi.enable = true; + programs.rofi.package = pkgs.rofi-wayland; + programs.wofi.settings = { + show = "dmenu"; # Default to dmenu + prompt = ""; + hide_scroll = true; + insensitive = true; + location = "bottom_right"; + dynamic_lines = true; + yoffset = -100; + xoffset = -40; + height = "50%"; + width = "50%"; + }; + programs.wofi.style = '' + window { + background: rgba(0, 0, 0, 255); + font-size: 4rem; + } + #entry, #input { + margin: 2px; + background: #FFFFFF; + border-width: 2px; + border-color: #000000; + } + ''; +} From f0483a15b0451931efd595410eb69b4de31aa950 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sun, 19 Nov 2023 19:03:46 -0800 Subject: [PATCH 004/412] Initial commit lol --- flake.lock | 48 +++++++++++++++ flake.nix | 23 +++++++ home.nix | 54 ++++++++++++++++ programs/alacritty/default.nix | 32 ++++++++++ programs/fish/default.nix | 43 +++++++++++++ programs/fish/functions/fish_prompt.fish | 13 ++++ .../fish/functions/fish_right_prompt.fish | 61 +++++++++++++++++++ programs/fish/functions/git_branch_name.fish | 4 ++ programs/fish/functions/git_is_dirty.fish | 1 + programs/fish/functions/git_is_repo.fish | 5 ++ programs/fish/functions/git_is_staged.fish | 3 + programs/fish/functions/git_is_touched.fish | 6 ++ programs/fish/functions/git_is_worktree.fish | 2 + programs/fish/functions/n.fish | 30 +++++++++ programs/fish/functions/ssh.fish | 1 + programs/nnn/default.nix | 11 ++++ programs/pywal/default.nix | 8 +++ programs/rofi/default.nix | 30 +++++++++ 18 files changed, 375 insertions(+) create mode 100644 flake.lock create mode 100644 flake.nix create mode 100644 home.nix create mode 100644 programs/alacritty/default.nix create mode 100644 programs/fish/default.nix create mode 100644 programs/fish/functions/fish_prompt.fish create mode 100644 programs/fish/functions/fish_right_prompt.fish create mode 100644 programs/fish/functions/git_branch_name.fish create mode 100644 programs/fish/functions/git_is_dirty.fish create mode 100644 programs/fish/functions/git_is_repo.fish create mode 100644 programs/fish/functions/git_is_staged.fish create mode 100644 programs/fish/functions/git_is_touched.fish create mode 100644 programs/fish/functions/git_is_worktree.fish create mode 100644 programs/fish/functions/n.fish create mode 100644 programs/fish/functions/ssh.fish create mode 100644 programs/nnn/default.nix create mode 100644 programs/pywal/default.nix create mode 100644 programs/rofi/default.nix diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..e1632a9 --- /dev/null +++ b/flake.lock @@ -0,0 +1,48 @@ +{ + "nodes": { + "home-manager": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1700013383, + "narHash": "sha256-ZBhrew3BrUEv48i+3Mp2pDjLU6dcue8BKMz6tCDSyfc=", + "owner": "langedev", + "repo": "home-manager", + "rev": "6498661f3856a685c4fa7a19d0f8cbe17c08d8bd", + "type": "github" + }, + "original": { + "owner": "langedev", + "repo": "home-manager", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1699825797, + "narHash": "sha256-W2m42mVt4/O6CJFbECPfLApmi8bO+qscbmSeEKrSHEg=", + "owner": "langedev", + "repo": "nixpkgs", + "rev": "a69768a1c385042d46ff57396c49d26df5ac035c", + "type": "github" + }, + "original": { + "owner": "langedev", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "home-manager": "home-manager", + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..ec6e780 --- /dev/null +++ b/flake.nix @@ -0,0 +1,23 @@ +{ + description = "Home Manager configuration of pan"; + + inputs = { + # Specify the source of Home Manager and Nixpkgs. + nixpkgs.url = "github:langedev/nixpkgs/nixos-unstable"; + home-manager = { + url = "github:langedev/home-manager"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; + + outputs = { nixpkgs, home-manager, ... }: + let + system = "x86_64-linux"; + pkgs = nixpkgs.legacyPackages.${system}; + in { + homeConfigurations."pan" = home-manager.lib.homeManagerConfiguration { + inherit pkgs; + modules = [ ./home.nix ]; + }; + }; +} diff --git a/home.nix b/home.nix new file mode 100644 index 0000000..b5b997e --- /dev/null +++ b/home.nix @@ -0,0 +1,54 @@ +{ config, pkgs, ... }: + +{ + nixpkgs.config.allowUnfree = true; + home.username = "pan"; + home.homeDirectory = "/home/pan"; + + xdg.enable = true; + + imports = [ + ./programs/alacritty + ./programs/pywal + ./programs/fish + ./programs/nnn + ./programs/rofi + ]; + + home.packages = with pkgs; [ + eww-wayland # eww widgets + socat # For hyprland scripts + swww # Wallpaper engine + trash-cli # Trash application + dunst # Notification Manager + wlr-randr # Xrandr for wayland + + # Applications + syncthing # For syncing files between computers + discord # Chat app + gimp # Photo editting + mpv # Video player + pamixer # Volume control + playerctl # Control media + wget # Download web stuff + zathura # PDF viewer + feh # Image viewer + sshfs # SSH File system + appimage-run # Lets you run app images + + # Development stuff, can be removed + nodejs # For compiling JS stuff + jq # May be critical for scripts? + ]; + # home.file = {}; + + home.sessionVariables = { + EDITOR = "nvim"; + VISUAL = "nvim"; + BROWSER = "librewolf"; + }; + + # Let Home Manager install and manage itself. + programs.home-manager.enable = true; + home.stateVersion = "23.05"; # don't change lol, u know why +} diff --git a/programs/alacritty/default.nix b/programs/alacritty/default.nix new file mode 100644 index 0000000..49c8763 --- /dev/null +++ b/programs/alacritty/default.nix @@ -0,0 +1,32 @@ +{ config, pkgs, ... }: + +{ + programs.alacritty.enable = true; + + + programs.alacritty.settings = { + font = let fam = "Cascadia Code"; in { + normal = { + family = fam; + style = "Regular"; + }; + bold = { + family = fam; + style = "Bold"; + }; + italic = { + family = fam; + style = "Italic"; + }; + bold_italic = { + family = fam; + style = "Bold Italic"; + }; + offset = { + x = 0; + y = 0; + }; + size = 24.0; + }; + }; +} diff --git a/programs/fish/default.nix b/programs/fish/default.nix new file mode 100644 index 0000000..93c6018 --- /dev/null +++ b/programs/fish/default.nix @@ -0,0 +1,43 @@ +{ config, pkgs, ... }: + +{ + programs.fish.enable = true; + + programs.fish.interactiveShellInit = '' + cat ~/.cache/wal/sequences + ''; + + programs.fish.functions = { + fish_greeting = ""; + fish_prompt = '' + ${builtins.readFile ./functions/fish_prompt.fish} + ''; + fish_right_prompt = '' + ${builtins.readFile ./functions/fish_right_prompt.fish} + ''; + git_branch_name = '' + ${builtins.readFile ./functions/git_branch_name.fish} + ''; + git_is_dirty = '' + ${builtins.readFile ./functions/git_is_dirty.fish} + ''; + git_is_repo = '' + ${builtins.readFile ./functions/git_is_repo.fish} + ''; + git_is_staged = '' + ${builtins.readFile ./functions/git_is_staged.fish} + ''; + git_is_touched = '' + ${builtins.readFile ./functions/git_is_touched.fish} + ''; + git_is_worktree = '' + ${builtins.readFile ./functions/git_is_worktree.fish} + ''; + n = '' + ${builtins.readFile ./functions/n.fish} + ''; + ssh = '' + ${builtins.readFile ./functions/ssh.fish} + ''; + }; +} diff --git a/programs/fish/functions/fish_prompt.fish b/programs/fish/functions/fish_prompt.fish new file mode 100644 index 0000000..1740f57 --- /dev/null +++ b/programs/fish/functions/fish_prompt.fish @@ -0,0 +1,13 @@ +set -l last_command_status $status + +set -l symbol 'τ' + +set -l normal_color (set_color normal) +set -l symbol_color (set_color blue -o) +set -l error_color (set_color red -o) + +if test $last_command_status -eq 0 + echo -n -s $symbol_color $symbol " " $normal_color +else + echo -n -s $error_color $symbol " " $normal_color +end diff --git a/programs/fish/functions/fish_right_prompt.fish b/programs/fish/functions/fish_right_prompt.fish new file mode 100644 index 0000000..f46799d --- /dev/null +++ b/programs/fish/functions/fish_right_prompt.fish @@ -0,0 +1,61 @@ +set -l cwd +set -l cwd_color (set_color blue) +set -l normal_color (set_color normal) +set -l branch_color (set_color yellow) +set -l meta_color (set_color red) + +if git_is_repo + echo -n -s $branch_color (git_branch_name) $normal_color + set -l git_meta "" + if test (command git ls-files --others --exclude-standard | wc -w 2> /dev/null) -gt 0 + set git_meta "$git_meta?" + end + if test (command git rev-list --walk-reflogs --count refs/stash 2> /dev/null) + set git_meta "$git_meta\$" + end + if git_is_touched + git_is_dirty && set git_meta "$git_meta⨯" + git_is_staged && set git_meta "$git_meta●" + end + set -l commit_count (command git rev-list --count --left-right (git remote)/(git_branch_name)"...HEAD" 2> /dev/null) + if test $commit_count + set -l behind (echo $commit_count | cut -f 1) + set -l ahead (echo $commit_count | cut -f 2) + if test $behind -gt 0 + set git_meta "$git_meta🠋" + end + if test $ahead -gt 0 + set git_meta "$git_meta🠉" + end + end + if test $git_meta + echo -n -s $meta_color " " $git_meta " " $normal_color + else + echo -n -s " " + end + + + set root_folder (command git rev-parse --show-toplevel 2> /dev/null) + set parent_root_folder (dirname $root_folder) + set cwd (echo $PWD | sed -e "s|$parent_root_folder/||") +else + set cwd (prompt_pwd) +end + + +echo -n -s $cwd_color "$cwd" +set_color --dim + +set -l S (math $CMD_DURATION/1000) +set -l M (math $S/60) + + +echo -n -s " " +if test $M -gt 1 + echo -n -s $M m +else if test $S -gt 1 + echo -n -s $S s +else + echo -n -s $CMD_DURATION ms +end +set_color normal diff --git a/programs/fish/functions/git_branch_name.fish b/programs/fish/functions/git_branch_name.fish new file mode 100644 index 0000000..20b4149 --- /dev/null +++ b/programs/fish/functions/git_branch_name.fish @@ -0,0 +1,4 @@ +git_is_repo; and begin + command git symbolic-ref --short HEAD 2> /dev/null; + or command git show-ref --head -s --abbrev | head -n1 2> /dev/null +end diff --git a/programs/fish/functions/git_is_dirty.fish b/programs/fish/functions/git_is_dirty.fish new file mode 100644 index 0000000..f92e54d --- /dev/null +++ b/programs/fish/functions/git_is_dirty.fish @@ -0,0 +1 @@ +git_is_worktree; and not command git diff --no-ext-diff --quiet --exit-code diff --git a/programs/fish/functions/git_is_repo.fish b/programs/fish/functions/git_is_repo.fish new file mode 100644 index 0000000..00a2cfc --- /dev/null +++ b/programs/fish/functions/git_is_repo.fish @@ -0,0 +1,5 @@ +test -d .git +or begin + set -l info (command git rev-parse --git-dir --is-bare-repository 2>/dev/null) + and test $info[2] = false +end diff --git a/programs/fish/functions/git_is_staged.fish b/programs/fish/functions/git_is_staged.fish new file mode 100644 index 0000000..ef6b7ac --- /dev/null +++ b/programs/fish/functions/git_is_staged.fish @@ -0,0 +1,3 @@ +git_is_repo; and begin + not command git diff --cached --no-ext-diff --quiet --exit-code +end diff --git a/programs/fish/functions/git_is_touched.fish b/programs/fish/functions/git_is_touched.fish new file mode 100644 index 0000000..5605630 --- /dev/null +++ b/programs/fish/functions/git_is_touched.fish @@ -0,0 +1,6 @@ +git_is_worktree; and begin + # The first checks for staged changes, the second for unstaged ones. + # We put them in this order because checking staged changes is *fast*. + not command git diff-index --cached --quiet HEAD -- >/dev/null 2>&1 + or not command git diff --no-ext-diff --quiet --exit-code >/dev/null 2>&1 +end diff --git a/programs/fish/functions/git_is_worktree.fish b/programs/fish/functions/git_is_worktree.fish new file mode 100644 index 0000000..8b2c700 --- /dev/null +++ b/programs/fish/functions/git_is_worktree.fish @@ -0,0 +1,2 @@ +git_is_repo +and test (command git rev-parse --is-inside-git-dir) = false diff --git a/programs/fish/functions/n.fish b/programs/fish/functions/n.fish new file mode 100644 index 0000000..86eb7c3 --- /dev/null +++ b/programs/fish/functions/n.fish @@ -0,0 +1,30 @@ +# Block nesting of nnn in subshells +if test -n "$NNNLVL" + if [ (expr $NNNLVL + 0) -ge 1 ] + exit + return + end +end + +# The default behaviour is to cd on quit (nnn checks if NNN_TMPFILE is set) +# To cd on quit only on ^G, remove the "-x" as in: +# set NNN_TMPFILE "$XDG_CONFIG_HOME/nnn/.lastd" +# NOTE: NNN_TMPFILE is fixed, should not be modified +if test -n "$XDG_CONFIG_HOME" + set -x NNN_TMPFILE "$XDG_CONFIG_HOME/nnn/.lastd" +else + set -x NNN_TMPFILE "$HOME/.config/nnn/.lastd" +end + +# Unmask ^Q (, ^V etc.) (if required, see `stty -a`) to Quit nnn +# stty start undef +# stty stop undef +# stty lwrap undef +# stty lnext undef + +nnn -T v $argv + +if test -e $NNN_TMPFILE + source $NNN_TMPFILE + rm $NNN_TMPFILE +end diff --git a/programs/fish/functions/ssh.fish b/programs/fish/functions/ssh.fish new file mode 100644 index 0000000..ec2b82e --- /dev/null +++ b/programs/fish/functions/ssh.fish @@ -0,0 +1 @@ +command ssh -o IPQoS=0 $argv; diff --git a/programs/nnn/default.nix b/programs/nnn/default.nix new file mode 100644 index 0000000..e5f27c9 --- /dev/null +++ b/programs/nnn/default.nix @@ -0,0 +1,11 @@ +{ config, pkgs, ... }: + +{ + programs.nnn.enable = true; + home.sessionVariables = { + NNN_FCOLORS = "0000E6310000000000000000"; + NNN_OPTS = "eH"; + NNN_FIFO = "/tmp/nnn.fifo"; + NNN_TRASH = "1"; + }; +} diff --git a/programs/pywal/default.nix b/programs/pywal/default.nix new file mode 100644 index 0000000..f754d3e --- /dev/null +++ b/programs/pywal/default.nix @@ -0,0 +1,8 @@ +{ config, pkgs, ... }: + +{ + programs.pywal.enable = true; + home.packages = with pkgs; [ + pywalfox # Update librewolf's colorscheme based on pywal + ]; +} diff --git a/programs/rofi/default.nix b/programs/rofi/default.nix new file mode 100644 index 0000000..e24db42 --- /dev/null +++ b/programs/rofi/default.nix @@ -0,0 +1,30 @@ +{ config, pkgs, ... }: + +{ + programs.rofi.enable = true; + programs.rofi.package = pkgs.rofi-wayland; + programs.wofi.settings = { + show = "dmenu"; # Default to dmenu + prompt = ""; + hide_scroll = true; + insensitive = true; + location = "bottom_right"; + dynamic_lines = true; + yoffset = -100; + xoffset = -40; + height = "50%"; + width = "50%"; + }; + programs.wofi.style = '' + window { + background: rgba(0, 0, 0, 255); + font-size: 4rem; + } + #entry, #input { + margin: 2px; + background: #FFFFFF; + border-width: 2px; + border-color: #000000; + } + ''; +} From 0cc3e1fc298d8a722d70fd69f4f17bec787057c3 Mon Sep 17 00:00:00 2001 From: langedev Date: Sun, 19 Nov 2023 19:31:04 -0800 Subject: [PATCH 005/412] Initial commit lol --- configuration.nix | 43 +++++ flake.lock | 154 ++++++++++++++++++ flake.nix | 17 ++ hardware-configuration.nix | 41 +++++ modules/audio/pipewire/default.nix | 12 ++ modules/graphics/nvidia/default.nix | 7 + modules/login/greetd/default.nix | 17 ++ modules/network/bluetooth/default.nix | 7 + .../network/browsers/librewolf/default.nix | 6 + modules/network/networking/default.nix | 41 +++++ modules/network/syncthing/default.nix | 9 + modules/shell/fish/default.nix | 11 ++ modules/system/default.nix | 36 ++++ modules/themeing/default.nix | 7 + modules/user/default.nix | 8 + 15 files changed, 416 insertions(+) create mode 100644 configuration.nix create mode 100644 flake.lock create mode 100644 flake.nix create mode 100644 hardware-configuration.nix create mode 100644 modules/audio/pipewire/default.nix create mode 100644 modules/graphics/nvidia/default.nix create mode 100644 modules/login/greetd/default.nix create mode 100644 modules/network/bluetooth/default.nix create mode 100644 modules/network/browsers/librewolf/default.nix create mode 100644 modules/network/networking/default.nix create mode 100644 modules/network/syncthing/default.nix create mode 100644 modules/shell/fish/default.nix create mode 100644 modules/system/default.nix create mode 100644 modules/themeing/default.nix create mode 100644 modules/user/default.nix diff --git a/configuration.nix b/configuration.nix new file mode 100644 index 0000000..0f448f4 --- /dev/null +++ b/configuration.nix @@ -0,0 +1,43 @@ +# Edit this configuration file to define what should be installed on +# your system. Help is available in the configuration.nix(5) man page +# and in the NixOS manual (accessible by running ‘nixos-help’). + +{ config, pkgs, ... }: + +{ + nix.package = pkgs.nixUnstable; + imports = + [ + # Hardware Settings (hardware scan) + ./hardware-configuration.nix + + # System essentials (boot, lang, hostname, ...) + ./modules/system + + ./modules/user + + ./modules/themeing + + ./modules/audio/pipewire + + ./modules/shell/fish # This enables fish as the default shell + + ./modules/network/browsers/librewolf + ./modules/network/networking + ./modules/network/syncthing + ./modules/network/bluetooth + + ./modules/login/greetd + + # ./modules/graphics/nvidia + ]; + + nixpkgs.config.allowUnfree = true; + nix.settings = { + substituters = [ "https://hyprland.cachix.org" ]; + trusted-public-keys = [ "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" ]; + experimental-features = [ "nix-command" "flakes" ]; + }; + + system.stateVersion = "23.05"; +} diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..79f4514 --- /dev/null +++ b/flake.lock @@ -0,0 +1,154 @@ +{ + "nodes": { + "hyprland": { + "inputs": { + "hyprland-protocols": "hyprland-protocols", + "nixpkgs": "nixpkgs", + "systems": "systems", + "wlroots": "wlroots", + "xdph": "xdph" + }, + "locked": { + "lastModified": 1699808562, + "narHash": "sha256-wTU1ivhWAAGWO6Fzx4RYFruW8HrIh5X7fjy5NJPaqOc=", + "owner": "hyprwm", + "repo": "Hyprland", + "rev": "0ba2e6870478bcf1af1b6508677b46a3484fb21f", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "Hyprland", + "type": "github" + } + }, + "hyprland-protocols": { + "inputs": { + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1691753796, + "narHash": "sha256-zOEwiWoXk3j3+EoF3ySUJmberFewWlagvewDRuWYAso=", + "owner": "hyprwm", + "repo": "hyprland-protocols", + "rev": "0c2ce70625cb30aef199cb388f99e19a61a6ce03", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprland-protocols", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1698134075, + "narHash": "sha256-foCD+nuKzfh49bIoiCBur4+Fx1nozo+4C/6k8BYk4sg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "8efd5d1e283604f75a808a20e6cde0ef313d07d4", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1699825797, + "narHash": "sha256-W2m42mVt4/O6CJFbECPfLApmi8bO+qscbmSeEKrSHEg=", + "owner": "langedev", + "repo": "nixpkgs", + "rev": "a69768a1c385042d46ff57396c49d26df5ac035c", + "type": "github" + }, + "original": { + "owner": "langedev", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "hyprland": "hyprland", + "nixpkgs": "nixpkgs_2" + } + }, + "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" + } + }, + "wlroots": { + "flake": false, + "locked": { + "host": "gitlab.freedesktop.org", + "lastModified": 1699292815, + "narHash": "sha256-HXu98PyBMKEWLqiTb8viuLDznud/SdkdJsx5A5CWx7I=", + "owner": "wlroots", + "repo": "wlroots", + "rev": "5de9e1a99d6642c2d09d589aa37ff0a8945dcee1", + "type": "gitlab" + }, + "original": { + "host": "gitlab.freedesktop.org", + "owner": "wlroots", + "repo": "wlroots", + "rev": "5de9e1a99d6642c2d09d589aa37ff0a8945dcee1", + "type": "gitlab" + } + }, + "xdph": { + "inputs": { + "hyprland-protocols": [ + "hyprland", + "hyprland-protocols" + ], + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1697981233, + "narHash": "sha256-y8q4XUwx+gVK7i2eLjfR32lVo7TYvEslyzrmzYEaPZU=", + "owner": "hyprwm", + "repo": "xdg-desktop-portal-hyprland", + "rev": "22e7a65ff9633e1dedfa5317fdffc49f68de2ff2", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "xdg-desktop-portal-hyprland", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..84f22c0 --- /dev/null +++ b/flake.nix @@ -0,0 +1,17 @@ +{ + inputs = { + nixpkgs.url = "github:langedev/nixpkgs/nixos-unstable"; + hyprland.url = "github:hyprwm/Hyprland"; + }; + + outputs = { nixpkgs, hyprland, ... }: { + nixosConfigurations.jibril = nixpkgs.lib.nixosSystem { + system = "x86_64-linux"; + modules = [ + ./configuration.nix + hyprland.nixosModules.default + { programs.hyprland.enable = true; } + ]; + }; + }; +} diff --git a/hardware-configuration.nix b/hardware-configuration.nix new file mode 100644 index 0000000..0e7a3d9 --- /dev/null +++ b/hardware-configuration.nix @@ -0,0 +1,41 @@ +# Do not modify this file! It was generated by ‘nixos-generate-config’ +# and may be overwritten by future invocations. Please make changes +# to /etc/nixos/configuration.nix instead. +{ config, lib, pkgs, modulesPath, ... }: + +{ + imports = + [ (modulesPath + "/installer/scan/not-detected.nix") + ]; + + boot.initrd.availableKernelModules = [ "xhci_pci" "nvme" "usb_storage" "sd_mod" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-intel" ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = + { device = "/dev/disk/by-uuid/168fb358-6783-4b66-8eed-374769a14c88"; + fsType = "ext4"; + }; + + fileSystems."/boot" = + { device = "/dev/disk/by-uuid/2A27-6F56"; + fsType = "vfat"; + }; + + swapDevices = + [ { device = "/dev/disk/by-uuid/db71f8e9-74e6-40f8-b5c3-1dcf74510f3b"; } + ]; + + # Enables DHCP on each ethernet and wireless interface. In case of scripted networking + # (the default) this is the recommended approach. When using systemd-networkd it's + # still possible to use this option, but it's recommended to use it in conjunction + # with explicit per-interface declarations with `networking.interfaces..useDHCP`. + networking.useDHCP = lib.mkDefault true; + # networking.interfaces.wlp2s0.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + powerManagement.cpuFreqGovernor = lib.mkDefault "powersave"; + hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; + # high-resolution display +} diff --git a/modules/audio/pipewire/default.nix b/modules/audio/pipewire/default.nix new file mode 100644 index 0000000..c3ebfe8 --- /dev/null +++ b/modules/audio/pipewire/default.nix @@ -0,0 +1,12 @@ +{ config, pkgs, lib, ... }: + +{ + security.rtkit.enable = true; + + services.pipewire = { + enable = true; + alsa.enable = false; + alsa.support32Bit = false; + pulse.enable = true; + }; +} diff --git a/modules/graphics/nvidia/default.nix b/modules/graphics/nvidia/default.nix new file mode 100644 index 0000000..6d39712 --- /dev/null +++ b/modules/graphics/nvidia/default.nix @@ -0,0 +1,7 @@ +{ config, pkgs, lib, ... }: + +{ + services.xserver.videoDrivers = [ "nvidia" ]; + hardware.opengl.enable = true; + hardware.nvidia.package = config.boot.kernelPackages.nvidiaPackages.stable; +} diff --git a/modules/login/greetd/default.nix b/modules/login/greetd/default.nix new file mode 100644 index 0000000..23620f8 --- /dev/null +++ b/modules/login/greetd/default.nix @@ -0,0 +1,17 @@ +{ config, pkgs, lib, ... }: + +{ + services.greetd = { + enable = true; + package = pkgs.greetd.tuigreet; + settings = { + terminal = { + vt = 2; + }; + default_session = { + command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time --cmd Hyprland"; + user = "pan"; + }; + }; + }; +} diff --git a/modules/network/bluetooth/default.nix b/modules/network/bluetooth/default.nix new file mode 100644 index 0000000..1e76c8f --- /dev/null +++ b/modules/network/bluetooth/default.nix @@ -0,0 +1,7 @@ +{ config, pkgs, lib, ... }: + +{ + hardware.bluetooth.enable = true; + hardware.bluetooth.powerOnBoot = true; + services.blueman.enable = true; +} diff --git a/modules/network/browsers/librewolf/default.nix b/modules/network/browsers/librewolf/default.nix new file mode 100644 index 0000000..034c5eb --- /dev/null +++ b/modules/network/browsers/librewolf/default.nix @@ -0,0 +1,6 @@ +{ config, pkgs, lib, ... }: + +{ + environment.variables.WEBBROWSER = "librewolf"; + environment.systemPackages = with pkgs; [ librewolf ]; +} diff --git a/modules/network/networking/default.nix b/modules/network/networking/default.nix new file mode 100644 index 0000000..57fae54 --- /dev/null +++ b/modules/network/networking/default.nix @@ -0,0 +1,41 @@ +{ config, pkgs, lib, ... }: + +{ + networking.wireless = { + enable = true; + userControlled = { + enable = true; + group = "network"; + }; + networks = { + "The Kabal 2.4" = { + pskRaw = "56302c1b1c7499f4a4f0e01cefe14b4393c5092420ebf71c68336cd084acd357"; + priority = 1; + }; + "WWUwireless-Secure" = { + auth = '' + key_mgmt=WPA-EAP + eap=PEAP + identity="langed@wwu.edu" + password="Slashed-Tidy4-Cubbyhole" + ''; + priority = 1; + }; + "Yellowsticky" = { + pskRaw = "8984d7e1e2f5bd9c3ccf92e429886bc64d40d42d4771ed5946556227afa4abf0"; + priority = 1; + }; + "Lange" = { + pskRaw = "bbbbf63e23747bc0ff36aed4c20dcee0221a6ccb2d2db07e4c64058e645e5f1e"; + priority = 1; + }; + "Homura" = { + pskRaw = "dd77456e1df3f2c17bccc917a0e609684fa6d2ccb6a2e0fb122d50d243e0c87e"; + priority = 0; + }; + }; + }; + + + networking.enableIPv6 = false; +} diff --git a/modules/network/syncthing/default.nix b/modules/network/syncthing/default.nix new file mode 100644 index 0000000..3397cd1 --- /dev/null +++ b/modules/network/syncthing/default.nix @@ -0,0 +1,9 @@ +{ config, pkgs, lib, ... }: + +{ + services.syncthing.enable = true; + services.syncthing.user = "pan"; + services.syncthing.dataDir = "/home/pan/dox"; + services.syncthing.overrideFolders = false; + services.syncthing.overrideDevices = false; +} diff --git a/modules/shell/fish/default.nix b/modules/shell/fish/default.nix new file mode 100644 index 0000000..37eef00 --- /dev/null +++ b/modules/shell/fish/default.nix @@ -0,0 +1,11 @@ +{ config, pkgs, lib, ... }: + +{ + programs.fish.enable = true; + + users.defaultUserShell = pkgs.fish; + + environment.shells = with pkgs; [ fish ]; + + # environment.variables.NIX_BUILD_SHELL = "fish"; +} diff --git a/modules/system/default.nix b/modules/system/default.nix new file mode 100644 index 0000000..81eaf8b --- /dev/null +++ b/modules/system/default.nix @@ -0,0 +1,36 @@ +{ config, pkgs, lib, ... }: + +{ + # Use the systemd-boot EFI boot loader. + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + + networking.hostName = "jibril"; + + time.timeZone = "America/Los_Angeles"; + + i18n.defaultLocale = "en_US.UTF-8"; + + # "Essential" Packages + environment.systemPackages = with pkgs; [ + git + neovim + nnn + xdg-user-dirs + blueman + ]; + + # XDG Compliance + environment.sessionVariables = rec { + XDG_CONFIG_HOME = "\${HOME}/.config"; + XDG_CACHE_HOME = "\${HOME}/.cache"; + XDG_STATE_HOME = "\${HOME}/.local/state"; + XDG_DATA_HOME = "\${HOME}/.local/share"; + XDG_BIN_HOME = "\${HOME}/.local/bin"; + }; + + users.groups = { + wheel = { }; + network = { }; + }; +} diff --git a/modules/themeing/default.nix b/modules/themeing/default.nix new file mode 100644 index 0000000..13e7abe --- /dev/null +++ b/modules/themeing/default.nix @@ -0,0 +1,7 @@ +{ config, pkgs, lib, ... }: + +{ + fonts.packages = with pkgs; [ + cascadia-code + ]; +} diff --git a/modules/user/default.nix b/modules/user/default.nix new file mode 100644 index 0000000..58a4426 --- /dev/null +++ b/modules/user/default.nix @@ -0,0 +1,8 @@ +{ config, pkgs, lib, ... }: + +{ + users.users.pan = { + isNormalUser = true; + extraGroups = [ "wheel" "network" ]; + }; +} From dcedb968436331c98f4a8573c7c6fd6a24582905 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sun, 19 Nov 2023 19:31:04 -0800 Subject: [PATCH 006/412] Initial commit lol --- configuration.nix | 43 +++++ flake.lock | 154 ++++++++++++++++++ flake.nix | 17 ++ hardware-configuration.nix | 41 +++++ modules/audio/pipewire/default.nix | 12 ++ modules/graphics/nvidia/default.nix | 7 + modules/login/greetd/default.nix | 17 ++ modules/network/bluetooth/default.nix | 7 + .../network/browsers/librewolf/default.nix | 6 + modules/network/networking/default.nix | 41 +++++ modules/network/syncthing/default.nix | 9 + modules/shell/fish/default.nix | 11 ++ modules/system/default.nix | 36 ++++ modules/themeing/default.nix | 7 + modules/user/default.nix | 8 + 15 files changed, 416 insertions(+) create mode 100644 configuration.nix create mode 100644 flake.lock create mode 100644 flake.nix create mode 100644 hardware-configuration.nix create mode 100644 modules/audio/pipewire/default.nix create mode 100644 modules/graphics/nvidia/default.nix create mode 100644 modules/login/greetd/default.nix create mode 100644 modules/network/bluetooth/default.nix create mode 100644 modules/network/browsers/librewolf/default.nix create mode 100644 modules/network/networking/default.nix create mode 100644 modules/network/syncthing/default.nix create mode 100644 modules/shell/fish/default.nix create mode 100644 modules/system/default.nix create mode 100644 modules/themeing/default.nix create mode 100644 modules/user/default.nix diff --git a/configuration.nix b/configuration.nix new file mode 100644 index 0000000..0f448f4 --- /dev/null +++ b/configuration.nix @@ -0,0 +1,43 @@ +# Edit this configuration file to define what should be installed on +# your system. Help is available in the configuration.nix(5) man page +# and in the NixOS manual (accessible by running ‘nixos-help’). + +{ config, pkgs, ... }: + +{ + nix.package = pkgs.nixUnstable; + imports = + [ + # Hardware Settings (hardware scan) + ./hardware-configuration.nix + + # System essentials (boot, lang, hostname, ...) + ./modules/system + + ./modules/user + + ./modules/themeing + + ./modules/audio/pipewire + + ./modules/shell/fish # This enables fish as the default shell + + ./modules/network/browsers/librewolf + ./modules/network/networking + ./modules/network/syncthing + ./modules/network/bluetooth + + ./modules/login/greetd + + # ./modules/graphics/nvidia + ]; + + nixpkgs.config.allowUnfree = true; + nix.settings = { + substituters = [ "https://hyprland.cachix.org" ]; + trusted-public-keys = [ "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" ]; + experimental-features = [ "nix-command" "flakes" ]; + }; + + system.stateVersion = "23.05"; +} diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..79f4514 --- /dev/null +++ b/flake.lock @@ -0,0 +1,154 @@ +{ + "nodes": { + "hyprland": { + "inputs": { + "hyprland-protocols": "hyprland-protocols", + "nixpkgs": "nixpkgs", + "systems": "systems", + "wlroots": "wlroots", + "xdph": "xdph" + }, + "locked": { + "lastModified": 1699808562, + "narHash": "sha256-wTU1ivhWAAGWO6Fzx4RYFruW8HrIh5X7fjy5NJPaqOc=", + "owner": "hyprwm", + "repo": "Hyprland", + "rev": "0ba2e6870478bcf1af1b6508677b46a3484fb21f", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "Hyprland", + "type": "github" + } + }, + "hyprland-protocols": { + "inputs": { + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1691753796, + "narHash": "sha256-zOEwiWoXk3j3+EoF3ySUJmberFewWlagvewDRuWYAso=", + "owner": "hyprwm", + "repo": "hyprland-protocols", + "rev": "0c2ce70625cb30aef199cb388f99e19a61a6ce03", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprland-protocols", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1698134075, + "narHash": "sha256-foCD+nuKzfh49bIoiCBur4+Fx1nozo+4C/6k8BYk4sg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "8efd5d1e283604f75a808a20e6cde0ef313d07d4", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1699825797, + "narHash": "sha256-W2m42mVt4/O6CJFbECPfLApmi8bO+qscbmSeEKrSHEg=", + "owner": "langedev", + "repo": "nixpkgs", + "rev": "a69768a1c385042d46ff57396c49d26df5ac035c", + "type": "github" + }, + "original": { + "owner": "langedev", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "hyprland": "hyprland", + "nixpkgs": "nixpkgs_2" + } + }, + "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" + } + }, + "wlroots": { + "flake": false, + "locked": { + "host": "gitlab.freedesktop.org", + "lastModified": 1699292815, + "narHash": "sha256-HXu98PyBMKEWLqiTb8viuLDznud/SdkdJsx5A5CWx7I=", + "owner": "wlroots", + "repo": "wlroots", + "rev": "5de9e1a99d6642c2d09d589aa37ff0a8945dcee1", + "type": "gitlab" + }, + "original": { + "host": "gitlab.freedesktop.org", + "owner": "wlroots", + "repo": "wlroots", + "rev": "5de9e1a99d6642c2d09d589aa37ff0a8945dcee1", + "type": "gitlab" + } + }, + "xdph": { + "inputs": { + "hyprland-protocols": [ + "hyprland", + "hyprland-protocols" + ], + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1697981233, + "narHash": "sha256-y8q4XUwx+gVK7i2eLjfR32lVo7TYvEslyzrmzYEaPZU=", + "owner": "hyprwm", + "repo": "xdg-desktop-portal-hyprland", + "rev": "22e7a65ff9633e1dedfa5317fdffc49f68de2ff2", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "xdg-desktop-portal-hyprland", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..84f22c0 --- /dev/null +++ b/flake.nix @@ -0,0 +1,17 @@ +{ + inputs = { + nixpkgs.url = "github:langedev/nixpkgs/nixos-unstable"; + hyprland.url = "github:hyprwm/Hyprland"; + }; + + outputs = { nixpkgs, hyprland, ... }: { + nixosConfigurations.jibril = nixpkgs.lib.nixosSystem { + system = "x86_64-linux"; + modules = [ + ./configuration.nix + hyprland.nixosModules.default + { programs.hyprland.enable = true; } + ]; + }; + }; +} diff --git a/hardware-configuration.nix b/hardware-configuration.nix new file mode 100644 index 0000000..0e7a3d9 --- /dev/null +++ b/hardware-configuration.nix @@ -0,0 +1,41 @@ +# Do not modify this file! It was generated by ‘nixos-generate-config’ +# and may be overwritten by future invocations. Please make changes +# to /etc/nixos/configuration.nix instead. +{ config, lib, pkgs, modulesPath, ... }: + +{ + imports = + [ (modulesPath + "/installer/scan/not-detected.nix") + ]; + + boot.initrd.availableKernelModules = [ "xhci_pci" "nvme" "usb_storage" "sd_mod" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-intel" ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = + { device = "/dev/disk/by-uuid/168fb358-6783-4b66-8eed-374769a14c88"; + fsType = "ext4"; + }; + + fileSystems."/boot" = + { device = "/dev/disk/by-uuid/2A27-6F56"; + fsType = "vfat"; + }; + + swapDevices = + [ { device = "/dev/disk/by-uuid/db71f8e9-74e6-40f8-b5c3-1dcf74510f3b"; } + ]; + + # Enables DHCP on each ethernet and wireless interface. In case of scripted networking + # (the default) this is the recommended approach. When using systemd-networkd it's + # still possible to use this option, but it's recommended to use it in conjunction + # with explicit per-interface declarations with `networking.interfaces..useDHCP`. + networking.useDHCP = lib.mkDefault true; + # networking.interfaces.wlp2s0.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + powerManagement.cpuFreqGovernor = lib.mkDefault "powersave"; + hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; + # high-resolution display +} diff --git a/modules/audio/pipewire/default.nix b/modules/audio/pipewire/default.nix new file mode 100644 index 0000000..c3ebfe8 --- /dev/null +++ b/modules/audio/pipewire/default.nix @@ -0,0 +1,12 @@ +{ config, pkgs, lib, ... }: + +{ + security.rtkit.enable = true; + + services.pipewire = { + enable = true; + alsa.enable = false; + alsa.support32Bit = false; + pulse.enable = true; + }; +} diff --git a/modules/graphics/nvidia/default.nix b/modules/graphics/nvidia/default.nix new file mode 100644 index 0000000..6d39712 --- /dev/null +++ b/modules/graphics/nvidia/default.nix @@ -0,0 +1,7 @@ +{ config, pkgs, lib, ... }: + +{ + services.xserver.videoDrivers = [ "nvidia" ]; + hardware.opengl.enable = true; + hardware.nvidia.package = config.boot.kernelPackages.nvidiaPackages.stable; +} diff --git a/modules/login/greetd/default.nix b/modules/login/greetd/default.nix new file mode 100644 index 0000000..23620f8 --- /dev/null +++ b/modules/login/greetd/default.nix @@ -0,0 +1,17 @@ +{ config, pkgs, lib, ... }: + +{ + services.greetd = { + enable = true; + package = pkgs.greetd.tuigreet; + settings = { + terminal = { + vt = 2; + }; + default_session = { + command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time --cmd Hyprland"; + user = "pan"; + }; + }; + }; +} diff --git a/modules/network/bluetooth/default.nix b/modules/network/bluetooth/default.nix new file mode 100644 index 0000000..1e76c8f --- /dev/null +++ b/modules/network/bluetooth/default.nix @@ -0,0 +1,7 @@ +{ config, pkgs, lib, ... }: + +{ + hardware.bluetooth.enable = true; + hardware.bluetooth.powerOnBoot = true; + services.blueman.enable = true; +} diff --git a/modules/network/browsers/librewolf/default.nix b/modules/network/browsers/librewolf/default.nix new file mode 100644 index 0000000..034c5eb --- /dev/null +++ b/modules/network/browsers/librewolf/default.nix @@ -0,0 +1,6 @@ +{ config, pkgs, lib, ... }: + +{ + environment.variables.WEBBROWSER = "librewolf"; + environment.systemPackages = with pkgs; [ librewolf ]; +} diff --git a/modules/network/networking/default.nix b/modules/network/networking/default.nix new file mode 100644 index 0000000..57fae54 --- /dev/null +++ b/modules/network/networking/default.nix @@ -0,0 +1,41 @@ +{ config, pkgs, lib, ... }: + +{ + networking.wireless = { + enable = true; + userControlled = { + enable = true; + group = "network"; + }; + networks = { + "The Kabal 2.4" = { + pskRaw = "56302c1b1c7499f4a4f0e01cefe14b4393c5092420ebf71c68336cd084acd357"; + priority = 1; + }; + "WWUwireless-Secure" = { + auth = '' + key_mgmt=WPA-EAP + eap=PEAP + identity="langed@wwu.edu" + password="Slashed-Tidy4-Cubbyhole" + ''; + priority = 1; + }; + "Yellowsticky" = { + pskRaw = "8984d7e1e2f5bd9c3ccf92e429886bc64d40d42d4771ed5946556227afa4abf0"; + priority = 1; + }; + "Lange" = { + pskRaw = "bbbbf63e23747bc0ff36aed4c20dcee0221a6ccb2d2db07e4c64058e645e5f1e"; + priority = 1; + }; + "Homura" = { + pskRaw = "dd77456e1df3f2c17bccc917a0e609684fa6d2ccb6a2e0fb122d50d243e0c87e"; + priority = 0; + }; + }; + }; + + + networking.enableIPv6 = false; +} diff --git a/modules/network/syncthing/default.nix b/modules/network/syncthing/default.nix new file mode 100644 index 0000000..3397cd1 --- /dev/null +++ b/modules/network/syncthing/default.nix @@ -0,0 +1,9 @@ +{ config, pkgs, lib, ... }: + +{ + services.syncthing.enable = true; + services.syncthing.user = "pan"; + services.syncthing.dataDir = "/home/pan/dox"; + services.syncthing.overrideFolders = false; + services.syncthing.overrideDevices = false; +} diff --git a/modules/shell/fish/default.nix b/modules/shell/fish/default.nix new file mode 100644 index 0000000..37eef00 --- /dev/null +++ b/modules/shell/fish/default.nix @@ -0,0 +1,11 @@ +{ config, pkgs, lib, ... }: + +{ + programs.fish.enable = true; + + users.defaultUserShell = pkgs.fish; + + environment.shells = with pkgs; [ fish ]; + + # environment.variables.NIX_BUILD_SHELL = "fish"; +} diff --git a/modules/system/default.nix b/modules/system/default.nix new file mode 100644 index 0000000..81eaf8b --- /dev/null +++ b/modules/system/default.nix @@ -0,0 +1,36 @@ +{ config, pkgs, lib, ... }: + +{ + # Use the systemd-boot EFI boot loader. + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + + networking.hostName = "jibril"; + + time.timeZone = "America/Los_Angeles"; + + i18n.defaultLocale = "en_US.UTF-8"; + + # "Essential" Packages + environment.systemPackages = with pkgs; [ + git + neovim + nnn + xdg-user-dirs + blueman + ]; + + # XDG Compliance + environment.sessionVariables = rec { + XDG_CONFIG_HOME = "\${HOME}/.config"; + XDG_CACHE_HOME = "\${HOME}/.cache"; + XDG_STATE_HOME = "\${HOME}/.local/state"; + XDG_DATA_HOME = "\${HOME}/.local/share"; + XDG_BIN_HOME = "\${HOME}/.local/bin"; + }; + + users.groups = { + wheel = { }; + network = { }; + }; +} diff --git a/modules/themeing/default.nix b/modules/themeing/default.nix new file mode 100644 index 0000000..13e7abe --- /dev/null +++ b/modules/themeing/default.nix @@ -0,0 +1,7 @@ +{ config, pkgs, lib, ... }: + +{ + fonts.packages = with pkgs; [ + cascadia-code + ]; +} diff --git a/modules/user/default.nix b/modules/user/default.nix new file mode 100644 index 0000000..58a4426 --- /dev/null +++ b/modules/user/default.nix @@ -0,0 +1,8 @@ +{ config, pkgs, lib, ... }: + +{ + users.users.pan = { + isNormalUser = true; + extraGroups = [ "wheel" "network" ]; + }; +} From d1e5130d3f5e21e79572ce2895e035299389a6c3 Mon Sep 17 00:00:00 2001 From: langedev Date: Sun, 19 Nov 2023 20:48:22 -0800 Subject: [PATCH 007/412] Add multihardware support --- configuration.nix | 14 ++++++-------- desktop.nix | 10 ++++++++++ hardware-configuration.nix => hardware/laptop.nix | 0 laptop.nix | 11 +++++++++++ modules/network/bluetooth/default.nix | 3 +++ modules/system/default.nix | 3 --- 6 files changed, 30 insertions(+), 11 deletions(-) create mode 100644 desktop.nix rename hardware-configuration.nix => hardware/laptop.nix (100%) create mode 100644 laptop.nix diff --git a/configuration.nix b/configuration.nix index 0f448f4..ff30656 100644 --- a/configuration.nix +++ b/configuration.nix @@ -4,12 +4,15 @@ { config, pkgs, ... }: -{ +let + systemType = "laptop"; + #systemType = "desktop"; +in { nix.package = pkgs.nixUnstable; imports = [ - # Hardware Settings (hardware scan) - ./hardware-configuration.nix + # Hardware Specific Configuration + ./${systemType}.nix # System essentials (boot, lang, hostname, ...) ./modules/system @@ -21,15 +24,10 @@ ./modules/audio/pipewire ./modules/shell/fish # This enables fish as the default shell - ./modules/network/browsers/librewolf - ./modules/network/networking ./modules/network/syncthing - ./modules/network/bluetooth ./modules/login/greetd - - # ./modules/graphics/nvidia ]; nixpkgs.config.allowUnfree = true; diff --git a/desktop.nix b/desktop.nix new file mode 100644 index 0000000..18573f3 --- /dev/null +++ b/desktop.nix @@ -0,0 +1,10 @@ +{ config, pkgs, lib, ... }: + +{ + networking.hostName = "onizuka"; + imports = [ + ./hardware/desktop.nix + + # ./modules/graphics/nvidia + ]; +} diff --git a/hardware-configuration.nix b/hardware/laptop.nix similarity index 100% rename from hardware-configuration.nix rename to hardware/laptop.nix diff --git a/laptop.nix b/laptop.nix new file mode 100644 index 0000000..0019c68 --- /dev/null +++ b/laptop.nix @@ -0,0 +1,11 @@ +{ config, pkgs, lib, ... }: + +{ + networking.hostName = "jibril"; + imports = [ + ./hardware/laptop.nix + + ./modules/network/networking + ./modules/network/bluetooth + ]; +} diff --git a/modules/network/bluetooth/default.nix b/modules/network/bluetooth/default.nix index 1e76c8f..739a9bd 100644 --- a/modules/network/bluetooth/default.nix +++ b/modules/network/bluetooth/default.nix @@ -4,4 +4,7 @@ hardware.bluetooth.enable = true; hardware.bluetooth.powerOnBoot = true; services.blueman.enable = true; + environment.systemPackages = with pkgs; [ + blueman + ]; } diff --git a/modules/system/default.nix b/modules/system/default.nix index 81eaf8b..b13e3d4 100644 --- a/modules/system/default.nix +++ b/modules/system/default.nix @@ -5,8 +5,6 @@ boot.loader.systemd-boot.enable = true; boot.loader.efi.canTouchEfiVariables = true; - networking.hostName = "jibril"; - time.timeZone = "America/Los_Angeles"; i18n.defaultLocale = "en_US.UTF-8"; @@ -17,7 +15,6 @@ neovim nnn xdg-user-dirs - blueman ]; # XDG Compliance From 405dc94526ba8325fadebec677025ad1b65b0dc8 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sun, 19 Nov 2023 20:48:22 -0800 Subject: [PATCH 008/412] Add multihardware support --- configuration.nix | 14 ++++++-------- desktop.nix | 10 ++++++++++ hardware-configuration.nix => hardware/laptop.nix | 0 laptop.nix | 11 +++++++++++ modules/network/bluetooth/default.nix | 3 +++ modules/system/default.nix | 3 --- 6 files changed, 30 insertions(+), 11 deletions(-) create mode 100644 desktop.nix rename hardware-configuration.nix => hardware/laptop.nix (100%) create mode 100644 laptop.nix diff --git a/configuration.nix b/configuration.nix index 0f448f4..ff30656 100644 --- a/configuration.nix +++ b/configuration.nix @@ -4,12 +4,15 @@ { config, pkgs, ... }: -{ +let + systemType = "laptop"; + #systemType = "desktop"; +in { nix.package = pkgs.nixUnstable; imports = [ - # Hardware Settings (hardware scan) - ./hardware-configuration.nix + # Hardware Specific Configuration + ./${systemType}.nix # System essentials (boot, lang, hostname, ...) ./modules/system @@ -21,15 +24,10 @@ ./modules/audio/pipewire ./modules/shell/fish # This enables fish as the default shell - ./modules/network/browsers/librewolf - ./modules/network/networking ./modules/network/syncthing - ./modules/network/bluetooth ./modules/login/greetd - - # ./modules/graphics/nvidia ]; nixpkgs.config.allowUnfree = true; diff --git a/desktop.nix b/desktop.nix new file mode 100644 index 0000000..18573f3 --- /dev/null +++ b/desktop.nix @@ -0,0 +1,10 @@ +{ config, pkgs, lib, ... }: + +{ + networking.hostName = "onizuka"; + imports = [ + ./hardware/desktop.nix + + # ./modules/graphics/nvidia + ]; +} diff --git a/hardware-configuration.nix b/hardware/laptop.nix similarity index 100% rename from hardware-configuration.nix rename to hardware/laptop.nix diff --git a/laptop.nix b/laptop.nix new file mode 100644 index 0000000..0019c68 --- /dev/null +++ b/laptop.nix @@ -0,0 +1,11 @@ +{ config, pkgs, lib, ... }: + +{ + networking.hostName = "jibril"; + imports = [ + ./hardware/laptop.nix + + ./modules/network/networking + ./modules/network/bluetooth + ]; +} diff --git a/modules/network/bluetooth/default.nix b/modules/network/bluetooth/default.nix index 1e76c8f..739a9bd 100644 --- a/modules/network/bluetooth/default.nix +++ b/modules/network/bluetooth/default.nix @@ -4,4 +4,7 @@ hardware.bluetooth.enable = true; hardware.bluetooth.powerOnBoot = true; services.blueman.enable = true; + environment.systemPackages = with pkgs; [ + blueman + ]; } diff --git a/modules/system/default.nix b/modules/system/default.nix index 81eaf8b..b13e3d4 100644 --- a/modules/system/default.nix +++ b/modules/system/default.nix @@ -5,8 +5,6 @@ boot.loader.systemd-boot.enable = true; boot.loader.efi.canTouchEfiVariables = true; - networking.hostName = "jibril"; - time.timeZone = "America/Los_Angeles"; i18n.defaultLocale = "en_US.UTF-8"; @@ -17,7 +15,6 @@ neovim nnn xdg-user-dirs - blueman ]; # XDG Compliance From 7db3134d4b4c633a99da798febd1b7dd4a044769 Mon Sep 17 00:00:00 2001 From: langedev Date: Mon, 20 Nov 2023 00:48:14 -0800 Subject: [PATCH 009/412] Add desktop hardware information --- hardware/desktop.nix | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 hardware/desktop.nix diff --git a/hardware/desktop.nix b/hardware/desktop.nix new file mode 100644 index 0000000..e48ba96 --- /dev/null +++ b/hardware/desktop.nix @@ -0,0 +1,41 @@ +# Do not modify this file! It was generated by ‘nixos-generate-config’ +# and may be overwritten by future invocations. Please make changes +# to /etc/nixos/configuration.nix instead. +{ config, lib, pkgs, modulesPath, ... }: + +{ + imports = + [ (modulesPath + "/installer/scan/not-detected.nix") + ]; + + boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-amd" ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = + { device = "/dev/disk/by-uuid/f3afdc38-7550-4113-9f87-10def35845e2"; + fsType = "ext4"; + }; + + fileSystems."/boot" = + { device = "/dev/disk/by-uuid/6D40-7FAB"; + fsType = "vfat"; + }; + + swapDevices = + [ { device = "/dev/disk/by-uuid/743a10e1-a064-41e3-a0ae-59ca54cff1b1"; } + ]; + + # Enables DHCP on each ethernet and wireless interface. In case of scripted networking + # (the default) this is the recommended approach. When using systemd-networkd it's + # still possible to use this option, but it's recommended to use it in conjunction + # with explicit per-interface declarations with `networking.interfaces..useDHCP`. + networking.useDHCP = lib.mkDefault true; + # networking.interfaces.enp5s0.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; + # high-resolution display + hardware.video.hidpi.enable = lib.mkDefault true; +} From 8a20d8dc11029e8ea031dac11e688fe6e57a52e2 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 20 Nov 2023 00:48:14 -0800 Subject: [PATCH 010/412] Add desktop hardware information --- hardware/desktop.nix | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 hardware/desktop.nix diff --git a/hardware/desktop.nix b/hardware/desktop.nix new file mode 100644 index 0000000..e48ba96 --- /dev/null +++ b/hardware/desktop.nix @@ -0,0 +1,41 @@ +# Do not modify this file! It was generated by ‘nixos-generate-config’ +# and may be overwritten by future invocations. Please make changes +# to /etc/nixos/configuration.nix instead. +{ config, lib, pkgs, modulesPath, ... }: + +{ + imports = + [ (modulesPath + "/installer/scan/not-detected.nix") + ]; + + boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-amd" ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = + { device = "/dev/disk/by-uuid/f3afdc38-7550-4113-9f87-10def35845e2"; + fsType = "ext4"; + }; + + fileSystems."/boot" = + { device = "/dev/disk/by-uuid/6D40-7FAB"; + fsType = "vfat"; + }; + + swapDevices = + [ { device = "/dev/disk/by-uuid/743a10e1-a064-41e3-a0ae-59ca54cff1b1"; } + ]; + + # Enables DHCP on each ethernet and wireless interface. In case of scripted networking + # (the default) this is the recommended approach. When using systemd-networkd it's + # still possible to use this option, but it's recommended to use it in conjunction + # with explicit per-interface declarations with `networking.interfaces..useDHCP`. + networking.useDHCP = lib.mkDefault true; + # networking.interfaces.enp5s0.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; + # high-resolution display + hardware.video.hidpi.enable = lib.mkDefault true; +} From f10217bbae93f191098cf0bdafb26ef21635ccb1 Mon Sep 17 00:00:00 2001 From: langedev Date: Mon, 20 Nov 2023 01:31:41 -0800 Subject: [PATCH 011/412] Add hyprland --- flake.lock | 129 +++++++++++++++++++++++++++++++++++- flake.nix | 10 ++- home.nix | 1 + programs/hypr/default.conf | 52 +++++++++++++++ programs/hypr/default.nix | 9 +++ programs/hypr/keybinds.conf | 50 ++++++++++++++ 6 files changed, 248 insertions(+), 3 deletions(-) create mode 100644 programs/hypr/default.conf create mode 100644 programs/hypr/default.nix create mode 100644 programs/hypr/keybinds.conf diff --git a/flake.lock b/flake.lock index e1632a9..4336bb3 100644 --- a/flake.lock +++ b/flake.lock @@ -20,7 +20,70 @@ "type": "github" } }, + "hyprland": { + "inputs": { + "hyprland-protocols": "hyprland-protocols", + "nixpkgs": "nixpkgs", + "systems": "systems", + "wlroots": "wlroots", + "xdph": "xdph" + }, + "locked": { + "lastModified": 1700397206, + "narHash": "sha256-ityVJcy3I/E8soXctwWveg58+cXOSQXhDIcU6YR2gjI=", + "owner": "hyprwm", + "repo": "Hyprland", + "rev": "646f4bc63861e03b01fed3833bb65d1d014e1bf3", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "Hyprland", + "type": "github" + } + }, + "hyprland-protocols": { + "inputs": { + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1691753796, + "narHash": "sha256-zOEwiWoXk3j3+EoF3ySUJmberFewWlagvewDRuWYAso=", + "owner": "hyprwm", + "repo": "hyprland-protocols", + "rev": "0c2ce70625cb30aef199cb388f99e19a61a6ce03", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprland-protocols", + "type": "github" + } + }, "nixpkgs": { + "locked": { + "lastModified": 1698134075, + "narHash": "sha256-foCD+nuKzfh49bIoiCBur4+Fx1nozo+4C/6k8BYk4sg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "8efd5d1e283604f75a808a20e6cde0ef313d07d4", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { "locked": { "lastModified": 1699825797, "narHash": "sha256-W2m42mVt4/O6CJFbECPfLApmi8bO+qscbmSeEKrSHEg=", @@ -39,7 +102,71 @@ "root": { "inputs": { "home-manager": "home-manager", - "nixpkgs": "nixpkgs" + "hyprland": "hyprland", + "nixpkgs": "nixpkgs_2" + } + }, + "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" + } + }, + "wlroots": { + "flake": false, + "locked": { + "host": "gitlab.freedesktop.org", + "lastModified": 1699292815, + "narHash": "sha256-HXu98PyBMKEWLqiTb8viuLDznud/SdkdJsx5A5CWx7I=", + "owner": "wlroots", + "repo": "wlroots", + "rev": "5de9e1a99d6642c2d09d589aa37ff0a8945dcee1", + "type": "gitlab" + }, + "original": { + "host": "gitlab.freedesktop.org", + "owner": "wlroots", + "repo": "wlroots", + "rev": "5de9e1a99d6642c2d09d589aa37ff0a8945dcee1", + "type": "gitlab" + } + }, + "xdph": { + "inputs": { + "hyprland-protocols": [ + "hyprland", + "hyprland-protocols" + ], + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1697981233, + "narHash": "sha256-y8q4XUwx+gVK7i2eLjfR32lVo7TYvEslyzrmzYEaPZU=", + "owner": "hyprwm", + "repo": "xdg-desktop-portal-hyprland", + "rev": "22e7a65ff9633e1dedfa5317fdffc49f68de2ff2", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "xdg-desktop-portal-hyprland", + "type": "github" } } }, diff --git a/flake.nix b/flake.nix index ec6e780..d9d68e4 100644 --- a/flake.nix +++ b/flake.nix @@ -4,20 +4,26 @@ inputs = { # Specify the source of Home Manager and Nixpkgs. nixpkgs.url = "github:langedev/nixpkgs/nixos-unstable"; + home-manager = { url = "github:langedev/home-manager"; inputs.nixpkgs.follows = "nixpkgs"; }; + + hyprland.url = "github:hyprwm/Hyprland"; }; - outputs = { nixpkgs, home-manager, ... }: + outputs = { nixpkgs, home-manager, hyprland, ... }: let system = "x86_64-linux"; pkgs = nixpkgs.legacyPackages.${system}; in { homeConfigurations."pan" = home-manager.lib.homeManagerConfiguration { inherit pkgs; - modules = [ ./home.nix ]; + modules = [ + hyprland.homeManagerModules.default + ./home.nix + ]; }; }; } diff --git a/home.nix b/home.nix index b5b997e..6ce9508 100644 --- a/home.nix +++ b/home.nix @@ -8,6 +8,7 @@ xdg.enable = true; imports = [ + ./programs/hypr ./programs/alacritty ./programs/pywal ./programs/fish diff --git a/programs/hypr/default.conf b/programs/hypr/default.conf new file mode 100644 index 0000000..4b1dc22 --- /dev/null +++ b/programs/hypr/default.conf @@ -0,0 +1,52 @@ +monitor=,preferred,auto,1 +monitor=HDMI-A-1,disable + +exec-once = swww init +exec-once = swww img $HOME/med/pix/bg.png + +input { + kb_layout = us + follow_mouse = 1 + accel_profile = flat + sensitivity = 0.2 # -1.0 - 1.0, 0 means no modification. +} + +general { + gaps_in = 3 + gaps_out = 3 + border_size = 2 + col.active_border = rgb(F5C2E7) + col.inactive_border = rgb(1E1D2F) + + layout = master +} + +decoration { + rounding = 2 + blur { + size = 12 + } +} + +animations { + enabled = yes + + animation = windows, 1, 4, default, popin 50% + animation = windowsOut, 1, 4, default, popin 50% + animation = windowsMove, 1, 3, default + animation = border, 1, 3, default + animation = fade, 1, 3, default + animation = workspaces, 1, 3, default +} + +master { + no_gaps_when_only = true + new_is_master = false +} + +Binds { + workspace_back_and_forth = true +} + +windowrule = opacity 0.9 0.9,^(Alacritty)$ +windowrule = opacity 0.94 0.94,^(discord)$ diff --git a/programs/hypr/default.nix b/programs/hypr/default.nix new file mode 100644 index 0000000..510e74b --- /dev/null +++ b/programs/hypr/default.nix @@ -0,0 +1,9 @@ +{ config, pkgs, ... }: + +{ + wayland.windowManager.hyprland.enable = true; + wayland.windowManager.hyprland.extraConfig = '' + ${builtins.readFile ./default.conf} + ${builtins.readFile ./keybinds.conf} + ''; +} diff --git a/programs/hypr/keybinds.conf b/programs/hypr/keybinds.conf new file mode 100644 index 0000000..4ed1c58 --- /dev/null +++ b/programs/hypr/keybinds.conf @@ -0,0 +1,50 @@ +$mainMod = SUPER + +# Exec programs +bind = $mainMod, return, exec, alacritty +bind = $mainMod SHIFT, return, exec, rofi -show run +# bind = $mainMod SHIFT, P, exec, screenshot + +# Hyprland Management +bind = $mainMod SHIFT, Q, exit, + +# Bars stuff +bind = $mainMod, TAB, exec, eww open --toggle + +# Workspace / Monitor Management +bind = $mainMod, h, focusmonitor, l +bind = $mainMod, l, focusmonitor, r +bind = $mainMod, j, cyclenext, +bind = $mainMod, k, cyclenext, prev + +bind = $mainMod, 1, workspace, 1 +bind = $mainMod, 2, workspace, 2 +bind = $mainMod, 3, workspace, 3 +bind = $mainMod, 4, workspace, 4 +bind = $mainMod, 5, workspace, 5 +bind = $mainMod, 6, workspace, 6 +bind = $mainMod, 7, workspace, 7 +bind = $mainMod, 8, workspace, 8 +bind = $mainMod, 9, workspace, 9 +bind = $mainMod, 0, workspace, 10 + +# Window Management +bind = $mainMod, C, killactive, + +bind = $mainMod, F, togglefloating, +bind = $mainMod SHIFT, F, fullscreen, + +bind = $mainMod SHIFT, 1, movetoworkspacesilent, 1 +bind = $mainMod SHIFT, 2, movetoworkspacesilent, 2 +bind = $mainMod SHIFT, 3, movetoworkspacesilent, 3 +bind = $mainMod SHIFT, 4, movetoworkspacesilent, 4 +bind = $mainMod SHIFT, 5, movetoworkspacesilent, 5 +bind = $mainMod SHIFT, 6, movetoworkspacesilent, 6 +bind = $mainMod SHIFT, 7, movetoworkspacesilent, 7 +bind = $mainMod SHIFT, 8, movetoworkspacesilent, 8 +bind = $mainMod SHIFT, 9, movetoworkspacesilent, 9 +bind = $mainMod SHIFT, 0, movetoworkspacesilent, 10 + +# Move/resize windows with mainMod + LMB/RMB and dragging +bindm = $mainMod, mouse:272, movewindow +bindm = $mainMod, mouse:273, resizewindow From a0c8fd6bb84ca01596d6a74a50c5d7545a7a40d6 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 20 Nov 2023 01:31:41 -0800 Subject: [PATCH 012/412] Add hyprland --- flake.lock | 129 +++++++++++++++++++++++++++++++++++- flake.nix | 10 ++- home.nix | 1 + programs/hypr/default.conf | 52 +++++++++++++++ programs/hypr/default.nix | 9 +++ programs/hypr/keybinds.conf | 50 ++++++++++++++ 6 files changed, 248 insertions(+), 3 deletions(-) create mode 100644 programs/hypr/default.conf create mode 100644 programs/hypr/default.nix create mode 100644 programs/hypr/keybinds.conf diff --git a/flake.lock b/flake.lock index e1632a9..4336bb3 100644 --- a/flake.lock +++ b/flake.lock @@ -20,7 +20,70 @@ "type": "github" } }, + "hyprland": { + "inputs": { + "hyprland-protocols": "hyprland-protocols", + "nixpkgs": "nixpkgs", + "systems": "systems", + "wlroots": "wlroots", + "xdph": "xdph" + }, + "locked": { + "lastModified": 1700397206, + "narHash": "sha256-ityVJcy3I/E8soXctwWveg58+cXOSQXhDIcU6YR2gjI=", + "owner": "hyprwm", + "repo": "Hyprland", + "rev": "646f4bc63861e03b01fed3833bb65d1d014e1bf3", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "Hyprland", + "type": "github" + } + }, + "hyprland-protocols": { + "inputs": { + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1691753796, + "narHash": "sha256-zOEwiWoXk3j3+EoF3ySUJmberFewWlagvewDRuWYAso=", + "owner": "hyprwm", + "repo": "hyprland-protocols", + "rev": "0c2ce70625cb30aef199cb388f99e19a61a6ce03", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprland-protocols", + "type": "github" + } + }, "nixpkgs": { + "locked": { + "lastModified": 1698134075, + "narHash": "sha256-foCD+nuKzfh49bIoiCBur4+Fx1nozo+4C/6k8BYk4sg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "8efd5d1e283604f75a808a20e6cde0ef313d07d4", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { "locked": { "lastModified": 1699825797, "narHash": "sha256-W2m42mVt4/O6CJFbECPfLApmi8bO+qscbmSeEKrSHEg=", @@ -39,7 +102,71 @@ "root": { "inputs": { "home-manager": "home-manager", - "nixpkgs": "nixpkgs" + "hyprland": "hyprland", + "nixpkgs": "nixpkgs_2" + } + }, + "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" + } + }, + "wlroots": { + "flake": false, + "locked": { + "host": "gitlab.freedesktop.org", + "lastModified": 1699292815, + "narHash": "sha256-HXu98PyBMKEWLqiTb8viuLDznud/SdkdJsx5A5CWx7I=", + "owner": "wlroots", + "repo": "wlroots", + "rev": "5de9e1a99d6642c2d09d589aa37ff0a8945dcee1", + "type": "gitlab" + }, + "original": { + "host": "gitlab.freedesktop.org", + "owner": "wlroots", + "repo": "wlroots", + "rev": "5de9e1a99d6642c2d09d589aa37ff0a8945dcee1", + "type": "gitlab" + } + }, + "xdph": { + "inputs": { + "hyprland-protocols": [ + "hyprland", + "hyprland-protocols" + ], + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1697981233, + "narHash": "sha256-y8q4XUwx+gVK7i2eLjfR32lVo7TYvEslyzrmzYEaPZU=", + "owner": "hyprwm", + "repo": "xdg-desktop-portal-hyprland", + "rev": "22e7a65ff9633e1dedfa5317fdffc49f68de2ff2", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "xdg-desktop-portal-hyprland", + "type": "github" } } }, diff --git a/flake.nix b/flake.nix index ec6e780..d9d68e4 100644 --- a/flake.nix +++ b/flake.nix @@ -4,20 +4,26 @@ inputs = { # Specify the source of Home Manager and Nixpkgs. nixpkgs.url = "github:langedev/nixpkgs/nixos-unstable"; + home-manager = { url = "github:langedev/home-manager"; inputs.nixpkgs.follows = "nixpkgs"; }; + + hyprland.url = "github:hyprwm/Hyprland"; }; - outputs = { nixpkgs, home-manager, ... }: + outputs = { nixpkgs, home-manager, hyprland, ... }: let system = "x86_64-linux"; pkgs = nixpkgs.legacyPackages.${system}; in { homeConfigurations."pan" = home-manager.lib.homeManagerConfiguration { inherit pkgs; - modules = [ ./home.nix ]; + modules = [ + hyprland.homeManagerModules.default + ./home.nix + ]; }; }; } diff --git a/home.nix b/home.nix index b5b997e..6ce9508 100644 --- a/home.nix +++ b/home.nix @@ -8,6 +8,7 @@ xdg.enable = true; imports = [ + ./programs/hypr ./programs/alacritty ./programs/pywal ./programs/fish diff --git a/programs/hypr/default.conf b/programs/hypr/default.conf new file mode 100644 index 0000000..4b1dc22 --- /dev/null +++ b/programs/hypr/default.conf @@ -0,0 +1,52 @@ +monitor=,preferred,auto,1 +monitor=HDMI-A-1,disable + +exec-once = swww init +exec-once = swww img $HOME/med/pix/bg.png + +input { + kb_layout = us + follow_mouse = 1 + accel_profile = flat + sensitivity = 0.2 # -1.0 - 1.0, 0 means no modification. +} + +general { + gaps_in = 3 + gaps_out = 3 + border_size = 2 + col.active_border = rgb(F5C2E7) + col.inactive_border = rgb(1E1D2F) + + layout = master +} + +decoration { + rounding = 2 + blur { + size = 12 + } +} + +animations { + enabled = yes + + animation = windows, 1, 4, default, popin 50% + animation = windowsOut, 1, 4, default, popin 50% + animation = windowsMove, 1, 3, default + animation = border, 1, 3, default + animation = fade, 1, 3, default + animation = workspaces, 1, 3, default +} + +master { + no_gaps_when_only = true + new_is_master = false +} + +Binds { + workspace_back_and_forth = true +} + +windowrule = opacity 0.9 0.9,^(Alacritty)$ +windowrule = opacity 0.94 0.94,^(discord)$ diff --git a/programs/hypr/default.nix b/programs/hypr/default.nix new file mode 100644 index 0000000..510e74b --- /dev/null +++ b/programs/hypr/default.nix @@ -0,0 +1,9 @@ +{ config, pkgs, ... }: + +{ + wayland.windowManager.hyprland.enable = true; + wayland.windowManager.hyprland.extraConfig = '' + ${builtins.readFile ./default.conf} + ${builtins.readFile ./keybinds.conf} + ''; +} diff --git a/programs/hypr/keybinds.conf b/programs/hypr/keybinds.conf new file mode 100644 index 0000000..4ed1c58 --- /dev/null +++ b/programs/hypr/keybinds.conf @@ -0,0 +1,50 @@ +$mainMod = SUPER + +# Exec programs +bind = $mainMod, return, exec, alacritty +bind = $mainMod SHIFT, return, exec, rofi -show run +# bind = $mainMod SHIFT, P, exec, screenshot + +# Hyprland Management +bind = $mainMod SHIFT, Q, exit, + +# Bars stuff +bind = $mainMod, TAB, exec, eww open --toggle + +# Workspace / Monitor Management +bind = $mainMod, h, focusmonitor, l +bind = $mainMod, l, focusmonitor, r +bind = $mainMod, j, cyclenext, +bind = $mainMod, k, cyclenext, prev + +bind = $mainMod, 1, workspace, 1 +bind = $mainMod, 2, workspace, 2 +bind = $mainMod, 3, workspace, 3 +bind = $mainMod, 4, workspace, 4 +bind = $mainMod, 5, workspace, 5 +bind = $mainMod, 6, workspace, 6 +bind = $mainMod, 7, workspace, 7 +bind = $mainMod, 8, workspace, 8 +bind = $mainMod, 9, workspace, 9 +bind = $mainMod, 0, workspace, 10 + +# Window Management +bind = $mainMod, C, killactive, + +bind = $mainMod, F, togglefloating, +bind = $mainMod SHIFT, F, fullscreen, + +bind = $mainMod SHIFT, 1, movetoworkspacesilent, 1 +bind = $mainMod SHIFT, 2, movetoworkspacesilent, 2 +bind = $mainMod SHIFT, 3, movetoworkspacesilent, 3 +bind = $mainMod SHIFT, 4, movetoworkspacesilent, 4 +bind = $mainMod SHIFT, 5, movetoworkspacesilent, 5 +bind = $mainMod SHIFT, 6, movetoworkspacesilent, 6 +bind = $mainMod SHIFT, 7, movetoworkspacesilent, 7 +bind = $mainMod SHIFT, 8, movetoworkspacesilent, 8 +bind = $mainMod SHIFT, 9, movetoworkspacesilent, 9 +bind = $mainMod SHIFT, 0, movetoworkspacesilent, 10 + +# Move/resize windows with mainMod + LMB/RMB and dragging +bindm = $mainMod, mouse:272, movewindow +bindm = $mainMod, mouse:273, resizewindow From b9f1a52ee2230af6b4f56538530f02f99fa03213 Mon Sep 17 00:00:00 2001 From: langedev Date: Mon, 20 Nov 2023 01:38:11 -0800 Subject: [PATCH 013/412] Add dunst --- home.nix | 1 + programs/dunst/default.nix | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 programs/dunst/default.nix diff --git a/home.nix b/home.nix index 6ce9508..8085393 100644 --- a/home.nix +++ b/home.nix @@ -9,6 +9,7 @@ imports = [ ./programs/hypr + ./programs/dunst ./programs/alacritty ./programs/pywal ./programs/fish diff --git a/programs/dunst/default.nix b/programs/dunst/default.nix new file mode 100644 index 0000000..3d9661f --- /dev/null +++ b/programs/dunst/default.nix @@ -0,0 +1,27 @@ +{ config, pkgs, ... }: + +{ + services.dunst.enable = true; + services.dunst.settings = { + global = { + frame_color = "#8AADF4"; + separator_color = "frame"; + }; + + urgency_low = { + background = "#24273A"; + foreground = "#CAD3F5"; + }; + + urgency_normal = { + background = "#24273A"; + foreground = "#CAD3F5"; + }; + + urgency_critical = { + background = "#24273A"; + foreground = "#CAD3F5"; + frame_color = "#F5A97F"; + }; + }; +} From 15ac7ffb76c2b4803fc4b096255f7b66818d1827 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 20 Nov 2023 01:38:11 -0800 Subject: [PATCH 014/412] Add dunst --- home.nix | 1 + programs/dunst/default.nix | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 programs/dunst/default.nix diff --git a/home.nix b/home.nix index 6ce9508..8085393 100644 --- a/home.nix +++ b/home.nix @@ -9,6 +9,7 @@ imports = [ ./programs/hypr + ./programs/dunst ./programs/alacritty ./programs/pywal ./programs/fish diff --git a/programs/dunst/default.nix b/programs/dunst/default.nix new file mode 100644 index 0000000..3d9661f --- /dev/null +++ b/programs/dunst/default.nix @@ -0,0 +1,27 @@ +{ config, pkgs, ... }: + +{ + services.dunst.enable = true; + services.dunst.settings = { + global = { + frame_color = "#8AADF4"; + separator_color = "frame"; + }; + + urgency_low = { + background = "#24273A"; + foreground = "#CAD3F5"; + }; + + urgency_normal = { + background = "#24273A"; + foreground = "#CAD3F5"; + }; + + urgency_critical = { + background = "#24273A"; + foreground = "#CAD3F5"; + frame_color = "#F5A97F"; + }; + }; +} From 28590820e5ed538f3fb1e8e55e1d51412e5fde6d Mon Sep 17 00:00:00 2001 From: langedev Date: Mon, 20 Nov 2023 01:56:34 -0800 Subject: [PATCH 015/412] Add git and remove ~/.manpager --- home.nix | 4 ++++ programs/git/default.nix | 12 ++++++++++++ 2 files changed, 16 insertions(+) create mode 100644 programs/git/default.nix diff --git a/home.nix b/home.nix index 8085393..3cdee8d 100644 --- a/home.nix +++ b/home.nix @@ -10,6 +10,7 @@ imports = [ ./programs/hypr ./programs/dunst + ./programs/git ./programs/alacritty ./programs/pywal ./programs/fish @@ -50,6 +51,9 @@ BROWSER = "librewolf"; }; + # Enable man pages, but ensure ~/.manpage isn't created + programs.man.enable = true; + programs.man.generateCaches = false; # Let Home Manager install and manage itself. programs.home-manager.enable = true; home.stateVersion = "23.05"; # don't change lol, u know why diff --git a/programs/git/default.nix b/programs/git/default.nix new file mode 100644 index 0000000..107376d --- /dev/null +++ b/programs/git/default.nix @@ -0,0 +1,12 @@ +{ config, pkgs, ... }: + +{ + programs.git.enable = true; + programs.git.userName = "langedev"; + programs.git.userEmail = "public@daltonlange.com"; + programs.git.extraConfig = { + safe = { + directory = "/etc/nixos"; + }; + }; +} From 15509adf734cba18bfc8b82b0493a84000c8f469 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 20 Nov 2023 01:56:34 -0800 Subject: [PATCH 016/412] Add git and remove ~/.manpager --- home.nix | 4 ++++ programs/git/default.nix | 12 ++++++++++++ 2 files changed, 16 insertions(+) create mode 100644 programs/git/default.nix diff --git a/home.nix b/home.nix index 8085393..3cdee8d 100644 --- a/home.nix +++ b/home.nix @@ -10,6 +10,7 @@ imports = [ ./programs/hypr ./programs/dunst + ./programs/git ./programs/alacritty ./programs/pywal ./programs/fish @@ -50,6 +51,9 @@ BROWSER = "librewolf"; }; + # Enable man pages, but ensure ~/.manpage isn't created + programs.man.enable = true; + programs.man.generateCaches = false; # Let Home Manager install and manage itself. programs.home-manager.enable = true; home.stateVersion = "23.05"; # don't change lol, u know why diff --git a/programs/git/default.nix b/programs/git/default.nix new file mode 100644 index 0000000..107376d --- /dev/null +++ b/programs/git/default.nix @@ -0,0 +1,12 @@ +{ config, pkgs, ... }: + +{ + programs.git.enable = true; + programs.git.userName = "langedev"; + programs.git.userEmail = "public@daltonlange.com"; + programs.git.extraConfig = { + safe = { + directory = "/etc/nixos"; + }; + }; +} From 92adc76e0cff4e4df4f684e98ee54819f58bacad Mon Sep 17 00:00:00 2001 From: langedev Date: Mon, 20 Nov 2023 02:22:10 -0800 Subject: [PATCH 017/412] Add XDG, and move program installations to better modules --- home.nix | 8 +------- programs/hypr/default.nix | 5 +++++ programs/nnn/default.nix | 3 +++ programs/xdg/default.nix | 16 ++++++++++++++++ 4 files changed, 25 insertions(+), 7 deletions(-) create mode 100644 programs/xdg/default.nix diff --git a/home.nix b/home.nix index 3cdee8d..d5b7845 100644 --- a/home.nix +++ b/home.nix @@ -5,9 +5,8 @@ home.username = "pan"; home.homeDirectory = "/home/pan"; - xdg.enable = true; - imports = [ + ./programs/xdg ./programs/hypr ./programs/dunst ./programs/git @@ -20,11 +19,6 @@ home.packages = with pkgs; [ eww-wayland # eww widgets - socat # For hyprland scripts - swww # Wallpaper engine - trash-cli # Trash application - dunst # Notification Manager - wlr-randr # Xrandr for wayland # Applications syncthing # For syncing files between computers diff --git a/programs/hypr/default.nix b/programs/hypr/default.nix index 510e74b..8fc5589 100644 --- a/programs/hypr/default.nix +++ b/programs/hypr/default.nix @@ -6,4 +6,9 @@ ${builtins.readFile ./default.conf} ${builtins.readFile ./keybinds.conf} ''; + home.packages = with pkgs; [ + socat # For hyprland scripts + swww # Wallpaper engine + wlr-randr # Xrandr for wayland + ]; } diff --git a/programs/nnn/default.nix b/programs/nnn/default.nix index e5f27c9..583a7b2 100644 --- a/programs/nnn/default.nix +++ b/programs/nnn/default.nix @@ -8,4 +8,7 @@ NNN_FIFO = "/tmp/nnn.fifo"; NNN_TRASH = "1"; }; + home.packages = with pkgs; [ + trash-cli # Trash program for nnn + ]; } diff --git a/programs/xdg/default.nix b/programs/xdg/default.nix new file mode 100644 index 0000000..835b5fa --- /dev/null +++ b/programs/xdg/default.nix @@ -0,0 +1,16 @@ +{ config, pkgs, ... }: + +{ + xdg.enable = true; + xdg.userDirs.enable = true; + xdg.userDirs = { + desktop = "${config.home.homeDirectory}/dwn"; + download = "${config.home.homeDirectory}/dwn"; + documents = "${config.home.homeDirectory}/dox"; + publicShare = "${config.home.homeDirectory}/dox/public"; + templates = "${config.home.homeDirectory}/dox/templates"; + music = "${config.home.homeDirectory}/med/mus"; + pictures = "${config.home.homeDirectory}/med/pix"; + videos = "${config.home.homeDirectory}/med/vid"; + }; +} From 0027b4dab1d4791f5fb8eea6435d633e0ce4410a Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 20 Nov 2023 02:22:10 -0800 Subject: [PATCH 018/412] Add XDG, and move program installations to better modules --- home.nix | 8 +------- programs/hypr/default.nix | 5 +++++ programs/nnn/default.nix | 3 +++ programs/xdg/default.nix | 16 ++++++++++++++++ 4 files changed, 25 insertions(+), 7 deletions(-) create mode 100644 programs/xdg/default.nix diff --git a/home.nix b/home.nix index 3cdee8d..d5b7845 100644 --- a/home.nix +++ b/home.nix @@ -5,9 +5,8 @@ home.username = "pan"; home.homeDirectory = "/home/pan"; - xdg.enable = true; - imports = [ + ./programs/xdg ./programs/hypr ./programs/dunst ./programs/git @@ -20,11 +19,6 @@ home.packages = with pkgs; [ eww-wayland # eww widgets - socat # For hyprland scripts - swww # Wallpaper engine - trash-cli # Trash application - dunst # Notification Manager - wlr-randr # Xrandr for wayland # Applications syncthing # For syncing files between computers diff --git a/programs/hypr/default.nix b/programs/hypr/default.nix index 510e74b..8fc5589 100644 --- a/programs/hypr/default.nix +++ b/programs/hypr/default.nix @@ -6,4 +6,9 @@ ${builtins.readFile ./default.conf} ${builtins.readFile ./keybinds.conf} ''; + home.packages = with pkgs; [ + socat # For hyprland scripts + swww # Wallpaper engine + wlr-randr # Xrandr for wayland + ]; } diff --git a/programs/nnn/default.nix b/programs/nnn/default.nix index e5f27c9..583a7b2 100644 --- a/programs/nnn/default.nix +++ b/programs/nnn/default.nix @@ -8,4 +8,7 @@ NNN_FIFO = "/tmp/nnn.fifo"; NNN_TRASH = "1"; }; + home.packages = with pkgs; [ + trash-cli # Trash program for nnn + ]; } diff --git a/programs/xdg/default.nix b/programs/xdg/default.nix new file mode 100644 index 0000000..835b5fa --- /dev/null +++ b/programs/xdg/default.nix @@ -0,0 +1,16 @@ +{ config, pkgs, ... }: + +{ + xdg.enable = true; + xdg.userDirs.enable = true; + xdg.userDirs = { + desktop = "${config.home.homeDirectory}/dwn"; + download = "${config.home.homeDirectory}/dwn"; + documents = "${config.home.homeDirectory}/dox"; + publicShare = "${config.home.homeDirectory}/dox/public"; + templates = "${config.home.homeDirectory}/dox/templates"; + music = "${config.home.homeDirectory}/med/mus"; + pictures = "${config.home.homeDirectory}/med/pix"; + videos = "${config.home.homeDirectory}/med/vid"; + }; +} From 7ad25b1983ba2bec3c96fd253306d954457a1dfb Mon Sep 17 00:00:00 2001 From: langedev Date: Mon, 20 Nov 2023 02:22:55 -0800 Subject: [PATCH 019/412] Remove extra rofi data --- programs/rofi/default.nix | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/programs/rofi/default.nix b/programs/rofi/default.nix index e24db42..1db30ee 100644 --- a/programs/rofi/default.nix +++ b/programs/rofi/default.nix @@ -3,28 +3,4 @@ { programs.rofi.enable = true; programs.rofi.package = pkgs.rofi-wayland; - programs.wofi.settings = { - show = "dmenu"; # Default to dmenu - prompt = ""; - hide_scroll = true; - insensitive = true; - location = "bottom_right"; - dynamic_lines = true; - yoffset = -100; - xoffset = -40; - height = "50%"; - width = "50%"; - }; - programs.wofi.style = '' - window { - background: rgba(0, 0, 0, 255); - font-size: 4rem; - } - #entry, #input { - margin: 2px; - background: #FFFFFF; - border-width: 2px; - border-color: #000000; - } - ''; } From df67ada5f8a6d10e184d88beb830e03cec103f89 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 20 Nov 2023 02:22:55 -0800 Subject: [PATCH 020/412] Remove extra rofi data --- programs/rofi/default.nix | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/programs/rofi/default.nix b/programs/rofi/default.nix index e24db42..1db30ee 100644 --- a/programs/rofi/default.nix +++ b/programs/rofi/default.nix @@ -3,28 +3,4 @@ { programs.rofi.enable = true; programs.rofi.package = pkgs.rofi-wayland; - programs.wofi.settings = { - show = "dmenu"; # Default to dmenu - prompt = ""; - hide_scroll = true; - insensitive = true; - location = "bottom_right"; - dynamic_lines = true; - yoffset = -100; - xoffset = -40; - height = "50%"; - width = "50%"; - }; - programs.wofi.style = '' - window { - background: rgba(0, 0, 0, 255); - font-size: 4rem; - } - #entry, #input { - margin: 2px; - background: #FFFFFF; - border-width: 2px; - border-color: #000000; - } - ''; } From f3ba0c3ab81691dcfb332672c6be34a2c28b58a7 Mon Sep 17 00:00:00 2001 From: langedev Date: Mon, 20 Nov 2023 02:51:44 -0800 Subject: [PATCH 021/412] Add nvim support --- home.nix | 1 + programs/nvim/default.nix | 74 +++++++++++++++++++++++++++++++++++++++ programs/nvim/init.vim | 67 +++++++++++++++++++++++++++++++++++ 3 files changed, 142 insertions(+) create mode 100644 programs/nvim/default.nix create mode 100644 programs/nvim/init.vim diff --git a/home.nix b/home.nix index d5b7845..8540bab 100644 --- a/home.nix +++ b/home.nix @@ -15,6 +15,7 @@ ./programs/fish ./programs/nnn ./programs/rofi + ./programs/nvim ]; home.packages = with pkgs; [ diff --git a/programs/nvim/default.nix b/programs/nvim/default.nix new file mode 100644 index 0000000..bd19ffd --- /dev/null +++ b/programs/nvim/default.nix @@ -0,0 +1,74 @@ +{ config, pkgs, ... }: + +{ + programs.neovim.enable = true; + programs.neovim.extraConfig = '' + ${builtins.readFile ./init.vim} + ''; + programs.neovim.plugins = with pkgs.vimPlugins; [ + { # Personal Wiki + plugin = vimwiki; + config = '' + let g:vimwiki_list = [{'path': '~/dox/wiki', 'links_space_char': '_', + \ 'ext': '.md', 'syntax': 'markdown'}] + ''; + } + { # NNN in vim + plugin = nnn-vim; + config = '' + let g:nnn#layout = { 'window': { + \ 'width': 0.35, + \ 'height': 0.5, + \ 'xoffset': 1.0, + \ 'highlight': 'Debug' } } " hover window + let g:nnn#action = { + \ '': 'tab split', + \ '': 'split', + \ '': 'vsplit' } + let g:nnn#command = 'nnn -HoeT v' + let g:nnn#replace_netrw = 1 + ''; + } + { # Fuzzy searches + plugin = fzf-vim; + config = '' + map :Files + map :Ag + ''; + } + { # Auto completions + plugin = coc-nvim; + config = '' + function! s:check_back_space() abort + let col = col('.') - 1 + return !col || getline('.')[col - 1] =~# '\s' + endfunction + + inoremap + \ pumvisible() ? "\" : + \ check_back_space() ? "\" : + \ coc#refresh() + inoremap pumvisible() ? "\" : "\" + ''; + } + vim-commentary # multi-line comments + vim-fugitive # Git Plugin + vimtex # Latex support + tagbar # File tagging + + # === LOOK AND FEEL === + { # Status Bar + plugin = vim-airline; + config = '' + let g:airline#extensions#tagbar#flags = 'fs' + ''; + } + { # Rainbow Parenthesis + plugin = rainbow; + config = '' + let g:rainbow_actve = 1 + ''; + } + vim-polyglot # Syntax Highlighting + ]; +} diff --git a/programs/nvim/init.vim b/programs/nvim/init.vim new file mode 100644 index 0000000..a40649a --- /dev/null +++ b/programs/nvim/init.vim @@ -0,0 +1,67 @@ +syntax on +let mapleader =" " +set encoding=utf-8 +set nocompatible +filetype plugin on +set list + +set updatetime=300 + +" Easy Split Navigation +nnoremap +nnoremap +nnoremap +nnoremap + +" Indentation +set tabstop=2 softtabstop=0 shiftwidth=2 smarttab expandtab + +" Searching +set smartcase + +" Backups +set noswapfile +set nobackup +set undodir=~/.config/nvim/undodir +set undofile + +" Right column at 80 lines for good coding practice. +set colorcolumn=80 +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +" QoL +set showmatch " Show matching Brackets +set number relativenumber " Side numbers + +" Fuzzy finding by allowing searching into subfolders +set path+=** +set wildmenu +" use :find to find, and * to make it fuzzy. +" Also make use of :b. + +" Delete trailing white space and newlines at end of file on save. +autocmd BufWritePre * %s/\s\+$//e +autocmd BufWritePre * %s/\n\+\%$//e + +" Easy copy and pasting to external programs +map "+yy +map "+P + +autocmd BufRead,BufNewFile *.md call WritingMode() +autocmd BufRead,BufNewFile *.tex call WritingMode() +autocmd BufRead,BufNewFile *.svx call WritingMode() + +autocmd BufRead,BufNewFile *.py call PythonMode() + +function! WritingMode() + setlocal textwidth=80 + setlocal wrap linebreak nolist + setlocal whichwrap+=<,>,h,l + nnoremap j gj + nnoremap k gk + setlocal spell spelllang=en_us +endfunction +function! PythonMode() + setlocal foldmethod=indent + setlocal foldlevel=99 +endfunction From 6d1a6a8aa75cf4ec52351f5a87e8fa0863dee7de Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 20 Nov 2023 02:51:44 -0800 Subject: [PATCH 022/412] Add nvim support --- home.nix | 1 + programs/nvim/default.nix | 74 +++++++++++++++++++++++++++++++++++++++ programs/nvim/init.vim | 67 +++++++++++++++++++++++++++++++++++ 3 files changed, 142 insertions(+) create mode 100644 programs/nvim/default.nix create mode 100644 programs/nvim/init.vim diff --git a/home.nix b/home.nix index d5b7845..8540bab 100644 --- a/home.nix +++ b/home.nix @@ -15,6 +15,7 @@ ./programs/fish ./programs/nnn ./programs/rofi + ./programs/nvim ]; home.packages = with pkgs; [ diff --git a/programs/nvim/default.nix b/programs/nvim/default.nix new file mode 100644 index 0000000..bd19ffd --- /dev/null +++ b/programs/nvim/default.nix @@ -0,0 +1,74 @@ +{ config, pkgs, ... }: + +{ + programs.neovim.enable = true; + programs.neovim.extraConfig = '' + ${builtins.readFile ./init.vim} + ''; + programs.neovim.plugins = with pkgs.vimPlugins; [ + { # Personal Wiki + plugin = vimwiki; + config = '' + let g:vimwiki_list = [{'path': '~/dox/wiki', 'links_space_char': '_', + \ 'ext': '.md', 'syntax': 'markdown'}] + ''; + } + { # NNN in vim + plugin = nnn-vim; + config = '' + let g:nnn#layout = { 'window': { + \ 'width': 0.35, + \ 'height': 0.5, + \ 'xoffset': 1.0, + \ 'highlight': 'Debug' } } " hover window + let g:nnn#action = { + \ '': 'tab split', + \ '': 'split', + \ '': 'vsplit' } + let g:nnn#command = 'nnn -HoeT v' + let g:nnn#replace_netrw = 1 + ''; + } + { # Fuzzy searches + plugin = fzf-vim; + config = '' + map :Files + map :Ag + ''; + } + { # Auto completions + plugin = coc-nvim; + config = '' + function! s:check_back_space() abort + let col = col('.') - 1 + return !col || getline('.')[col - 1] =~# '\s' + endfunction + + inoremap + \ pumvisible() ? "\" : + \ check_back_space() ? "\" : + \ coc#refresh() + inoremap pumvisible() ? "\" : "\" + ''; + } + vim-commentary # multi-line comments + vim-fugitive # Git Plugin + vimtex # Latex support + tagbar # File tagging + + # === LOOK AND FEEL === + { # Status Bar + plugin = vim-airline; + config = '' + let g:airline#extensions#tagbar#flags = 'fs' + ''; + } + { # Rainbow Parenthesis + plugin = rainbow; + config = '' + let g:rainbow_actve = 1 + ''; + } + vim-polyglot # Syntax Highlighting + ]; +} diff --git a/programs/nvim/init.vim b/programs/nvim/init.vim new file mode 100644 index 0000000..a40649a --- /dev/null +++ b/programs/nvim/init.vim @@ -0,0 +1,67 @@ +syntax on +let mapleader =" " +set encoding=utf-8 +set nocompatible +filetype plugin on +set list + +set updatetime=300 + +" Easy Split Navigation +nnoremap +nnoremap +nnoremap +nnoremap + +" Indentation +set tabstop=2 softtabstop=0 shiftwidth=2 smarttab expandtab + +" Searching +set smartcase + +" Backups +set noswapfile +set nobackup +set undodir=~/.config/nvim/undodir +set undofile + +" Right column at 80 lines for good coding practice. +set colorcolumn=80 +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +" QoL +set showmatch " Show matching Brackets +set number relativenumber " Side numbers + +" Fuzzy finding by allowing searching into subfolders +set path+=** +set wildmenu +" use :find to find, and * to make it fuzzy. +" Also make use of :b. + +" Delete trailing white space and newlines at end of file on save. +autocmd BufWritePre * %s/\s\+$//e +autocmd BufWritePre * %s/\n\+\%$//e + +" Easy copy and pasting to external programs +map "+yy +map "+P + +autocmd BufRead,BufNewFile *.md call WritingMode() +autocmd BufRead,BufNewFile *.tex call WritingMode() +autocmd BufRead,BufNewFile *.svx call WritingMode() + +autocmd BufRead,BufNewFile *.py call PythonMode() + +function! WritingMode() + setlocal textwidth=80 + setlocal wrap linebreak nolist + setlocal whichwrap+=<,>,h,l + nnoremap j gj + nnoremap k gk + setlocal spell spelllang=en_us +endfunction +function! PythonMode() + setlocal foldmethod=indent + setlocal foldlevel=99 +endfunction From 3fad5809b934ad34cba6d58bdcd0eecebb20abff Mon Sep 17 00:00:00 2001 From: langedev Date: Mon, 20 Nov 2023 09:52:17 -0800 Subject: [PATCH 023/412] Add mpv support [untested] --- home.nix | 15 ++++++++------- programs/mpv/default.nix | 14 ++++++++++++++ 2 files changed, 22 insertions(+), 7 deletions(-) create mode 100644 programs/mpv/default.nix diff --git a/home.nix b/home.nix index 8540bab..3db3a7a 100644 --- a/home.nix +++ b/home.nix @@ -16,27 +16,28 @@ ./programs/nnn ./programs/rofi ./programs/nvim + ./programs/mpv ]; home.packages = with pkgs; [ - eww-wayland # eww widgets - # Applications - syncthing # For syncing files between computers discord # Chat app gimp # Photo editting - mpv # Video player pamixer # Volume control playerctl # Control media wget # Download web stuff - zathura # PDF viewer feh # Image viewer - sshfs # SSH File system appimage-run # Lets you run app images - # Development stuff, can be removed nodejs # For compiling JS stuff jq # May be critical for scripts? + + # Check if want settings? + zathura # PDF viewer + + # Expand into other areas + sshfs # SSH File system (SSH) + eww-wayland # eww widgets (EWW) ]; # home.file = {}; diff --git a/programs/mpv/default.nix b/programs/mpv/default.nix new file mode 100644 index 0000000..bc41ad5 --- /dev/null +++ b/programs/mpv/default.nix @@ -0,0 +1,14 @@ +{ config, pkgs, ... }: + +{ + programs.mpv.enable = true; + programs.mpv.config = { + volume-max = 150; + force-window = "yes"; + script-opts = "ytdl_hook-ytdl_path=yt-dlp"; + ytdl-format = "bestvideo[height<=?1080][vcodec!=vp9]+bestaudio/best"; + }; + home.packages = with pkgs; [ + yt-dlp + ]; +} From 2f2c8f9d5b17050d7f2ebee2a553ecd20c5acbf0 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 20 Nov 2023 09:52:17 -0800 Subject: [PATCH 024/412] Add mpv support [untested] --- home.nix | 15 ++++++++------- programs/mpv/default.nix | 14 ++++++++++++++ 2 files changed, 22 insertions(+), 7 deletions(-) create mode 100644 programs/mpv/default.nix diff --git a/home.nix b/home.nix index 8540bab..3db3a7a 100644 --- a/home.nix +++ b/home.nix @@ -16,27 +16,28 @@ ./programs/nnn ./programs/rofi ./programs/nvim + ./programs/mpv ]; home.packages = with pkgs; [ - eww-wayland # eww widgets - # Applications - syncthing # For syncing files between computers discord # Chat app gimp # Photo editting - mpv # Video player pamixer # Volume control playerctl # Control media wget # Download web stuff - zathura # PDF viewer feh # Image viewer - sshfs # SSH File system appimage-run # Lets you run app images - # Development stuff, can be removed nodejs # For compiling JS stuff jq # May be critical for scripts? + + # Check if want settings? + zathura # PDF viewer + + # Expand into other areas + sshfs # SSH File system (SSH) + eww-wayland # eww widgets (EWW) ]; # home.file = {}; diff --git a/programs/mpv/default.nix b/programs/mpv/default.nix new file mode 100644 index 0000000..bc41ad5 --- /dev/null +++ b/programs/mpv/default.nix @@ -0,0 +1,14 @@ +{ config, pkgs, ... }: + +{ + programs.mpv.enable = true; + programs.mpv.config = { + volume-max = 150; + force-window = "yes"; + script-opts = "ytdl_hook-ytdl_path=yt-dlp"; + ytdl-format = "bestvideo[height<=?1080][vcodec!=vp9]+bestaudio/best"; + }; + home.packages = with pkgs; [ + yt-dlp + ]; +} From 7f324958a57132edae61a4de8964dfab282fc63d Mon Sep 17 00:00:00 2001 From: langedev Date: Mon, 20 Nov 2023 10:28:36 -0800 Subject: [PATCH 025/412] Add eww and SSH --- home.nix | 30 +++++++------- programs/eww/config/eww.scss | 8 ++++ programs/eww/config/eww.yuck | 0 programs/eww/config/modules/bar.yuck | 40 +++++++++++++++++++ .../config/modules/components/hyprwindow.yuck | 5 +++ .../modules/components/hyprworkspaces.yuck | 17 ++++++++ .../eww/config/modules/components/index.html | 18 +++++++++ .../config/modules/components/internet.yuck | 8 ++++ .../modules/components/japaneseaudio.yuck | 11 +++++ .../modules/components/japanesebattery.yuck | 9 +++++ .../modules/components/japanesedate.yuck | 9 +++++ programs/eww/config/modules/index.html | 16 ++++++++ programs/eww/config/modules/powerbar.yuck | 15 +++++++ .../config/scripts/change-active-workspace | 21 ++++++++++ .../eww/config/scripts/get-active-workspace | 3 ++ programs/eww/config/scripts/get-window-title | 3 ++ programs/eww/config/scripts/get-workspaces | 11 +++++ programs/eww/config/scripts/index.html | 20 ++++++++++ programs/eww/config/scripts/japanesedate | 31 ++++++++++++++ programs/eww/config/scripts/medpreview | 3 ++ programs/eww/config/variables.yuck | 0 programs/eww/config/windows.yuck | 32 +++++++++++++++ programs/eww/default.nix | 7 ++++ programs/ssh/default.nix | 8 ++++ 24 files changed, 309 insertions(+), 16 deletions(-) create mode 100644 programs/eww/config/eww.scss create mode 100644 programs/eww/config/eww.yuck create mode 100644 programs/eww/config/modules/bar.yuck create mode 100644 programs/eww/config/modules/components/hyprwindow.yuck create mode 100644 programs/eww/config/modules/components/hyprworkspaces.yuck create mode 100644 programs/eww/config/modules/components/index.html create mode 100644 programs/eww/config/modules/components/internet.yuck create mode 100644 programs/eww/config/modules/components/japaneseaudio.yuck create mode 100644 programs/eww/config/modules/components/japanesebattery.yuck create mode 100644 programs/eww/config/modules/components/japanesedate.yuck create mode 100644 programs/eww/config/modules/index.html create mode 100644 programs/eww/config/modules/powerbar.yuck create mode 100644 programs/eww/config/scripts/change-active-workspace create mode 100644 programs/eww/config/scripts/get-active-workspace create mode 100644 programs/eww/config/scripts/get-window-title create mode 100644 programs/eww/config/scripts/get-workspaces create mode 100644 programs/eww/config/scripts/index.html create mode 100644 programs/eww/config/scripts/japanesedate create mode 100644 programs/eww/config/scripts/medpreview create mode 100644 programs/eww/config/variables.yuck create mode 100644 programs/eww/config/windows.yuck create mode 100644 programs/eww/default.nix create mode 100644 programs/ssh/default.nix diff --git a/home.nix b/home.nix index 3db3a7a..11310c2 100644 --- a/home.nix +++ b/home.nix @@ -6,17 +6,19 @@ home.homeDirectory = "/home/pan"; imports = [ - ./programs/xdg - ./programs/hypr - ./programs/dunst - ./programs/git ./programs/alacritty - ./programs/pywal + ./programs/dunst + ./programs/eww ./programs/fish - ./programs/nnn - ./programs/rofi - ./programs/nvim + ./programs/git + ./programs/hypr ./programs/mpv + ./programs/nnn + ./programs/nvim + ./programs/pywal + ./programs/rofi + ./programs/ssh + ./programs/xdg ]; home.packages = with pkgs; [ @@ -28,16 +30,12 @@ wget # Download web stuff feh # Image viewer appimage-run # Lets you run app images - # Development stuff, can be removed + zathura # PDF viewer + ani-cli # Easy anime player + + # Development stuff nodejs # For compiling JS stuff jq # May be critical for scripts? - - # Check if want settings? - zathura # PDF viewer - - # Expand into other areas - sshfs # SSH File system (SSH) - eww-wayland # eww widgets (EWW) ]; # home.file = {}; diff --git a/programs/eww/config/eww.scss b/programs/eww/config/eww.scss new file mode 100644 index 0000000..559b968 --- /dev/null +++ b/programs/eww/config/eww.scss @@ -0,0 +1,8 @@ +box { + background-color: #1E1D2F; + color: #D9E0EE; +} + +progressbar > trough { + min-width: 40px; +} diff --git a/programs/eww/config/eww.yuck b/programs/eww/config/eww.yuck new file mode 100644 index 0000000..e69de29 diff --git a/programs/eww/config/modules/bar.yuck b/programs/eww/config/modules/bar.yuck new file mode 100644 index 0000000..137bb51 --- /dev/null +++ b/programs/eww/config/modules/bar.yuck @@ -0,0 +1,40 @@ +(include "./widgets/components/hyprwindow.yuck") +(include "./widgets/components/hyprworkspaces.yuck") +(include "./widgets/components/internet.yuck") +(include "./widgets/components/japanesedate.yuck") +(include "./widgets/components/japaneseaudio.yuck") + +(defwidget bar [] + (centerbox :orientation "horizontal" + :style "padding: 0px 8px" + (box :halign "start" + :spacing 18 + :space-evenly false + (hyprworkspaces) + (hyprwindow) + ) + "" + (box :halign "end" + :spacing 18 + :space-evenly false + (eventbox :onhover "eww open preview" + :onhoverlost "eww close preview" + barplayer + ) + (internet) + (japaneseaudio) + (japanesedate) + (label :style "color: #FAE3B0" + :text bartime + ) + ) + ) +) + +(defpoll bartime :interval "10s" + "date '+%H:%M'" +) + +(deflisten barplayer :initial "" + "playerctl --follow metadata --format '{{ artist }} - {{ title }}' || true" +) diff --git a/programs/eww/config/modules/components/hyprwindow.yuck b/programs/eww/config/modules/components/hyprwindow.yuck new file mode 100644 index 0000000..2e2d519 --- /dev/null +++ b/programs/eww/config/modules/components/hyprwindow.yuck @@ -0,0 +1,5 @@ +(defwidget hyprwindow [] + (label :text "${hyprwindow_listener}") +) + +(deflisten hyprwindow_listener :initial "" "bash $XDG_CONFIG_HOME/eww/scripts/get-window-title") diff --git a/programs/eww/config/modules/components/hyprworkspaces.yuck b/programs/eww/config/modules/components/hyprworkspaces.yuck new file mode 100644 index 0000000..aa44634 --- /dev/null +++ b/programs/eww/config/modules/components/hyprworkspaces.yuck @@ -0,0 +1,17 @@ +(defwidget hyprworkspaces [] + (eventbox :onscroll "bash ~/.config/eww/scripts/change-active-workspace {} ${current_workspace}" :class "workspaces-widget" + (box :space-evenly false + :spacing 5 + (for workspace in workspaces + (eventbox :onclick "hyprctl dispatch workspace ${workspace.id}" + (box :class "workspace-entry ${workspace.id == current_workspace ? "current" : ""} ${workspace.windows > 0 ? "occupied" : "empty"}" + (label :text "${workspace.id}") + ) + ) + ) + ) + ) + ) + +(deflisten workspaces :initial "[]" "bash $XDG_CONFIG_HOME/eww/scripts/get-workspaces") +(deflisten current_workspace :initial "1" "bash $XDG_CONFIG_HOME/eww/scripts/get-active-workspace") diff --git a/programs/eww/config/modules/components/index.html b/programs/eww/config/modules/components/index.html new file mode 100644 index 0000000..f47c072 --- /dev/null +++ b/programs/eww/config/modules/components/index.html @@ -0,0 +1,18 @@ + + + + +Directory listing for /eww/widgets/components/ + + +

Directory listing for /eww/widgets/components/

+
+ +
+ + diff --git a/programs/eww/config/modules/components/internet.yuck b/programs/eww/config/modules/components/internet.yuck new file mode 100644 index 0000000..64aec24 --- /dev/null +++ b/programs/eww/config/modules/components/internet.yuck @@ -0,0 +1,8 @@ +(defwidget internet [] + (box :spacing 0 :space-evenly false :style "color: #f5c2e7" + network + ) +) + +(defpoll network :interval "30s" + "iwgetid -r") diff --git a/programs/eww/config/modules/components/japaneseaudio.yuck b/programs/eww/config/modules/components/japaneseaudio.yuck new file mode 100644 index 0000000..74bbc98 --- /dev/null +++ b/programs/eww/config/modules/components/japaneseaudio.yuck @@ -0,0 +1,11 @@ +(defwidget japaneseaudio [] + (eventbox :onscroll "bash -c 'if [ '{}' = 'up' ]; then pamixer -i 5; else pamixer -d 5; fi'" + (box :spacing 0 :space-evenly false :style "color: #96CDFB" + volume + "音" + ) + ) +) + +(defpoll volume :interval "1s" + "pamixer --get-volume") diff --git a/programs/eww/config/modules/components/japanesebattery.yuck b/programs/eww/config/modules/components/japanesebattery.yuck new file mode 100644 index 0000000..40d45cf --- /dev/null +++ b/programs/eww/config/modules/components/japanesebattery.yuck @@ -0,0 +1,9 @@ +(defwidget japanesebattery [] + (box :spacing 0 :space-evenly false :style "color: #FAB387" + power + "電" + ) +) + +(defpoll power :interval "1m" + "cat /sys/class/power_supply/BAT1/capacity") diff --git a/programs/eww/config/modules/components/japanesedate.yuck b/programs/eww/config/modules/components/japanesedate.yuck new file mode 100644 index 0000000..fe43c00 --- /dev/null +++ b/programs/eww/config/modules/components/japanesedate.yuck @@ -0,0 +1,9 @@ +(defwidget japanesedate [] + (label :style "color: #DDB6F2" + :text japanesedate_time + ) +) + +(defpoll japanesedate_time :interval "100s" + "bash $XDG_CONFIG_HOME/eww/scripts/japanesedate" +) diff --git a/programs/eww/config/modules/index.html b/programs/eww/config/modules/index.html new file mode 100644 index 0000000..dd51262 --- /dev/null +++ b/programs/eww/config/modules/index.html @@ -0,0 +1,16 @@ + + + + +Directory listing for /eww/widgets/ + + +

Directory listing for /eww/widgets/

+
+ +
+ + diff --git a/programs/eww/config/modules/powerbar.yuck b/programs/eww/config/modules/powerbar.yuck new file mode 100644 index 0000000..ac1ac1f --- /dev/null +++ b/programs/eww/config/modules/powerbar.yuck @@ -0,0 +1,15 @@ +(defwidget powerbar [] + (box + :orientation "vertical" + :spacing 8 + :space-evenly false + :style "color: #FAB387" + (progress + :orientation "v" + :value {100 - power}) + "電" + ) +) + +(defpoll power :interval "1m" + "cat /sys/class/power_supply/BAT1/capacity") diff --git a/programs/eww/config/scripts/change-active-workspace b/programs/eww/config/scripts/change-active-workspace new file mode 100644 index 0000000..ffaf9fc --- /dev/null +++ b/programs/eww/config/scripts/change-active-workspace @@ -0,0 +1,21 @@ +#!/bin/sh +function clamp { + min=$1 + max=$2 + val=$3 + python -c "print(max($min, min($val, $max)))" +} + +direction=$1 +current=$2 +if test "$direction" = "down" +then + target=$(clamp 1 10 $(($current+1))) + echo "jumping to $target" + hyprctl dispatch workspace $target +elif test "$direction" = "up" +then + target=$(clamp 1 10 $(($current-1))) + echo "jumping to $target" + hyprctl dispatch workspace $target +fi diff --git a/programs/eww/config/scripts/get-active-workspace b/programs/eww/config/scripts/get-active-workspace new file mode 100644 index 0000000..b97efdf --- /dev/null +++ b/programs/eww/config/scripts/get-active-workspace @@ -0,0 +1,3 @@ +#!/bin/sh +hyprctl monitors -j | jq --raw-output .[0].activeWorkspace.id +socat -u UNIX-CONNECT:/tmp/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock - | stdbuf -o0 grep '^workspace>>' | stdbuf -o0 awk -F '>>|,' '{print $2}' diff --git a/programs/eww/config/scripts/get-window-title b/programs/eww/config/scripts/get-window-title new file mode 100644 index 0000000..c1be34a --- /dev/null +++ b/programs/eww/config/scripts/get-window-title @@ -0,0 +1,3 @@ +#!/bin/sh +hyprctl activewindow -j | jq --raw-output .title +socat -u UNIX-CONNECT:/tmp/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock - | stdbuf -o0 grep '^activewindow>>' | stdbuf -o0 awk -F '>>|,' '{print $3}' diff --git a/programs/eww/config/scripts/get-workspaces b/programs/eww/config/scripts/get-workspaces new file mode 100644 index 0000000..68d7108 --- /dev/null +++ b/programs/eww/config/scripts/get-workspaces @@ -0,0 +1,11 @@ +#!/bin/sh + +spaces (){ + WORKSPACE_WINDOWS=$(hyprctl workspaces -j | jq 'map({key: .id | tostring, value: .windows}) | from_entries') + seq 1 10 | jq --argjson windows "${WORKSPACE_WINDOWS}" --slurp -Mc 'map(tostring) | map({id: ., windows: ($windows[.]//0)})' +} + +spaces +socat -u UNIX-CONNECT:/tmp/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock - | while read -r line; do + spaces +done diff --git a/programs/eww/config/scripts/index.html b/programs/eww/config/scripts/index.html new file mode 100644 index 0000000..590c85c --- /dev/null +++ b/programs/eww/config/scripts/index.html @@ -0,0 +1,20 @@ + + + + +Directory listing for /eww/scripts/ + + +

Directory listing for /eww/scripts/

+
+ +
+ + diff --git a/programs/eww/config/scripts/japanesedate b/programs/eww/config/scripts/japanesedate new file mode 100644 index 0000000..7360f73 --- /dev/null +++ b/programs/eww/config/scripts/japanesedate @@ -0,0 +1,31 @@ +#!/bin/sh + +readarray -t dateparts <<<"$(date "+%0m月%0d日%n%u")" + +echo -n "${dateparts[0]}[" + +case ${dateparts[1]} in + 1) + echo -n "月" + ;; + 2) + echo -n "火" + ;; + 3) + echo -n "水" + ;; + 4) + echo -n "木" + ;; + 5) + echo -n "金" + ;; + 6) + echo -n "土" + ;; + 7) + echo -n "日" + ;; +esac + +echo "]" diff --git a/programs/eww/config/scripts/medpreview b/programs/eww/config/scripts/medpreview new file mode 100644 index 0000000..3b35839 --- /dev/null +++ b/programs/eww/config/scripts/medpreview @@ -0,0 +1,3 @@ +#!/bin/sh + +playerctl --follow metadata mpris:artUrl | stdbuf -o0 cut -c 8- diff --git a/programs/eww/config/variables.yuck b/programs/eww/config/variables.yuck new file mode 100644 index 0000000..e69de29 diff --git a/programs/eww/config/windows.yuck b/programs/eww/config/windows.yuck new file mode 100644 index 0000000..29fb7c9 --- /dev/null +++ b/programs/eww/config/windows.yuck @@ -0,0 +1,32 @@ +(include "./widgets/bar.yuck") +(include "./widgets/powerbar.yuck") + +(defwindow bar0 + :monitor 0 + :geometry (geometry :width "100%" + :height "29px" + :anchor "top center") + :stacking "fg" + :exclusive true + (bar) +) + +(defwindow preview + :monitor 0 + :geometry (geometry :x "100px" + :y "5px" + :anchor "top right") + (image :path mediapreview) +) + +(defwindow powerbar0 + :monitor 0 + :geometry (geometry :x "100px" + :y "5px" + :anchor "top right") + (powerbar) +) + +(deflisten mediapreview :initial "hello?" + "bash $XDG_CONFIG_HOME/eww/scripts/medpreview" +) diff --git a/programs/eww/default.nix b/programs/eww/default.nix new file mode 100644 index 0000000..135aed8 --- /dev/null +++ b/programs/eww/default.nix @@ -0,0 +1,7 @@ +{ config, pkgs, ... }: + +{ + programs.eww.enable = true; + programs.eww.package = pkgs.eww-wayland; + programs.eww.configDir = ./config; +} diff --git a/programs/ssh/default.nix b/programs/ssh/default.nix new file mode 100644 index 0000000..4e0f26f --- /dev/null +++ b/programs/ssh/default.nix @@ -0,0 +1,8 @@ +{ config, pkgs, ... }: + +{ + programs.ssh.enable = true; + home.packages = with pkgs; [ + sshfs # SSH File system + ]; +} From d7f9f10d30ff2d5a010b2615aa698f427992d63b Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 20 Nov 2023 10:28:36 -0800 Subject: [PATCH 026/412] Add eww and SSH --- home.nix | 30 +++++++------- programs/eww/config/eww.scss | 8 ++++ programs/eww/config/eww.yuck | 0 programs/eww/config/modules/bar.yuck | 40 +++++++++++++++++++ .../config/modules/components/hyprwindow.yuck | 5 +++ .../modules/components/hyprworkspaces.yuck | 17 ++++++++ .../eww/config/modules/components/index.html | 18 +++++++++ .../config/modules/components/internet.yuck | 8 ++++ .../modules/components/japaneseaudio.yuck | 11 +++++ .../modules/components/japanesebattery.yuck | 9 +++++ .../modules/components/japanesedate.yuck | 9 +++++ programs/eww/config/modules/index.html | 16 ++++++++ programs/eww/config/modules/powerbar.yuck | 15 +++++++ .../config/scripts/change-active-workspace | 21 ++++++++++ .../eww/config/scripts/get-active-workspace | 3 ++ programs/eww/config/scripts/get-window-title | 3 ++ programs/eww/config/scripts/get-workspaces | 11 +++++ programs/eww/config/scripts/index.html | 20 ++++++++++ programs/eww/config/scripts/japanesedate | 31 ++++++++++++++ programs/eww/config/scripts/medpreview | 3 ++ programs/eww/config/variables.yuck | 0 programs/eww/config/windows.yuck | 32 +++++++++++++++ programs/eww/default.nix | 7 ++++ programs/ssh/default.nix | 8 ++++ 24 files changed, 309 insertions(+), 16 deletions(-) create mode 100644 programs/eww/config/eww.scss create mode 100644 programs/eww/config/eww.yuck create mode 100644 programs/eww/config/modules/bar.yuck create mode 100644 programs/eww/config/modules/components/hyprwindow.yuck create mode 100644 programs/eww/config/modules/components/hyprworkspaces.yuck create mode 100644 programs/eww/config/modules/components/index.html create mode 100644 programs/eww/config/modules/components/internet.yuck create mode 100644 programs/eww/config/modules/components/japaneseaudio.yuck create mode 100644 programs/eww/config/modules/components/japanesebattery.yuck create mode 100644 programs/eww/config/modules/components/japanesedate.yuck create mode 100644 programs/eww/config/modules/index.html create mode 100644 programs/eww/config/modules/powerbar.yuck create mode 100644 programs/eww/config/scripts/change-active-workspace create mode 100644 programs/eww/config/scripts/get-active-workspace create mode 100644 programs/eww/config/scripts/get-window-title create mode 100644 programs/eww/config/scripts/get-workspaces create mode 100644 programs/eww/config/scripts/index.html create mode 100644 programs/eww/config/scripts/japanesedate create mode 100644 programs/eww/config/scripts/medpreview create mode 100644 programs/eww/config/variables.yuck create mode 100644 programs/eww/config/windows.yuck create mode 100644 programs/eww/default.nix create mode 100644 programs/ssh/default.nix diff --git a/home.nix b/home.nix index 3db3a7a..11310c2 100644 --- a/home.nix +++ b/home.nix @@ -6,17 +6,19 @@ home.homeDirectory = "/home/pan"; imports = [ - ./programs/xdg - ./programs/hypr - ./programs/dunst - ./programs/git ./programs/alacritty - ./programs/pywal + ./programs/dunst + ./programs/eww ./programs/fish - ./programs/nnn - ./programs/rofi - ./programs/nvim + ./programs/git + ./programs/hypr ./programs/mpv + ./programs/nnn + ./programs/nvim + ./programs/pywal + ./programs/rofi + ./programs/ssh + ./programs/xdg ]; home.packages = with pkgs; [ @@ -28,16 +30,12 @@ wget # Download web stuff feh # Image viewer appimage-run # Lets you run app images - # Development stuff, can be removed + zathura # PDF viewer + ani-cli # Easy anime player + + # Development stuff nodejs # For compiling JS stuff jq # May be critical for scripts? - - # Check if want settings? - zathura # PDF viewer - - # Expand into other areas - sshfs # SSH File system (SSH) - eww-wayland # eww widgets (EWW) ]; # home.file = {}; diff --git a/programs/eww/config/eww.scss b/programs/eww/config/eww.scss new file mode 100644 index 0000000..559b968 --- /dev/null +++ b/programs/eww/config/eww.scss @@ -0,0 +1,8 @@ +box { + background-color: #1E1D2F; + color: #D9E0EE; +} + +progressbar > trough { + min-width: 40px; +} diff --git a/programs/eww/config/eww.yuck b/programs/eww/config/eww.yuck new file mode 100644 index 0000000..e69de29 diff --git a/programs/eww/config/modules/bar.yuck b/programs/eww/config/modules/bar.yuck new file mode 100644 index 0000000..137bb51 --- /dev/null +++ b/programs/eww/config/modules/bar.yuck @@ -0,0 +1,40 @@ +(include "./widgets/components/hyprwindow.yuck") +(include "./widgets/components/hyprworkspaces.yuck") +(include "./widgets/components/internet.yuck") +(include "./widgets/components/japanesedate.yuck") +(include "./widgets/components/japaneseaudio.yuck") + +(defwidget bar [] + (centerbox :orientation "horizontal" + :style "padding: 0px 8px" + (box :halign "start" + :spacing 18 + :space-evenly false + (hyprworkspaces) + (hyprwindow) + ) + "" + (box :halign "end" + :spacing 18 + :space-evenly false + (eventbox :onhover "eww open preview" + :onhoverlost "eww close preview" + barplayer + ) + (internet) + (japaneseaudio) + (japanesedate) + (label :style "color: #FAE3B0" + :text bartime + ) + ) + ) +) + +(defpoll bartime :interval "10s" + "date '+%H:%M'" +) + +(deflisten barplayer :initial "" + "playerctl --follow metadata --format '{{ artist }} - {{ title }}' || true" +) diff --git a/programs/eww/config/modules/components/hyprwindow.yuck b/programs/eww/config/modules/components/hyprwindow.yuck new file mode 100644 index 0000000..2e2d519 --- /dev/null +++ b/programs/eww/config/modules/components/hyprwindow.yuck @@ -0,0 +1,5 @@ +(defwidget hyprwindow [] + (label :text "${hyprwindow_listener}") +) + +(deflisten hyprwindow_listener :initial "" "bash $XDG_CONFIG_HOME/eww/scripts/get-window-title") diff --git a/programs/eww/config/modules/components/hyprworkspaces.yuck b/programs/eww/config/modules/components/hyprworkspaces.yuck new file mode 100644 index 0000000..aa44634 --- /dev/null +++ b/programs/eww/config/modules/components/hyprworkspaces.yuck @@ -0,0 +1,17 @@ +(defwidget hyprworkspaces [] + (eventbox :onscroll "bash ~/.config/eww/scripts/change-active-workspace {} ${current_workspace}" :class "workspaces-widget" + (box :space-evenly false + :spacing 5 + (for workspace in workspaces + (eventbox :onclick "hyprctl dispatch workspace ${workspace.id}" + (box :class "workspace-entry ${workspace.id == current_workspace ? "current" : ""} ${workspace.windows > 0 ? "occupied" : "empty"}" + (label :text "${workspace.id}") + ) + ) + ) + ) + ) + ) + +(deflisten workspaces :initial "[]" "bash $XDG_CONFIG_HOME/eww/scripts/get-workspaces") +(deflisten current_workspace :initial "1" "bash $XDG_CONFIG_HOME/eww/scripts/get-active-workspace") diff --git a/programs/eww/config/modules/components/index.html b/programs/eww/config/modules/components/index.html new file mode 100644 index 0000000..f47c072 --- /dev/null +++ b/programs/eww/config/modules/components/index.html @@ -0,0 +1,18 @@ + + + + +Directory listing for /eww/widgets/components/ + + +

Directory listing for /eww/widgets/components/

+
+ +
+ + diff --git a/programs/eww/config/modules/components/internet.yuck b/programs/eww/config/modules/components/internet.yuck new file mode 100644 index 0000000..64aec24 --- /dev/null +++ b/programs/eww/config/modules/components/internet.yuck @@ -0,0 +1,8 @@ +(defwidget internet [] + (box :spacing 0 :space-evenly false :style "color: #f5c2e7" + network + ) +) + +(defpoll network :interval "30s" + "iwgetid -r") diff --git a/programs/eww/config/modules/components/japaneseaudio.yuck b/programs/eww/config/modules/components/japaneseaudio.yuck new file mode 100644 index 0000000..74bbc98 --- /dev/null +++ b/programs/eww/config/modules/components/japaneseaudio.yuck @@ -0,0 +1,11 @@ +(defwidget japaneseaudio [] + (eventbox :onscroll "bash -c 'if [ '{}' = 'up' ]; then pamixer -i 5; else pamixer -d 5; fi'" + (box :spacing 0 :space-evenly false :style "color: #96CDFB" + volume + "音" + ) + ) +) + +(defpoll volume :interval "1s" + "pamixer --get-volume") diff --git a/programs/eww/config/modules/components/japanesebattery.yuck b/programs/eww/config/modules/components/japanesebattery.yuck new file mode 100644 index 0000000..40d45cf --- /dev/null +++ b/programs/eww/config/modules/components/japanesebattery.yuck @@ -0,0 +1,9 @@ +(defwidget japanesebattery [] + (box :spacing 0 :space-evenly false :style "color: #FAB387" + power + "電" + ) +) + +(defpoll power :interval "1m" + "cat /sys/class/power_supply/BAT1/capacity") diff --git a/programs/eww/config/modules/components/japanesedate.yuck b/programs/eww/config/modules/components/japanesedate.yuck new file mode 100644 index 0000000..fe43c00 --- /dev/null +++ b/programs/eww/config/modules/components/japanesedate.yuck @@ -0,0 +1,9 @@ +(defwidget japanesedate [] + (label :style "color: #DDB6F2" + :text japanesedate_time + ) +) + +(defpoll japanesedate_time :interval "100s" + "bash $XDG_CONFIG_HOME/eww/scripts/japanesedate" +) diff --git a/programs/eww/config/modules/index.html b/programs/eww/config/modules/index.html new file mode 100644 index 0000000..dd51262 --- /dev/null +++ b/programs/eww/config/modules/index.html @@ -0,0 +1,16 @@ + + + + +Directory listing for /eww/widgets/ + + +

Directory listing for /eww/widgets/

+
+ +
+ + diff --git a/programs/eww/config/modules/powerbar.yuck b/programs/eww/config/modules/powerbar.yuck new file mode 100644 index 0000000..ac1ac1f --- /dev/null +++ b/programs/eww/config/modules/powerbar.yuck @@ -0,0 +1,15 @@ +(defwidget powerbar [] + (box + :orientation "vertical" + :spacing 8 + :space-evenly false + :style "color: #FAB387" + (progress + :orientation "v" + :value {100 - power}) + "電" + ) +) + +(defpoll power :interval "1m" + "cat /sys/class/power_supply/BAT1/capacity") diff --git a/programs/eww/config/scripts/change-active-workspace b/programs/eww/config/scripts/change-active-workspace new file mode 100644 index 0000000..ffaf9fc --- /dev/null +++ b/programs/eww/config/scripts/change-active-workspace @@ -0,0 +1,21 @@ +#!/bin/sh +function clamp { + min=$1 + max=$2 + val=$3 + python -c "print(max($min, min($val, $max)))" +} + +direction=$1 +current=$2 +if test "$direction" = "down" +then + target=$(clamp 1 10 $(($current+1))) + echo "jumping to $target" + hyprctl dispatch workspace $target +elif test "$direction" = "up" +then + target=$(clamp 1 10 $(($current-1))) + echo "jumping to $target" + hyprctl dispatch workspace $target +fi diff --git a/programs/eww/config/scripts/get-active-workspace b/programs/eww/config/scripts/get-active-workspace new file mode 100644 index 0000000..b97efdf --- /dev/null +++ b/programs/eww/config/scripts/get-active-workspace @@ -0,0 +1,3 @@ +#!/bin/sh +hyprctl monitors -j | jq --raw-output .[0].activeWorkspace.id +socat -u UNIX-CONNECT:/tmp/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock - | stdbuf -o0 grep '^workspace>>' | stdbuf -o0 awk -F '>>|,' '{print $2}' diff --git a/programs/eww/config/scripts/get-window-title b/programs/eww/config/scripts/get-window-title new file mode 100644 index 0000000..c1be34a --- /dev/null +++ b/programs/eww/config/scripts/get-window-title @@ -0,0 +1,3 @@ +#!/bin/sh +hyprctl activewindow -j | jq --raw-output .title +socat -u UNIX-CONNECT:/tmp/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock - | stdbuf -o0 grep '^activewindow>>' | stdbuf -o0 awk -F '>>|,' '{print $3}' diff --git a/programs/eww/config/scripts/get-workspaces b/programs/eww/config/scripts/get-workspaces new file mode 100644 index 0000000..68d7108 --- /dev/null +++ b/programs/eww/config/scripts/get-workspaces @@ -0,0 +1,11 @@ +#!/bin/sh + +spaces (){ + WORKSPACE_WINDOWS=$(hyprctl workspaces -j | jq 'map({key: .id | tostring, value: .windows}) | from_entries') + seq 1 10 | jq --argjson windows "${WORKSPACE_WINDOWS}" --slurp -Mc 'map(tostring) | map({id: ., windows: ($windows[.]//0)})' +} + +spaces +socat -u UNIX-CONNECT:/tmp/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock - | while read -r line; do + spaces +done diff --git a/programs/eww/config/scripts/index.html b/programs/eww/config/scripts/index.html new file mode 100644 index 0000000..590c85c --- /dev/null +++ b/programs/eww/config/scripts/index.html @@ -0,0 +1,20 @@ + + + + +Directory listing for /eww/scripts/ + + +

Directory listing for /eww/scripts/

+
+ +
+ + diff --git a/programs/eww/config/scripts/japanesedate b/programs/eww/config/scripts/japanesedate new file mode 100644 index 0000000..7360f73 --- /dev/null +++ b/programs/eww/config/scripts/japanesedate @@ -0,0 +1,31 @@ +#!/bin/sh + +readarray -t dateparts <<<"$(date "+%0m月%0d日%n%u")" + +echo -n "${dateparts[0]}[" + +case ${dateparts[1]} in + 1) + echo -n "月" + ;; + 2) + echo -n "火" + ;; + 3) + echo -n "水" + ;; + 4) + echo -n "木" + ;; + 5) + echo -n "金" + ;; + 6) + echo -n "土" + ;; + 7) + echo -n "日" + ;; +esac + +echo "]" diff --git a/programs/eww/config/scripts/medpreview b/programs/eww/config/scripts/medpreview new file mode 100644 index 0000000..3b35839 --- /dev/null +++ b/programs/eww/config/scripts/medpreview @@ -0,0 +1,3 @@ +#!/bin/sh + +playerctl --follow metadata mpris:artUrl | stdbuf -o0 cut -c 8- diff --git a/programs/eww/config/variables.yuck b/programs/eww/config/variables.yuck new file mode 100644 index 0000000..e69de29 diff --git a/programs/eww/config/windows.yuck b/programs/eww/config/windows.yuck new file mode 100644 index 0000000..29fb7c9 --- /dev/null +++ b/programs/eww/config/windows.yuck @@ -0,0 +1,32 @@ +(include "./widgets/bar.yuck") +(include "./widgets/powerbar.yuck") + +(defwindow bar0 + :monitor 0 + :geometry (geometry :width "100%" + :height "29px" + :anchor "top center") + :stacking "fg" + :exclusive true + (bar) +) + +(defwindow preview + :monitor 0 + :geometry (geometry :x "100px" + :y "5px" + :anchor "top right") + (image :path mediapreview) +) + +(defwindow powerbar0 + :monitor 0 + :geometry (geometry :x "100px" + :y "5px" + :anchor "top right") + (powerbar) +) + +(deflisten mediapreview :initial "hello?" + "bash $XDG_CONFIG_HOME/eww/scripts/medpreview" +) diff --git a/programs/eww/default.nix b/programs/eww/default.nix new file mode 100644 index 0000000..135aed8 --- /dev/null +++ b/programs/eww/default.nix @@ -0,0 +1,7 @@ +{ config, pkgs, ... }: + +{ + programs.eww.enable = true; + programs.eww.package = pkgs.eww-wayland; + programs.eww.configDir = ./config; +} diff --git a/programs/ssh/default.nix b/programs/ssh/default.nix new file mode 100644 index 0000000..4e0f26f --- /dev/null +++ b/programs/ssh/default.nix @@ -0,0 +1,8 @@ +{ config, pkgs, ... }: + +{ + programs.ssh.enable = true; + home.packages = with pkgs; [ + sshfs # SSH File system + ]; +} From 8428e4fe84d6b86905a807de6963074d5d71ceae Mon Sep 17 00:00:00 2001 From: langedev Date: Mon, 4 Dec 2023 17:40:50 -0800 Subject: [PATCH 027/412] fix desktop environment --- configuration.nix | 6 +++--- desktop.nix | 2 +- flake.lock | 26 +++++++++++++------------- flake.nix | 2 +- hardware/desktop.nix | 4 +--- modules/audio/pipewire/default.nix | 1 + modules/graphics/nvidia/default.nix | 20 +++++++++++++++++--- 7 files changed, 37 insertions(+), 24 deletions(-) diff --git a/configuration.nix b/configuration.nix index ff30656..f0f53e2 100644 --- a/configuration.nix +++ b/configuration.nix @@ -5,8 +5,8 @@ { config, pkgs, ... }: let - systemType = "laptop"; - #systemType = "desktop"; + #systemType = "laptop"; + systemType = "desktop"; in { nix.package = pkgs.nixUnstable; imports = @@ -23,7 +23,7 @@ in { ./modules/audio/pipewire - ./modules/shell/fish # This enables fish as the default shell + ./modules/shell/fish ./modules/network/browsers/librewolf ./modules/network/syncthing diff --git a/desktop.nix b/desktop.nix index 18573f3..9a5dc5d 100644 --- a/desktop.nix +++ b/desktop.nix @@ -5,6 +5,6 @@ imports = [ ./hardware/desktop.nix - # ./modules/graphics/nvidia + ./modules/graphics/nvidia ]; } diff --git a/flake.lock b/flake.lock index 79f4514..a51ef7d 100644 --- a/flake.lock +++ b/flake.lock @@ -9,11 +9,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1699808562, - "narHash": "sha256-wTU1ivhWAAGWO6Fzx4RYFruW8HrIh5X7fjy5NJPaqOc=", + "lastModified": 1701737536, + "narHash": "sha256-xSmfHhhCL9mAta5jKfcbJxYjCoD2MdLPBMjBUWvYAJI=", "owner": "hyprwm", "repo": "Hyprland", - "rev": "0ba2e6870478bcf1af1b6508677b46a3484fb21f", + "rev": "3bb9c7c5cf4f2ee30bf821501499f2308d616f94", "type": "github" }, "original": { @@ -49,11 +49,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1698134075, - "narHash": "sha256-foCD+nuKzfh49bIoiCBur4+Fx1nozo+4C/6k8BYk4sg=", + "lastModified": 1700612854, + "narHash": "sha256-yrQ8osMD+vDLGFX7pcwsY/Qr5PUd6OmDMYJZzZi0+zc=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "8efd5d1e283604f75a808a20e6cde0ef313d07d4", + "rev": "19cbff58383a4ae384dea4d1d0c823d72b49d614", "type": "github" }, "original": { @@ -104,18 +104,18 @@ "flake": false, "locked": { "host": "gitlab.freedesktop.org", - "lastModified": 1699292815, - "narHash": "sha256-HXu98PyBMKEWLqiTb8viuLDznud/SdkdJsx5A5CWx7I=", + "lastModified": 1701368958, + "narHash": "sha256-7kvyoA91etzVEl9mkA/EJfB6z/PltxX7Xc4gcr7/xlo=", "owner": "wlroots", "repo": "wlroots", - "rev": "5de9e1a99d6642c2d09d589aa37ff0a8945dcee1", + "rev": "5d639394f3e83b01596dcd166a44a9a1a2583350", "type": "gitlab" }, "original": { "host": "gitlab.freedesktop.org", "owner": "wlroots", "repo": "wlroots", - "rev": "5de9e1a99d6642c2d09d589aa37ff0a8945dcee1", + "rev": "5d639394f3e83b01596dcd166a44a9a1a2583350", "type": "gitlab" } }, @@ -135,11 +135,11 @@ ] }, "locked": { - "lastModified": 1697981233, - "narHash": "sha256-y8q4XUwx+gVK7i2eLjfR32lVo7TYvEslyzrmzYEaPZU=", + "lastModified": 1700508250, + "narHash": "sha256-X4o/mifI7Nhu0UKYlxx53wIC+gYDo3pVM9L2u3PE2bE=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "22e7a65ff9633e1dedfa5317fdffc49f68de2ff2", + "rev": "eb120ff25265ecacd0fc13d7dab12131b60d0f47", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 84f22c0..27ca7cf 100644 --- a/flake.nix +++ b/flake.nix @@ -5,7 +5,7 @@ }; outputs = { nixpkgs, hyprland, ... }: { - nixosConfigurations.jibril = nixpkgs.lib.nixosSystem { + nixosConfigurations.onizuka = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; modules = [ ./configuration.nix diff --git a/hardware/desktop.nix b/hardware/desktop.nix index e48ba96..f6be0dc 100644 --- a/hardware/desktop.nix +++ b/hardware/desktop.nix @@ -8,7 +8,7 @@ [ (modulesPath + "/installer/scan/not-detected.nix") ]; - boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" ]; + boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "ahci" "usbhid" "sd_mod" ]; boot.initrd.kernelModules = [ ]; boot.kernelModules = [ "kvm-amd" ]; boot.extraModulePackages = [ ]; @@ -36,6 +36,4 @@ nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; - # high-resolution display - hardware.video.hidpi.enable = lib.mkDefault true; } diff --git a/modules/audio/pipewire/default.nix b/modules/audio/pipewire/default.nix index c3ebfe8..3e55b02 100644 --- a/modules/audio/pipewire/default.nix +++ b/modules/audio/pipewire/default.nix @@ -5,6 +5,7 @@ services.pipewire = { enable = true; + wireplumber.enable = true; alsa.enable = false; alsa.support32Bit = false; pulse.enable = true; diff --git a/modules/graphics/nvidia/default.nix b/modules/graphics/nvidia/default.nix index 6d39712..7e0e568 100644 --- a/modules/graphics/nvidia/default.nix +++ b/modules/graphics/nvidia/default.nix @@ -1,7 +1,21 @@ { config, pkgs, lib, ... }: { - services.xserver.videoDrivers = [ "nvidia" ]; - hardware.opengl.enable = true; - hardware.nvidia.package = config.boot.kernelPackages.nvidiaPackages.stable; + # Enable OpenGL + hardware.opengl = { + enable = true; + driSupport = true; + driSupport32Bit = true; + }; + + services.xserver.videoDrivers = ["nvidia"]; + + hardware.nvidia = { + modesetting.enable = true; + package = config.boot.kernelPackages.nvidiaPackages.stable; + }; + + environment.systemPackages = with pkgs; [ + nvidia-vaapi-driver + ]; } From d1eb51d3e98ed33c2ae227d3c27d7dfe4bfe8794 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 4 Dec 2023 17:40:50 -0800 Subject: [PATCH 028/412] fix desktop environment --- configuration.nix | 6 +++--- desktop.nix | 2 +- flake.lock | 26 +++++++++++++------------- flake.nix | 2 +- hardware/desktop.nix | 4 +--- modules/audio/pipewire/default.nix | 1 + modules/graphics/nvidia/default.nix | 20 +++++++++++++++++--- 7 files changed, 37 insertions(+), 24 deletions(-) diff --git a/configuration.nix b/configuration.nix index ff30656..f0f53e2 100644 --- a/configuration.nix +++ b/configuration.nix @@ -5,8 +5,8 @@ { config, pkgs, ... }: let - systemType = "laptop"; - #systemType = "desktop"; + #systemType = "laptop"; + systemType = "desktop"; in { nix.package = pkgs.nixUnstable; imports = @@ -23,7 +23,7 @@ in { ./modules/audio/pipewire - ./modules/shell/fish # This enables fish as the default shell + ./modules/shell/fish ./modules/network/browsers/librewolf ./modules/network/syncthing diff --git a/desktop.nix b/desktop.nix index 18573f3..9a5dc5d 100644 --- a/desktop.nix +++ b/desktop.nix @@ -5,6 +5,6 @@ imports = [ ./hardware/desktop.nix - # ./modules/graphics/nvidia + ./modules/graphics/nvidia ]; } diff --git a/flake.lock b/flake.lock index 79f4514..a51ef7d 100644 --- a/flake.lock +++ b/flake.lock @@ -9,11 +9,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1699808562, - "narHash": "sha256-wTU1ivhWAAGWO6Fzx4RYFruW8HrIh5X7fjy5NJPaqOc=", + "lastModified": 1701737536, + "narHash": "sha256-xSmfHhhCL9mAta5jKfcbJxYjCoD2MdLPBMjBUWvYAJI=", "owner": "hyprwm", "repo": "Hyprland", - "rev": "0ba2e6870478bcf1af1b6508677b46a3484fb21f", + "rev": "3bb9c7c5cf4f2ee30bf821501499f2308d616f94", "type": "github" }, "original": { @@ -49,11 +49,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1698134075, - "narHash": "sha256-foCD+nuKzfh49bIoiCBur4+Fx1nozo+4C/6k8BYk4sg=", + "lastModified": 1700612854, + "narHash": "sha256-yrQ8osMD+vDLGFX7pcwsY/Qr5PUd6OmDMYJZzZi0+zc=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "8efd5d1e283604f75a808a20e6cde0ef313d07d4", + "rev": "19cbff58383a4ae384dea4d1d0c823d72b49d614", "type": "github" }, "original": { @@ -104,18 +104,18 @@ "flake": false, "locked": { "host": "gitlab.freedesktop.org", - "lastModified": 1699292815, - "narHash": "sha256-HXu98PyBMKEWLqiTb8viuLDznud/SdkdJsx5A5CWx7I=", + "lastModified": 1701368958, + "narHash": "sha256-7kvyoA91etzVEl9mkA/EJfB6z/PltxX7Xc4gcr7/xlo=", "owner": "wlroots", "repo": "wlroots", - "rev": "5de9e1a99d6642c2d09d589aa37ff0a8945dcee1", + "rev": "5d639394f3e83b01596dcd166a44a9a1a2583350", "type": "gitlab" }, "original": { "host": "gitlab.freedesktop.org", "owner": "wlroots", "repo": "wlroots", - "rev": "5de9e1a99d6642c2d09d589aa37ff0a8945dcee1", + "rev": "5d639394f3e83b01596dcd166a44a9a1a2583350", "type": "gitlab" } }, @@ -135,11 +135,11 @@ ] }, "locked": { - "lastModified": 1697981233, - "narHash": "sha256-y8q4XUwx+gVK7i2eLjfR32lVo7TYvEslyzrmzYEaPZU=", + "lastModified": 1700508250, + "narHash": "sha256-X4o/mifI7Nhu0UKYlxx53wIC+gYDo3pVM9L2u3PE2bE=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "22e7a65ff9633e1dedfa5317fdffc49f68de2ff2", + "rev": "eb120ff25265ecacd0fc13d7dab12131b60d0f47", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 84f22c0..27ca7cf 100644 --- a/flake.nix +++ b/flake.nix @@ -5,7 +5,7 @@ }; outputs = { nixpkgs, hyprland, ... }: { - nixosConfigurations.jibril = nixpkgs.lib.nixosSystem { + nixosConfigurations.onizuka = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; modules = [ ./configuration.nix diff --git a/hardware/desktop.nix b/hardware/desktop.nix index e48ba96..f6be0dc 100644 --- a/hardware/desktop.nix +++ b/hardware/desktop.nix @@ -8,7 +8,7 @@ [ (modulesPath + "/installer/scan/not-detected.nix") ]; - boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" ]; + boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "ahci" "usbhid" "sd_mod" ]; boot.initrd.kernelModules = [ ]; boot.kernelModules = [ "kvm-amd" ]; boot.extraModulePackages = [ ]; @@ -36,6 +36,4 @@ nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; - # high-resolution display - hardware.video.hidpi.enable = lib.mkDefault true; } diff --git a/modules/audio/pipewire/default.nix b/modules/audio/pipewire/default.nix index c3ebfe8..3e55b02 100644 --- a/modules/audio/pipewire/default.nix +++ b/modules/audio/pipewire/default.nix @@ -5,6 +5,7 @@ services.pipewire = { enable = true; + wireplumber.enable = true; alsa.enable = false; alsa.support32Bit = false; pulse.enable = true; diff --git a/modules/graphics/nvidia/default.nix b/modules/graphics/nvidia/default.nix index 6d39712..7e0e568 100644 --- a/modules/graphics/nvidia/default.nix +++ b/modules/graphics/nvidia/default.nix @@ -1,7 +1,21 @@ { config, pkgs, lib, ... }: { - services.xserver.videoDrivers = [ "nvidia" ]; - hardware.opengl.enable = true; - hardware.nvidia.package = config.boot.kernelPackages.nvidiaPackages.stable; + # Enable OpenGL + hardware.opengl = { + enable = true; + driSupport = true; + driSupport32Bit = true; + }; + + services.xserver.videoDrivers = ["nvidia"]; + + hardware.nvidia = { + modesetting.enable = true; + package = config.boot.kernelPackages.nvidiaPackages.stable; + }; + + environment.systemPackages = with pkgs; [ + nvidia-vaapi-driver + ]; } From 0e90d6522cd19d69d350beb997f7fab409187a81 Mon Sep 17 00:00:00 2001 From: langedev Date: Mon, 4 Dec 2023 17:43:21 -0800 Subject: [PATCH 029/412] trying xonsh --- configuration.nix | 7 ++++--- modules/shell/xonsh/default.nix | 9 +++++++++ 2 files changed, 13 insertions(+), 3 deletions(-) create mode 100644 modules/shell/xonsh/default.nix diff --git a/configuration.nix b/configuration.nix index f0f53e2..25b762f 100644 --- a/configuration.nix +++ b/configuration.nix @@ -10,7 +10,7 @@ let in { nix.package = pkgs.nixUnstable; imports = - [ + [ # Hardware Specific Configuration ./${systemType}.nix @@ -23,10 +23,11 @@ in { ./modules/audio/pipewire - ./modules/shell/fish + #./modules/shell/fish + ./modules/shell/xonsh ./modules/network/browsers/librewolf ./modules/network/syncthing - + ./modules/login/greetd ]; diff --git a/modules/shell/xonsh/default.nix b/modules/shell/xonsh/default.nix new file mode 100644 index 0000000..2c5904d --- /dev/null +++ b/modules/shell/xonsh/default.nix @@ -0,0 +1,9 @@ +{ config, pkgs, lib, ... }: + +{ + programs.xonsh.enable = true; + + users.defaultUserShell = pkgs.xonsh; + + environment.shells = with pkgs; [ xonsh ]; +} From 767f7fbb6284ade0f4ebf4e37b3dfdbb3d786120 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 4 Dec 2023 17:43:21 -0800 Subject: [PATCH 030/412] trying xonsh --- configuration.nix | 7 ++++--- modules/shell/xonsh/default.nix | 9 +++++++++ 2 files changed, 13 insertions(+), 3 deletions(-) create mode 100644 modules/shell/xonsh/default.nix diff --git a/configuration.nix b/configuration.nix index f0f53e2..25b762f 100644 --- a/configuration.nix +++ b/configuration.nix @@ -10,7 +10,7 @@ let in { nix.package = pkgs.nixUnstable; imports = - [ + [ # Hardware Specific Configuration ./${systemType}.nix @@ -23,10 +23,11 @@ in { ./modules/audio/pipewire - ./modules/shell/fish + #./modules/shell/fish + ./modules/shell/xonsh ./modules/network/browsers/librewolf ./modules/network/syncthing - + ./modules/login/greetd ]; diff --git a/modules/shell/xonsh/default.nix b/modules/shell/xonsh/default.nix new file mode 100644 index 0000000..2c5904d --- /dev/null +++ b/modules/shell/xonsh/default.nix @@ -0,0 +1,9 @@ +{ config, pkgs, lib, ... }: + +{ + programs.xonsh.enable = true; + + users.defaultUserShell = pkgs.xonsh; + + environment.shells = with pkgs; [ xonsh ]; +} From ce9124c7edca2f52c128cc27ff7ef619fe03cb1a Mon Sep 17 00:00:00 2001 From: JuliaLange Date: Sat, 20 Jan 2024 14:03:54 -0800 Subject: [PATCH 031/412] Move to Xonsh, add hypr scripts --- flake.lock | 61 ++++++++++++++++------- home.nix | 9 ++++ programs/git/default.nix | 4 +- programs/hypr/default.conf | 32 +++++++++++- programs/hypr/default.nix | 9 +++- programs/hypr/keybinds.conf | 39 ++++++--------- programs/hypr/scripts/changeprimary.xsh | 27 ++++++++++ programs/hypr/scripts/changesecondary.xsh | 27 ++++++++++ programs/hypr/scripts/initdb.xsh | 13 +++++ programs/lutris/default.nix | 16 ++++++ programs/spotify/default.nix | 18 +++++++ programs/xdg/default.nix | 2 + programs/xonsh/default.nix | 15 ++++++ 13 files changed, 224 insertions(+), 48 deletions(-) create mode 100755 programs/hypr/scripts/changeprimary.xsh create mode 100755 programs/hypr/scripts/changesecondary.xsh create mode 100755 programs/hypr/scripts/initdb.xsh create mode 100644 programs/lutris/default.nix create mode 100644 programs/spotify/default.nix create mode 100644 programs/xonsh/default.nix diff --git a/flake.lock b/flake.lock index 4336bb3..d1e7624 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1700013383, - "narHash": "sha256-ZBhrew3BrUEv48i+3Mp2pDjLU6dcue8BKMz6tCDSyfc=", + "lastModified": 1701728041, + "narHash": "sha256-x0pyrI1vC8evVDxCxyO6olOyr4wlFg9+VS3C3p4xFYQ=", "owner": "langedev", "repo": "home-manager", - "rev": "6498661f3856a685c4fa7a19d0f8cbe17c08d8bd", + "rev": "ac7216918cd65f3824ba7817dea8f22e61221eaf", "type": "github" }, "original": { @@ -29,11 +29,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1700397206, - "narHash": "sha256-ityVJcy3I/E8soXctwWveg58+cXOSQXhDIcU6YR2gjI=", + "lastModified": 1705782792, + "narHash": "sha256-AnNvfQK3BQtri7JUmTsaAWAOBzCxEf5t3VaGm0Kezjk=", "owner": "hyprwm", "repo": "Hyprland", - "rev": "646f4bc63861e03b01fed3833bb65d1d014e1bf3", + "rev": "4d403dac3244aab217fb9bf17a68e9a009fcadd8", "type": "github" }, "original": { @@ -67,13 +67,35 @@ "type": "github" } }, + "hyprlang": { + "inputs": { + "nixpkgs": [ + "hyprland", + "xdph", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1704287638, + "narHash": "sha256-TuRXJGwtK440AXQNl5eiqmQqY4LZ/9+z/R7xC0ie3iA=", + "owner": "hyprwm", + "repo": "hyprlang", + "rev": "6624f2bb66d4d27975766e81f77174adbe58ec97", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprlang", + "type": "github" + } + }, "nixpkgs": { "locked": { - "lastModified": 1698134075, - "narHash": "sha256-foCD+nuKzfh49bIoiCBur4+Fx1nozo+4C/6k8BYk4sg=", + "lastModified": 1705133751, + "narHash": "sha256-rCIsyE80jgiOU78gCWN3A0wE0tR2GI5nH6MlS+HaaSQ=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "8efd5d1e283604f75a808a20e6cde0ef313d07d4", + "rev": "9b19f5e77dd906cb52dade0b7bd280339d2a1f3d", "type": "github" }, "original": { @@ -85,11 +107,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1699825797, - "narHash": "sha256-W2m42mVt4/O6CJFbECPfLApmi8bO+qscbmSeEKrSHEg=", + "lastModified": 1701902328, + "narHash": "sha256-3tiiSEgQRPps0aV40belvLk1k4Max7oRh/+hZGLtfGc=", "owner": "langedev", "repo": "nixpkgs", - "rev": "a69768a1c385042d46ff57396c49d26df5ac035c", + "rev": "162f092c27afe0949253753f088c2babfba5b902", "type": "github" }, "original": { @@ -125,18 +147,18 @@ "flake": false, "locked": { "host": "gitlab.freedesktop.org", - "lastModified": 1699292815, - "narHash": "sha256-HXu98PyBMKEWLqiTb8viuLDznud/SdkdJsx5A5CWx7I=", + "lastModified": 1703963193, + "narHash": "sha256-ke8drv6PTrdQDruWbajrRJffP9A9PU6FRyjJGNZRTs4=", "owner": "wlroots", "repo": "wlroots", - "rev": "5de9e1a99d6642c2d09d589aa37ff0a8945dcee1", + "rev": "f81c3d93cd6f61b20ae784297679283438def8df", "type": "gitlab" }, "original": { "host": "gitlab.freedesktop.org", "owner": "wlroots", "repo": "wlroots", - "rev": "5de9e1a99d6642c2d09d589aa37ff0a8945dcee1", + "rev": "f81c3d93cd6f61b20ae784297679283438def8df", "type": "gitlab" } }, @@ -146,6 +168,7 @@ "hyprland", "hyprland-protocols" ], + "hyprlang": "hyprlang", "nixpkgs": [ "hyprland", "nixpkgs" @@ -156,11 +179,11 @@ ] }, "locked": { - "lastModified": 1697981233, - "narHash": "sha256-y8q4XUwx+gVK7i2eLjfR32lVo7TYvEslyzrmzYEaPZU=", + "lastModified": 1704659450, + "narHash": "sha256-3lyoUVtUWz1LuxbltAtkJSK2IlVXmKhxCRU2/0PYCms=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "22e7a65ff9633e1dedfa5317fdffc49f68de2ff2", + "rev": "6a5de92769d5b7038134044053f90e7458f6a197", "type": "github" }, "original": { diff --git a/home.nix b/home.nix index 11310c2..254d4fb 100644 --- a/home.nix +++ b/home.nix @@ -12,11 +12,13 @@ ./programs/fish ./programs/git ./programs/hypr + ./programs/lutris ./programs/mpv ./programs/nnn ./programs/nvim ./programs/pywal ./programs/rofi + ./programs/spotify ./programs/ssh ./programs/xdg ]; @@ -32,6 +34,9 @@ appimage-run # Lets you run app images zathura # PDF viewer ani-cli # Easy anime player + lutgen # LUT generator + + texlive.combined.scheme-full # Latex # Development stuff nodejs # For compiling JS stuff @@ -45,6 +50,10 @@ BROWSER = "librewolf"; }; + home.sessionPath = [ + "$HOME/prog/scripts" + ]; + # Enable man pages, but ensure ~/.manpage isn't created programs.man.enable = true; programs.man.generateCaches = false; diff --git a/programs/git/default.nix b/programs/git/default.nix index 107376d..9f134ee 100644 --- a/programs/git/default.nix +++ b/programs/git/default.nix @@ -2,8 +2,8 @@ { programs.git.enable = true; - programs.git.userName = "langedev"; - programs.git.userEmail = "public@daltonlange.com"; + programs.git.userName = "JuliaLange"; + programs.git.userEmail = "git@julialange.com"; programs.git.extraConfig = { safe = { directory = "/etc/nixos"; diff --git a/programs/hypr/default.conf b/programs/hypr/default.conf index 4b1dc22..d92465d 100644 --- a/programs/hypr/default.conf +++ b/programs/hypr/default.conf @@ -1,5 +1,32 @@ -monitor=,preferred,auto,1 +monitor=DP-2,2560x1440@144,0x0,1 +monitor=DP-1,2560x1440@144,-2560x0,1 monitor=HDMI-A-1,disable +env = HYPR_MON_PRIMARY, DP-2 +env = HYPR_MON_SECONDARY, DP-1 + +# Primaries +workspace=name:home, monitor:DP-2, persistent:true, default:true +workspace=name:game, monitor:DP-2, persistent:true +workspace=name:etc0, monitor:DP-2, persistent:true +# Secondaries +workspace=name:chat, monitor:DP-1, persistent:true, default:true +workspace=name:misc0, monitor:DP-1, persistent:true +# Switches +workspace=name:web , monitor:DP-1, persistent:true +workspace=name:med , monitor:DP-1, persistent:true + +windowrule = workspace name:web, librewolf +windowrulev2 = workspace name:med, librewolf,title:Picture-in-Picture +windowrule = workspace name:chat, discord + +env = LIBVA_DRIVER_NAME,nvidia +env = XDG_SESSION_TYPE,wayland +env = GBM_BACKEND,nvidia-drm +env = __GLX_VENDOR_LIBRARY_NAME,nvidia +env = WLR_NO_HARDWARE_CURSORS,1 + +env = HYPR_WORK_DB,$XDG_CACHE_HOME/hypr/workspace.db +exec-once = $XDG_CONFIG_HOME/hypr/scripts/changesecondary.xsh exec-once = swww init exec-once = swww img $HOME/med/pix/bg.png @@ -8,7 +35,8 @@ input { kb_layout = us follow_mouse = 1 accel_profile = flat - sensitivity = 0.2 # -1.0 - 1.0, 0 means no modification. + sensitivity = -0.52 + #sensitivity = 0.2 # -1.0 - 1.0, 0 means no modification. } general { diff --git a/programs/hypr/default.nix b/programs/hypr/default.nix index 8fc5589..e1234a3 100644 --- a/programs/hypr/default.nix +++ b/programs/hypr/default.nix @@ -1,14 +1,21 @@ { config, pkgs, ... }: - +let rootPath = ./.; in { wayland.windowManager.hyprland.enable = true; wayland.windowManager.hyprland.extraConfig = '' ${builtins.readFile ./default.conf} ${builtins.readFile ./keybinds.conf} ''; + # wayland.windowManager.hyprland.enableNvidiaPatches = true; home.packages = with pkgs; [ socat # For hyprland scripts swww # Wallpaper engine wlr-randr # Xrandr for wayland + xdg-desktop-portal-hyprland # XDP for hyprland ]; + xdg.configFile."hypr-scripts" = { + source = rootPath + "/scripts"; + target = "hypr/scripts"; + executable = true; + }; } diff --git a/programs/hypr/keybinds.conf b/programs/hypr/keybinds.conf index 4ed1c58..ab4d5a0 100644 --- a/programs/hypr/keybinds.conf +++ b/programs/hypr/keybinds.conf @@ -3,30 +3,26 @@ $mainMod = SUPER # Exec programs bind = $mainMod, return, exec, alacritty bind = $mainMod SHIFT, return, exec, rofi -show run -# bind = $mainMod SHIFT, P, exec, screenshot # Hyprland Management bind = $mainMod SHIFT, Q, exit, -# Bars stuff -bind = $mainMod, TAB, exec, eww open --toggle - # Workspace / Monitor Management bind = $mainMod, h, focusmonitor, l bind = $mainMod, l, focusmonitor, r bind = $mainMod, j, cyclenext, bind = $mainMod, k, cyclenext, prev +bind = $mainMod SHIFT, j, swapnext, +bind = $mainMod SHIFT, k, swapnext, prev +bind = $mainMod SHIFT, h, movecurrentworkspacetomonitor, -1 +bind = $mainMod SHIFT, l, movecurrentworkspacetomonitor, +1 -bind = $mainMod, 1, workspace, 1 -bind = $mainMod, 2, workspace, 2 -bind = $mainMod, 3, workspace, 3 -bind = $mainMod, 4, workspace, 4 -bind = $mainMod, 5, workspace, 5 -bind = $mainMod, 6, workspace, 6 -bind = $mainMod, 7, workspace, 7 -bind = $mainMod, 8, workspace, 8 -bind = $mainMod, 9, workspace, 9 -bind = $mainMod, 0, workspace, 10 +bind = $mainMod, 1, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh home +bind = $mainMod, 2, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh web +bind = $mainMod, 3, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh med +bind = $mainMod, 4, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh game +binde = $mainMod, 5, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh etc +binde = $mainMod, TAB, exec, $XDG_CONFIG_HOME/hypr/scripts/changesecondary.xsh # Window Management bind = $mainMod, C, killactive, @@ -34,16 +30,11 @@ bind = $mainMod, C, killactive, bind = $mainMod, F, togglefloating, bind = $mainMod SHIFT, F, fullscreen, -bind = $mainMod SHIFT, 1, movetoworkspacesilent, 1 -bind = $mainMod SHIFT, 2, movetoworkspacesilent, 2 -bind = $mainMod SHIFT, 3, movetoworkspacesilent, 3 -bind = $mainMod SHIFT, 4, movetoworkspacesilent, 4 -bind = $mainMod SHIFT, 5, movetoworkspacesilent, 5 -bind = $mainMod SHIFT, 6, movetoworkspacesilent, 6 -bind = $mainMod SHIFT, 7, movetoworkspacesilent, 7 -bind = $mainMod SHIFT, 8, movetoworkspacesilent, 8 -bind = $mainMod SHIFT, 9, movetoworkspacesilent, 9 -bind = $mainMod SHIFT, 0, movetoworkspacesilent, 10 +bind = $mainMod SHIFT, 1, movetoworkspacesilent, name:home +bind = $mainMod SHIFT, 2, movetoworkspacesilent, name:web +bind = $mainMod SHIFT, 3, movetoworkspacesilent, name:med +bind = $mainMod SHIFT, 4, movetoworkspacesilent, name:misc +bind = $mainMod SHIFT, TAB, movetoworkspacesilent, r-1 # Move/resize windows with mainMod + LMB/RMB and dragging bindm = $mainMod, mouse:272, movewindow diff --git a/programs/hypr/scripts/changeprimary.xsh b/programs/hypr/scripts/changeprimary.xsh new file mode 100755 index 0000000..9b7e0e7 --- /dev/null +++ b/programs/hypr/scripts/changeprimary.xsh @@ -0,0 +1,27 @@ +#!/usr/bin/env xonsh +import shelve + +# Usage: +# ./changeprimary.xsh workspace +# changes to that workspace +# if workspace is "etc" then changes to etcN where N is a number + +workspace=$ARG1 +monitor=$HYPR_MON_PRIMARY + +current_workspace = "home" + +with shelve.open($HYPR_WORK_DB) as db: + current_workspace = db.get("primary") + if workspace == "etc": + if current_workspace.startswith("etc"): + current = current_workspace[3:] % db.get("primary_extras") + current_workspace = "etc" + str(current) + else: + current_workspace = "etc0" + else: + current_workspace = workspace + db["primary"] = current_workspace + +hyprctl dispatch moveworkspacetomonitor name:@(current_workspace) $HYPR_MON_PRIMARY >> /dev/null +hyprctl dispatch workspace name:@(current_workspace) >> /dev/null diff --git a/programs/hypr/scripts/changesecondary.xsh b/programs/hypr/scripts/changesecondary.xsh new file mode 100755 index 0000000..b4cfdf9 --- /dev/null +++ b/programs/hypr/scripts/changesecondary.xsh @@ -0,0 +1,27 @@ +#!/usr/bin/env xonsh +import shelve +import copy + +# Usage: +# ./changesecondary.xsh +# cycles through the secondary workspaces + +current_secondary = "chat" + +with shelve.open($HYPR_WORK_DB) as db: + workspaces = db.get("secondaries").copy() + current_primary = db.get("primary") + current_secondary = db.get("secondary") + #extras = db.get("secondary_extras") + + if current_primary in workspaces: + workspaces.remove(current_primary) + + current_secondary = workspaces[ + (workspaces.index(current_secondary)+1) % len(workspaces) + ] + db["secondary"] = current_secondary + +# Change primary to bind +hyprctl dispatch moveworkspacetomonitor name:@(current_secondary) $HYPR_MON_SECONDARY +hyprctl dispatch workspace name:@(current_secondary) diff --git a/programs/hypr/scripts/initdb.xsh b/programs/hypr/scripts/initdb.xsh new file mode 100755 index 0000000..8e7af93 --- /dev/null +++ b/programs/hypr/scripts/initdb.xsh @@ -0,0 +1,13 @@ +#!/usr/bin/env xonsh +import shelve + +# Usage: +# ./initdb.xsh +# initialize a db for use hypr workspace scripts + +with shelve.open($HYPR_WORK_DB) as db: + db["primary"] = "home" + db["secondary"] = "chat" + db["secondaries"] = ["chat", "web"] + db["secondary_extras"] = 1 + db["primary_extras"] = 1 diff --git a/programs/lutris/default.nix b/programs/lutris/default.nix new file mode 100644 index 0000000..05993cd --- /dev/null +++ b/programs/lutris/default.nix @@ -0,0 +1,16 @@ +{ config, pkgs, ... }: + +{ + home.packages = with pkgs; [ + lutris + wineWowPackages.stable + # (lutris.override { + # extraLibraries = pkgs: [ + # # List library dependencies here + # ]; + # extraPkgs = pkgs: [ + # # List package dependencies here + # ]; + # }) + ]; +} diff --git a/programs/spotify/default.nix b/programs/spotify/default.nix new file mode 100644 index 0000000..7510db3 --- /dev/null +++ b/programs/spotify/default.nix @@ -0,0 +1,18 @@ +{ config, pkgs, ... }: + +{ + services.spotifyd.enable = true; + services.spotifyd.settings = { + global = { + username = "me@daltonlange.com"; + password = "5ThM^G3!FTfH6rH#cJEx"; + backend = "pulseaudio"; + device_name = "onizuka"; + bitrate = 320; + }; + }; + + home.packages = with pkgs; [ + spotify-tui # Spotify TUI player + ]; +} diff --git a/programs/xdg/default.nix b/programs/xdg/default.nix index 835b5fa..81a7a84 100644 --- a/programs/xdg/default.nix +++ b/programs/xdg/default.nix @@ -13,4 +13,6 @@ pictures = "${config.home.homeDirectory}/med/pix"; videos = "${config.home.homeDirectory}/med/vid"; }; + + xdg.mimeApps.enable = true; } diff --git a/programs/xonsh/default.nix b/programs/xonsh/default.nix new file mode 100644 index 0000000..3dd83ce --- /dev/null +++ b/programs/xonsh/default.nix @@ -0,0 +1,15 @@ +{ config, pkgs, ... }: + +{ + programs.xonsh.enable = true; + + programs.xonsh.interactiveShellInit = '' + cat ~/.cache/wal/sequences + ''; + + home.sessionVariables = { + PROMPT = "τ "; + RIGHT_PROMPT = "{YELLOW}{gitstatus: {} }{BLUE}{short_cwd}{DEFAULT}"; + VI_MODE = 1; + }; +} From f78a2ab527254edfab2cfe4dfee81e32e5653643 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sat, 20 Jan 2024 14:03:54 -0800 Subject: [PATCH 032/412] Move to Xonsh, add hypr scripts --- flake.lock | 61 ++++++++++++++++------- home.nix | 9 ++++ programs/git/default.nix | 4 +- programs/hypr/default.conf | 32 +++++++++++- programs/hypr/default.nix | 9 +++- programs/hypr/keybinds.conf | 39 ++++++--------- programs/hypr/scripts/changeprimary.xsh | 27 ++++++++++ programs/hypr/scripts/changesecondary.xsh | 27 ++++++++++ programs/hypr/scripts/initdb.xsh | 13 +++++ programs/lutris/default.nix | 16 ++++++ programs/spotify/default.nix | 18 +++++++ programs/xdg/default.nix | 2 + programs/xonsh/default.nix | 15 ++++++ 13 files changed, 224 insertions(+), 48 deletions(-) create mode 100755 programs/hypr/scripts/changeprimary.xsh create mode 100755 programs/hypr/scripts/changesecondary.xsh create mode 100755 programs/hypr/scripts/initdb.xsh create mode 100644 programs/lutris/default.nix create mode 100644 programs/spotify/default.nix create mode 100644 programs/xonsh/default.nix diff --git a/flake.lock b/flake.lock index 4336bb3..d1e7624 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1700013383, - "narHash": "sha256-ZBhrew3BrUEv48i+3Mp2pDjLU6dcue8BKMz6tCDSyfc=", + "lastModified": 1701728041, + "narHash": "sha256-x0pyrI1vC8evVDxCxyO6olOyr4wlFg9+VS3C3p4xFYQ=", "owner": "langedev", "repo": "home-manager", - "rev": "6498661f3856a685c4fa7a19d0f8cbe17c08d8bd", + "rev": "ac7216918cd65f3824ba7817dea8f22e61221eaf", "type": "github" }, "original": { @@ -29,11 +29,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1700397206, - "narHash": "sha256-ityVJcy3I/E8soXctwWveg58+cXOSQXhDIcU6YR2gjI=", + "lastModified": 1705782792, + "narHash": "sha256-AnNvfQK3BQtri7JUmTsaAWAOBzCxEf5t3VaGm0Kezjk=", "owner": "hyprwm", "repo": "Hyprland", - "rev": "646f4bc63861e03b01fed3833bb65d1d014e1bf3", + "rev": "4d403dac3244aab217fb9bf17a68e9a009fcadd8", "type": "github" }, "original": { @@ -67,13 +67,35 @@ "type": "github" } }, + "hyprlang": { + "inputs": { + "nixpkgs": [ + "hyprland", + "xdph", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1704287638, + "narHash": "sha256-TuRXJGwtK440AXQNl5eiqmQqY4LZ/9+z/R7xC0ie3iA=", + "owner": "hyprwm", + "repo": "hyprlang", + "rev": "6624f2bb66d4d27975766e81f77174adbe58ec97", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprlang", + "type": "github" + } + }, "nixpkgs": { "locked": { - "lastModified": 1698134075, - "narHash": "sha256-foCD+nuKzfh49bIoiCBur4+Fx1nozo+4C/6k8BYk4sg=", + "lastModified": 1705133751, + "narHash": "sha256-rCIsyE80jgiOU78gCWN3A0wE0tR2GI5nH6MlS+HaaSQ=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "8efd5d1e283604f75a808a20e6cde0ef313d07d4", + "rev": "9b19f5e77dd906cb52dade0b7bd280339d2a1f3d", "type": "github" }, "original": { @@ -85,11 +107,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1699825797, - "narHash": "sha256-W2m42mVt4/O6CJFbECPfLApmi8bO+qscbmSeEKrSHEg=", + "lastModified": 1701902328, + "narHash": "sha256-3tiiSEgQRPps0aV40belvLk1k4Max7oRh/+hZGLtfGc=", "owner": "langedev", "repo": "nixpkgs", - "rev": "a69768a1c385042d46ff57396c49d26df5ac035c", + "rev": "162f092c27afe0949253753f088c2babfba5b902", "type": "github" }, "original": { @@ -125,18 +147,18 @@ "flake": false, "locked": { "host": "gitlab.freedesktop.org", - "lastModified": 1699292815, - "narHash": "sha256-HXu98PyBMKEWLqiTb8viuLDznud/SdkdJsx5A5CWx7I=", + "lastModified": 1703963193, + "narHash": "sha256-ke8drv6PTrdQDruWbajrRJffP9A9PU6FRyjJGNZRTs4=", "owner": "wlroots", "repo": "wlroots", - "rev": "5de9e1a99d6642c2d09d589aa37ff0a8945dcee1", + "rev": "f81c3d93cd6f61b20ae784297679283438def8df", "type": "gitlab" }, "original": { "host": "gitlab.freedesktop.org", "owner": "wlroots", "repo": "wlroots", - "rev": "5de9e1a99d6642c2d09d589aa37ff0a8945dcee1", + "rev": "f81c3d93cd6f61b20ae784297679283438def8df", "type": "gitlab" } }, @@ -146,6 +168,7 @@ "hyprland", "hyprland-protocols" ], + "hyprlang": "hyprlang", "nixpkgs": [ "hyprland", "nixpkgs" @@ -156,11 +179,11 @@ ] }, "locked": { - "lastModified": 1697981233, - "narHash": "sha256-y8q4XUwx+gVK7i2eLjfR32lVo7TYvEslyzrmzYEaPZU=", + "lastModified": 1704659450, + "narHash": "sha256-3lyoUVtUWz1LuxbltAtkJSK2IlVXmKhxCRU2/0PYCms=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "22e7a65ff9633e1dedfa5317fdffc49f68de2ff2", + "rev": "6a5de92769d5b7038134044053f90e7458f6a197", "type": "github" }, "original": { diff --git a/home.nix b/home.nix index 11310c2..254d4fb 100644 --- a/home.nix +++ b/home.nix @@ -12,11 +12,13 @@ ./programs/fish ./programs/git ./programs/hypr + ./programs/lutris ./programs/mpv ./programs/nnn ./programs/nvim ./programs/pywal ./programs/rofi + ./programs/spotify ./programs/ssh ./programs/xdg ]; @@ -32,6 +34,9 @@ appimage-run # Lets you run app images zathura # PDF viewer ani-cli # Easy anime player + lutgen # LUT generator + + texlive.combined.scheme-full # Latex # Development stuff nodejs # For compiling JS stuff @@ -45,6 +50,10 @@ BROWSER = "librewolf"; }; + home.sessionPath = [ + "$HOME/prog/scripts" + ]; + # Enable man pages, but ensure ~/.manpage isn't created programs.man.enable = true; programs.man.generateCaches = false; diff --git a/programs/git/default.nix b/programs/git/default.nix index 107376d..9f134ee 100644 --- a/programs/git/default.nix +++ b/programs/git/default.nix @@ -2,8 +2,8 @@ { programs.git.enable = true; - programs.git.userName = "langedev"; - programs.git.userEmail = "public@daltonlange.com"; + programs.git.userName = "JuliaLange"; + programs.git.userEmail = "git@julialange.com"; programs.git.extraConfig = { safe = { directory = "/etc/nixos"; diff --git a/programs/hypr/default.conf b/programs/hypr/default.conf index 4b1dc22..d92465d 100644 --- a/programs/hypr/default.conf +++ b/programs/hypr/default.conf @@ -1,5 +1,32 @@ -monitor=,preferred,auto,1 +monitor=DP-2,2560x1440@144,0x0,1 +monitor=DP-1,2560x1440@144,-2560x0,1 monitor=HDMI-A-1,disable +env = HYPR_MON_PRIMARY, DP-2 +env = HYPR_MON_SECONDARY, DP-1 + +# Primaries +workspace=name:home, monitor:DP-2, persistent:true, default:true +workspace=name:game, monitor:DP-2, persistent:true +workspace=name:etc0, monitor:DP-2, persistent:true +# Secondaries +workspace=name:chat, monitor:DP-1, persistent:true, default:true +workspace=name:misc0, monitor:DP-1, persistent:true +# Switches +workspace=name:web , monitor:DP-1, persistent:true +workspace=name:med , monitor:DP-1, persistent:true + +windowrule = workspace name:web, librewolf +windowrulev2 = workspace name:med, librewolf,title:Picture-in-Picture +windowrule = workspace name:chat, discord + +env = LIBVA_DRIVER_NAME,nvidia +env = XDG_SESSION_TYPE,wayland +env = GBM_BACKEND,nvidia-drm +env = __GLX_VENDOR_LIBRARY_NAME,nvidia +env = WLR_NO_HARDWARE_CURSORS,1 + +env = HYPR_WORK_DB,$XDG_CACHE_HOME/hypr/workspace.db +exec-once = $XDG_CONFIG_HOME/hypr/scripts/changesecondary.xsh exec-once = swww init exec-once = swww img $HOME/med/pix/bg.png @@ -8,7 +35,8 @@ input { kb_layout = us follow_mouse = 1 accel_profile = flat - sensitivity = 0.2 # -1.0 - 1.0, 0 means no modification. + sensitivity = -0.52 + #sensitivity = 0.2 # -1.0 - 1.0, 0 means no modification. } general { diff --git a/programs/hypr/default.nix b/programs/hypr/default.nix index 8fc5589..e1234a3 100644 --- a/programs/hypr/default.nix +++ b/programs/hypr/default.nix @@ -1,14 +1,21 @@ { config, pkgs, ... }: - +let rootPath = ./.; in { wayland.windowManager.hyprland.enable = true; wayland.windowManager.hyprland.extraConfig = '' ${builtins.readFile ./default.conf} ${builtins.readFile ./keybinds.conf} ''; + # wayland.windowManager.hyprland.enableNvidiaPatches = true; home.packages = with pkgs; [ socat # For hyprland scripts swww # Wallpaper engine wlr-randr # Xrandr for wayland + xdg-desktop-portal-hyprland # XDP for hyprland ]; + xdg.configFile."hypr-scripts" = { + source = rootPath + "/scripts"; + target = "hypr/scripts"; + executable = true; + }; } diff --git a/programs/hypr/keybinds.conf b/programs/hypr/keybinds.conf index 4ed1c58..ab4d5a0 100644 --- a/programs/hypr/keybinds.conf +++ b/programs/hypr/keybinds.conf @@ -3,30 +3,26 @@ $mainMod = SUPER # Exec programs bind = $mainMod, return, exec, alacritty bind = $mainMod SHIFT, return, exec, rofi -show run -# bind = $mainMod SHIFT, P, exec, screenshot # Hyprland Management bind = $mainMod SHIFT, Q, exit, -# Bars stuff -bind = $mainMod, TAB, exec, eww open --toggle - # Workspace / Monitor Management bind = $mainMod, h, focusmonitor, l bind = $mainMod, l, focusmonitor, r bind = $mainMod, j, cyclenext, bind = $mainMod, k, cyclenext, prev +bind = $mainMod SHIFT, j, swapnext, +bind = $mainMod SHIFT, k, swapnext, prev +bind = $mainMod SHIFT, h, movecurrentworkspacetomonitor, -1 +bind = $mainMod SHIFT, l, movecurrentworkspacetomonitor, +1 -bind = $mainMod, 1, workspace, 1 -bind = $mainMod, 2, workspace, 2 -bind = $mainMod, 3, workspace, 3 -bind = $mainMod, 4, workspace, 4 -bind = $mainMod, 5, workspace, 5 -bind = $mainMod, 6, workspace, 6 -bind = $mainMod, 7, workspace, 7 -bind = $mainMod, 8, workspace, 8 -bind = $mainMod, 9, workspace, 9 -bind = $mainMod, 0, workspace, 10 +bind = $mainMod, 1, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh home +bind = $mainMod, 2, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh web +bind = $mainMod, 3, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh med +bind = $mainMod, 4, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh game +binde = $mainMod, 5, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh etc +binde = $mainMod, TAB, exec, $XDG_CONFIG_HOME/hypr/scripts/changesecondary.xsh # Window Management bind = $mainMod, C, killactive, @@ -34,16 +30,11 @@ bind = $mainMod, C, killactive, bind = $mainMod, F, togglefloating, bind = $mainMod SHIFT, F, fullscreen, -bind = $mainMod SHIFT, 1, movetoworkspacesilent, 1 -bind = $mainMod SHIFT, 2, movetoworkspacesilent, 2 -bind = $mainMod SHIFT, 3, movetoworkspacesilent, 3 -bind = $mainMod SHIFT, 4, movetoworkspacesilent, 4 -bind = $mainMod SHIFT, 5, movetoworkspacesilent, 5 -bind = $mainMod SHIFT, 6, movetoworkspacesilent, 6 -bind = $mainMod SHIFT, 7, movetoworkspacesilent, 7 -bind = $mainMod SHIFT, 8, movetoworkspacesilent, 8 -bind = $mainMod SHIFT, 9, movetoworkspacesilent, 9 -bind = $mainMod SHIFT, 0, movetoworkspacesilent, 10 +bind = $mainMod SHIFT, 1, movetoworkspacesilent, name:home +bind = $mainMod SHIFT, 2, movetoworkspacesilent, name:web +bind = $mainMod SHIFT, 3, movetoworkspacesilent, name:med +bind = $mainMod SHIFT, 4, movetoworkspacesilent, name:misc +bind = $mainMod SHIFT, TAB, movetoworkspacesilent, r-1 # Move/resize windows with mainMod + LMB/RMB and dragging bindm = $mainMod, mouse:272, movewindow diff --git a/programs/hypr/scripts/changeprimary.xsh b/programs/hypr/scripts/changeprimary.xsh new file mode 100755 index 0000000..9b7e0e7 --- /dev/null +++ b/programs/hypr/scripts/changeprimary.xsh @@ -0,0 +1,27 @@ +#!/usr/bin/env xonsh +import shelve + +# Usage: +# ./changeprimary.xsh workspace +# changes to that workspace +# if workspace is "etc" then changes to etcN where N is a number + +workspace=$ARG1 +monitor=$HYPR_MON_PRIMARY + +current_workspace = "home" + +with shelve.open($HYPR_WORK_DB) as db: + current_workspace = db.get("primary") + if workspace == "etc": + if current_workspace.startswith("etc"): + current = current_workspace[3:] % db.get("primary_extras") + current_workspace = "etc" + str(current) + else: + current_workspace = "etc0" + else: + current_workspace = workspace + db["primary"] = current_workspace + +hyprctl dispatch moveworkspacetomonitor name:@(current_workspace) $HYPR_MON_PRIMARY >> /dev/null +hyprctl dispatch workspace name:@(current_workspace) >> /dev/null diff --git a/programs/hypr/scripts/changesecondary.xsh b/programs/hypr/scripts/changesecondary.xsh new file mode 100755 index 0000000..b4cfdf9 --- /dev/null +++ b/programs/hypr/scripts/changesecondary.xsh @@ -0,0 +1,27 @@ +#!/usr/bin/env xonsh +import shelve +import copy + +# Usage: +# ./changesecondary.xsh +# cycles through the secondary workspaces + +current_secondary = "chat" + +with shelve.open($HYPR_WORK_DB) as db: + workspaces = db.get("secondaries").copy() + current_primary = db.get("primary") + current_secondary = db.get("secondary") + #extras = db.get("secondary_extras") + + if current_primary in workspaces: + workspaces.remove(current_primary) + + current_secondary = workspaces[ + (workspaces.index(current_secondary)+1) % len(workspaces) + ] + db["secondary"] = current_secondary + +# Change primary to bind +hyprctl dispatch moveworkspacetomonitor name:@(current_secondary) $HYPR_MON_SECONDARY +hyprctl dispatch workspace name:@(current_secondary) diff --git a/programs/hypr/scripts/initdb.xsh b/programs/hypr/scripts/initdb.xsh new file mode 100755 index 0000000..8e7af93 --- /dev/null +++ b/programs/hypr/scripts/initdb.xsh @@ -0,0 +1,13 @@ +#!/usr/bin/env xonsh +import shelve + +# Usage: +# ./initdb.xsh +# initialize a db for use hypr workspace scripts + +with shelve.open($HYPR_WORK_DB) as db: + db["primary"] = "home" + db["secondary"] = "chat" + db["secondaries"] = ["chat", "web"] + db["secondary_extras"] = 1 + db["primary_extras"] = 1 diff --git a/programs/lutris/default.nix b/programs/lutris/default.nix new file mode 100644 index 0000000..05993cd --- /dev/null +++ b/programs/lutris/default.nix @@ -0,0 +1,16 @@ +{ config, pkgs, ... }: + +{ + home.packages = with pkgs; [ + lutris + wineWowPackages.stable + # (lutris.override { + # extraLibraries = pkgs: [ + # # List library dependencies here + # ]; + # extraPkgs = pkgs: [ + # # List package dependencies here + # ]; + # }) + ]; +} diff --git a/programs/spotify/default.nix b/programs/spotify/default.nix new file mode 100644 index 0000000..7510db3 --- /dev/null +++ b/programs/spotify/default.nix @@ -0,0 +1,18 @@ +{ config, pkgs, ... }: + +{ + services.spotifyd.enable = true; + services.spotifyd.settings = { + global = { + username = "me@daltonlange.com"; + password = "5ThM^G3!FTfH6rH#cJEx"; + backend = "pulseaudio"; + device_name = "onizuka"; + bitrate = 320; + }; + }; + + home.packages = with pkgs; [ + spotify-tui # Spotify TUI player + ]; +} diff --git a/programs/xdg/default.nix b/programs/xdg/default.nix index 835b5fa..81a7a84 100644 --- a/programs/xdg/default.nix +++ b/programs/xdg/default.nix @@ -13,4 +13,6 @@ pictures = "${config.home.homeDirectory}/med/pix"; videos = "${config.home.homeDirectory}/med/vid"; }; + + xdg.mimeApps.enable = true; } diff --git a/programs/xonsh/default.nix b/programs/xonsh/default.nix new file mode 100644 index 0000000..3dd83ce --- /dev/null +++ b/programs/xonsh/default.nix @@ -0,0 +1,15 @@ +{ config, pkgs, ... }: + +{ + programs.xonsh.enable = true; + + programs.xonsh.interactiveShellInit = '' + cat ~/.cache/wal/sequences + ''; + + home.sessionVariables = { + PROMPT = "τ "; + RIGHT_PROMPT = "{YELLOW}{gitstatus: {} }{BLUE}{short_cwd}{DEFAULT}"; + VI_MODE = 1; + }; +} From 38d9744465666adf4973bbe67f45348d879018c4 Mon Sep 17 00:00:00 2001 From: langedev Date: Fri, 16 Feb 2024 18:19:19 -0800 Subject: [PATCH 033/412] Update, and add ~/prog/scripts to path --- flake.lock | 55 +++++++++++++++++++++++++++----------- modules/system/default.nix | 4 +++ 2 files changed, 43 insertions(+), 16 deletions(-) diff --git a/flake.lock b/flake.lock index a51ef7d..cb22f7f 100644 --- a/flake.lock +++ b/flake.lock @@ -9,11 +9,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1701737536, - "narHash": "sha256-xSmfHhhCL9mAta5jKfcbJxYjCoD2MdLPBMjBUWvYAJI=", + "lastModified": 1708135752, + "narHash": "sha256-T7ioseAAZCNOAIP6beEBKXA2oFqEs7zphwvurT6sp9k=", "owner": "hyprwm", "repo": "Hyprland", - "rev": "3bb9c7c5cf4f2ee30bf821501499f2308d616f94", + "rev": "e3e7e1fdda7660a70bd206aa3ed6a45bb4000376", "type": "github" }, "original": { @@ -47,13 +47,35 @@ "type": "github" } }, + "hyprlang": { + "inputs": { + "nixpkgs": [ + "hyprland", + "xdph", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1704287638, + "narHash": "sha256-TuRXJGwtK440AXQNl5eiqmQqY4LZ/9+z/R7xC0ie3iA=", + "owner": "hyprwm", + "repo": "hyprlang", + "rev": "6624f2bb66d4d27975766e81f77174adbe58ec97", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprlang", + "type": "github" + } + }, "nixpkgs": { "locked": { - "lastModified": 1700612854, - "narHash": "sha256-yrQ8osMD+vDLGFX7pcwsY/Qr5PUd6OmDMYJZzZi0+zc=", + "lastModified": 1707546158, + "narHash": "sha256-nYYJTpzfPMDxI8mzhQsYjIUX+grorqjKEU9Np6Xwy/0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "19cbff58383a4ae384dea4d1d0c823d72b49d614", + "rev": "d934204a0f8d9198e1e4515dd6fec76a139c87f0", "type": "github" }, "original": { @@ -65,11 +87,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1699825797, - "narHash": "sha256-W2m42mVt4/O6CJFbECPfLApmi8bO+qscbmSeEKrSHEg=", + "lastModified": 1701902328, + "narHash": "sha256-3tiiSEgQRPps0aV40belvLk1k4Max7oRh/+hZGLtfGc=", "owner": "langedev", "repo": "nixpkgs", - "rev": "a69768a1c385042d46ff57396c49d26df5ac035c", + "rev": "162f092c27afe0949253753f088c2babfba5b902", "type": "github" }, "original": { @@ -104,18 +126,18 @@ "flake": false, "locked": { "host": "gitlab.freedesktop.org", - "lastModified": 1701368958, - "narHash": "sha256-7kvyoA91etzVEl9mkA/EJfB6z/PltxX7Xc4gcr7/xlo=", + "lastModified": 1706359063, + "narHash": "sha256-5HUTG0p+nCJv3cn73AmFHRZdfRV5AD5N43g8xAePSKM=", "owner": "wlroots", "repo": "wlroots", - "rev": "5d639394f3e83b01596dcd166a44a9a1a2583350", + "rev": "00b869c1a96f300a8f25da95d624524895e0ddf2", "type": "gitlab" }, "original": { "host": "gitlab.freedesktop.org", "owner": "wlroots", "repo": "wlroots", - "rev": "5d639394f3e83b01596dcd166a44a9a1a2583350", + "rev": "00b869c1a96f300a8f25da95d624524895e0ddf2", "type": "gitlab" } }, @@ -125,6 +147,7 @@ "hyprland", "hyprland-protocols" ], + "hyprlang": "hyprlang", "nixpkgs": [ "hyprland", "nixpkgs" @@ -135,11 +158,11 @@ ] }, "locked": { - "lastModified": 1700508250, - "narHash": "sha256-X4o/mifI7Nhu0UKYlxx53wIC+gYDo3pVM9L2u3PE2bE=", + "lastModified": 1706521509, + "narHash": "sha256-AInZ50acOJ3wzUwGzNr1TmxGTMx+8j6oSTzz4E7Vbp8=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "eb120ff25265ecacd0fc13d7dab12131b60d0f47", + "rev": "c06fd88b3da492b8f9067be021b9184f7012b5a8", "type": "github" }, "original": { diff --git a/modules/system/default.nix b/modules/system/default.nix index b13e3d4..a673e60 100644 --- a/modules/system/default.nix +++ b/modules/system/default.nix @@ -18,12 +18,16 @@ ]; # XDG Compliance + xdg.portal.config.common.default = "*"; environment.sessionVariables = rec { XDG_CONFIG_HOME = "\${HOME}/.config"; XDG_CACHE_HOME = "\${HOME}/.cache"; XDG_STATE_HOME = "\${HOME}/.local/state"; XDG_DATA_HOME = "\${HOME}/.local/share"; XDG_BIN_HOME = "\${HOME}/.local/bin"; + PATH = [ + "\${HOME}/prog/scripts" + ]; }; users.groups = { From 907805c515f0c374c443885c52f496cd621ad807 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Fri, 16 Feb 2024 18:19:19 -0800 Subject: [PATCH 034/412] Update, and add ~/prog/scripts to path --- flake.lock | 55 +++++++++++++++++++++++++++----------- modules/system/default.nix | 4 +++ 2 files changed, 43 insertions(+), 16 deletions(-) diff --git a/flake.lock b/flake.lock index a51ef7d..cb22f7f 100644 --- a/flake.lock +++ b/flake.lock @@ -9,11 +9,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1701737536, - "narHash": "sha256-xSmfHhhCL9mAta5jKfcbJxYjCoD2MdLPBMjBUWvYAJI=", + "lastModified": 1708135752, + "narHash": "sha256-T7ioseAAZCNOAIP6beEBKXA2oFqEs7zphwvurT6sp9k=", "owner": "hyprwm", "repo": "Hyprland", - "rev": "3bb9c7c5cf4f2ee30bf821501499f2308d616f94", + "rev": "e3e7e1fdda7660a70bd206aa3ed6a45bb4000376", "type": "github" }, "original": { @@ -47,13 +47,35 @@ "type": "github" } }, + "hyprlang": { + "inputs": { + "nixpkgs": [ + "hyprland", + "xdph", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1704287638, + "narHash": "sha256-TuRXJGwtK440AXQNl5eiqmQqY4LZ/9+z/R7xC0ie3iA=", + "owner": "hyprwm", + "repo": "hyprlang", + "rev": "6624f2bb66d4d27975766e81f77174adbe58ec97", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprlang", + "type": "github" + } + }, "nixpkgs": { "locked": { - "lastModified": 1700612854, - "narHash": "sha256-yrQ8osMD+vDLGFX7pcwsY/Qr5PUd6OmDMYJZzZi0+zc=", + "lastModified": 1707546158, + "narHash": "sha256-nYYJTpzfPMDxI8mzhQsYjIUX+grorqjKEU9Np6Xwy/0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "19cbff58383a4ae384dea4d1d0c823d72b49d614", + "rev": "d934204a0f8d9198e1e4515dd6fec76a139c87f0", "type": "github" }, "original": { @@ -65,11 +87,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1699825797, - "narHash": "sha256-W2m42mVt4/O6CJFbECPfLApmi8bO+qscbmSeEKrSHEg=", + "lastModified": 1701902328, + "narHash": "sha256-3tiiSEgQRPps0aV40belvLk1k4Max7oRh/+hZGLtfGc=", "owner": "langedev", "repo": "nixpkgs", - "rev": "a69768a1c385042d46ff57396c49d26df5ac035c", + "rev": "162f092c27afe0949253753f088c2babfba5b902", "type": "github" }, "original": { @@ -104,18 +126,18 @@ "flake": false, "locked": { "host": "gitlab.freedesktop.org", - "lastModified": 1701368958, - "narHash": "sha256-7kvyoA91etzVEl9mkA/EJfB6z/PltxX7Xc4gcr7/xlo=", + "lastModified": 1706359063, + "narHash": "sha256-5HUTG0p+nCJv3cn73AmFHRZdfRV5AD5N43g8xAePSKM=", "owner": "wlroots", "repo": "wlroots", - "rev": "5d639394f3e83b01596dcd166a44a9a1a2583350", + "rev": "00b869c1a96f300a8f25da95d624524895e0ddf2", "type": "gitlab" }, "original": { "host": "gitlab.freedesktop.org", "owner": "wlroots", "repo": "wlroots", - "rev": "5d639394f3e83b01596dcd166a44a9a1a2583350", + "rev": "00b869c1a96f300a8f25da95d624524895e0ddf2", "type": "gitlab" } }, @@ -125,6 +147,7 @@ "hyprland", "hyprland-protocols" ], + "hyprlang": "hyprlang", "nixpkgs": [ "hyprland", "nixpkgs" @@ -135,11 +158,11 @@ ] }, "locked": { - "lastModified": 1700508250, - "narHash": "sha256-X4o/mifI7Nhu0UKYlxx53wIC+gYDo3pVM9L2u3PE2bE=", + "lastModified": 1706521509, + "narHash": "sha256-AInZ50acOJ3wzUwGzNr1TmxGTMx+8j6oSTzz4E7Vbp8=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "eb120ff25265ecacd0fc13d7dab12131b60d0f47", + "rev": "c06fd88b3da492b8f9067be021b9184f7012b5a8", "type": "github" }, "original": { diff --git a/modules/system/default.nix b/modules/system/default.nix index b13e3d4..a673e60 100644 --- a/modules/system/default.nix +++ b/modules/system/default.nix @@ -18,12 +18,16 @@ ]; # XDG Compliance + xdg.portal.config.common.default = "*"; environment.sessionVariables = rec { XDG_CONFIG_HOME = "\${HOME}/.config"; XDG_CACHE_HOME = "\${HOME}/.cache"; XDG_STATE_HOME = "\${HOME}/.local/state"; XDG_DATA_HOME = "\${HOME}/.local/share"; XDG_BIN_HOME = "\${HOME}/.local/bin"; + PATH = [ + "\${HOME}/prog/scripts" + ]; }; users.groups = { From ea56d7a5dd85551ad8fcd8d096ddec2571aac242 Mon Sep 17 00:00:00 2001 From: JuliaLange Date: Fri, 16 Feb 2024 21:24:57 -0800 Subject: [PATCH 035/412] Adds Discord to programs + better discord --- home.nix | 3 +- programs/discord/default.nix | 13 ++ .../discord/plugins/chatlessdisc.plugin.js | 197 ++++++++++++++++++ 3 files changed, 212 insertions(+), 1 deletion(-) create mode 100644 programs/discord/default.nix create mode 100644 programs/discord/plugins/chatlessdisc.plugin.js diff --git a/home.nix b/home.nix index 254d4fb..714ce88 100644 --- a/home.nix +++ b/home.nix @@ -7,6 +7,7 @@ imports = [ ./programs/alacritty + ./programs/discord ./programs/dunst ./programs/eww ./programs/fish @@ -25,7 +26,7 @@ home.packages = with pkgs; [ # Applications - discord # Chat app + beeper # Better Chat App gimp # Photo editting pamixer # Volume control playerctl # Control media diff --git a/programs/discord/default.nix b/programs/discord/default.nix new file mode 100644 index 0000000..4221921 --- /dev/null +++ b/programs/discord/default.nix @@ -0,0 +1,13 @@ +{ config, pkgs, ... }: +let rootPath = ./.; in +{ + home.packages = with pkgs; [ + discord # Base app + betterdiscordctl # Better Discord Installer + ]; + # Better Discord plugins + xdg.configFile."better-discord" = { + source = rootPath + "/plugins"; + target = "BetterDiscord/plugins"; + }; +} diff --git a/programs/discord/plugins/chatlessdisc.plugin.js b/programs/discord/plugins/chatlessdisc.plugin.js new file mode 100644 index 0000000..76d78d2 --- /dev/null +++ b/programs/discord/plugins/chatlessdisc.plugin.js @@ -0,0 +1,197 @@ +/** + * @name chatlessdisc + * @version 1.1.0 + * @description removes the chatting from disc, as god intended + * @author Julia Lange + * + */ + +const TITLE = "chatless-disc"; + +function getChat() { + let chatsPotentialChild = document.querySelector( + "div > section[aria-label='Channel header']"); + if (chatsPotentialChild) { + let chat = chatsPotentialChild.parentElement; + return chat; + } + return null; +} + +function removeChat() { + let chat = getChat() + if (chat) chat.style = "display: none"; +} +function restoreChat() { + let chat = getChat() + if (chat) chat.style = "display: flex"; +} + +function expandSidebar() { + let userArea = document.querySelector("section[aria-label='User area']"); + let sidebar = userArea.parentElement; + sidebar.style = "width: 100%"; + removeChat(); + + userArea.childNodes.forEach(node => { + node.style = "justify-content: space-between"; + }); +} + +function contractSidebar() { + let userArea = document.querySelector("section[aria-label='User area']"); + let sidebar = userArea.parentElement; + sidebar.style = ""; + restoreChat(); + + userArea.childNodes.forEach(node => { + node.style = ""; + }); +} + +function addChannelClass() { + let dms = document.querySelector("ul[aria-label='Direct Messages']"); + if (dms == null) return ""; + let friendsElement = dms.childNodes[1] + if (friendsElement == null) return ""; + let channelClassName = friendsElement.className.split(" ")[0] + if (channelClassName != "") { + BdApi.DOM.addStyle(TITLE, `.${channelClassName} { + max-width: 100%; + }`); + } + return channelClassName; +} + +function clickPopOut() { + let popOutButton = document.querySelector("button[aria-label='Pop Out']"); + if (popOutButton == null) return; + popOutButton.click(); +} + +function addToggleButton(button) { + let muteButton = document.querySelector("div > button[aria-label='Mute']"); + if (muteButton == null) return; + let buttonList = muteButton.parentElement; + buttonList.prepend(button) + + enablePortraitStyle() +} + +function enablePortraitStyle() { + let portrait = document.querySelector("div[aria-label='Set Status']"); + if (portrait == null) return; + portrait.style = "width: 100%; min-width: 0px"; +} + +function disablePortaitStyle() { + let portrait = document.querySelector("div[aria-label='Set Status']"); + if (portrait == null) return; + portrait.style = ""; +} + +function enableChanges() { + expandSidebar(); + + return true +} + +function disableChanges() { + contractSidebar(); + + return false +} + +function createToggleButton(onClickFunction) { + let toggleButton = document.createElement("button"); + toggleButton.role = "switch"; + toggleButton.ariaLabel = "Chattless Toggle"; + toggleButton.className = "chattless_button"; + toggleButton.style.cssText = ` + display: flex; + align-items: center; + justify-content: center; + background: transparent;` + toggleButton.addEventListener("click", onClickFunction); + + const div = document.createElement("div"); + div.style.cssText = ` + display: flex; + align-items: center; + justify-content: center;`; + + const svg = document.createElementNS("http://www.w3.org/2000/svg", "svg"); + svg.setAttribute("aria-hidden", "false"); + svg.setAttribute("width", "20"); + svg.setAttribute("height", "20"); + svg.setAttribute("viewBox", "0 0 512.08 512.08"); + + const path = document.createElementNS("http://www.w3.org/2000/svg", "path"); + path.setAttribute("fill", "var(--interactive-normal)"); + path.setAttribute("d", "M256.04,0C134.28,0,35.208,97.248,35.208,216.8c0,66.56,30.208,127.776,83.168,169.216V512.08 \ + l103.552-81.2c11.536,1.776,22.992,2.688,34.112,2.688c121.76,0,220.832-97.232,220.832-216.768C476.872,97.248,377.8,0,256.04,0z \ + M444.872,216.8c0,44.336-16.064,85.056-42.768,116.928L140.408,71.024C172.408,46.656,212.456,32,256.04,32 \ + C360.168,32,444.872,114.912,444.872,216.8z M220.552,398.192l-7.104-1.312l-63.056,49.456v-76.432l-6.592-4.8 \ + C95.128,329.776,67.224,275.712,67.224,216.8c0-47.872,18.848-91.408,49.472-124.256l262.768,263.792 \ + c-33.136,28.096-76.224,45.232-123.408,45.232C244.536,401.568,232.6,400.416,220.552,398.192z"); + + svg.appendChild(path); + div.appendChild(svg); + toggleButton.appendChild(div); + + return toggleButton; +} + + + + + +class chatlessdisc { + + constructor() { + this.enabled = false; + this.channelActionsModule = BdApi.findModuleByProps('selectChannel'); + + this.toggleButton = createToggleButton(async () => { + if (this.enabled) + this.enabled = disableChanges(); + else + this.enabled = enableChanges(); + }); + } + + start() { + this.enabled = enableChanges(); + addToggleButton(this.toggleButton); + this.channelClassName = addChannelClass(); + + BdApi.DOM.addStyle(TITLE, `.chattless_button:hover { + background: rgba(255,255,255,0.125) !important; + }`); + + BdApi.Patcher.instead(TITLE, this.channelActionsModule, + "selectChannel", async (_, args, originalFunction) => { + await originalFunction(...args); + if (this.enabled) { + removeChat(); + if (this.channelClassName == "") + this.channelClassName = addChannelClass(); + } + }); + BdApi.Patcher.instead(TITLE, this.channelActionsModule, + "selectVoiceChannel", async (_, args, originalFunction) => { + await originalFunction(...args); + if (this.enabled) { + await this.channelActionsModule.selectPrivateChannel(args[0]); + clickPopOut(); + } + }); + } + //Turn off and remove all parts of the plugin + stop() { + this.toggleButton.remove() + disableChanges(); + BdApi.Patcher.unpatchAll(TITLE); + BdApi.DOM.removeStyle(TITLE); + } +} From febe2b0e1c8ce7a1a43904ef3c37cd2d92d81a28 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Fri, 16 Feb 2024 21:24:57 -0800 Subject: [PATCH 036/412] Adds Discord to programs + better discord --- home.nix | 3 +- programs/discord/default.nix | 13 ++ .../discord/plugins/chatlessdisc.plugin.js | 197 ++++++++++++++++++ 3 files changed, 212 insertions(+), 1 deletion(-) create mode 100644 programs/discord/default.nix create mode 100644 programs/discord/plugins/chatlessdisc.plugin.js diff --git a/home.nix b/home.nix index 254d4fb..714ce88 100644 --- a/home.nix +++ b/home.nix @@ -7,6 +7,7 @@ imports = [ ./programs/alacritty + ./programs/discord ./programs/dunst ./programs/eww ./programs/fish @@ -25,7 +26,7 @@ home.packages = with pkgs; [ # Applications - discord # Chat app + beeper # Better Chat App gimp # Photo editting pamixer # Volume control playerctl # Control media diff --git a/programs/discord/default.nix b/programs/discord/default.nix new file mode 100644 index 0000000..4221921 --- /dev/null +++ b/programs/discord/default.nix @@ -0,0 +1,13 @@ +{ config, pkgs, ... }: +let rootPath = ./.; in +{ + home.packages = with pkgs; [ + discord # Base app + betterdiscordctl # Better Discord Installer + ]; + # Better Discord plugins + xdg.configFile."better-discord" = { + source = rootPath + "/plugins"; + target = "BetterDiscord/plugins"; + }; +} diff --git a/programs/discord/plugins/chatlessdisc.plugin.js b/programs/discord/plugins/chatlessdisc.plugin.js new file mode 100644 index 0000000..76d78d2 --- /dev/null +++ b/programs/discord/plugins/chatlessdisc.plugin.js @@ -0,0 +1,197 @@ +/** + * @name chatlessdisc + * @version 1.1.0 + * @description removes the chatting from disc, as god intended + * @author Julia Lange + * + */ + +const TITLE = "chatless-disc"; + +function getChat() { + let chatsPotentialChild = document.querySelector( + "div > section[aria-label='Channel header']"); + if (chatsPotentialChild) { + let chat = chatsPotentialChild.parentElement; + return chat; + } + return null; +} + +function removeChat() { + let chat = getChat() + if (chat) chat.style = "display: none"; +} +function restoreChat() { + let chat = getChat() + if (chat) chat.style = "display: flex"; +} + +function expandSidebar() { + let userArea = document.querySelector("section[aria-label='User area']"); + let sidebar = userArea.parentElement; + sidebar.style = "width: 100%"; + removeChat(); + + userArea.childNodes.forEach(node => { + node.style = "justify-content: space-between"; + }); +} + +function contractSidebar() { + let userArea = document.querySelector("section[aria-label='User area']"); + let sidebar = userArea.parentElement; + sidebar.style = ""; + restoreChat(); + + userArea.childNodes.forEach(node => { + node.style = ""; + }); +} + +function addChannelClass() { + let dms = document.querySelector("ul[aria-label='Direct Messages']"); + if (dms == null) return ""; + let friendsElement = dms.childNodes[1] + if (friendsElement == null) return ""; + let channelClassName = friendsElement.className.split(" ")[0] + if (channelClassName != "") { + BdApi.DOM.addStyle(TITLE, `.${channelClassName} { + max-width: 100%; + }`); + } + return channelClassName; +} + +function clickPopOut() { + let popOutButton = document.querySelector("button[aria-label='Pop Out']"); + if (popOutButton == null) return; + popOutButton.click(); +} + +function addToggleButton(button) { + let muteButton = document.querySelector("div > button[aria-label='Mute']"); + if (muteButton == null) return; + let buttonList = muteButton.parentElement; + buttonList.prepend(button) + + enablePortraitStyle() +} + +function enablePortraitStyle() { + let portrait = document.querySelector("div[aria-label='Set Status']"); + if (portrait == null) return; + portrait.style = "width: 100%; min-width: 0px"; +} + +function disablePortaitStyle() { + let portrait = document.querySelector("div[aria-label='Set Status']"); + if (portrait == null) return; + portrait.style = ""; +} + +function enableChanges() { + expandSidebar(); + + return true +} + +function disableChanges() { + contractSidebar(); + + return false +} + +function createToggleButton(onClickFunction) { + let toggleButton = document.createElement("button"); + toggleButton.role = "switch"; + toggleButton.ariaLabel = "Chattless Toggle"; + toggleButton.className = "chattless_button"; + toggleButton.style.cssText = ` + display: flex; + align-items: center; + justify-content: center; + background: transparent;` + toggleButton.addEventListener("click", onClickFunction); + + const div = document.createElement("div"); + div.style.cssText = ` + display: flex; + align-items: center; + justify-content: center;`; + + const svg = document.createElementNS("http://www.w3.org/2000/svg", "svg"); + svg.setAttribute("aria-hidden", "false"); + svg.setAttribute("width", "20"); + svg.setAttribute("height", "20"); + svg.setAttribute("viewBox", "0 0 512.08 512.08"); + + const path = document.createElementNS("http://www.w3.org/2000/svg", "path"); + path.setAttribute("fill", "var(--interactive-normal)"); + path.setAttribute("d", "M256.04,0C134.28,0,35.208,97.248,35.208,216.8c0,66.56,30.208,127.776,83.168,169.216V512.08 \ + l103.552-81.2c11.536,1.776,22.992,2.688,34.112,2.688c121.76,0,220.832-97.232,220.832-216.768C476.872,97.248,377.8,0,256.04,0z \ + M444.872,216.8c0,44.336-16.064,85.056-42.768,116.928L140.408,71.024C172.408,46.656,212.456,32,256.04,32 \ + C360.168,32,444.872,114.912,444.872,216.8z M220.552,398.192l-7.104-1.312l-63.056,49.456v-76.432l-6.592-4.8 \ + C95.128,329.776,67.224,275.712,67.224,216.8c0-47.872,18.848-91.408,49.472-124.256l262.768,263.792 \ + c-33.136,28.096-76.224,45.232-123.408,45.232C244.536,401.568,232.6,400.416,220.552,398.192z"); + + svg.appendChild(path); + div.appendChild(svg); + toggleButton.appendChild(div); + + return toggleButton; +} + + + + + +class chatlessdisc { + + constructor() { + this.enabled = false; + this.channelActionsModule = BdApi.findModuleByProps('selectChannel'); + + this.toggleButton = createToggleButton(async () => { + if (this.enabled) + this.enabled = disableChanges(); + else + this.enabled = enableChanges(); + }); + } + + start() { + this.enabled = enableChanges(); + addToggleButton(this.toggleButton); + this.channelClassName = addChannelClass(); + + BdApi.DOM.addStyle(TITLE, `.chattless_button:hover { + background: rgba(255,255,255,0.125) !important; + }`); + + BdApi.Patcher.instead(TITLE, this.channelActionsModule, + "selectChannel", async (_, args, originalFunction) => { + await originalFunction(...args); + if (this.enabled) { + removeChat(); + if (this.channelClassName == "") + this.channelClassName = addChannelClass(); + } + }); + BdApi.Patcher.instead(TITLE, this.channelActionsModule, + "selectVoiceChannel", async (_, args, originalFunction) => { + await originalFunction(...args); + if (this.enabled) { + await this.channelActionsModule.selectPrivateChannel(args[0]); + clickPopOut(); + } + }); + } + //Turn off and remove all parts of the plugin + stop() { + this.toggleButton.remove() + disableChanges(); + BdApi.Patcher.unpatchAll(TITLE); + BdApi.DOM.removeStyle(TITLE); + } +} From 9eacb3d95c4f98ca795da58666741aa8a54110d8 Mon Sep 17 00:00:00 2001 From: JuliaLange Date: Fri, 16 Feb 2024 21:26:37 -0800 Subject: [PATCH 037/412] Updating eww stuff --- programs/eww/config/eww.scss | 13 +++++--- programs/eww/config/eww.yuck | 1 + .../eww/config/modules/components/index.html | 18 ----------- programs/eww/config/modules/index.html | 16 ---------- programs/eww/config/modules/switch.yuck | 15 +++++++++ programs/eww/config/scripts/index.html | 20 ------------ programs/eww/config/windows.yuck | 32 ------------------- 7 files changed, 24 insertions(+), 91 deletions(-) delete mode 100644 programs/eww/config/modules/components/index.html delete mode 100644 programs/eww/config/modules/index.html create mode 100644 programs/eww/config/modules/switch.yuck delete mode 100644 programs/eww/config/scripts/index.html delete mode 100644 programs/eww/config/windows.yuck diff --git a/programs/eww/config/eww.scss b/programs/eww/config/eww.scss index 559b968..aa4eb77 100644 --- a/programs/eww/config/eww.scss +++ b/programs/eww/config/eww.scss @@ -1,8 +1,11 @@ -box { - background-color: #1E1D2F; - color: #D9E0EE; +.content-box { + border: 4px solid yellow; + border-radius: 50px; + background-color: rgba(255,255,255,10); + margin: 2px; + box-shadow: 0 0 0 3px white; } -progressbar > trough { - min-width: 40px; +.switch { + background: transparent; } diff --git a/programs/eww/config/eww.yuck b/programs/eww/config/eww.yuck index e69de29..275b37b 100644 --- a/programs/eww/config/eww.yuck +++ b/programs/eww/config/eww.yuck @@ -0,0 +1 @@ +(include "modules/switch.yuck") diff --git a/programs/eww/config/modules/components/index.html b/programs/eww/config/modules/components/index.html deleted file mode 100644 index f47c072..0000000 --- a/programs/eww/config/modules/components/index.html +++ /dev/null @@ -1,18 +0,0 @@ - - - - -Directory listing for /eww/widgets/components/ - - -

Directory listing for /eww/widgets/components/

-
- -
- - diff --git a/programs/eww/config/modules/index.html b/programs/eww/config/modules/index.html deleted file mode 100644 index dd51262..0000000 --- a/programs/eww/config/modules/index.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - -Directory listing for /eww/widgets/ - - -

Directory listing for /eww/widgets/

-
- -
- - diff --git a/programs/eww/config/modules/switch.yuck b/programs/eww/config/modules/switch.yuck new file mode 100644 index 0000000..108583b --- /dev/null +++ b/programs/eww/config/modules/switch.yuck @@ -0,0 +1,15 @@ +(defwindow switch + :monitor 1 + :stacking "fg" + :focusable false + :geometry (geometry :y "60%" + :width "500px" + :height "110px" + :anchor "top center") + (border + "Example contenting") +) + +(defwidget border [] + (box :class "content-box" + (children))) diff --git a/programs/eww/config/scripts/index.html b/programs/eww/config/scripts/index.html deleted file mode 100644 index 590c85c..0000000 --- a/programs/eww/config/scripts/index.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - -Directory listing for /eww/scripts/ - - -

Directory listing for /eww/scripts/

-
- -
- - diff --git a/programs/eww/config/windows.yuck b/programs/eww/config/windows.yuck deleted file mode 100644 index 29fb7c9..0000000 --- a/programs/eww/config/windows.yuck +++ /dev/null @@ -1,32 +0,0 @@ -(include "./widgets/bar.yuck") -(include "./widgets/powerbar.yuck") - -(defwindow bar0 - :monitor 0 - :geometry (geometry :width "100%" - :height "29px" - :anchor "top center") - :stacking "fg" - :exclusive true - (bar) -) - -(defwindow preview - :monitor 0 - :geometry (geometry :x "100px" - :y "5px" - :anchor "top right") - (image :path mediapreview) -) - -(defwindow powerbar0 - :monitor 0 - :geometry (geometry :x "100px" - :y "5px" - :anchor "top right") - (powerbar) -) - -(deflisten mediapreview :initial "hello?" - "bash $XDG_CONFIG_HOME/eww/scripts/medpreview" -) From 02f28d31fe921278db5b52bce972ec4701fd9201 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Fri, 16 Feb 2024 21:26:37 -0800 Subject: [PATCH 038/412] Updating eww stuff --- programs/eww/config/eww.scss | 13 +++++--- programs/eww/config/eww.yuck | 1 + .../eww/config/modules/components/index.html | 18 ----------- programs/eww/config/modules/index.html | 16 ---------- programs/eww/config/modules/switch.yuck | 15 +++++++++ programs/eww/config/scripts/index.html | 20 ------------ programs/eww/config/windows.yuck | 32 ------------------- 7 files changed, 24 insertions(+), 91 deletions(-) delete mode 100644 programs/eww/config/modules/components/index.html delete mode 100644 programs/eww/config/modules/index.html create mode 100644 programs/eww/config/modules/switch.yuck delete mode 100644 programs/eww/config/scripts/index.html delete mode 100644 programs/eww/config/windows.yuck diff --git a/programs/eww/config/eww.scss b/programs/eww/config/eww.scss index 559b968..aa4eb77 100644 --- a/programs/eww/config/eww.scss +++ b/programs/eww/config/eww.scss @@ -1,8 +1,11 @@ -box { - background-color: #1E1D2F; - color: #D9E0EE; +.content-box { + border: 4px solid yellow; + border-radius: 50px; + background-color: rgba(255,255,255,10); + margin: 2px; + box-shadow: 0 0 0 3px white; } -progressbar > trough { - min-width: 40px; +.switch { + background: transparent; } diff --git a/programs/eww/config/eww.yuck b/programs/eww/config/eww.yuck index e69de29..275b37b 100644 --- a/programs/eww/config/eww.yuck +++ b/programs/eww/config/eww.yuck @@ -0,0 +1 @@ +(include "modules/switch.yuck") diff --git a/programs/eww/config/modules/components/index.html b/programs/eww/config/modules/components/index.html deleted file mode 100644 index f47c072..0000000 --- a/programs/eww/config/modules/components/index.html +++ /dev/null @@ -1,18 +0,0 @@ - - - - -Directory listing for /eww/widgets/components/ - - -

Directory listing for /eww/widgets/components/

-
- -
- - diff --git a/programs/eww/config/modules/index.html b/programs/eww/config/modules/index.html deleted file mode 100644 index dd51262..0000000 --- a/programs/eww/config/modules/index.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - -Directory listing for /eww/widgets/ - - -

Directory listing for /eww/widgets/

-
- -
- - diff --git a/programs/eww/config/modules/switch.yuck b/programs/eww/config/modules/switch.yuck new file mode 100644 index 0000000..108583b --- /dev/null +++ b/programs/eww/config/modules/switch.yuck @@ -0,0 +1,15 @@ +(defwindow switch + :monitor 1 + :stacking "fg" + :focusable false + :geometry (geometry :y "60%" + :width "500px" + :height "110px" + :anchor "top center") + (border + "Example contenting") +) + +(defwidget border [] + (box :class "content-box" + (children))) diff --git a/programs/eww/config/scripts/index.html b/programs/eww/config/scripts/index.html deleted file mode 100644 index 590c85c..0000000 --- a/programs/eww/config/scripts/index.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - -Directory listing for /eww/scripts/ - - -

Directory listing for /eww/scripts/

-
- -
- - diff --git a/programs/eww/config/windows.yuck b/programs/eww/config/windows.yuck deleted file mode 100644 index 29fb7c9..0000000 --- a/programs/eww/config/windows.yuck +++ /dev/null @@ -1,32 +0,0 @@ -(include "./widgets/bar.yuck") -(include "./widgets/powerbar.yuck") - -(defwindow bar0 - :monitor 0 - :geometry (geometry :width "100%" - :height "29px" - :anchor "top center") - :stacking "fg" - :exclusive true - (bar) -) - -(defwindow preview - :monitor 0 - :geometry (geometry :x "100px" - :y "5px" - :anchor "top right") - (image :path mediapreview) -) - -(defwindow powerbar0 - :monitor 0 - :geometry (geometry :x "100px" - :y "5px" - :anchor "top right") - (powerbar) -) - -(deflisten mediapreview :initial "hello?" - "bash $XDG_CONFIG_HOME/eww/scripts/medpreview" -) From 7b32e3330c995621e0396789580bd28db86e6e55 Mon Sep 17 00:00:00 2001 From: JuliaLange Date: Fri, 16 Feb 2024 21:29:53 -0800 Subject: [PATCH 039/412] expands hypr config into different parts, makes it cool too --- flake.nix | 7 ++- programs/hypr/default.conf | 80 -------------------------- programs/hypr/default.nix | 12 +++- programs/hypr/keybinds.conf | 5 ++ programs/hypr/nvidia.conf | 6 ++ programs/hypr/scripts/initdb.xsh | 2 +- programs/hypr/settings.conf | 59 +++++++++++++++++++ programs/hypr/window_rules.conf | 36 ++++++++++++ programs/hypr/xwaylandvideobridge.conf | 5 ++ 9 files changed, 128 insertions(+), 84 deletions(-) delete mode 100644 programs/hypr/default.conf create mode 100644 programs/hypr/nvidia.conf create mode 100644 programs/hypr/settings.conf create mode 100644 programs/hypr/window_rules.conf create mode 100644 programs/hypr/xwaylandvideobridge.conf diff --git a/flake.nix b/flake.nix index d9d68e4..a77f362 100644 --- a/flake.nix +++ b/flake.nix @@ -11,15 +11,20 @@ }; hyprland.url = "github:hyprwm/Hyprland"; + hyprland-contrib = { + url = "github:hyprwm/contrib"; + inputs.nixpkgs.follows = "nixpkgs"; + }; }; - outputs = { nixpkgs, home-manager, hyprland, ... }: + outputs = { nixpkgs, home-manager, hyprland, ... }@inputs: let system = "x86_64-linux"; pkgs = nixpkgs.legacyPackages.${system}; in { homeConfigurations."pan" = home-manager.lib.homeManagerConfiguration { inherit pkgs; + extraSpecialArgs = { inherit inputs; }; modules = [ hyprland.homeManagerModules.default ./home.nix diff --git a/programs/hypr/default.conf b/programs/hypr/default.conf deleted file mode 100644 index d92465d..0000000 --- a/programs/hypr/default.conf +++ /dev/null @@ -1,80 +0,0 @@ -monitor=DP-2,2560x1440@144,0x0,1 -monitor=DP-1,2560x1440@144,-2560x0,1 -monitor=HDMI-A-1,disable -env = HYPR_MON_PRIMARY, DP-2 -env = HYPR_MON_SECONDARY, DP-1 - -# Primaries -workspace=name:home, monitor:DP-2, persistent:true, default:true -workspace=name:game, monitor:DP-2, persistent:true -workspace=name:etc0, monitor:DP-2, persistent:true -# Secondaries -workspace=name:chat, monitor:DP-1, persistent:true, default:true -workspace=name:misc0, monitor:DP-1, persistent:true -# Switches -workspace=name:web , monitor:DP-1, persistent:true -workspace=name:med , monitor:DP-1, persistent:true - -windowrule = workspace name:web, librewolf -windowrulev2 = workspace name:med, librewolf,title:Picture-in-Picture -windowrule = workspace name:chat, discord - -env = LIBVA_DRIVER_NAME,nvidia -env = XDG_SESSION_TYPE,wayland -env = GBM_BACKEND,nvidia-drm -env = __GLX_VENDOR_LIBRARY_NAME,nvidia -env = WLR_NO_HARDWARE_CURSORS,1 - -env = HYPR_WORK_DB,$XDG_CACHE_HOME/hypr/workspace.db -exec-once = $XDG_CONFIG_HOME/hypr/scripts/changesecondary.xsh - -exec-once = swww init -exec-once = swww img $HOME/med/pix/bg.png - -input { - kb_layout = us - follow_mouse = 1 - accel_profile = flat - sensitivity = -0.52 - #sensitivity = 0.2 # -1.0 - 1.0, 0 means no modification. -} - -general { - gaps_in = 3 - gaps_out = 3 - border_size = 2 - col.active_border = rgb(F5C2E7) - col.inactive_border = rgb(1E1D2F) - - layout = master -} - -decoration { - rounding = 2 - blur { - size = 12 - } -} - -animations { - enabled = yes - - animation = windows, 1, 4, default, popin 50% - animation = windowsOut, 1, 4, default, popin 50% - animation = windowsMove, 1, 3, default - animation = border, 1, 3, default - animation = fade, 1, 3, default - animation = workspaces, 1, 3, default -} - -master { - no_gaps_when_only = true - new_is_master = false -} - -Binds { - workspace_back_and_forth = true -} - -windowrule = opacity 0.9 0.9,^(Alacritty)$ -windowrule = opacity 0.94 0.94,^(discord)$ diff --git a/programs/hypr/default.nix b/programs/hypr/default.nix index e1234a3..b57f85a 100644 --- a/programs/hypr/default.nix +++ b/programs/hypr/default.nix @@ -1,18 +1,26 @@ -{ config, pkgs, ... }: +{ inputs, pkgs, ... }: let rootPath = ./.; in { wayland.windowManager.hyprland.enable = true; wayland.windowManager.hyprland.extraConfig = '' - ${builtins.readFile ./default.conf} + ${builtins.readFile ./window_rules.conf} + ${builtins.readFile ./settings.conf} + ${builtins.readFile ./nvidia.conf} ${builtins.readFile ./keybinds.conf} + ${builtins.readFile ./xwaylandvideobridge.conf} ''; # wayland.windowManager.hyprland.enableNvidiaPatches = true; home.packages = with pkgs; [ socat # For hyprland scripts swww # Wallpaper engine wlr-randr # Xrandr for wayland + wl-clipboard # Clipboard manager for wayland xdg-desktop-portal-hyprland # XDP for hyprland + hyprpicker # Colorpicker, needed for screenshot tool + inputs.hyprland-contrib.packages.${pkgs.system}.grimblast # Screenshot tool + xwaylandvideobridge # Allows screensharing with xwayland apps ]; + # Hyprland screenshot tool xdg.configFile."hypr-scripts" = { source = rootPath + "/scripts"; target = "hypr/scripts"; diff --git a/programs/hypr/keybinds.conf b/programs/hypr/keybinds.conf index ab4d5a0..3c9b2d8 100644 --- a/programs/hypr/keybinds.conf +++ b/programs/hypr/keybinds.conf @@ -3,6 +3,8 @@ $mainMod = SUPER # Exec programs bind = $mainMod, return, exec, alacritty bind = $mainMod SHIFT, return, exec, rofi -show run +bind = $mainMod, P, exec, grimblast --freeze copy area +bind = $mainMod SHIFT, P, exec, grimblast --freeze copysave area # Hyprland Management bind = $mainMod SHIFT, Q, exit, @@ -24,6 +26,9 @@ bind = $mainMod, 4, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh game binde = $mainMod, 5, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh etc binde = $mainMod, TAB, exec, $XDG_CONFIG_HOME/hypr/scripts/changesecondary.xsh +bind = $mainMod, m, togglespecialworkspace, mus +bind = $mainMod, i, togglespecialworkspace, scratch + # Window Management bind = $mainMod, C, killactive, diff --git a/programs/hypr/nvidia.conf b/programs/hypr/nvidia.conf new file mode 100644 index 0000000..1271144 --- /dev/null +++ b/programs/hypr/nvidia.conf @@ -0,0 +1,6 @@ +# Nivida Settings +env = LIBVA_DRIVER_NAME,nvidia +env = XDG_SESSION_TYPE,wayland +env = GBM_BACKEND,nvidia-drm +env = __GLX_VENDOR_LIBRARY_NAME,nvidia +env = WLR_NO_HARDWARE_CURSORS,1 diff --git a/programs/hypr/scripts/initdb.xsh b/programs/hypr/scripts/initdb.xsh index 8e7af93..85bdad5 100755 --- a/programs/hypr/scripts/initdb.xsh +++ b/programs/hypr/scripts/initdb.xsh @@ -8,6 +8,6 @@ import shelve with shelve.open($HYPR_WORK_DB) as db: db["primary"] = "home" db["secondary"] = "chat" - db["secondaries"] = ["chat", "web"] + db["secondaries"] = ["chat", "web", "med"] db["secondary_extras"] = 1 db["primary_extras"] = 1 diff --git a/programs/hypr/settings.conf b/programs/hypr/settings.conf new file mode 100644 index 0000000..71d0ae2 --- /dev/null +++ b/programs/hypr/settings.conf @@ -0,0 +1,59 @@ +# Monitor Settings +monitor=DP-2,2560x1440@144,0x0,1 +monitor=DP-1,2560x1440@144,-2560x0,1 +monitor=HDMI-A-1,disable + +# Fix screen tearing +env = WLR_DRM_NO_ATOMIC,1 + +# Inits +exec-once = swww init +exec-once = swww img $HOME/med/pix/bg.png + +# Settings +input { + kb_layout = us + follow_mouse = 1 + accel_profile = flat + sensitivity = -0.52 + #sensitivity = 0.2 # -1.0 - 1.0, 0 means no modification. +} + +general { + gaps_in = 3 + gaps_out = 3 + border_size = 2 + col.active_border = rgb(F5C2E7) + col.inactive_border = rgb(1E1D2F) + + layout = master + allow_tearing = true +} + +decoration { + rounding = 2 + blur { + enabled = true + size = 12 + passes = 2 + special = true + } + dim_special = 0.2 +} + +animations { + enabled = yes + + animation = windows, 1, 4, default, popin 50% + animation = windowsOut, 1, 4, default, popin 50% + animation = windowsMove, 1, 3, default + animation = border, 1, 3, default + animation = fade, 1, 3, default + animation = workspaces, 1, 3, default +} + +master { + no_gaps_when_only = true + new_is_master = false + mfact = 0.53 +} diff --git a/programs/hypr/window_rules.conf b/programs/hypr/window_rules.conf new file mode 100644 index 0000000..671e13c --- /dev/null +++ b/programs/hypr/window_rules.conf @@ -0,0 +1,36 @@ +env = HYPR_MON_PRIMARY, DP-2 +env = HYPR_MON_SECONDARY, DP-1 + +# Primaries +workspace=name:home, monitor:DP-2, persistent:true, default:true +workspace=name:game, monitor:DP-2, persistent:true +workspace=name:etc0, monitor:DP-2, persistent:true +# Secondaries +workspace=name:chat, monitor:DP-1, persistent:true, default:true +workspace=name:misc0, monitor:DP-1, persistent:true +# Switches +workspace=name:web , monitor:DP-1, persistent:true +workspace=name:med , monitor:DP-1, persistent:true +# Pseudo +workspace=special:mus, persistent:true +workspace=special:scratch, on-created-empty: [float; size 50% 50%; center] alacritty + +windowrule = workspace name:web, librewolf +windowrulev2 = workspace name:med, librewolf,title:Picture-in-Picture +windowrule = workspace name:chat, discord +windowrule = workspace name:chat, Beeper +windowrule = workspace name:game, lutris +windowrule = workspace name:game, explorer.exe +windowrule = workspace name:game, leagueclient.exe +windowrule = workspace name:game, leagueclientux.exe +windowrule = workspace name:game, league of legends.exe +windowrule = immediate, league of legends.exe + +windowrule = opacity 0.9 0.9,^(Alacritty)$ +windowrule = opacity 0.94 0.94,^(discord)$ + +env = HYPR_WORK_DB,$XDG_CACHE_HOME/hypr/workspace.db + +exec-once = [workspace special:mus silent;float;size 70% 70%;center] alacritty -e spt +exec-once = [workspace name:chat silent] Discord +exec-once = [workspace name:chat silent] beeper diff --git a/programs/hypr/xwaylandvideobridge.conf b/programs/hypr/xwaylandvideobridge.conf new file mode 100644 index 0000000..4b77ad2 --- /dev/null +++ b/programs/hypr/xwaylandvideobridge.conf @@ -0,0 +1,5 @@ +windowrulev2 = opacity 0.0 override 0.0 override,class:^(xwaylandvideobridge)$ +windowrulev2 = noanim,class:^(xwaylandvideobridge)$ +windowrulev2 = noinitialfocus,class:^(xwaylandvideobridge)$ +windowrulev2 = maxsize 1 1,class:^(xwaylandvideobridge)$ +windowrulev2 = noblur,class:^(xwaylandvideobridge)$ From b77eacc390f1fe0102c0906958057c2f798692ba Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Fri, 16 Feb 2024 21:29:53 -0800 Subject: [PATCH 040/412] expands hypr config into different parts, makes it cool too --- flake.nix | 7 ++- programs/hypr/default.conf | 80 -------------------------- programs/hypr/default.nix | 12 +++- programs/hypr/keybinds.conf | 5 ++ programs/hypr/nvidia.conf | 6 ++ programs/hypr/scripts/initdb.xsh | 2 +- programs/hypr/settings.conf | 59 +++++++++++++++++++ programs/hypr/window_rules.conf | 36 ++++++++++++ programs/hypr/xwaylandvideobridge.conf | 5 ++ 9 files changed, 128 insertions(+), 84 deletions(-) delete mode 100644 programs/hypr/default.conf create mode 100644 programs/hypr/nvidia.conf create mode 100644 programs/hypr/settings.conf create mode 100644 programs/hypr/window_rules.conf create mode 100644 programs/hypr/xwaylandvideobridge.conf diff --git a/flake.nix b/flake.nix index d9d68e4..a77f362 100644 --- a/flake.nix +++ b/flake.nix @@ -11,15 +11,20 @@ }; hyprland.url = "github:hyprwm/Hyprland"; + hyprland-contrib = { + url = "github:hyprwm/contrib"; + inputs.nixpkgs.follows = "nixpkgs"; + }; }; - outputs = { nixpkgs, home-manager, hyprland, ... }: + outputs = { nixpkgs, home-manager, hyprland, ... }@inputs: let system = "x86_64-linux"; pkgs = nixpkgs.legacyPackages.${system}; in { homeConfigurations."pan" = home-manager.lib.homeManagerConfiguration { inherit pkgs; + extraSpecialArgs = { inherit inputs; }; modules = [ hyprland.homeManagerModules.default ./home.nix diff --git a/programs/hypr/default.conf b/programs/hypr/default.conf deleted file mode 100644 index d92465d..0000000 --- a/programs/hypr/default.conf +++ /dev/null @@ -1,80 +0,0 @@ -monitor=DP-2,2560x1440@144,0x0,1 -monitor=DP-1,2560x1440@144,-2560x0,1 -monitor=HDMI-A-1,disable -env = HYPR_MON_PRIMARY, DP-2 -env = HYPR_MON_SECONDARY, DP-1 - -# Primaries -workspace=name:home, monitor:DP-2, persistent:true, default:true -workspace=name:game, monitor:DP-2, persistent:true -workspace=name:etc0, monitor:DP-2, persistent:true -# Secondaries -workspace=name:chat, monitor:DP-1, persistent:true, default:true -workspace=name:misc0, monitor:DP-1, persistent:true -# Switches -workspace=name:web , monitor:DP-1, persistent:true -workspace=name:med , monitor:DP-1, persistent:true - -windowrule = workspace name:web, librewolf -windowrulev2 = workspace name:med, librewolf,title:Picture-in-Picture -windowrule = workspace name:chat, discord - -env = LIBVA_DRIVER_NAME,nvidia -env = XDG_SESSION_TYPE,wayland -env = GBM_BACKEND,nvidia-drm -env = __GLX_VENDOR_LIBRARY_NAME,nvidia -env = WLR_NO_HARDWARE_CURSORS,1 - -env = HYPR_WORK_DB,$XDG_CACHE_HOME/hypr/workspace.db -exec-once = $XDG_CONFIG_HOME/hypr/scripts/changesecondary.xsh - -exec-once = swww init -exec-once = swww img $HOME/med/pix/bg.png - -input { - kb_layout = us - follow_mouse = 1 - accel_profile = flat - sensitivity = -0.52 - #sensitivity = 0.2 # -1.0 - 1.0, 0 means no modification. -} - -general { - gaps_in = 3 - gaps_out = 3 - border_size = 2 - col.active_border = rgb(F5C2E7) - col.inactive_border = rgb(1E1D2F) - - layout = master -} - -decoration { - rounding = 2 - blur { - size = 12 - } -} - -animations { - enabled = yes - - animation = windows, 1, 4, default, popin 50% - animation = windowsOut, 1, 4, default, popin 50% - animation = windowsMove, 1, 3, default - animation = border, 1, 3, default - animation = fade, 1, 3, default - animation = workspaces, 1, 3, default -} - -master { - no_gaps_when_only = true - new_is_master = false -} - -Binds { - workspace_back_and_forth = true -} - -windowrule = opacity 0.9 0.9,^(Alacritty)$ -windowrule = opacity 0.94 0.94,^(discord)$ diff --git a/programs/hypr/default.nix b/programs/hypr/default.nix index e1234a3..b57f85a 100644 --- a/programs/hypr/default.nix +++ b/programs/hypr/default.nix @@ -1,18 +1,26 @@ -{ config, pkgs, ... }: +{ inputs, pkgs, ... }: let rootPath = ./.; in { wayland.windowManager.hyprland.enable = true; wayland.windowManager.hyprland.extraConfig = '' - ${builtins.readFile ./default.conf} + ${builtins.readFile ./window_rules.conf} + ${builtins.readFile ./settings.conf} + ${builtins.readFile ./nvidia.conf} ${builtins.readFile ./keybinds.conf} + ${builtins.readFile ./xwaylandvideobridge.conf} ''; # wayland.windowManager.hyprland.enableNvidiaPatches = true; home.packages = with pkgs; [ socat # For hyprland scripts swww # Wallpaper engine wlr-randr # Xrandr for wayland + wl-clipboard # Clipboard manager for wayland xdg-desktop-portal-hyprland # XDP for hyprland + hyprpicker # Colorpicker, needed for screenshot tool + inputs.hyprland-contrib.packages.${pkgs.system}.grimblast # Screenshot tool + xwaylandvideobridge # Allows screensharing with xwayland apps ]; + # Hyprland screenshot tool xdg.configFile."hypr-scripts" = { source = rootPath + "/scripts"; target = "hypr/scripts"; diff --git a/programs/hypr/keybinds.conf b/programs/hypr/keybinds.conf index ab4d5a0..3c9b2d8 100644 --- a/programs/hypr/keybinds.conf +++ b/programs/hypr/keybinds.conf @@ -3,6 +3,8 @@ $mainMod = SUPER # Exec programs bind = $mainMod, return, exec, alacritty bind = $mainMod SHIFT, return, exec, rofi -show run +bind = $mainMod, P, exec, grimblast --freeze copy area +bind = $mainMod SHIFT, P, exec, grimblast --freeze copysave area # Hyprland Management bind = $mainMod SHIFT, Q, exit, @@ -24,6 +26,9 @@ bind = $mainMod, 4, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh game binde = $mainMod, 5, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh etc binde = $mainMod, TAB, exec, $XDG_CONFIG_HOME/hypr/scripts/changesecondary.xsh +bind = $mainMod, m, togglespecialworkspace, mus +bind = $mainMod, i, togglespecialworkspace, scratch + # Window Management bind = $mainMod, C, killactive, diff --git a/programs/hypr/nvidia.conf b/programs/hypr/nvidia.conf new file mode 100644 index 0000000..1271144 --- /dev/null +++ b/programs/hypr/nvidia.conf @@ -0,0 +1,6 @@ +# Nivida Settings +env = LIBVA_DRIVER_NAME,nvidia +env = XDG_SESSION_TYPE,wayland +env = GBM_BACKEND,nvidia-drm +env = __GLX_VENDOR_LIBRARY_NAME,nvidia +env = WLR_NO_HARDWARE_CURSORS,1 diff --git a/programs/hypr/scripts/initdb.xsh b/programs/hypr/scripts/initdb.xsh index 8e7af93..85bdad5 100755 --- a/programs/hypr/scripts/initdb.xsh +++ b/programs/hypr/scripts/initdb.xsh @@ -8,6 +8,6 @@ import shelve with shelve.open($HYPR_WORK_DB) as db: db["primary"] = "home" db["secondary"] = "chat" - db["secondaries"] = ["chat", "web"] + db["secondaries"] = ["chat", "web", "med"] db["secondary_extras"] = 1 db["primary_extras"] = 1 diff --git a/programs/hypr/settings.conf b/programs/hypr/settings.conf new file mode 100644 index 0000000..71d0ae2 --- /dev/null +++ b/programs/hypr/settings.conf @@ -0,0 +1,59 @@ +# Monitor Settings +monitor=DP-2,2560x1440@144,0x0,1 +monitor=DP-1,2560x1440@144,-2560x0,1 +monitor=HDMI-A-1,disable + +# Fix screen tearing +env = WLR_DRM_NO_ATOMIC,1 + +# Inits +exec-once = swww init +exec-once = swww img $HOME/med/pix/bg.png + +# Settings +input { + kb_layout = us + follow_mouse = 1 + accel_profile = flat + sensitivity = -0.52 + #sensitivity = 0.2 # -1.0 - 1.0, 0 means no modification. +} + +general { + gaps_in = 3 + gaps_out = 3 + border_size = 2 + col.active_border = rgb(F5C2E7) + col.inactive_border = rgb(1E1D2F) + + layout = master + allow_tearing = true +} + +decoration { + rounding = 2 + blur { + enabled = true + size = 12 + passes = 2 + special = true + } + dim_special = 0.2 +} + +animations { + enabled = yes + + animation = windows, 1, 4, default, popin 50% + animation = windowsOut, 1, 4, default, popin 50% + animation = windowsMove, 1, 3, default + animation = border, 1, 3, default + animation = fade, 1, 3, default + animation = workspaces, 1, 3, default +} + +master { + no_gaps_when_only = true + new_is_master = false + mfact = 0.53 +} diff --git a/programs/hypr/window_rules.conf b/programs/hypr/window_rules.conf new file mode 100644 index 0000000..671e13c --- /dev/null +++ b/programs/hypr/window_rules.conf @@ -0,0 +1,36 @@ +env = HYPR_MON_PRIMARY, DP-2 +env = HYPR_MON_SECONDARY, DP-1 + +# Primaries +workspace=name:home, monitor:DP-2, persistent:true, default:true +workspace=name:game, monitor:DP-2, persistent:true +workspace=name:etc0, monitor:DP-2, persistent:true +# Secondaries +workspace=name:chat, monitor:DP-1, persistent:true, default:true +workspace=name:misc0, monitor:DP-1, persistent:true +# Switches +workspace=name:web , monitor:DP-1, persistent:true +workspace=name:med , monitor:DP-1, persistent:true +# Pseudo +workspace=special:mus, persistent:true +workspace=special:scratch, on-created-empty: [float; size 50% 50%; center] alacritty + +windowrule = workspace name:web, librewolf +windowrulev2 = workspace name:med, librewolf,title:Picture-in-Picture +windowrule = workspace name:chat, discord +windowrule = workspace name:chat, Beeper +windowrule = workspace name:game, lutris +windowrule = workspace name:game, explorer.exe +windowrule = workspace name:game, leagueclient.exe +windowrule = workspace name:game, leagueclientux.exe +windowrule = workspace name:game, league of legends.exe +windowrule = immediate, league of legends.exe + +windowrule = opacity 0.9 0.9,^(Alacritty)$ +windowrule = opacity 0.94 0.94,^(discord)$ + +env = HYPR_WORK_DB,$XDG_CACHE_HOME/hypr/workspace.db + +exec-once = [workspace special:mus silent;float;size 70% 70%;center] alacritty -e spt +exec-once = [workspace name:chat silent] Discord +exec-once = [workspace name:chat silent] beeper diff --git a/programs/hypr/xwaylandvideobridge.conf b/programs/hypr/xwaylandvideobridge.conf new file mode 100644 index 0000000..4b77ad2 --- /dev/null +++ b/programs/hypr/xwaylandvideobridge.conf @@ -0,0 +1,5 @@ +windowrulev2 = opacity 0.0 override 0.0 override,class:^(xwaylandvideobridge)$ +windowrulev2 = noanim,class:^(xwaylandvideobridge)$ +windowrulev2 = noinitialfocus,class:^(xwaylandvideobridge)$ +windowrulev2 = maxsize 1 1,class:^(xwaylandvideobridge)$ +windowrulev2 = noblur,class:^(xwaylandvideobridge)$ From 48c4277b9dc5c5e02b7a1cf0fb97e5dbd946be2b Mon Sep 17 00:00:00 2001 From: JuliaLange Date: Fri, 16 Feb 2024 21:32:55 -0800 Subject: [PATCH 041/412] change eww to ags --- flake.lock | 86 +++++++++++++++---- flake.nix | 1 + home.nix | 3 +- programs/ags/config/config.js | 7 ++ programs/ags/config/modules/clock.js | 22 +++++ .../ags/config/modules/workspace-switch.js | 22 +++++ programs/ags/default.nix | 19 ++++ 7 files changed, 144 insertions(+), 16 deletions(-) create mode 100644 programs/ags/config/config.js create mode 100644 programs/ags/config/modules/clock.js create mode 100644 programs/ags/config/modules/workspace-switch.js create mode 100644 programs/ags/default.nix diff --git a/flake.lock b/flake.lock index d1e7624..9b8db53 100644 --- a/flake.lock +++ b/flake.lock @@ -1,5 +1,23 @@ { "nodes": { + "ags": { + "inputs": { + "nixpkgs": "nixpkgs" + }, + "locked": { + "lastModified": 1708045757, + "narHash": "sha256-UDFJzw2MJcd4oHk+xOPkmyM3u+UwrNuKBFsKAVQaoQQ=", + "owner": "Aylur", + "repo": "ags", + "rev": "4ac0dbb473918eda325143c2053bdd428f9708d4", + "type": "github" + }, + "original": { + "owner": "Aylur", + "repo": "ags", + "type": "github" + } + }, "home-manager": { "inputs": { "nixpkgs": [ @@ -23,17 +41,17 @@ "hyprland": { "inputs": { "hyprland-protocols": "hyprland-protocols", - "nixpkgs": "nixpkgs", + "nixpkgs": "nixpkgs_2", "systems": "systems", "wlroots": "wlroots", "xdph": "xdph" }, "locked": { - "lastModified": 1705782792, - "narHash": "sha256-AnNvfQK3BQtri7JUmTsaAWAOBzCxEf5t3VaGm0Kezjk=", + "lastModified": 1708138027, + "narHash": "sha256-xTOrKOamqdVtW+v7j0bUTed8nqfijEMahJ7edgFtWL0=", "owner": "hyprwm", "repo": "Hyprland", - "rev": "4d403dac3244aab217fb9bf17a68e9a009fcadd8", + "rev": "cdcc5aba06f20005842cf966b23af50456dc7142", "type": "github" }, "original": { @@ -42,6 +60,26 @@ "type": "github" } }, + "hyprland-contrib": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1706198673, + "narHash": "sha256-bHlxFd+3QHy6eXtTzzhwVNcyxBSOxTvBuJGNUzI4C4M=", + "owner": "hyprwm", + "repo": "contrib", + "rev": "16884001b26e6955ff4b88b4dfe4c8986e20f153", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "contrib", + "type": "github" + } + }, "hyprland-protocols": { "inputs": { "nixpkgs": [ @@ -91,11 +129,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1705133751, - "narHash": "sha256-rCIsyE80jgiOU78gCWN3A0wE0tR2GI5nH6MlS+HaaSQ=", + "lastModified": 1705496572, + "narHash": "sha256-rPIe9G5EBLXdBdn9ilGc0nq082lzQd0xGGe092R/5QE=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "9b19f5e77dd906cb52dade0b7bd280339d2a1f3d", + "rev": "842d9d80cfd4560648c785f8a4e6f3b096790e19", "type": "github" }, "original": { @@ -106,6 +144,22 @@ } }, "nixpkgs_2": { + "locked": { + "lastModified": 1707546158, + "narHash": "sha256-nYYJTpzfPMDxI8mzhQsYjIUX+grorqjKEU9Np6Xwy/0=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "d934204a0f8d9198e1e4515dd6fec76a139c87f0", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_3": { "locked": { "lastModified": 1701902328, "narHash": "sha256-3tiiSEgQRPps0aV40belvLk1k4Max7oRh/+hZGLtfGc=", @@ -123,9 +177,11 @@ }, "root": { "inputs": { + "ags": "ags", "home-manager": "home-manager", "hyprland": "hyprland", - "nixpkgs": "nixpkgs_2" + "hyprland-contrib": "hyprland-contrib", + "nixpkgs": "nixpkgs_3" } }, "systems": { @@ -147,18 +203,18 @@ "flake": false, "locked": { "host": "gitlab.freedesktop.org", - "lastModified": 1703963193, - "narHash": "sha256-ke8drv6PTrdQDruWbajrRJffP9A9PU6FRyjJGNZRTs4=", + "lastModified": 1706359063, + "narHash": "sha256-5HUTG0p+nCJv3cn73AmFHRZdfRV5AD5N43g8xAePSKM=", "owner": "wlroots", "repo": "wlroots", - "rev": "f81c3d93cd6f61b20ae784297679283438def8df", + "rev": "00b869c1a96f300a8f25da95d624524895e0ddf2", "type": "gitlab" }, "original": { "host": "gitlab.freedesktop.org", "owner": "wlroots", "repo": "wlroots", - "rev": "f81c3d93cd6f61b20ae784297679283438def8df", + "rev": "00b869c1a96f300a8f25da95d624524895e0ddf2", "type": "gitlab" } }, @@ -179,11 +235,11 @@ ] }, "locked": { - "lastModified": 1704659450, - "narHash": "sha256-3lyoUVtUWz1LuxbltAtkJSK2IlVXmKhxCRU2/0PYCms=", + "lastModified": 1706521509, + "narHash": "sha256-AInZ50acOJ3wzUwGzNr1TmxGTMx+8j6oSTzz4E7Vbp8=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "6a5de92769d5b7038134044053f90e7458f6a197", + "rev": "c06fd88b3da492b8f9067be021b9184f7012b5a8", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index a77f362..c40464f 100644 --- a/flake.nix +++ b/flake.nix @@ -15,6 +15,7 @@ url = "github:hyprwm/contrib"; inputs.nixpkgs.follows = "nixpkgs"; }; + ags.url = "github:Aylur/ags"; }; outputs = { nixpkgs, home-manager, hyprland, ... }@inputs: diff --git a/home.nix b/home.nix index 714ce88..25641b9 100644 --- a/home.nix +++ b/home.nix @@ -6,10 +6,11 @@ home.homeDirectory = "/home/pan"; imports = [ + # ./programs/eww + ./programs/ags ./programs/alacritty ./programs/discord ./programs/dunst - ./programs/eww ./programs/fish ./programs/git ./programs/hypr diff --git a/programs/ags/config/config.js b/programs/ags/config/config.js new file mode 100644 index 0000000..ec3b3ee --- /dev/null +++ b/programs/ags/config/config.js @@ -0,0 +1,7 @@ +import { Switch } from "./modules/workspace-switch.js"; + +export default { + windows: [ + Switch(1) + ] +} diff --git a/programs/ags/config/modules/clock.js b/programs/ags/config/modules/clock.js new file mode 100644 index 0000000..6f9f462 --- /dev/null +++ b/programs/ags/config/modules/clock.js @@ -0,0 +1,22 @@ +export const Clock = (monitor = 0) => { + + return Widget.Window({ + monitor, + name: `switch${monitor}`, + anchor: ['top', 'left', 'right'], + margins: [864, 1030], + css: 'background: transparent;', + child: container, + }); +}; + +const container = Widget.Box({ + css: ` + min-height: 110px; + min-width: 500px; + border: 4px solid #f4d80a; + border-radius: 50px; + margin: 3px; + box-shadow: 0 0 0 3px white; + `, +}); diff --git a/programs/ags/config/modules/workspace-switch.js b/programs/ags/config/modules/workspace-switch.js new file mode 100644 index 0000000..6b8d6bd --- /dev/null +++ b/programs/ags/config/modules/workspace-switch.js @@ -0,0 +1,22 @@ +export const Switch = (monitor = 0) => { + + return Widget.Window({ + monitor, + name: `switch${monitor}`, + anchor: ['top', 'left', 'right'], + margins: [864, 1030], + css: 'background: transparent;', + child: container, + }); +}; + +const container = Widget.Box({ + css: ` + min-height: 110px; + min-width: 500px; + border: 4px solid #f4d80a; + border-radius: 50px; + margin: 3px; + box-shadow: 0 0 0 3px white; + `, +}); diff --git a/programs/ags/default.nix b/programs/ags/default.nix new file mode 100644 index 0000000..68dfd65 --- /dev/null +++ b/programs/ags/default.nix @@ -0,0 +1,19 @@ +{ inputs, pkgs, ... }: +{ + # add the home manager module + imports = [ inputs.ags.homeManagerModules.default ]; + + programs.ags = { + enable = true; + + # null or path, leave as null if you don't want hm to manage the config + configDir = ./config; + + # additional packages to add to gjs's runtime + extraPackages = with pkgs; [ + gtksourceview + webkitgtk + accountsservice + ]; + }; +} From 33e4003dda358581d1a2e81db5a4b5d803b86a51 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Fri, 16 Feb 2024 21:32:55 -0800 Subject: [PATCH 042/412] change eww to ags --- flake.lock | 86 +++++++++++++++---- flake.nix | 1 + home.nix | 3 +- programs/ags/config/config.js | 7 ++ programs/ags/config/modules/clock.js | 22 +++++ .../ags/config/modules/workspace-switch.js | 22 +++++ programs/ags/default.nix | 19 ++++ 7 files changed, 144 insertions(+), 16 deletions(-) create mode 100644 programs/ags/config/config.js create mode 100644 programs/ags/config/modules/clock.js create mode 100644 programs/ags/config/modules/workspace-switch.js create mode 100644 programs/ags/default.nix diff --git a/flake.lock b/flake.lock index d1e7624..9b8db53 100644 --- a/flake.lock +++ b/flake.lock @@ -1,5 +1,23 @@ { "nodes": { + "ags": { + "inputs": { + "nixpkgs": "nixpkgs" + }, + "locked": { + "lastModified": 1708045757, + "narHash": "sha256-UDFJzw2MJcd4oHk+xOPkmyM3u+UwrNuKBFsKAVQaoQQ=", + "owner": "Aylur", + "repo": "ags", + "rev": "4ac0dbb473918eda325143c2053bdd428f9708d4", + "type": "github" + }, + "original": { + "owner": "Aylur", + "repo": "ags", + "type": "github" + } + }, "home-manager": { "inputs": { "nixpkgs": [ @@ -23,17 +41,17 @@ "hyprland": { "inputs": { "hyprland-protocols": "hyprland-protocols", - "nixpkgs": "nixpkgs", + "nixpkgs": "nixpkgs_2", "systems": "systems", "wlroots": "wlroots", "xdph": "xdph" }, "locked": { - "lastModified": 1705782792, - "narHash": "sha256-AnNvfQK3BQtri7JUmTsaAWAOBzCxEf5t3VaGm0Kezjk=", + "lastModified": 1708138027, + "narHash": "sha256-xTOrKOamqdVtW+v7j0bUTed8nqfijEMahJ7edgFtWL0=", "owner": "hyprwm", "repo": "Hyprland", - "rev": "4d403dac3244aab217fb9bf17a68e9a009fcadd8", + "rev": "cdcc5aba06f20005842cf966b23af50456dc7142", "type": "github" }, "original": { @@ -42,6 +60,26 @@ "type": "github" } }, + "hyprland-contrib": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1706198673, + "narHash": "sha256-bHlxFd+3QHy6eXtTzzhwVNcyxBSOxTvBuJGNUzI4C4M=", + "owner": "hyprwm", + "repo": "contrib", + "rev": "16884001b26e6955ff4b88b4dfe4c8986e20f153", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "contrib", + "type": "github" + } + }, "hyprland-protocols": { "inputs": { "nixpkgs": [ @@ -91,11 +129,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1705133751, - "narHash": "sha256-rCIsyE80jgiOU78gCWN3A0wE0tR2GI5nH6MlS+HaaSQ=", + "lastModified": 1705496572, + "narHash": "sha256-rPIe9G5EBLXdBdn9ilGc0nq082lzQd0xGGe092R/5QE=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "9b19f5e77dd906cb52dade0b7bd280339d2a1f3d", + "rev": "842d9d80cfd4560648c785f8a4e6f3b096790e19", "type": "github" }, "original": { @@ -106,6 +144,22 @@ } }, "nixpkgs_2": { + "locked": { + "lastModified": 1707546158, + "narHash": "sha256-nYYJTpzfPMDxI8mzhQsYjIUX+grorqjKEU9Np6Xwy/0=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "d934204a0f8d9198e1e4515dd6fec76a139c87f0", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_3": { "locked": { "lastModified": 1701902328, "narHash": "sha256-3tiiSEgQRPps0aV40belvLk1k4Max7oRh/+hZGLtfGc=", @@ -123,9 +177,11 @@ }, "root": { "inputs": { + "ags": "ags", "home-manager": "home-manager", "hyprland": "hyprland", - "nixpkgs": "nixpkgs_2" + "hyprland-contrib": "hyprland-contrib", + "nixpkgs": "nixpkgs_3" } }, "systems": { @@ -147,18 +203,18 @@ "flake": false, "locked": { "host": "gitlab.freedesktop.org", - "lastModified": 1703963193, - "narHash": "sha256-ke8drv6PTrdQDruWbajrRJffP9A9PU6FRyjJGNZRTs4=", + "lastModified": 1706359063, + "narHash": "sha256-5HUTG0p+nCJv3cn73AmFHRZdfRV5AD5N43g8xAePSKM=", "owner": "wlroots", "repo": "wlroots", - "rev": "f81c3d93cd6f61b20ae784297679283438def8df", + "rev": "00b869c1a96f300a8f25da95d624524895e0ddf2", "type": "gitlab" }, "original": { "host": "gitlab.freedesktop.org", "owner": "wlroots", "repo": "wlroots", - "rev": "f81c3d93cd6f61b20ae784297679283438def8df", + "rev": "00b869c1a96f300a8f25da95d624524895e0ddf2", "type": "gitlab" } }, @@ -179,11 +235,11 @@ ] }, "locked": { - "lastModified": 1704659450, - "narHash": "sha256-3lyoUVtUWz1LuxbltAtkJSK2IlVXmKhxCRU2/0PYCms=", + "lastModified": 1706521509, + "narHash": "sha256-AInZ50acOJ3wzUwGzNr1TmxGTMx+8j6oSTzz4E7Vbp8=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "6a5de92769d5b7038134044053f90e7458f6a197", + "rev": "c06fd88b3da492b8f9067be021b9184f7012b5a8", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index a77f362..c40464f 100644 --- a/flake.nix +++ b/flake.nix @@ -15,6 +15,7 @@ url = "github:hyprwm/contrib"; inputs.nixpkgs.follows = "nixpkgs"; }; + ags.url = "github:Aylur/ags"; }; outputs = { nixpkgs, home-manager, hyprland, ... }@inputs: diff --git a/home.nix b/home.nix index 714ce88..25641b9 100644 --- a/home.nix +++ b/home.nix @@ -6,10 +6,11 @@ home.homeDirectory = "/home/pan"; imports = [ + # ./programs/eww + ./programs/ags ./programs/alacritty ./programs/discord ./programs/dunst - ./programs/eww ./programs/fish ./programs/git ./programs/hypr diff --git a/programs/ags/config/config.js b/programs/ags/config/config.js new file mode 100644 index 0000000..ec3b3ee --- /dev/null +++ b/programs/ags/config/config.js @@ -0,0 +1,7 @@ +import { Switch } from "./modules/workspace-switch.js"; + +export default { + windows: [ + Switch(1) + ] +} diff --git a/programs/ags/config/modules/clock.js b/programs/ags/config/modules/clock.js new file mode 100644 index 0000000..6f9f462 --- /dev/null +++ b/programs/ags/config/modules/clock.js @@ -0,0 +1,22 @@ +export const Clock = (monitor = 0) => { + + return Widget.Window({ + monitor, + name: `switch${monitor}`, + anchor: ['top', 'left', 'right'], + margins: [864, 1030], + css: 'background: transparent;', + child: container, + }); +}; + +const container = Widget.Box({ + css: ` + min-height: 110px; + min-width: 500px; + border: 4px solid #f4d80a; + border-radius: 50px; + margin: 3px; + box-shadow: 0 0 0 3px white; + `, +}); diff --git a/programs/ags/config/modules/workspace-switch.js b/programs/ags/config/modules/workspace-switch.js new file mode 100644 index 0000000..6b8d6bd --- /dev/null +++ b/programs/ags/config/modules/workspace-switch.js @@ -0,0 +1,22 @@ +export const Switch = (monitor = 0) => { + + return Widget.Window({ + monitor, + name: `switch${monitor}`, + anchor: ['top', 'left', 'right'], + margins: [864, 1030], + css: 'background: transparent;', + child: container, + }); +}; + +const container = Widget.Box({ + css: ` + min-height: 110px; + min-width: 500px; + border: 4px solid #f4d80a; + border-radius: 50px; + margin: 3px; + box-shadow: 0 0 0 3px white; + `, +}); diff --git a/programs/ags/default.nix b/programs/ags/default.nix new file mode 100644 index 0000000..68dfd65 --- /dev/null +++ b/programs/ags/default.nix @@ -0,0 +1,19 @@ +{ inputs, pkgs, ... }: +{ + # add the home manager module + imports = [ inputs.ags.homeManagerModules.default ]; + + programs.ags = { + enable = true; + + # null or path, leave as null if you don't want hm to manage the config + configDir = ./config; + + # additional packages to add to gjs's runtime + extraPackages = with pkgs; [ + gtksourceview + webkitgtk + accountsservice + ]; + }; +} From 2d65ab9d909164d96b17a7a36bcbe4ce2a319eeb Mon Sep 17 00:00:00 2001 From: JuliaLange Date: Fri, 16 Feb 2024 21:39:09 -0800 Subject: [PATCH 043/412] Change font size --- programs/alacritty/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/programs/alacritty/default.nix b/programs/alacritty/default.nix index 49c8763..d3a0378 100644 --- a/programs/alacritty/default.nix +++ b/programs/alacritty/default.nix @@ -26,7 +26,7 @@ x = 0; y = 0; }; - size = 24.0; + size = 18.0; }; }; } From 58f5bc36048d1f8e919b98ada043a47a952d613f Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Fri, 16 Feb 2024 21:39:09 -0800 Subject: [PATCH 044/412] Change font size --- programs/alacritty/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/programs/alacritty/default.nix b/programs/alacritty/default.nix index 49c8763..d3a0378 100644 --- a/programs/alacritty/default.nix +++ b/programs/alacritty/default.nix @@ -26,7 +26,7 @@ x = 0; y = 0; }; - size = 24.0; + size = 18.0; }; }; } From 4a5e71f4ade21cdfb005524ecce5319f2fa31889 Mon Sep 17 00:00:00 2001 From: langedev Date: Sat, 17 Feb 2024 18:06:27 -0800 Subject: [PATCH 045/412] Faster boot timeout, and updated --- flake.lock | 6 +++--- modules/system/default.nix | 2 ++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/flake.lock b/flake.lock index cb22f7f..1629ff0 100644 --- a/flake.lock +++ b/flake.lock @@ -9,11 +9,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1708135752, - "narHash": "sha256-T7ioseAAZCNOAIP6beEBKXA2oFqEs7zphwvurT6sp9k=", + "lastModified": 1708215223, + "narHash": "sha256-5z+NPNoiWKoaz3M4LZJ2fP+N7Vl9XGwr4QAV8rh4l4o=", "owner": "hyprwm", "repo": "Hyprland", - "rev": "e3e7e1fdda7660a70bd206aa3ed6a45bb4000376", + "rev": "683a4b07c514fa3c13cdf09e475283a69fcc7653", "type": "github" }, "original": { diff --git a/modules/system/default.nix b/modules/system/default.nix index a673e60..458ad20 100644 --- a/modules/system/default.nix +++ b/modules/system/default.nix @@ -2,7 +2,9 @@ { # Use the systemd-boot EFI boot loader. + boot.kernelPackages = pkgs.linuxPackages_latest; boot.loader.systemd-boot.enable = true; + boot.loader.timeout = 1; boot.loader.efi.canTouchEfiVariables = true; time.timeZone = "America/Los_Angeles"; From 2891970cd01240b4bcee5c238609a645a63477e0 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sat, 17 Feb 2024 18:06:27 -0800 Subject: [PATCH 046/412] Faster boot timeout, and updated --- flake.lock | 6 +++--- modules/system/default.nix | 2 ++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/flake.lock b/flake.lock index cb22f7f..1629ff0 100644 --- a/flake.lock +++ b/flake.lock @@ -9,11 +9,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1708135752, - "narHash": "sha256-T7ioseAAZCNOAIP6beEBKXA2oFqEs7zphwvurT6sp9k=", + "lastModified": 1708215223, + "narHash": "sha256-5z+NPNoiWKoaz3M4LZJ2fP+N7Vl9XGwr4QAV8rh4l4o=", "owner": "hyprwm", "repo": "Hyprland", - "rev": "e3e7e1fdda7660a70bd206aa3ed6a45bb4000376", + "rev": "683a4b07c514fa3c13cdf09e475283a69fcc7653", "type": "github" }, "original": { diff --git a/modules/system/default.nix b/modules/system/default.nix index a673e60..458ad20 100644 --- a/modules/system/default.nix +++ b/modules/system/default.nix @@ -2,7 +2,9 @@ { # Use the systemd-boot EFI boot loader. + boot.kernelPackages = pkgs.linuxPackages_latest; boot.loader.systemd-boot.enable = true; + boot.loader.timeout = 1; boot.loader.efi.canTouchEfiVariables = true; time.timeZone = "America/Los_Angeles"; From 986cfcff007e6d2be971c439ad52da3cebd6458a Mon Sep 17 00:00:00 2001 From: langedev Date: Tue, 20 Feb 2024 13:46:18 -0800 Subject: [PATCH 047/412] Update foofoo4u --- modules/network/networking/default.nix | 34 ++++++++++++++++---------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/modules/network/networking/default.nix b/modules/network/networking/default.nix index 57fae54..d778498 100644 --- a/modules/network/networking/default.nix +++ b/modules/network/networking/default.nix @@ -9,29 +9,37 @@ }; networks = { "The Kabal 2.4" = { - pskRaw = "56302c1b1c7499f4a4f0e01cefe14b4393c5092420ebf71c68336cd084acd357"; - priority = 1; + pskRaw = "56302c1b1c7499f4a4f0e01cefe14b4393c5092420ebf71c68336cd084acd357"; + priority = 1; }; "WWUwireless-Secure" = { auth = '' key_mgmt=WPA-EAP - eap=PEAP - identity="langed@wwu.edu" - password="Slashed-Tidy4-Cubbyhole" - ''; - priority = 1; + eap=PEAP + identity="langed@wwu.edu" + password="Slashed-Tidy4-Cubbyhole" + ''; + priority = 1; }; "Yellowsticky" = { - pskRaw = "8984d7e1e2f5bd9c3ccf92e429886bc64d40d42d4771ed5946556227afa4abf0"; - priority = 1; + pskRaw = "8984d7e1e2f5bd9c3ccf92e429886bc64d40d42d4771ed5946556227afa4abf0"; + priority = 1; }; "Lange" = { - pskRaw = "bbbbf63e23747bc0ff36aed4c20dcee0221a6ccb2d2db07e4c64058e645e5f1e"; - priority = 1; + pskRaw = "bbbbf63e23747bc0ff36aed4c20dcee0221a6ccb2d2db07e4c64058e645e5f1e"; + priority = 1; + }; + "foofoo2" = { + pskRaw = "1269f8db0aec9d9c30bff6de9951f0ab2d18d7cea4dacd8bd253ebc237e73e2d"; + priority = 1; + }; + "OrbiWanKenobe" = { + pskRaw = "0128447a146d359c1224e558b0f4e3fc0a53b0b4a178334075b50f8d07e179d2"; + priority = 1; }; "Homura" = { - pskRaw = "dd77456e1df3f2c17bccc917a0e609684fa6d2ccb6a2e0fb122d50d243e0c87e"; - priority = 0; + pskRaw = "dd77456e1df3f2c17bccc917a0e609684fa6d2ccb6a2e0fb122d50d243e0c87e"; + priority = 0; }; }; }; From 2a7082a7c0db4fa694fe885f69c662a3fb316431 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 20 Feb 2024 13:46:18 -0800 Subject: [PATCH 048/412] Update foofoo4u --- modules/network/networking/default.nix | 34 ++++++++++++++++---------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/modules/network/networking/default.nix b/modules/network/networking/default.nix index 57fae54..d778498 100644 --- a/modules/network/networking/default.nix +++ b/modules/network/networking/default.nix @@ -9,29 +9,37 @@ }; networks = { "The Kabal 2.4" = { - pskRaw = "56302c1b1c7499f4a4f0e01cefe14b4393c5092420ebf71c68336cd084acd357"; - priority = 1; + pskRaw = "56302c1b1c7499f4a4f0e01cefe14b4393c5092420ebf71c68336cd084acd357"; + priority = 1; }; "WWUwireless-Secure" = { auth = '' key_mgmt=WPA-EAP - eap=PEAP - identity="langed@wwu.edu" - password="Slashed-Tidy4-Cubbyhole" - ''; - priority = 1; + eap=PEAP + identity="langed@wwu.edu" + password="Slashed-Tidy4-Cubbyhole" + ''; + priority = 1; }; "Yellowsticky" = { - pskRaw = "8984d7e1e2f5bd9c3ccf92e429886bc64d40d42d4771ed5946556227afa4abf0"; - priority = 1; + pskRaw = "8984d7e1e2f5bd9c3ccf92e429886bc64d40d42d4771ed5946556227afa4abf0"; + priority = 1; }; "Lange" = { - pskRaw = "bbbbf63e23747bc0ff36aed4c20dcee0221a6ccb2d2db07e4c64058e645e5f1e"; - priority = 1; + pskRaw = "bbbbf63e23747bc0ff36aed4c20dcee0221a6ccb2d2db07e4c64058e645e5f1e"; + priority = 1; + }; + "foofoo2" = { + pskRaw = "1269f8db0aec9d9c30bff6de9951f0ab2d18d7cea4dacd8bd253ebc237e73e2d"; + priority = 1; + }; + "OrbiWanKenobe" = { + pskRaw = "0128447a146d359c1224e558b0f4e3fc0a53b0b4a178334075b50f8d07e179d2"; + priority = 1; }; "Homura" = { - pskRaw = "dd77456e1df3f2c17bccc917a0e609684fa6d2ccb6a2e0fb122d50d243e0c87e"; - priority = 0; + pskRaw = "dd77456e1df3f2c17bccc917a0e609684fa6d2ccb6a2e0fb122d50d243e0c87e"; + priority = 0; }; }; }; From 5f2b93e52299f9d5707c0642b27ab140d4011ad2 Mon Sep 17 00:00:00 2001 From: langedev Date: Wed, 21 Feb 2024 14:48:45 -0800 Subject: [PATCH 049/412] Squashed commit of the following: commit b56a956345dbe9cc152097b540436a74fee3a844 Author: langedev Date: Wed Feb 21 14:31:11 2024 -0800 Fix typo commit 38aadf56730fb7d7a9ddbf704d024061c43983b3 Author: langedev Date: Wed Feb 21 14:24:49 2024 -0800 testing refactoring --- flake.lock | 48 +++++++++++++++++-- flake.nix | 28 +++++++++-- laptop.nix | 11 ----- systems/jibril/default.nix | 11 +++++ .../laptop.nix => systems/jibril/hardware.nix | 0 desktop.nix => systems/onizuka/default.nix | 5 +- .../onizuka/hardware.nix | 0 .../shared/default.nix | 26 ++++------ 8 files changed, 89 insertions(+), 40 deletions(-) delete mode 100644 laptop.nix create mode 100644 systems/jibril/default.nix rename hardware/laptop.nix => systems/jibril/hardware.nix (100%) rename desktop.nix => systems/onizuka/default.nix (57%) rename hardware/desktop.nix => systems/onizuka/hardware.nix (100%) rename configuration.nix => systems/shared/default.nix (62%) diff --git a/flake.lock b/flake.lock index 1629ff0..396fa31 100644 --- a/flake.lock +++ b/flake.lock @@ -3,17 +3,18 @@ "hyprland": { "inputs": { "hyprland-protocols": "hyprland-protocols", + "hyprlang": "hyprlang", "nixpkgs": "nixpkgs", "systems": "systems", "wlroots": "wlroots", "xdph": "xdph" }, "locked": { - "lastModified": 1708215223, - "narHash": "sha256-5z+NPNoiWKoaz3M4LZJ2fP+N7Vl9XGwr4QAV8rh4l4o=", + "lastModified": 1708543581, + "narHash": "sha256-wvhsh4J+Q9ED8oAWG+iz5uNOw70nagF+aeetlGpLkqs=", "owner": "hyprwm", "repo": "Hyprland", - "rev": "683a4b07c514fa3c13cdf09e475283a69fcc7653", + "rev": "ea3fd13e24d7d3a74cf803bef3e6133b5d708d1b", "type": "github" }, "original": { @@ -48,6 +49,27 @@ } }, "hyprlang": { + "inputs": { + "nixpkgs": [ + "hyprland", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1708005943, + "narHash": "sha256-9TT3xk++LI5/SPYgjYX34xZ4ebR93c1uerIq+SE/ues=", + "owner": "hyprwm", + "repo": "hyprlang", + "rev": "aeb3e012adc7b3235335c540b214b82267c2b983", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprlang", + "type": "github" + } + }, + "hyprlang_2": { "inputs": { "nixpkgs": [ "hyprland", @@ -86,6 +108,21 @@ } }, "nixpkgs_2": { + "locked": { + "lastModified": 1708475490, + "narHash": "sha256-g1v0TsWBQPX97ziznfJdWhgMyMGtoBFs102xSYO4syU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "0e74ca98a74bc7270d28838369593635a5db3260", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "nixos-unstable", + "type": "indirect" + } + }, + "personalpkgs": { "locked": { "lastModified": 1701902328, "narHash": "sha256-3tiiSEgQRPps0aV40belvLk1k4Max7oRh/+hZGLtfGc=", @@ -104,7 +141,8 @@ "root": { "inputs": { "hyprland": "hyprland", - "nixpkgs": "nixpkgs_2" + "nixpkgs": "nixpkgs_2", + "personalpkgs": "personalpkgs" } }, "systems": { @@ -147,7 +185,7 @@ "hyprland", "hyprland-protocols" ], - "hyprlang": "hyprlang", + "hyprlang": "hyprlang_2", "nixpkgs": [ "hyprland", "nixpkgs" diff --git a/flake.nix b/flake.nix index 27ca7cf..584dd65 100644 --- a/flake.nix +++ b/flake.nix @@ -1,16 +1,36 @@ { inputs = { - nixpkgs.url = "github:langedev/nixpkgs/nixos-unstable"; + nixpkgs.url = "nixpkgs/nixos-unstable"; + personalpkgs.url = "github:langedev/nixpkgs/nixos-unstable"; hyprland.url = "github:hyprwm/Hyprland"; }; - outputs = { nixpkgs, hyprland, ... }: { + outputs = { self, nixpkgs, personalpkgs, hyprland, ... }: + # let + # personal-overlay = final: prev: { + # personal = personalpkgs.legacyPackages.${prev.system}; + # }; + # in { + { nixosConfigurations.onizuka = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; - modules = [ - ./configuration.nix + modules = [ + # ({ config, pkgs, ... }: { nixpkgs.overlays = [ personal-overlay ]; }) hyprland.nixosModules.default { programs.hyprland.enable = true; } + ./systems/shared + ./systems/onizuka + ]; + }; + + nixosConfigurations.jibril = nixpkgs.lib.nixosSystem { + system = "x86_64-linux"; + modules = [ + # ({ config, pkgs, ... }: { nixpkgs.overlays = [ personal-overlay ]; }) + hyprland.nixosModules.default + { programs.hyprland.enable = true; } + ./systems/shared + ./systems/jibril ]; }; }; diff --git a/laptop.nix b/laptop.nix deleted file mode 100644 index 0019c68..0000000 --- a/laptop.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - networking.hostName = "jibril"; - imports = [ - ./hardware/laptop.nix - - ./modules/network/networking - ./modules/network/bluetooth - ]; -} diff --git a/systems/jibril/default.nix b/systems/jibril/default.nix new file mode 100644 index 0000000..bd3a34e --- /dev/null +++ b/systems/jibril/default.nix @@ -0,0 +1,11 @@ +{ config, pkgs, lib, ... }: + +{ + networking.hostName = "jibril"; + imports = [ + ./hardware.nix + + ../../modules/network/bluetooth + ../../modules/network/networking + ]; +} diff --git a/hardware/laptop.nix b/systems/jibril/hardware.nix similarity index 100% rename from hardware/laptop.nix rename to systems/jibril/hardware.nix diff --git a/desktop.nix b/systems/onizuka/default.nix similarity index 57% rename from desktop.nix rename to systems/onizuka/default.nix index 9a5dc5d..8bc25ef 100644 --- a/desktop.nix +++ b/systems/onizuka/default.nix @@ -3,8 +3,7 @@ { networking.hostName = "onizuka"; imports = [ - ./hardware/desktop.nix - - ./modules/graphics/nvidia + ./hardware.nix + ../../modules/graphics/nvidia ]; } diff --git a/hardware/desktop.nix b/systems/onizuka/hardware.nix similarity index 100% rename from hardware/desktop.nix rename to systems/onizuka/hardware.nix diff --git a/configuration.nix b/systems/shared/default.nix similarity index 62% rename from configuration.nix rename to systems/shared/default.nix index 25b762f..3a62bd3 100644 --- a/configuration.nix +++ b/systems/shared/default.nix @@ -3,32 +3,24 @@ # and in the NixOS manual (accessible by running ‘nixos-help’). { config, pkgs, ... }: - -let - #systemType = "laptop"; - systemType = "desktop"; -in { +{ nix.package = pkgs.nixUnstable; imports = [ - # Hardware Specific Configuration - ./${systemType}.nix - # System essentials (boot, lang, hostname, ...) - ./modules/system + ../../modules/system - ./modules/user + ../../modules/user - ./modules/themeing + ../../modules/themeing - ./modules/audio/pipewire + ../../modules/audio/pipewire - #./modules/shell/fish - ./modules/shell/xonsh - ./modules/network/browsers/librewolf - ./modules/network/syncthing + ../../modules/shell/xonsh + ../../modules/network/browsers/librewolf + ../../modules/network/syncthing - ./modules/login/greetd + ../../modules/login/greetd ]; nixpkgs.config.allowUnfree = true; From 2473b14dac441e0167ab46fc3f5d4a165db7e8b1 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 21 Feb 2024 14:48:45 -0800 Subject: [PATCH 050/412] Squashed commit of the following: commit b56a956345dbe9cc152097b540436a74fee3a844 Author: langedev Date: Wed Feb 21 14:31:11 2024 -0800 Fix typo commit 38aadf56730fb7d7a9ddbf704d024061c43983b3 Author: langedev Date: Wed Feb 21 14:24:49 2024 -0800 testing refactoring --- flake.lock | 48 +++++++++++++++++-- flake.nix | 28 +++++++++-- laptop.nix | 11 ----- systems/jibril/default.nix | 11 +++++ .../laptop.nix => systems/jibril/hardware.nix | 0 desktop.nix => systems/onizuka/default.nix | 5 +- .../onizuka/hardware.nix | 0 .../shared/default.nix | 26 ++++------ 8 files changed, 89 insertions(+), 40 deletions(-) delete mode 100644 laptop.nix create mode 100644 systems/jibril/default.nix rename hardware/laptop.nix => systems/jibril/hardware.nix (100%) rename desktop.nix => systems/onizuka/default.nix (57%) rename hardware/desktop.nix => systems/onizuka/hardware.nix (100%) rename configuration.nix => systems/shared/default.nix (62%) diff --git a/flake.lock b/flake.lock index 1629ff0..396fa31 100644 --- a/flake.lock +++ b/flake.lock @@ -3,17 +3,18 @@ "hyprland": { "inputs": { "hyprland-protocols": "hyprland-protocols", + "hyprlang": "hyprlang", "nixpkgs": "nixpkgs", "systems": "systems", "wlroots": "wlroots", "xdph": "xdph" }, "locked": { - "lastModified": 1708215223, - "narHash": "sha256-5z+NPNoiWKoaz3M4LZJ2fP+N7Vl9XGwr4QAV8rh4l4o=", + "lastModified": 1708543581, + "narHash": "sha256-wvhsh4J+Q9ED8oAWG+iz5uNOw70nagF+aeetlGpLkqs=", "owner": "hyprwm", "repo": "Hyprland", - "rev": "683a4b07c514fa3c13cdf09e475283a69fcc7653", + "rev": "ea3fd13e24d7d3a74cf803bef3e6133b5d708d1b", "type": "github" }, "original": { @@ -48,6 +49,27 @@ } }, "hyprlang": { + "inputs": { + "nixpkgs": [ + "hyprland", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1708005943, + "narHash": "sha256-9TT3xk++LI5/SPYgjYX34xZ4ebR93c1uerIq+SE/ues=", + "owner": "hyprwm", + "repo": "hyprlang", + "rev": "aeb3e012adc7b3235335c540b214b82267c2b983", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprlang", + "type": "github" + } + }, + "hyprlang_2": { "inputs": { "nixpkgs": [ "hyprland", @@ -86,6 +108,21 @@ } }, "nixpkgs_2": { + "locked": { + "lastModified": 1708475490, + "narHash": "sha256-g1v0TsWBQPX97ziznfJdWhgMyMGtoBFs102xSYO4syU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "0e74ca98a74bc7270d28838369593635a5db3260", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "nixos-unstable", + "type": "indirect" + } + }, + "personalpkgs": { "locked": { "lastModified": 1701902328, "narHash": "sha256-3tiiSEgQRPps0aV40belvLk1k4Max7oRh/+hZGLtfGc=", @@ -104,7 +141,8 @@ "root": { "inputs": { "hyprland": "hyprland", - "nixpkgs": "nixpkgs_2" + "nixpkgs": "nixpkgs_2", + "personalpkgs": "personalpkgs" } }, "systems": { @@ -147,7 +185,7 @@ "hyprland", "hyprland-protocols" ], - "hyprlang": "hyprlang", + "hyprlang": "hyprlang_2", "nixpkgs": [ "hyprland", "nixpkgs" diff --git a/flake.nix b/flake.nix index 27ca7cf..584dd65 100644 --- a/flake.nix +++ b/flake.nix @@ -1,16 +1,36 @@ { inputs = { - nixpkgs.url = "github:langedev/nixpkgs/nixos-unstable"; + nixpkgs.url = "nixpkgs/nixos-unstable"; + personalpkgs.url = "github:langedev/nixpkgs/nixos-unstable"; hyprland.url = "github:hyprwm/Hyprland"; }; - outputs = { nixpkgs, hyprland, ... }: { + outputs = { self, nixpkgs, personalpkgs, hyprland, ... }: + # let + # personal-overlay = final: prev: { + # personal = personalpkgs.legacyPackages.${prev.system}; + # }; + # in { + { nixosConfigurations.onizuka = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; - modules = [ - ./configuration.nix + modules = [ + # ({ config, pkgs, ... }: { nixpkgs.overlays = [ personal-overlay ]; }) hyprland.nixosModules.default { programs.hyprland.enable = true; } + ./systems/shared + ./systems/onizuka + ]; + }; + + nixosConfigurations.jibril = nixpkgs.lib.nixosSystem { + system = "x86_64-linux"; + modules = [ + # ({ config, pkgs, ... }: { nixpkgs.overlays = [ personal-overlay ]; }) + hyprland.nixosModules.default + { programs.hyprland.enable = true; } + ./systems/shared + ./systems/jibril ]; }; }; diff --git a/laptop.nix b/laptop.nix deleted file mode 100644 index 0019c68..0000000 --- a/laptop.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - networking.hostName = "jibril"; - imports = [ - ./hardware/laptop.nix - - ./modules/network/networking - ./modules/network/bluetooth - ]; -} diff --git a/systems/jibril/default.nix b/systems/jibril/default.nix new file mode 100644 index 0000000..bd3a34e --- /dev/null +++ b/systems/jibril/default.nix @@ -0,0 +1,11 @@ +{ config, pkgs, lib, ... }: + +{ + networking.hostName = "jibril"; + imports = [ + ./hardware.nix + + ../../modules/network/bluetooth + ../../modules/network/networking + ]; +} diff --git a/hardware/laptop.nix b/systems/jibril/hardware.nix similarity index 100% rename from hardware/laptop.nix rename to systems/jibril/hardware.nix diff --git a/desktop.nix b/systems/onizuka/default.nix similarity index 57% rename from desktop.nix rename to systems/onizuka/default.nix index 9a5dc5d..8bc25ef 100644 --- a/desktop.nix +++ b/systems/onizuka/default.nix @@ -3,8 +3,7 @@ { networking.hostName = "onizuka"; imports = [ - ./hardware/desktop.nix - - ./modules/graphics/nvidia + ./hardware.nix + ../../modules/graphics/nvidia ]; } diff --git a/hardware/desktop.nix b/systems/onizuka/hardware.nix similarity index 100% rename from hardware/desktop.nix rename to systems/onizuka/hardware.nix diff --git a/configuration.nix b/systems/shared/default.nix similarity index 62% rename from configuration.nix rename to systems/shared/default.nix index 25b762f..3a62bd3 100644 --- a/configuration.nix +++ b/systems/shared/default.nix @@ -3,32 +3,24 @@ # and in the NixOS manual (accessible by running ‘nixos-help’). { config, pkgs, ... }: - -let - #systemType = "laptop"; - systemType = "desktop"; -in { +{ nix.package = pkgs.nixUnstable; imports = [ - # Hardware Specific Configuration - ./${systemType}.nix - # System essentials (boot, lang, hostname, ...) - ./modules/system + ../../modules/system - ./modules/user + ../../modules/user - ./modules/themeing + ../../modules/themeing - ./modules/audio/pipewire + ../../modules/audio/pipewire - #./modules/shell/fish - ./modules/shell/xonsh - ./modules/network/browsers/librewolf - ./modules/network/syncthing + ../../modules/shell/xonsh + ../../modules/network/browsers/librewolf + ../../modules/network/syncthing - ./modules/login/greetd + ../../modules/login/greetd ]; nixpkgs.config.allowUnfree = true; From 8f96dbd78a564206ad821a5c8cedd1093781695b Mon Sep 17 00:00:00 2001 From: langedev Date: Wed, 21 Feb 2024 14:51:00 -0800 Subject: [PATCH 051/412] Restore content --- flake.nix | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/flake.nix b/flake.nix index 584dd65..f727dc2 100644 --- a/flake.nix +++ b/flake.nix @@ -6,16 +6,15 @@ }; outputs = { self, nixpkgs, personalpkgs, hyprland, ... }: - # let - # personal-overlay = final: prev: { - # personal = personalpkgs.legacyPackages.${prev.system}; - # }; - # in { - { + let + personal-overlay = final: prev: { + personal = personalpkgs.legacyPackages.${prev.system}; + }; + in { nixosConfigurations.onizuka = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; modules = [ - # ({ config, pkgs, ... }: { nixpkgs.overlays = [ personal-overlay ]; }) + ({ config, pkgs, ... }: { nixpkgs.overlays = [ personal-overlay ]; }) hyprland.nixosModules.default { programs.hyprland.enable = true; } ./systems/shared @@ -26,7 +25,7 @@ nixosConfigurations.jibril = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; modules = [ - # ({ config, pkgs, ... }: { nixpkgs.overlays = [ personal-overlay ]; }) + ({ config, pkgs, ... }: { nixpkgs.overlays = [ personal-overlay ]; }) hyprland.nixosModules.default { programs.hyprland.enable = true; } ./systems/shared From f2a189d4aaa06003774d4af1b513a8df4b88d481 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 21 Feb 2024 14:51:00 -0800 Subject: [PATCH 052/412] Restore content --- flake.nix | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/flake.nix b/flake.nix index 584dd65..f727dc2 100644 --- a/flake.nix +++ b/flake.nix @@ -6,16 +6,15 @@ }; outputs = { self, nixpkgs, personalpkgs, hyprland, ... }: - # let - # personal-overlay = final: prev: { - # personal = personalpkgs.legacyPackages.${prev.system}; - # }; - # in { - { + let + personal-overlay = final: prev: { + personal = personalpkgs.legacyPackages.${prev.system}; + }; + in { nixosConfigurations.onizuka = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; modules = [ - # ({ config, pkgs, ... }: { nixpkgs.overlays = [ personal-overlay ]; }) + ({ config, pkgs, ... }: { nixpkgs.overlays = [ personal-overlay ]; }) hyprland.nixosModules.default { programs.hyprland.enable = true; } ./systems/shared @@ -26,7 +25,7 @@ nixosConfigurations.jibril = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; modules = [ - # ({ config, pkgs, ... }: { nixpkgs.overlays = [ personal-overlay ]; }) + ({ config, pkgs, ... }: { nixpkgs.overlays = [ personal-overlay ]; }) hyprland.nixosModules.default { programs.hyprland.enable = true; } ./systems/shared From 11cb67905dfad832680b6fcba2b5c49495cb9c30 Mon Sep 17 00:00:00 2001 From: JuliaLange Date: Wed, 21 Feb 2024 15:02:45 -0800 Subject: [PATCH 053/412] move from pywal to wallust --- home.nix | 2 +- programs/pywal/default.nix | 8 -------- programs/wal/default.nix | 28 ++++++++++++++++++++++++++++ 3 files changed, 29 insertions(+), 9 deletions(-) delete mode 100644 programs/pywal/default.nix create mode 100644 programs/wal/default.nix diff --git a/home.nix b/home.nix index 25641b9..93b4ce2 100644 --- a/home.nix +++ b/home.nix @@ -18,10 +18,10 @@ ./programs/mpv ./programs/nnn ./programs/nvim - ./programs/pywal ./programs/rofi ./programs/spotify ./programs/ssh + ./programs/wal ./programs/xdg ]; diff --git a/programs/pywal/default.nix b/programs/pywal/default.nix deleted file mode 100644 index f754d3e..0000000 --- a/programs/pywal/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ config, pkgs, ... }: - -{ - programs.pywal.enable = true; - home.packages = with pkgs; [ - pywalfox # Update librewolf's colorscheme based on pywal - ]; -} diff --git a/programs/wal/default.nix b/programs/wal/default.nix new file mode 100644 index 0000000..14876da --- /dev/null +++ b/programs/wal/default.nix @@ -0,0 +1,28 @@ +{ config, pkgs, ... }: +let rootPath = ./.; in +{ + home.packages = with pkgs; [ + wallust # A better pywal + pywalfox # Update librewolf's colorscheme based on wal + ]; + xdg.configFile."wallust-config" = { + target = "wallust/wallust.toml"; + text = '' + backend = "wal" + color_space = "lab" + threshold = 20 + filter = "dark16" + + # [[entry]] + # # a relative path to a file where wallust.toml is (~/.config/wallust/) + # template = "dunstrc" + # + # # absolute path to the file to write the template (after templating) + # target = "~/.config/dunst/dunstrc" + ''; + } + xdg.configFile."wallust-templates" = { + source = rootPath + "/templates"; + target = "wallust/"; + } +} From be92c827061c427a71134d53293716848e05eaf1 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 21 Feb 2024 15:02:45 -0800 Subject: [PATCH 054/412] move from pywal to wallust --- home.nix | 2 +- programs/pywal/default.nix | 8 -------- programs/wal/default.nix | 28 ++++++++++++++++++++++++++++ 3 files changed, 29 insertions(+), 9 deletions(-) delete mode 100644 programs/pywal/default.nix create mode 100644 programs/wal/default.nix diff --git a/home.nix b/home.nix index 25641b9..93b4ce2 100644 --- a/home.nix +++ b/home.nix @@ -18,10 +18,10 @@ ./programs/mpv ./programs/nnn ./programs/nvim - ./programs/pywal ./programs/rofi ./programs/spotify ./programs/ssh + ./programs/wal ./programs/xdg ]; diff --git a/programs/pywal/default.nix b/programs/pywal/default.nix deleted file mode 100644 index f754d3e..0000000 --- a/programs/pywal/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ config, pkgs, ... }: - -{ - programs.pywal.enable = true; - home.packages = with pkgs; [ - pywalfox # Update librewolf's colorscheme based on pywal - ]; -} diff --git a/programs/wal/default.nix b/programs/wal/default.nix new file mode 100644 index 0000000..14876da --- /dev/null +++ b/programs/wal/default.nix @@ -0,0 +1,28 @@ +{ config, pkgs, ... }: +let rootPath = ./.; in +{ + home.packages = with pkgs; [ + wallust # A better pywal + pywalfox # Update librewolf's colorscheme based on wal + ]; + xdg.configFile."wallust-config" = { + target = "wallust/wallust.toml"; + text = '' + backend = "wal" + color_space = "lab" + threshold = 20 + filter = "dark16" + + # [[entry]] + # # a relative path to a file where wallust.toml is (~/.config/wallust/) + # template = "dunstrc" + # + # # absolute path to the file to write the template (after templating) + # target = "~/.config/dunst/dunstrc" + ''; + } + xdg.configFile."wallust-templates" = { + source = rootPath + "/templates"; + target = "wallust/"; + } +} From 23d24bede8f4c9f624fe28e0014fbe4912d62549 Mon Sep 17 00:00:00 2001 From: JuliaLange Date: Wed, 21 Feb 2024 15:02:57 -0800 Subject: [PATCH 055/412] Some dunst styling --- programs/dunst/default.nix | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/programs/dunst/default.nix b/programs/dunst/default.nix index 3d9661f..dbdc205 100644 --- a/programs/dunst/default.nix +++ b/programs/dunst/default.nix @@ -4,24 +4,35 @@ services.dunst.enable = true; services.dunst.settings = { global = { - frame_color = "#8AADF4"; - separator_color = "frame"; + width = 280; + height = 240; + origin = "bottom-right"; + offset = "0x300"; + + notification_limit = 3; + + progress_bar_max_width = 280; + + gap_size = 4; + corner_radius = 20; }; urgency_low = { - background = "#24273A"; - foreground = "#CAD3F5"; + background = "#FFFFFFCC"; + foreground = "#000000"; + frame_color = "#0000"; }; urgency_normal = { - background = "#24273A"; - foreground = "#CAD3F5"; + background = "#FFFFFFCC"; + foreground = "#000000"; + frame_color = "#0000"; }; urgency_critical = { - background = "#24273A"; - foreground = "#CAD3F5"; - frame_color = "#F5A97F"; + background = "#FFFFFFCC"; + foreground = "#000000"; + frame_color = "#0000"; }; }; } From f41b42fc2259bbed4eae426fc3e4e94f42d1dacd Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 21 Feb 2024 15:02:57 -0800 Subject: [PATCH 056/412] Some dunst styling --- programs/dunst/default.nix | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/programs/dunst/default.nix b/programs/dunst/default.nix index 3d9661f..dbdc205 100644 --- a/programs/dunst/default.nix +++ b/programs/dunst/default.nix @@ -4,24 +4,35 @@ services.dunst.enable = true; services.dunst.settings = { global = { - frame_color = "#8AADF4"; - separator_color = "frame"; + width = 280; + height = 240; + origin = "bottom-right"; + offset = "0x300"; + + notification_limit = 3; + + progress_bar_max_width = 280; + + gap_size = 4; + corner_radius = 20; }; urgency_low = { - background = "#24273A"; - foreground = "#CAD3F5"; + background = "#FFFFFFCC"; + foreground = "#000000"; + frame_color = "#0000"; }; urgency_normal = { - background = "#24273A"; - foreground = "#CAD3F5"; + background = "#FFFFFFCC"; + foreground = "#000000"; + frame_color = "#0000"; }; urgency_critical = { - background = "#24273A"; - foreground = "#CAD3F5"; - frame_color = "#F5A97F"; + background = "#FFFFFFCC"; + foreground = "#000000"; + frame_color = "#0000"; }; }; } From 57b8fdb27a6f9d1256045acb9a8d066242aeb455 Mon Sep 17 00:00:00 2001 From: JuliaLange Date: Wed, 21 Feb 2024 15:04:08 -0800 Subject: [PATCH 057/412] Hyprland rules updating --- flake.lock | 18 +++++++++--------- programs/hypr/default.nix | 1 + programs/hypr/league_rules.conf | 19 +++++++++++++++++++ programs/hypr/window_rules.conf | 4 ---- 4 files changed, 29 insertions(+), 13 deletions(-) create mode 100644 programs/hypr/league_rules.conf diff --git a/flake.lock b/flake.lock index 9b8db53..2ca6ad9 100644 --- a/flake.lock +++ b/flake.lock @@ -5,11 +5,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1708045757, - "narHash": "sha256-UDFJzw2MJcd4oHk+xOPkmyM3u+UwrNuKBFsKAVQaoQQ=", + "lastModified": 1708193735, + "narHash": "sha256-6DmQo9n3mrgpCH9wtSia0dAHXzGmpCjOqG35S0QrxWQ=", "owner": "Aylur", "repo": "ags", - "rev": "4ac0dbb473918eda325143c2053bdd428f9708d4", + "rev": "785f1a941a52c32d1cbe77a5eb935713fe45cddb", "type": "github" }, "original": { @@ -25,11 +25,11 @@ ] }, "locked": { - "lastModified": 1701728041, - "narHash": "sha256-x0pyrI1vC8evVDxCxyO6olOyr4wlFg9+VS3C3p4xFYQ=", + "lastModified": 1708031129, + "narHash": "sha256-EH20hJfNnc1/ODdDVat9B7aKm0B95L3YtkIRwKLvQG8=", "owner": "langedev", "repo": "home-manager", - "rev": "ac7216918cd65f3824ba7817dea8f22e61221eaf", + "rev": "3d6791b3897b526c82920a2ab5f61d71985b3cf8", "type": "github" }, "original": { @@ -47,11 +47,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1708138027, - "narHash": "sha256-xTOrKOamqdVtW+v7j0bUTed8nqfijEMahJ7edgFtWL0=", + "lastModified": 1708215223, + "narHash": "sha256-5z+NPNoiWKoaz3M4LZJ2fP+N7Vl9XGwr4QAV8rh4l4o=", "owner": "hyprwm", "repo": "Hyprland", - "rev": "cdcc5aba06f20005842cf966b23af50456dc7142", + "rev": "683a4b07c514fa3c13cdf09e475283a69fcc7653", "type": "github" }, "original": { diff --git a/programs/hypr/default.nix b/programs/hypr/default.nix index b57f85a..4c2caeb 100644 --- a/programs/hypr/default.nix +++ b/programs/hypr/default.nix @@ -4,6 +4,7 @@ let rootPath = ./.; in wayland.windowManager.hyprland.enable = true; wayland.windowManager.hyprland.extraConfig = '' ${builtins.readFile ./window_rules.conf} + ${builtins.readFile ./league_rules.conf} ${builtins.readFile ./settings.conf} ${builtins.readFile ./nvidia.conf} ${builtins.readFile ./keybinds.conf} diff --git a/programs/hypr/league_rules.conf b/programs/hypr/league_rules.conf new file mode 100644 index 0000000..1f9ef3b --- /dev/null +++ b/programs/hypr/league_rules.conf @@ -0,0 +1,19 @@ +# no opacity +windowrulev2 = opacity 1 1, class:^(league of legends.exe)$ # loading text +windowrulev2 = opacity 1 override, class:^(leagueclientux.exe)$ # client +windowrulev2 = opacity 1 override, class:^(leagueclient.exe)$ # game + +# nice loading text +windowrulev2 = noblur, class:^(leagueclient.exe)$ +windowrulev2 = noborder, class:^(leagueclient.exe)$ +windowrulev2 = nofocus, class:^(leagueclient.exe)$ +windowrulev2 = noshadow, class:^(leagueclient.exe)$ + +# gamer settings (set ingame to borderless) +windowrulev2 = immediate, class:^(league of legends.exe)$ +windowrulev2 = fullscreen, class:^(league of legends.exe)$ + +# workspaces +windowrule = workspace name:game, leagueclient.exe +windowrule = workspace name:game, leagueclientux.exe +windowrule = workspace name:game, league of legends.exe diff --git a/programs/hypr/window_rules.conf b/programs/hypr/window_rules.conf index 671e13c..eeb5e1f 100644 --- a/programs/hypr/window_rules.conf +++ b/programs/hypr/window_rules.conf @@ -21,10 +21,6 @@ windowrule = workspace name:chat, discord windowrule = workspace name:chat, Beeper windowrule = workspace name:game, lutris windowrule = workspace name:game, explorer.exe -windowrule = workspace name:game, leagueclient.exe -windowrule = workspace name:game, leagueclientux.exe -windowrule = workspace name:game, league of legends.exe -windowrule = immediate, league of legends.exe windowrule = opacity 0.9 0.9,^(Alacritty)$ windowrule = opacity 0.94 0.94,^(discord)$ From 6175083d4e57beb59925b4c4c00f7f6d6c56cf83 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 21 Feb 2024 15:04:08 -0800 Subject: [PATCH 058/412] Hyprland rules updating --- flake.lock | 18 +++++++++--------- programs/hypr/default.nix | 1 + programs/hypr/league_rules.conf | 19 +++++++++++++++++++ programs/hypr/window_rules.conf | 4 ---- 4 files changed, 29 insertions(+), 13 deletions(-) create mode 100644 programs/hypr/league_rules.conf diff --git a/flake.lock b/flake.lock index 9b8db53..2ca6ad9 100644 --- a/flake.lock +++ b/flake.lock @@ -5,11 +5,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1708045757, - "narHash": "sha256-UDFJzw2MJcd4oHk+xOPkmyM3u+UwrNuKBFsKAVQaoQQ=", + "lastModified": 1708193735, + "narHash": "sha256-6DmQo9n3mrgpCH9wtSia0dAHXzGmpCjOqG35S0QrxWQ=", "owner": "Aylur", "repo": "ags", - "rev": "4ac0dbb473918eda325143c2053bdd428f9708d4", + "rev": "785f1a941a52c32d1cbe77a5eb935713fe45cddb", "type": "github" }, "original": { @@ -25,11 +25,11 @@ ] }, "locked": { - "lastModified": 1701728041, - "narHash": "sha256-x0pyrI1vC8evVDxCxyO6olOyr4wlFg9+VS3C3p4xFYQ=", + "lastModified": 1708031129, + "narHash": "sha256-EH20hJfNnc1/ODdDVat9B7aKm0B95L3YtkIRwKLvQG8=", "owner": "langedev", "repo": "home-manager", - "rev": "ac7216918cd65f3824ba7817dea8f22e61221eaf", + "rev": "3d6791b3897b526c82920a2ab5f61d71985b3cf8", "type": "github" }, "original": { @@ -47,11 +47,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1708138027, - "narHash": "sha256-xTOrKOamqdVtW+v7j0bUTed8nqfijEMahJ7edgFtWL0=", + "lastModified": 1708215223, + "narHash": "sha256-5z+NPNoiWKoaz3M4LZJ2fP+N7Vl9XGwr4QAV8rh4l4o=", "owner": "hyprwm", "repo": "Hyprland", - "rev": "cdcc5aba06f20005842cf966b23af50456dc7142", + "rev": "683a4b07c514fa3c13cdf09e475283a69fcc7653", "type": "github" }, "original": { diff --git a/programs/hypr/default.nix b/programs/hypr/default.nix index b57f85a..4c2caeb 100644 --- a/programs/hypr/default.nix +++ b/programs/hypr/default.nix @@ -4,6 +4,7 @@ let rootPath = ./.; in wayland.windowManager.hyprland.enable = true; wayland.windowManager.hyprland.extraConfig = '' ${builtins.readFile ./window_rules.conf} + ${builtins.readFile ./league_rules.conf} ${builtins.readFile ./settings.conf} ${builtins.readFile ./nvidia.conf} ${builtins.readFile ./keybinds.conf} diff --git a/programs/hypr/league_rules.conf b/programs/hypr/league_rules.conf new file mode 100644 index 0000000..1f9ef3b --- /dev/null +++ b/programs/hypr/league_rules.conf @@ -0,0 +1,19 @@ +# no opacity +windowrulev2 = opacity 1 1, class:^(league of legends.exe)$ # loading text +windowrulev2 = opacity 1 override, class:^(leagueclientux.exe)$ # client +windowrulev2 = opacity 1 override, class:^(leagueclient.exe)$ # game + +# nice loading text +windowrulev2 = noblur, class:^(leagueclient.exe)$ +windowrulev2 = noborder, class:^(leagueclient.exe)$ +windowrulev2 = nofocus, class:^(leagueclient.exe)$ +windowrulev2 = noshadow, class:^(leagueclient.exe)$ + +# gamer settings (set ingame to borderless) +windowrulev2 = immediate, class:^(league of legends.exe)$ +windowrulev2 = fullscreen, class:^(league of legends.exe)$ + +# workspaces +windowrule = workspace name:game, leagueclient.exe +windowrule = workspace name:game, leagueclientux.exe +windowrule = workspace name:game, league of legends.exe diff --git a/programs/hypr/window_rules.conf b/programs/hypr/window_rules.conf index 671e13c..eeb5e1f 100644 --- a/programs/hypr/window_rules.conf +++ b/programs/hypr/window_rules.conf @@ -21,10 +21,6 @@ windowrule = workspace name:chat, discord windowrule = workspace name:chat, Beeper windowrule = workspace name:game, lutris windowrule = workspace name:game, explorer.exe -windowrule = workspace name:game, leagueclient.exe -windowrule = workspace name:game, leagueclientux.exe -windowrule = workspace name:game, league of legends.exe -windowrule = immediate, league of legends.exe windowrule = opacity 0.9 0.9,^(Alacritty)$ windowrule = opacity 0.94 0.94,^(discord)$ From 364da18441bc9f7073ab9501a020c7522e08ce4e Mon Sep 17 00:00:00 2001 From: JuliaLange Date: Wed, 21 Feb 2024 15:05:15 -0800 Subject: [PATCH 059/412] Fixed wal bug --- programs/wal/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/programs/wal/default.nix b/programs/wal/default.nix index 14876da..d0746b3 100644 --- a/programs/wal/default.nix +++ b/programs/wal/default.nix @@ -20,9 +20,9 @@ let rootPath = ./.; in # # absolute path to the file to write the template (after templating) # target = "~/.config/dunst/dunstrc" ''; - } + }; xdg.configFile."wallust-templates" = { source = rootPath + "/templates"; target = "wallust/"; - } + }; } From fb0954aefc7ef2dc1cf3dd527cca513075fdd700 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 21 Feb 2024 15:05:15 -0800 Subject: [PATCH 060/412] Fixed wal bug --- programs/wal/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/programs/wal/default.nix b/programs/wal/default.nix index 14876da..d0746b3 100644 --- a/programs/wal/default.nix +++ b/programs/wal/default.nix @@ -20,9 +20,9 @@ let rootPath = ./.; in # # absolute path to the file to write the template (after templating) # target = "~/.config/dunst/dunstrc" ''; - } + }; xdg.configFile."wallust-templates" = { source = rootPath + "/templates"; target = "wallust/"; - } + }; } From fd6a627c11dff3389bd8112caba548aec3d28dee Mon Sep 17 00:00:00 2001 From: JuliaLange Date: Thu, 22 Feb 2024 23:57:21 -0800 Subject: [PATCH 061/412] Add timers for notifications in new services dir --- .gitignore | 1 + home.nix | 2 + services/timers/default.nix | 52 ++++++++++++++++++++++++++ services/timers/scripts/notify-time.sh | 5 +++ 4 files changed, 60 insertions(+) create mode 100644 .gitignore create mode 100644 services/timers/default.nix create mode 100755 services/timers/scripts/notify-time.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7c22503 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +**/**/plugins/*.plugin.js diff --git a/home.nix b/home.nix index 93b4ce2..81a4957 100644 --- a/home.nix +++ b/home.nix @@ -23,6 +23,8 @@ ./programs/ssh ./programs/wal ./programs/xdg + + ./services/timers ]; home.packages = with pkgs; [ diff --git a/services/timers/default.nix b/services/timers/default.nix new file mode 100644 index 0000000..e47f3c9 --- /dev/null +++ b/services/timers/default.nix @@ -0,0 +1,52 @@ +{ config, pkgs, ... }: +let rootPath = ./.; in +{ + systemd.user.timers = { + hourly-time = { + Timer = { + OnCalendar = "hourly"; + }; + Install = { + WantedBy = [ + "timers.target" + ]; + }; + }; + quarterly-time = { + Timer = { + OnCalendar = "*-*-* *:15,30,45:00"; + }; + Install = { + WantedBy = [ + "timers.target" + ]; + }; + }; + }; + systemd.user.services = { + hourly-time = { + Unit = { + Description = "Notify the user every hour of time passing"; + }; + Service = { + Type="simple"; + ExecStart="/home/pan/.config/timer_scripts/notify-time.sh 60000"; + }; + }; + quarterly-time = { + Unit = { + Description = "Notify the user every 15 minutes of time passing, \ + skips hours"; + }; + Service = { + Type="simple"; + ExecStart="/home/pan/.config/timer_scripts/notify-time.sh 10000"; + }; + }; + }; + xdg.configFile."timer-scripts" = { + source = rootPath + "/scripts"; + target = "timer_scripts/"; + executable = true; + }; +} diff --git a/services/timers/scripts/notify-time.sh b/services/timers/scripts/notify-time.sh new file mode 100755 index 0000000..48df2fb --- /dev/null +++ b/services/timers/scripts/notify-time.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +export DISPLAY=":0" +export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/1000/bus" +/home/pan/.nix-profile/bin/notify-send "$(/run/current-system/sw/bin/date +%H:%M)" -t $1 From be4fceee1afc778fff43422f8abff95a3a77ee79 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 22 Feb 2024 23:57:21 -0800 Subject: [PATCH 062/412] Add timers for notifications in new services dir --- .gitignore | 1 + home.nix | 2 + services/timers/default.nix | 52 ++++++++++++++++++++++++++ services/timers/scripts/notify-time.sh | 5 +++ 4 files changed, 60 insertions(+) create mode 100644 .gitignore create mode 100644 services/timers/default.nix create mode 100755 services/timers/scripts/notify-time.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7c22503 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +**/**/plugins/*.plugin.js diff --git a/home.nix b/home.nix index 93b4ce2..81a4957 100644 --- a/home.nix +++ b/home.nix @@ -23,6 +23,8 @@ ./programs/ssh ./programs/wal ./programs/xdg + + ./services/timers ]; home.packages = with pkgs; [ diff --git a/services/timers/default.nix b/services/timers/default.nix new file mode 100644 index 0000000..e47f3c9 --- /dev/null +++ b/services/timers/default.nix @@ -0,0 +1,52 @@ +{ config, pkgs, ... }: +let rootPath = ./.; in +{ + systemd.user.timers = { + hourly-time = { + Timer = { + OnCalendar = "hourly"; + }; + Install = { + WantedBy = [ + "timers.target" + ]; + }; + }; + quarterly-time = { + Timer = { + OnCalendar = "*-*-* *:15,30,45:00"; + }; + Install = { + WantedBy = [ + "timers.target" + ]; + }; + }; + }; + systemd.user.services = { + hourly-time = { + Unit = { + Description = "Notify the user every hour of time passing"; + }; + Service = { + Type="simple"; + ExecStart="/home/pan/.config/timer_scripts/notify-time.sh 60000"; + }; + }; + quarterly-time = { + Unit = { + Description = "Notify the user every 15 minutes of time passing, \ + skips hours"; + }; + Service = { + Type="simple"; + ExecStart="/home/pan/.config/timer_scripts/notify-time.sh 10000"; + }; + }; + }; + xdg.configFile."timer-scripts" = { + source = rootPath + "/scripts"; + target = "timer_scripts/"; + executable = true; + }; +} diff --git a/services/timers/scripts/notify-time.sh b/services/timers/scripts/notify-time.sh new file mode 100755 index 0000000..48df2fb --- /dev/null +++ b/services/timers/scripts/notify-time.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +export DISPLAY=":0" +export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/1000/bus" +/home/pan/.nix-profile/bin/notify-send "$(/run/current-system/sw/bin/date +%H:%M)" -t $1 From 07ab459311abf903b00440984ef39a41fefbdbb0 Mon Sep 17 00:00:00 2001 From: JuliaLange Date: Thu, 22 Feb 2024 23:59:01 -0800 Subject: [PATCH 063/412] Move from dunst to ags for notifications --- home.nix | 2 +- programs/ags/config/config.js | 6 +- .../notifications/notificationPopup.ts | 71 +++++++++++++++++++ .../config/modules/notifications/style.css | 61 ++++++++++++++++ programs/ags/default.nix | 6 +- programs/dunst/default.nix | 3 + 6 files changed, 145 insertions(+), 4 deletions(-) create mode 100644 programs/ags/config/modules/notifications/notificationPopup.ts create mode 100644 programs/ags/config/modules/notifications/style.css diff --git a/home.nix b/home.nix index 81a4957..b1c70ae 100644 --- a/home.nix +++ b/home.nix @@ -6,11 +6,11 @@ home.homeDirectory = "/home/pan"; imports = [ + # ./programs/dunst # ./programs/eww ./programs/ags ./programs/alacritty ./programs/discord - ./programs/dunst ./programs/fish ./programs/git ./programs/hypr diff --git a/programs/ags/config/config.js b/programs/ags/config/config.js index ec3b3ee..c9500da 100644 --- a/programs/ags/config/config.js +++ b/programs/ags/config/config.js @@ -1,7 +1,9 @@ -import { Switch } from "./modules/workspace-switch.js"; +// import { Switch } from "./modules/workspace-switch.js"; +import { notificationPopup } from "./modules/notifications/notificationPopup.ts" export default { + style: App.configDir + '/modules/notifications/style.css', windows: [ - Switch(1) + notificationPopup() ] } diff --git a/programs/ags/config/modules/notifications/notificationPopup.ts b/programs/ags/config/modules/notifications/notificationPopup.ts new file mode 100644 index 0000000..56ddf80 --- /dev/null +++ b/programs/ags/config/modules/notifications/notificationPopup.ts @@ -0,0 +1,71 @@ +const notifications = await Service.import('notifications'); +const popups = notifications.bind('popups'); + +export const notificationPopup = (monitor = 0) => { + return Widget.Window({ + name: 'notifications', + anchor: ['bottom', 'right'], + child: Widget.Box({ + class_name: 'notifications', + vertical: true, + children: popups.as(popups => popups.map(Notification)), + }), + }); +}; + +/** @param {import('resource:///com/github/Aylur/ags/service/notifications.js').Notification} n */ +const Notification = n => { + const title = Widget.Label({ + class_name: 'title', + xalign: 0, + justification: 'left', + hexpand: true, + max_width_chars: 24, + truncate: 'end', + wrap: true, + label: n.summary, + use_markup: true, + }); + + const body = Widget.Label({ + class_name: 'body', + hexpand: true, + use_markup: true, + xalign: 0, + justification: 'left', + label: n.body, + wrap: true, + }); + + const actions = Widget.Box({ + class_name: 'actions', + children: n.actions.map(({ id, label }) => Widget.Button({ + class_name: 'action-button', + on_clicked: () => n.invoke(id), + hexpand: true, + child: Widget.Label(label), + })), + }); + + return Widget.EventBox({ + on_primary_click: () => n.dismiss(), + child: Widget.Box({ + class_name: `notification ${n.urgency}`, + vertical: true, + children: [ + Widget.Box({ + children: [ + Widget.Box({ + vertical: true, + children: [ + title, + body, + ], + }), + ], + }), + actions, + ], + }), + }); +}; diff --git a/programs/ags/config/modules/notifications/style.css b/programs/ags/config/modules/notifications/style.css new file mode 100644 index 0000000..1e819fc --- /dev/null +++ b/programs/ags/config/modules/notifications/style.css @@ -0,0 +1,61 @@ +window#notifications { + all: unset; +} + +window#notifications box.notifications { + padding: .5em; +} + +.icon { + min-width: 68px; + min-height: 68px; + margin-right: 1em; +} + +.icon image { + font-size: 58px; + /* to center the icon */ + margin: 5px; + color: @theme_fg_color; +} + +.icon box { + min-width: 68px; + min-height: 68px; + border-radius: 7px; +} + +.notification { + min-width: 350px; + border-radius: 11px; + padding: 1em; + margin: .5em; + border: 1px solid @wm_borders_edge; + background-color: @theme_bg_color; +} + +.notification.critical { + border: 1px solid lightcoral; +} + +.title { + color: @theme_fg_color; + font-size: 1.4em; +} + +.body { + color: @theme_unfocused_fg_color; +} + +.actions .action-button { + margin: 0 .4em; + margin-top: .8em; +} + +.actions .action-button:first-child { + margin-left: 0; +} + +.actions .action-button:last-child { + margin-right: 0; +} diff --git a/programs/ags/default.nix b/programs/ags/default.nix index 68dfd65..74eae58 100644 --- a/programs/ags/default.nix +++ b/programs/ags/default.nix @@ -3,13 +3,17 @@ # add the home manager module imports = [ inputs.ags.homeManagerModules.default ]; + home.packages = with pkgs; [ + libnotify # Notifications through ags + ]; + programs.ags = { enable = true; # null or path, leave as null if you don't want hm to manage the config configDir = ./config; - # additional packages to add to gjs's runtime + # additional packages to add to ags's runtime extraPackages = with pkgs; [ gtksourceview webkitgtk diff --git a/programs/dunst/default.nix b/programs/dunst/default.nix index dbdc205..3f1e60e 100644 --- a/programs/dunst/default.nix +++ b/programs/dunst/default.nix @@ -1,6 +1,9 @@ { config, pkgs, ... }: { + home.packages = with pkgs; [ + libnotify + ]; services.dunst.enable = true; services.dunst.settings = { global = { From 5bbb542ca0ab16a8b845ed8beb6bfc05d7db04b0 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 22 Feb 2024 23:59:01 -0800 Subject: [PATCH 064/412] Move from dunst to ags for notifications --- home.nix | 2 +- programs/ags/config/config.js | 6 +- .../notifications/notificationPopup.ts | 71 +++++++++++++++++++ .../config/modules/notifications/style.css | 61 ++++++++++++++++ programs/ags/default.nix | 6 +- programs/dunst/default.nix | 3 + 6 files changed, 145 insertions(+), 4 deletions(-) create mode 100644 programs/ags/config/modules/notifications/notificationPopup.ts create mode 100644 programs/ags/config/modules/notifications/style.css diff --git a/home.nix b/home.nix index 81a4957..b1c70ae 100644 --- a/home.nix +++ b/home.nix @@ -6,11 +6,11 @@ home.homeDirectory = "/home/pan"; imports = [ + # ./programs/dunst # ./programs/eww ./programs/ags ./programs/alacritty ./programs/discord - ./programs/dunst ./programs/fish ./programs/git ./programs/hypr diff --git a/programs/ags/config/config.js b/programs/ags/config/config.js index ec3b3ee..c9500da 100644 --- a/programs/ags/config/config.js +++ b/programs/ags/config/config.js @@ -1,7 +1,9 @@ -import { Switch } from "./modules/workspace-switch.js"; +// import { Switch } from "./modules/workspace-switch.js"; +import { notificationPopup } from "./modules/notifications/notificationPopup.ts" export default { + style: App.configDir + '/modules/notifications/style.css', windows: [ - Switch(1) + notificationPopup() ] } diff --git a/programs/ags/config/modules/notifications/notificationPopup.ts b/programs/ags/config/modules/notifications/notificationPopup.ts new file mode 100644 index 0000000..56ddf80 --- /dev/null +++ b/programs/ags/config/modules/notifications/notificationPopup.ts @@ -0,0 +1,71 @@ +const notifications = await Service.import('notifications'); +const popups = notifications.bind('popups'); + +export const notificationPopup = (monitor = 0) => { + return Widget.Window({ + name: 'notifications', + anchor: ['bottom', 'right'], + child: Widget.Box({ + class_name: 'notifications', + vertical: true, + children: popups.as(popups => popups.map(Notification)), + }), + }); +}; + +/** @param {import('resource:///com/github/Aylur/ags/service/notifications.js').Notification} n */ +const Notification = n => { + const title = Widget.Label({ + class_name: 'title', + xalign: 0, + justification: 'left', + hexpand: true, + max_width_chars: 24, + truncate: 'end', + wrap: true, + label: n.summary, + use_markup: true, + }); + + const body = Widget.Label({ + class_name: 'body', + hexpand: true, + use_markup: true, + xalign: 0, + justification: 'left', + label: n.body, + wrap: true, + }); + + const actions = Widget.Box({ + class_name: 'actions', + children: n.actions.map(({ id, label }) => Widget.Button({ + class_name: 'action-button', + on_clicked: () => n.invoke(id), + hexpand: true, + child: Widget.Label(label), + })), + }); + + return Widget.EventBox({ + on_primary_click: () => n.dismiss(), + child: Widget.Box({ + class_name: `notification ${n.urgency}`, + vertical: true, + children: [ + Widget.Box({ + children: [ + Widget.Box({ + vertical: true, + children: [ + title, + body, + ], + }), + ], + }), + actions, + ], + }), + }); +}; diff --git a/programs/ags/config/modules/notifications/style.css b/programs/ags/config/modules/notifications/style.css new file mode 100644 index 0000000..1e819fc --- /dev/null +++ b/programs/ags/config/modules/notifications/style.css @@ -0,0 +1,61 @@ +window#notifications { + all: unset; +} + +window#notifications box.notifications { + padding: .5em; +} + +.icon { + min-width: 68px; + min-height: 68px; + margin-right: 1em; +} + +.icon image { + font-size: 58px; + /* to center the icon */ + margin: 5px; + color: @theme_fg_color; +} + +.icon box { + min-width: 68px; + min-height: 68px; + border-radius: 7px; +} + +.notification { + min-width: 350px; + border-radius: 11px; + padding: 1em; + margin: .5em; + border: 1px solid @wm_borders_edge; + background-color: @theme_bg_color; +} + +.notification.critical { + border: 1px solid lightcoral; +} + +.title { + color: @theme_fg_color; + font-size: 1.4em; +} + +.body { + color: @theme_unfocused_fg_color; +} + +.actions .action-button { + margin: 0 .4em; + margin-top: .8em; +} + +.actions .action-button:first-child { + margin-left: 0; +} + +.actions .action-button:last-child { + margin-right: 0; +} diff --git a/programs/ags/default.nix b/programs/ags/default.nix index 68dfd65..74eae58 100644 --- a/programs/ags/default.nix +++ b/programs/ags/default.nix @@ -3,13 +3,17 @@ # add the home manager module imports = [ inputs.ags.homeManagerModules.default ]; + home.packages = with pkgs; [ + libnotify # Notifications through ags + ]; + programs.ags = { enable = true; # null or path, leave as null if you don't want hm to manage the config configDir = ./config; - # additional packages to add to gjs's runtime + # additional packages to add to ags's runtime extraPackages = with pkgs; [ gtksourceview webkitgtk diff --git a/programs/dunst/default.nix b/programs/dunst/default.nix index dbdc205..3f1e60e 100644 --- a/programs/dunst/default.nix +++ b/programs/dunst/default.nix @@ -1,6 +1,9 @@ { config, pkgs, ... }: { + home.packages = with pkgs; [ + libnotify + ]; services.dunst.enable = true; services.dunst.settings = { global = { From 3758ae814996f61c86e67ae06499c997441d3ffe Mon Sep 17 00:00:00 2001 From: JuliaLange Date: Thu, 22 Feb 2024 23:59:35 -0800 Subject: [PATCH 065/412] Add ags to inits, and update league rules --- programs/hypr/league_rules.conf | 2 +- programs/hypr/settings.conf | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/programs/hypr/league_rules.conf b/programs/hypr/league_rules.conf index 1f9ef3b..a2730bc 100644 --- a/programs/hypr/league_rules.conf +++ b/programs/hypr/league_rules.conf @@ -10,7 +10,7 @@ windowrulev2 = nofocus, class:^(leagueclient.exe)$ windowrulev2 = noshadow, class:^(leagueclient.exe)$ # gamer settings (set ingame to borderless) -windowrulev2 = immediate, class:^(league of legends.exe)$ +#windowrulev2 = immediate, class:^(league of legends.exe)$ windowrulev2 = fullscreen, class:^(league of legends.exe)$ # workspaces diff --git a/programs/hypr/settings.conf b/programs/hypr/settings.conf index 71d0ae2..bd6f94c 100644 --- a/programs/hypr/settings.conf +++ b/programs/hypr/settings.conf @@ -9,6 +9,7 @@ env = WLR_DRM_NO_ATOMIC,1 # Inits exec-once = swww init exec-once = swww img $HOME/med/pix/bg.png +exec-once = ags # Settings input { From 45e2ab12716687e147d632f1ea3154bfa7c3e237 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 22 Feb 2024 23:59:35 -0800 Subject: [PATCH 066/412] Add ags to inits, and update league rules --- programs/hypr/league_rules.conf | 2 +- programs/hypr/settings.conf | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/programs/hypr/league_rules.conf b/programs/hypr/league_rules.conf index 1f9ef3b..a2730bc 100644 --- a/programs/hypr/league_rules.conf +++ b/programs/hypr/league_rules.conf @@ -10,7 +10,7 @@ windowrulev2 = nofocus, class:^(leagueclient.exe)$ windowrulev2 = noshadow, class:^(leagueclient.exe)$ # gamer settings (set ingame to borderless) -windowrulev2 = immediate, class:^(league of legends.exe)$ +#windowrulev2 = immediate, class:^(league of legends.exe)$ windowrulev2 = fullscreen, class:^(league of legends.exe)$ # workspaces diff --git a/programs/hypr/settings.conf b/programs/hypr/settings.conf index 71d0ae2..bd6f94c 100644 --- a/programs/hypr/settings.conf +++ b/programs/hypr/settings.conf @@ -9,6 +9,7 @@ env = WLR_DRM_NO_ATOMIC,1 # Inits exec-once = swww init exec-once = swww img $HOME/med/pix/bg.png +exec-once = ags # Settings input { From a38b6655c148fe0eca2375e6f43386286898b361 Mon Sep 17 00:00:00 2001 From: JuliaLange Date: Tue, 27 Feb 2024 20:47:08 -0800 Subject: [PATCH 067/412] Add chime to timer --- services/timers/default.nix | 4 ++-- services/timers/scripts/chimes.ogg | Bin 0 -> 262412 bytes services/timers/scripts/notify-time.sh | 3 +++ 3 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 services/timers/scripts/chimes.ogg diff --git a/services/timers/default.nix b/services/timers/default.nix index e47f3c9..8eb16b7 100644 --- a/services/timers/default.nix +++ b/services/timers/default.nix @@ -30,7 +30,7 @@ let rootPath = ./.; in }; Service = { Type="simple"; - ExecStart="/home/pan/.config/timer_scripts/notify-time.sh 60000"; + ExecStart="/home/pan/.config/timer_scripts/notify-time.sh 60000 1"; }; }; quarterly-time = { @@ -40,7 +40,7 @@ let rootPath = ./.; in }; Service = { Type="simple"; - ExecStart="/home/pan/.config/timer_scripts/notify-time.sh 10000"; + ExecStart="/home/pan/.config/timer_scripts/notify-time.sh 10000 0"; }; }; }; diff --git a/services/timers/scripts/chimes.ogg b/services/timers/scripts/chimes.ogg new file mode 100644 index 0000000000000000000000000000000000000000..bd716d057e920a7b2738d07d386f9b48cc1a1bc8 GIT binary patch literal 262412 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 Date: Tue, 5 Mar 2024 21:31:57 -0800 Subject: [PATCH 069/412] Add steam --- flake.lock | 86 +++++++++++------------------------ flake.nix | 19 ++++---- modules/etc/steam/default.nix | 9 ++++ systems/onizuka/default.nix | 1 + 4 files changed, 47 insertions(+), 68 deletions(-) create mode 100644 modules/etc/steam/default.nix diff --git a/flake.lock b/flake.lock index 396fa31..7ac01d9 100644 --- a/flake.lock +++ b/flake.lock @@ -10,11 +10,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1708543581, - "narHash": "sha256-wvhsh4J+Q9ED8oAWG+iz5uNOw70nagF+aeetlGpLkqs=", + "lastModified": 1709684144, + "narHash": "sha256-7j+EjESpJYRx6tRkeTd6YgQxFUWXJ1vmhnwh0S8jlaA=", "owner": "hyprwm", "repo": "Hyprland", - "rev": "ea3fd13e24d7d3a74cf803bef3e6133b5d708d1b", + "rev": "fb87e332c59ce386a095b3e81bb1abbcc9cc3e5c", "type": "github" }, "original": { @@ -53,36 +53,18 @@ "nixpkgs": [ "hyprland", "nixpkgs" - ] - }, - "locked": { - "lastModified": 1708005943, - "narHash": "sha256-9TT3xk++LI5/SPYgjYX34xZ4ebR93c1uerIq+SE/ues=", - "owner": "hyprwm", - "repo": "hyprlang", - "rev": "aeb3e012adc7b3235335c540b214b82267c2b983", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "hyprlang", - "type": "github" - } - }, - "hyprlang_2": { - "inputs": { - "nixpkgs": [ + ], + "systems": [ "hyprland", - "xdph", - "nixpkgs" + "systems" ] }, "locked": { - "lastModified": 1704287638, - "narHash": "sha256-TuRXJGwtK440AXQNl5eiqmQqY4LZ/9+z/R7xC0ie3iA=", + "lastModified": 1708787654, + "narHash": "sha256-7ACgM3ZuAhPqurXHUvR2nWMRcnmzGGPjLK6q4DSTelI=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "6624f2bb66d4d27975766e81f77174adbe58ec97", + "rev": "0fce791ba2334aca183f2ed42399518947550d0d", "type": "github" }, "original": { @@ -93,11 +75,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1707546158, - "narHash": "sha256-nYYJTpzfPMDxI8mzhQsYjIUX+grorqjKEU9Np6Xwy/0=", + "lastModified": 1708807242, + "narHash": "sha256-sRTRkhMD4delO/hPxxi+XwLqPn8BuUq6nnj4JqLwOu0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "d934204a0f8d9198e1e4515dd6fec76a139c87f0", + "rev": "73de017ef2d18a04ac4bfd0c02650007ccb31c2a", "type": "github" }, "original": { @@ -109,11 +91,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1708475490, - "narHash": "sha256-g1v0TsWBQPX97ziznfJdWhgMyMGtoBFs102xSYO4syU=", + "lastModified": 1709479366, + "narHash": "sha256-n6F0n8UV6lnTZbYPl1A9q1BS0p4hduAv1mGAP17CVd0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "0e74ca98a74bc7270d28838369593635a5db3260", + "rev": "b8697e57f10292a6165a20f03d2f42920dfaf973", "type": "github" }, "original": { @@ -122,27 +104,10 @@ "type": "indirect" } }, - "personalpkgs": { - "locked": { - "lastModified": 1701902328, - "narHash": "sha256-3tiiSEgQRPps0aV40belvLk1k4Max7oRh/+hZGLtfGc=", - "owner": "langedev", - "repo": "nixpkgs", - "rev": "162f092c27afe0949253753f088c2babfba5b902", - "type": "github" - }, - "original": { - "owner": "langedev", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, "root": { "inputs": { "hyprland": "hyprland", - "nixpkgs": "nixpkgs_2", - "personalpkgs": "personalpkgs" + "nixpkgs": "nixpkgs_2" } }, "systems": { @@ -164,18 +129,18 @@ "flake": false, "locked": { "host": "gitlab.freedesktop.org", - "lastModified": 1706359063, - "narHash": "sha256-5HUTG0p+nCJv3cn73AmFHRZdfRV5AD5N43g8xAePSKM=", + "lastModified": 1708558866, + "narHash": "sha256-Mz6hCtommq7RQfcPnxLINigO4RYSNt23HeJHC6mVmWI=", "owner": "wlroots", "repo": "wlroots", - "rev": "00b869c1a96f300a8f25da95d624524895e0ddf2", + "rev": "0cb091f1a2d345f37d2ee445f4ffd04f7f4ec9e5", "type": "gitlab" }, "original": { "host": "gitlab.freedesktop.org", "owner": "wlroots", "repo": "wlroots", - "rev": "00b869c1a96f300a8f25da95d624524895e0ddf2", + "rev": "0cb091f1a2d345f37d2ee445f4ffd04f7f4ec9e5", "type": "gitlab" } }, @@ -185,7 +150,10 @@ "hyprland", "hyprland-protocols" ], - "hyprlang": "hyprlang_2", + "hyprlang": [ + "hyprland", + "hyprlang" + ], "nixpkgs": [ "hyprland", "nixpkgs" @@ -196,11 +164,11 @@ ] }, "locked": { - "lastModified": 1706521509, - "narHash": "sha256-AInZ50acOJ3wzUwGzNr1TmxGTMx+8j6oSTzz4E7Vbp8=", + "lastModified": 1708696469, + "narHash": "sha256-shh5wmpeYy3MmsBfkm4f76yPsBDGk6OLYRVG+ARy2F0=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "c06fd88b3da492b8f9067be021b9184f7012b5a8", + "rev": "1b713911c2f12b96c2574474686e4027ac4bf826", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index f727dc2..7efa651 100644 --- a/flake.nix +++ b/flake.nix @@ -1,20 +1,21 @@ { inputs = { nixpkgs.url = "nixpkgs/nixos-unstable"; - personalpkgs.url = "github:langedev/nixpkgs/nixos-unstable"; + # personalpkgs.url = "github:langedev/nixpkgs/nixos-unstable"; hyprland.url = "github:hyprwm/Hyprland"; }; - outputs = { self, nixpkgs, personalpkgs, hyprland, ... }: - let - personal-overlay = final: prev: { - personal = personalpkgs.legacyPackages.${prev.system}; - }; - in { + outputs = { self, nixpkgs, hyprland, ... }: + # let + # personal-overlay = final: prev: { + # personal = personalpkgs.legacyPackages.${prev.system}; + # }; + # in { + { nixosConfigurations.onizuka = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; modules = [ - ({ config, pkgs, ... }: { nixpkgs.overlays = [ personal-overlay ]; }) + # ({ config, pkgs, ... }: { nixpkgs.overlays = [ personal-overlay ]; }) hyprland.nixosModules.default { programs.hyprland.enable = true; } ./systems/shared @@ -25,7 +26,7 @@ nixosConfigurations.jibril = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; modules = [ - ({ config, pkgs, ... }: { nixpkgs.overlays = [ personal-overlay ]; }) + # ({ config, pkgs, ... }: { nixpkgs.overlays = [ personal-overlay ]; }) hyprland.nixosModules.default { programs.hyprland.enable = true; } ./systems/shared diff --git a/modules/etc/steam/default.nix b/modules/etc/steam/default.nix new file mode 100644 index 0000000..192899c --- /dev/null +++ b/modules/etc/steam/default.nix @@ -0,0 +1,9 @@ +{ config, pkgs, lib, ... }: + +{ + programs.steam = { + enable = true; + remotePlay.openFirewall = true; + dedicatedServer.openFirewall = true; + }; +} diff --git a/systems/onizuka/default.nix b/systems/onizuka/default.nix index 8bc25ef..b8d7de5 100644 --- a/systems/onizuka/default.nix +++ b/systems/onizuka/default.nix @@ -5,5 +5,6 @@ imports = [ ./hardware.nix ../../modules/graphics/nvidia + ../../modules/etc/steam ]; } From 5ee244c98ae1a55b1f6ead14c47660ee50628ebf Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 5 Mar 2024 21:31:57 -0800 Subject: [PATCH 070/412] Add steam --- flake.lock | 86 +++++++++++------------------------ flake.nix | 19 ++++---- modules/etc/steam/default.nix | 9 ++++ systems/onizuka/default.nix | 1 + 4 files changed, 47 insertions(+), 68 deletions(-) create mode 100644 modules/etc/steam/default.nix diff --git a/flake.lock b/flake.lock index 396fa31..7ac01d9 100644 --- a/flake.lock +++ b/flake.lock @@ -10,11 +10,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1708543581, - "narHash": "sha256-wvhsh4J+Q9ED8oAWG+iz5uNOw70nagF+aeetlGpLkqs=", + "lastModified": 1709684144, + "narHash": "sha256-7j+EjESpJYRx6tRkeTd6YgQxFUWXJ1vmhnwh0S8jlaA=", "owner": "hyprwm", "repo": "Hyprland", - "rev": "ea3fd13e24d7d3a74cf803bef3e6133b5d708d1b", + "rev": "fb87e332c59ce386a095b3e81bb1abbcc9cc3e5c", "type": "github" }, "original": { @@ -53,36 +53,18 @@ "nixpkgs": [ "hyprland", "nixpkgs" - ] - }, - "locked": { - "lastModified": 1708005943, - "narHash": "sha256-9TT3xk++LI5/SPYgjYX34xZ4ebR93c1uerIq+SE/ues=", - "owner": "hyprwm", - "repo": "hyprlang", - "rev": "aeb3e012adc7b3235335c540b214b82267c2b983", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "hyprlang", - "type": "github" - } - }, - "hyprlang_2": { - "inputs": { - "nixpkgs": [ + ], + "systems": [ "hyprland", - "xdph", - "nixpkgs" + "systems" ] }, "locked": { - "lastModified": 1704287638, - "narHash": "sha256-TuRXJGwtK440AXQNl5eiqmQqY4LZ/9+z/R7xC0ie3iA=", + "lastModified": 1708787654, + "narHash": "sha256-7ACgM3ZuAhPqurXHUvR2nWMRcnmzGGPjLK6q4DSTelI=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "6624f2bb66d4d27975766e81f77174adbe58ec97", + "rev": "0fce791ba2334aca183f2ed42399518947550d0d", "type": "github" }, "original": { @@ -93,11 +75,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1707546158, - "narHash": "sha256-nYYJTpzfPMDxI8mzhQsYjIUX+grorqjKEU9Np6Xwy/0=", + "lastModified": 1708807242, + "narHash": "sha256-sRTRkhMD4delO/hPxxi+XwLqPn8BuUq6nnj4JqLwOu0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "d934204a0f8d9198e1e4515dd6fec76a139c87f0", + "rev": "73de017ef2d18a04ac4bfd0c02650007ccb31c2a", "type": "github" }, "original": { @@ -109,11 +91,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1708475490, - "narHash": "sha256-g1v0TsWBQPX97ziznfJdWhgMyMGtoBFs102xSYO4syU=", + "lastModified": 1709479366, + "narHash": "sha256-n6F0n8UV6lnTZbYPl1A9q1BS0p4hduAv1mGAP17CVd0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "0e74ca98a74bc7270d28838369593635a5db3260", + "rev": "b8697e57f10292a6165a20f03d2f42920dfaf973", "type": "github" }, "original": { @@ -122,27 +104,10 @@ "type": "indirect" } }, - "personalpkgs": { - "locked": { - "lastModified": 1701902328, - "narHash": "sha256-3tiiSEgQRPps0aV40belvLk1k4Max7oRh/+hZGLtfGc=", - "owner": "langedev", - "repo": "nixpkgs", - "rev": "162f092c27afe0949253753f088c2babfba5b902", - "type": "github" - }, - "original": { - "owner": "langedev", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, "root": { "inputs": { "hyprland": "hyprland", - "nixpkgs": "nixpkgs_2", - "personalpkgs": "personalpkgs" + "nixpkgs": "nixpkgs_2" } }, "systems": { @@ -164,18 +129,18 @@ "flake": false, "locked": { "host": "gitlab.freedesktop.org", - "lastModified": 1706359063, - "narHash": "sha256-5HUTG0p+nCJv3cn73AmFHRZdfRV5AD5N43g8xAePSKM=", + "lastModified": 1708558866, + "narHash": "sha256-Mz6hCtommq7RQfcPnxLINigO4RYSNt23HeJHC6mVmWI=", "owner": "wlroots", "repo": "wlroots", - "rev": "00b869c1a96f300a8f25da95d624524895e0ddf2", + "rev": "0cb091f1a2d345f37d2ee445f4ffd04f7f4ec9e5", "type": "gitlab" }, "original": { "host": "gitlab.freedesktop.org", "owner": "wlroots", "repo": "wlroots", - "rev": "00b869c1a96f300a8f25da95d624524895e0ddf2", + "rev": "0cb091f1a2d345f37d2ee445f4ffd04f7f4ec9e5", "type": "gitlab" } }, @@ -185,7 +150,10 @@ "hyprland", "hyprland-protocols" ], - "hyprlang": "hyprlang_2", + "hyprlang": [ + "hyprland", + "hyprlang" + ], "nixpkgs": [ "hyprland", "nixpkgs" @@ -196,11 +164,11 @@ ] }, "locked": { - "lastModified": 1706521509, - "narHash": "sha256-AInZ50acOJ3wzUwGzNr1TmxGTMx+8j6oSTzz4E7Vbp8=", + "lastModified": 1708696469, + "narHash": "sha256-shh5wmpeYy3MmsBfkm4f76yPsBDGk6OLYRVG+ARy2F0=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "c06fd88b3da492b8f9067be021b9184f7012b5a8", + "rev": "1b713911c2f12b96c2574474686e4027ac4bf826", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index f727dc2..7efa651 100644 --- a/flake.nix +++ b/flake.nix @@ -1,20 +1,21 @@ { inputs = { nixpkgs.url = "nixpkgs/nixos-unstable"; - personalpkgs.url = "github:langedev/nixpkgs/nixos-unstable"; + # personalpkgs.url = "github:langedev/nixpkgs/nixos-unstable"; hyprland.url = "github:hyprwm/Hyprland"; }; - outputs = { self, nixpkgs, personalpkgs, hyprland, ... }: - let - personal-overlay = final: prev: { - personal = personalpkgs.legacyPackages.${prev.system}; - }; - in { + outputs = { self, nixpkgs, hyprland, ... }: + # let + # personal-overlay = final: prev: { + # personal = personalpkgs.legacyPackages.${prev.system}; + # }; + # in { + { nixosConfigurations.onizuka = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; modules = [ - ({ config, pkgs, ... }: { nixpkgs.overlays = [ personal-overlay ]; }) + # ({ config, pkgs, ... }: { nixpkgs.overlays = [ personal-overlay ]; }) hyprland.nixosModules.default { programs.hyprland.enable = true; } ./systems/shared @@ -25,7 +26,7 @@ nixosConfigurations.jibril = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; modules = [ - ({ config, pkgs, ... }: { nixpkgs.overlays = [ personal-overlay ]; }) + # ({ config, pkgs, ... }: { nixpkgs.overlays = [ personal-overlay ]; }) hyprland.nixosModules.default { programs.hyprland.enable = true; } ./systems/shared diff --git a/modules/etc/steam/default.nix b/modules/etc/steam/default.nix new file mode 100644 index 0000000..192899c --- /dev/null +++ b/modules/etc/steam/default.nix @@ -0,0 +1,9 @@ +{ config, pkgs, lib, ... }: + +{ + programs.steam = { + enable = true; + remotePlay.openFirewall = true; + dedicatedServer.openFirewall = true; + }; +} diff --git a/systems/onizuka/default.nix b/systems/onizuka/default.nix index 8bc25ef..b8d7de5 100644 --- a/systems/onizuka/default.nix +++ b/systems/onizuka/default.nix @@ -5,5 +5,6 @@ imports = [ ./hardware.nix ../../modules/graphics/nvidia + ../../modules/etc/steam ]; } From 82979ed765c90910b814ef31c8a440fb9dc3b15f Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 5 Mar 2024 21:32:38 -0800 Subject: [PATCH 071/412] Change onizuka's disk install --- systems/onizuka/hardware.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/systems/onizuka/hardware.nix b/systems/onizuka/hardware.nix index f6be0dc..ea1c10d 100644 --- a/systems/onizuka/hardware.nix +++ b/systems/onizuka/hardware.nix @@ -14,17 +14,17 @@ boot.extraModulePackages = [ ]; fileSystems."/" = - { device = "/dev/disk/by-uuid/f3afdc38-7550-4113-9f87-10def35845e2"; + { device = "/dev/disk/by-uuid/d42f4599-22fc-491e-b93e-46129163a25f"; fsType = "ext4"; }; fileSystems."/boot" = - { device = "/dev/disk/by-uuid/6D40-7FAB"; + { device = "/dev/disk/by-uuid/5F1D-093C"; fsType = "vfat"; }; swapDevices = - [ { device = "/dev/disk/by-uuid/743a10e1-a064-41e3-a0ae-59ca54cff1b1"; } + [ { device = "/dev/disk/by-uuid/5c3ec6ab-58c3-41bd-be6a-c935bdcb0818"; } ]; # Enables DHCP on each ethernet and wireless interface. In case of scripted networking From 9b03f2941d88f3826047c0c422012a0ad0d8b97f Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 5 Mar 2024 21:32:38 -0800 Subject: [PATCH 072/412] Change onizuka's disk install --- systems/onizuka/hardware.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/systems/onizuka/hardware.nix b/systems/onizuka/hardware.nix index f6be0dc..ea1c10d 100644 --- a/systems/onizuka/hardware.nix +++ b/systems/onizuka/hardware.nix @@ -14,17 +14,17 @@ boot.extraModulePackages = [ ]; fileSystems."/" = - { device = "/dev/disk/by-uuid/f3afdc38-7550-4113-9f87-10def35845e2"; + { device = "/dev/disk/by-uuid/d42f4599-22fc-491e-b93e-46129163a25f"; fsType = "ext4"; }; fileSystems."/boot" = - { device = "/dev/disk/by-uuid/6D40-7FAB"; + { device = "/dev/disk/by-uuid/5F1D-093C"; fsType = "vfat"; }; swapDevices = - [ { device = "/dev/disk/by-uuid/743a10e1-a064-41e3-a0ae-59ca54cff1b1"; } + [ { device = "/dev/disk/by-uuid/5c3ec6ab-58c3-41bd-be6a-c935bdcb0818"; } ]; # Enables DHCP on each ethernet and wireless interface. In case of scripted networking From b12cc17adb210615fdd86ad6792370638d2a6f9f Mon Sep 17 00:00:00 2001 From: JuliaLange Date: Sat, 16 Mar 2024 11:10:22 -0700 Subject: [PATCH 073/412] Window Swallowing, opacity, and hell workspace --- programs/hypr/keybinds.conf | 2 ++ programs/hypr/settings.conf | 6 ++++++ programs/hypr/window_rules.conf | 11 +++++++++-- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/programs/hypr/keybinds.conf b/programs/hypr/keybinds.conf index 3c9b2d8..d769a46 100644 --- a/programs/hypr/keybinds.conf +++ b/programs/hypr/keybinds.conf @@ -24,6 +24,7 @@ bind = $mainMod, 2, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh web bind = $mainMod, 3, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh med bind = $mainMod, 4, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh game binde = $mainMod, 5, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh etc +binde = $mainMod, _, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh hell binde = $mainMod, TAB, exec, $XDG_CONFIG_HOME/hypr/scripts/changesecondary.xsh bind = $mainMod, m, togglespecialworkspace, mus @@ -39,6 +40,7 @@ bind = $mainMod SHIFT, 1, movetoworkspacesilent, name:home bind = $mainMod SHIFT, 2, movetoworkspacesilent, name:web bind = $mainMod SHIFT, 3, movetoworkspacesilent, name:med bind = $mainMod SHIFT, 4, movetoworkspacesilent, name:misc +bind = $mainMod SHIFT, _, movetoworkspacesilent, name:hell bind = $mainMod SHIFT, TAB, movetoworkspacesilent, r-1 # Move/resize windows with mainMod + LMB/RMB and dragging diff --git a/programs/hypr/settings.conf b/programs/hypr/settings.conf index bd6f94c..77eceff 100644 --- a/programs/hypr/settings.conf +++ b/programs/hypr/settings.conf @@ -58,3 +58,9 @@ master { new_is_master = false mfact = 0.53 } + +misc { + focus_on_activate = true + enable_swallow = true + swallow_regex = ^(Alacritty)$ +} diff --git a/programs/hypr/window_rules.conf b/programs/hypr/window_rules.conf index eeb5e1f..6643f96 100644 --- a/programs/hypr/window_rules.conf +++ b/programs/hypr/window_rules.conf @@ -5,6 +5,7 @@ env = HYPR_MON_SECONDARY, DP-1 workspace=name:home, monitor:DP-2, persistent:true, default:true workspace=name:game, monitor:DP-2, persistent:true workspace=name:etc0, monitor:DP-2, persistent:true +workspace=name:hell, monitor:DP-2, persistent:true # Secondaries workspace=name:chat, monitor:DP-1, persistent:true, default:true workspace=name:misc0, monitor:DP-1, persistent:true @@ -22,8 +23,14 @@ windowrule = workspace name:chat, Beeper windowrule = workspace name:game, lutris windowrule = workspace name:game, explorer.exe -windowrule = opacity 0.9 0.9,^(Alacritty)$ -windowrule = opacity 0.94 0.94,^(discord)$ +windowrulev2 = opacity 0.94 fullscreen:0 + +windowrulev2 = opacity 0.79 override, class:^(Alacritty)$ +windowrulev2 = opacity 1 override, initialTitle:^(Discord Popout)$ +windowrulev2 = opacity 1 override, class:^(firefox)$ +windowrulev2 = opacity 1 override, class:^(Gimp)$ +windowrulev2 = opacity 1 override, class:^(feh)$ +windowrulev2 = opacity 1 override, class:^(mpv)$ env = HYPR_WORK_DB,$XDG_CACHE_HOME/hypr/workspace.db From cc93472fde5319cc7e1d788ed9dcf6811c89bcc0 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sat, 16 Mar 2024 11:10:22 -0700 Subject: [PATCH 074/412] Window Swallowing, opacity, and hell workspace --- programs/hypr/keybinds.conf | 2 ++ programs/hypr/settings.conf | 6 ++++++ programs/hypr/window_rules.conf | 11 +++++++++-- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/programs/hypr/keybinds.conf b/programs/hypr/keybinds.conf index 3c9b2d8..d769a46 100644 --- a/programs/hypr/keybinds.conf +++ b/programs/hypr/keybinds.conf @@ -24,6 +24,7 @@ bind = $mainMod, 2, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh web bind = $mainMod, 3, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh med bind = $mainMod, 4, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh game binde = $mainMod, 5, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh etc +binde = $mainMod, _, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh hell binde = $mainMod, TAB, exec, $XDG_CONFIG_HOME/hypr/scripts/changesecondary.xsh bind = $mainMod, m, togglespecialworkspace, mus @@ -39,6 +40,7 @@ bind = $mainMod SHIFT, 1, movetoworkspacesilent, name:home bind = $mainMod SHIFT, 2, movetoworkspacesilent, name:web bind = $mainMod SHIFT, 3, movetoworkspacesilent, name:med bind = $mainMod SHIFT, 4, movetoworkspacesilent, name:misc +bind = $mainMod SHIFT, _, movetoworkspacesilent, name:hell bind = $mainMod SHIFT, TAB, movetoworkspacesilent, r-1 # Move/resize windows with mainMod + LMB/RMB and dragging diff --git a/programs/hypr/settings.conf b/programs/hypr/settings.conf index bd6f94c..77eceff 100644 --- a/programs/hypr/settings.conf +++ b/programs/hypr/settings.conf @@ -58,3 +58,9 @@ master { new_is_master = false mfact = 0.53 } + +misc { + focus_on_activate = true + enable_swallow = true + swallow_regex = ^(Alacritty)$ +} diff --git a/programs/hypr/window_rules.conf b/programs/hypr/window_rules.conf index eeb5e1f..6643f96 100644 --- a/programs/hypr/window_rules.conf +++ b/programs/hypr/window_rules.conf @@ -5,6 +5,7 @@ env = HYPR_MON_SECONDARY, DP-1 workspace=name:home, monitor:DP-2, persistent:true, default:true workspace=name:game, monitor:DP-2, persistent:true workspace=name:etc0, monitor:DP-2, persistent:true +workspace=name:hell, monitor:DP-2, persistent:true # Secondaries workspace=name:chat, monitor:DP-1, persistent:true, default:true workspace=name:misc0, monitor:DP-1, persistent:true @@ -22,8 +23,14 @@ windowrule = workspace name:chat, Beeper windowrule = workspace name:game, lutris windowrule = workspace name:game, explorer.exe -windowrule = opacity 0.9 0.9,^(Alacritty)$ -windowrule = opacity 0.94 0.94,^(discord)$ +windowrulev2 = opacity 0.94 fullscreen:0 + +windowrulev2 = opacity 0.79 override, class:^(Alacritty)$ +windowrulev2 = opacity 1 override, initialTitle:^(Discord Popout)$ +windowrulev2 = opacity 1 override, class:^(firefox)$ +windowrulev2 = opacity 1 override, class:^(Gimp)$ +windowrulev2 = opacity 1 override, class:^(feh)$ +windowrulev2 = opacity 1 override, class:^(mpv)$ env = HYPR_WORK_DB,$XDG_CACHE_HOME/hypr/workspace.db From b6b6a956ee2b7e69a43eb3ecdd466c92bd92363c Mon Sep 17 00:00:00 2001 From: JuliaLange Date: Sat, 16 Mar 2024 11:12:22 -0700 Subject: [PATCH 075/412] Switch to upstream repo, change xonsh config --- flake.lock | 151 +++++++++++++++++++++++++++---------- flake.nix | 7 +- home.nix | 6 +- programs/xonsh/default.nix | 24 +++--- programs/xonsh/rc.xsh | 7 ++ 5 files changed, 138 insertions(+), 57 deletions(-) create mode 100644 programs/xonsh/rc.xsh diff --git a/flake.lock b/flake.lock index 2ca6ad9..abe0102 100644 --- a/flake.lock +++ b/flake.lock @@ -5,11 +5,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1708193735, - "narHash": "sha256-6DmQo9n3mrgpCH9wtSia0dAHXzGmpCjOqG35S0QrxWQ=", + "lastModified": 1710523796, + "narHash": "sha256-VlzW+B/6Ifk+BRy1leU0GHuQ4KqlQXLO/pRRCCHcvDQ=", "owner": "Aylur", "repo": "ags", - "rev": "785f1a941a52c32d1cbe77a5eb935713fe45cddb", + "rev": "5dec6c7f37be13781144a7964e75cc00c7d7045f", "type": "github" }, "original": { @@ -25,33 +25,61 @@ ] }, "locked": { - "lastModified": 1708031129, - "narHash": "sha256-EH20hJfNnc1/ODdDVat9B7aKm0B95L3YtkIRwKLvQG8=", - "owner": "langedev", + "lastModified": 1710532761, + "narHash": "sha256-SUXGZNrXX05YA9G6EmgupxhOr3swI1gcxLUeDMUhrEY=", + "owner": "nix-community", "repo": "home-manager", - "rev": "3d6791b3897b526c82920a2ab5f61d71985b3cf8", + "rev": "206f457fffdb9a73596a4cb2211a471bd305243d", "type": "github" }, "original": { - "owner": "langedev", + "owner": "nix-community", "repo": "home-manager", "type": "github" } }, + "hyprcursor": { + "inputs": { + "hyprlang": "hyprlang", + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1710257359, + "narHash": "sha256-43re5pzE/cswFAgw92/ugsB3+d5ufDaCcLtl9ztKfBo=", + "owner": "hyprwm", + "repo": "hyprcursor", + "rev": "1761f6cefd77f4fcd2039d930c88d6716ddc4974", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprcursor", + "type": "github" + } + }, "hyprland": { "inputs": { + "hyprcursor": "hyprcursor", "hyprland-protocols": "hyprland-protocols", + "hyprlang": "hyprlang_2", "nixpkgs": "nixpkgs_2", - "systems": "systems", + "systems": "systems_2", "wlroots": "wlroots", "xdph": "xdph" }, "locked": { - "lastModified": 1708215223, - "narHash": "sha256-5z+NPNoiWKoaz3M4LZJ2fP+N7Vl9XGwr4QAV8rh4l4o=", + "lastModified": 1710611769, + "narHash": "sha256-gM4cDw45J8mBmM0aR5Ko/zMAA8UWnQhc4uZ5Ydvc4uo=", "owner": "hyprwm", "repo": "Hyprland", - "rev": "683a4b07c514fa3c13cdf09e475283a69fcc7653", + "rev": "0e87a08e15c023325b64920d9e1159f38a090695", "type": "github" }, "original": { @@ -67,11 +95,11 @@ ] }, "locked": { - "lastModified": 1706198673, - "narHash": "sha256-bHlxFd+3QHy6eXtTzzhwVNcyxBSOxTvBuJGNUzI4C4M=", + "lastModified": 1710415616, + "narHash": "sha256-1qVByzzCcKoCmP8ReUSAjKU5V9pfTLHQIM4WI1tvQ9E=", "owner": "hyprwm", "repo": "contrib", - "rev": "16884001b26e6955ff4b88b4dfe4c8986e20f153", + "rev": "75420d09f93346d9d23d5a1e26b42699f6b66cd6", "type": "github" }, "original": { @@ -109,16 +137,42 @@ "inputs": { "nixpkgs": [ "hyprland", - "xdph", + "hyprcursor", "nixpkgs" + ], + "systems": "systems" + }, + "locked": { + "lastModified": 1709914708, + "narHash": "sha256-bR4o3mynoTa1Wi4ZTjbnsZ6iqVcPGriXp56bZh5UFTk=", + "owner": "hyprwm", + "repo": "hyprlang", + "rev": "a685493fdbeec01ca8ccdf1f3655c044a8ce2fe2", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprlang", + "type": "github" + } + }, + "hyprlang_2": { + "inputs": { + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" ] }, "locked": { - "lastModified": 1704287638, - "narHash": "sha256-TuRXJGwtK440AXQNl5eiqmQqY4LZ/9+z/R7xC0ie3iA=", + "lastModified": 1709914708, + "narHash": "sha256-bR4o3mynoTa1Wi4ZTjbnsZ6iqVcPGriXp56bZh5UFTk=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "6624f2bb66d4d27975766e81f77174adbe58ec97", + "rev": "a685493fdbeec01ca8ccdf1f3655c044a8ce2fe2", "type": "github" }, "original": { @@ -129,11 +183,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1705496572, - "narHash": "sha256-rPIe9G5EBLXdBdn9ilGc0nq082lzQd0xGGe092R/5QE=", + "lastModified": 1708475490, + "narHash": "sha256-g1v0TsWBQPX97ziznfJdWhgMyMGtoBFs102xSYO4syU=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "842d9d80cfd4560648c785f8a4e6f3b096790e19", + "rev": "0e74ca98a74bc7270d28838369593635a5db3260", "type": "github" }, "original": { @@ -145,11 +199,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1707546158, - "narHash": "sha256-nYYJTpzfPMDxI8mzhQsYjIUX+grorqjKEU9Np6Xwy/0=", + "lastModified": 1710272261, + "narHash": "sha256-g0bDwXFmTE7uGDOs9HcJsfLFhH7fOsASbAuOzDC+fhQ=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "d934204a0f8d9198e1e4515dd6fec76a139c87f0", + "rev": "0ad13a6833440b8e238947e47bea7f11071dc2b2", "type": "github" }, "original": { @@ -161,18 +215,17 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1701902328, - "narHash": "sha256-3tiiSEgQRPps0aV40belvLk1k4Max7oRh/+hZGLtfGc=", - "owner": "langedev", + "lastModified": 1710451336, + "narHash": "sha256-pP86Pcfu3BrAvRO7R64x7hs+GaQrjFes+mEPowCfkxY=", + "owner": "NixOS", "repo": "nixpkgs", - "rev": "162f092c27afe0949253753f088c2babfba5b902", + "rev": "d691274a972b3165335d261cc4671335f5c67de9", "type": "github" }, "original": { - "owner": "langedev", + "id": "nixpkgs", "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" + "type": "indirect" } }, "root": { @@ -199,22 +252,37 @@ "type": "github" } }, + "systems_2": { + "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" + } + }, "wlroots": { "flake": false, "locked": { "host": "gitlab.freedesktop.org", - "lastModified": 1706359063, - "narHash": "sha256-5HUTG0p+nCJv3cn73AmFHRZdfRV5AD5N43g8xAePSKM=", + "lastModified": 1709983277, + "narHash": "sha256-wXWIJLd4F2JZeMaihWVDW/yYXCLEC8OpeNJZg9a9ly8=", "owner": "wlroots", "repo": "wlroots", - "rev": "00b869c1a96f300a8f25da95d624524895e0ddf2", + "rev": "50eae512d9cecbf0b3b1898bb1f0b40fa05fe19b", "type": "gitlab" }, "original": { "host": "gitlab.freedesktop.org", "owner": "wlroots", "repo": "wlroots", - "rev": "00b869c1a96f300a8f25da95d624524895e0ddf2", + "rev": "50eae512d9cecbf0b3b1898bb1f0b40fa05fe19b", "type": "gitlab" } }, @@ -224,7 +292,10 @@ "hyprland", "hyprland-protocols" ], - "hyprlang": "hyprlang", + "hyprlang": [ + "hyprland", + "hyprlang" + ], "nixpkgs": [ "hyprland", "nixpkgs" @@ -235,11 +306,11 @@ ] }, "locked": { - "lastModified": 1706521509, - "narHash": "sha256-AInZ50acOJ3wzUwGzNr1TmxGTMx+8j6oSTzz4E7Vbp8=", + "lastModified": 1709299639, + "narHash": "sha256-jYqJM5khksLIbqSxCLUUcqEgI+O2LdlSlcMEBs39CAU=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "c06fd88b3da492b8f9067be021b9184f7012b5a8", + "rev": "2d2fb547178ec025da643db57d40a971507b82fe", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index c40464f..5004e37 100644 --- a/flake.nix +++ b/flake.nix @@ -2,14 +2,11 @@ description = "Home Manager configuration of pan"; inputs = { - # Specify the source of Home Manager and Nixpkgs. - nixpkgs.url = "github:langedev/nixpkgs/nixos-unstable"; - + nixpkgs.url = "nixpkgs/nixos-unstable"; home-manager = { - url = "github:langedev/home-manager"; + url = "github:nix-community/home-manager"; inputs.nixpkgs.follows = "nixpkgs"; }; - hyprland.url = "github:hyprwm/Hyprland"; hyprland-contrib = { url = "github:hyprwm/contrib"; diff --git a/home.nix b/home.nix index b1c70ae..434155e 100644 --- a/home.nix +++ b/home.nix @@ -1,4 +1,4 @@ -{ config, pkgs, ... }: +{ config, pkgs, xdg, ... }: { nixpkgs.config.allowUnfree = true; @@ -23,6 +23,7 @@ ./programs/ssh ./programs/wal ./programs/xdg + ./programs/xonsh ./services/timers ]; @@ -39,6 +40,7 @@ zathura # PDF viewer ani-cli # Easy anime player lutgen # LUT generator + prismlauncher # Minecraft launcher texlive.combined.scheme-full # Latex @@ -52,6 +54,8 @@ EDITOR = "nvim"; VISUAL = "nvim"; BROWSER = "librewolf"; + GRADLE_USER_HOME = "/home/pan/.local/share" + "/gradle"; + CUDA_CACHE_PATH = "/home/pan/.cache" + "/nv"; }; home.sessionPath = [ diff --git a/programs/xonsh/default.nix b/programs/xonsh/default.nix index 3dd83ce..9700e76 100644 --- a/programs/xonsh/default.nix +++ b/programs/xonsh/default.nix @@ -1,15 +1,17 @@ { config, pkgs, ... }: - +let rootPath = ./.; in { - programs.xonsh.enable = true; - - programs.xonsh.interactiveShellInit = '' - cat ~/.cache/wal/sequences - ''; - - home.sessionVariables = { - PROMPT = "τ "; - RIGHT_PROMPT = "{YELLOW}{gitstatus: {} }{BLUE}{short_cwd}{DEFAULT}"; - VI_MODE = 1; + home.packages = with pkgs; [ + xonsh + ]; + home.sessionVariables = { + PROMPT = "τ "; + RIGHT_PROMPT = "{YELLOW}{gitstatus: {} }{BLUE}{short_cwd}{DEFAULT}"; + VI_MODE = 1; }; + xdg.configFile."xonshrc" = { + source = rootPath + "/rc.xsh"; + target = "xonsh/rc.xsh"; + }; + } diff --git a/programs/xonsh/rc.xsh b/programs/xonsh/rc.xsh new file mode 100644 index 0000000..681ad03 --- /dev/null +++ b/programs/xonsh/rc.xsh @@ -0,0 +1,7 @@ +#!/usr/bin/env xonsh + +if $XONSH_INTERACTIVE: + if '__HM_SESS_VARS_SOURCED' in ${...}: + del $__HM_SESS_VARS_SOURCED + source-bash "$HOME/.nix-profile/etc/profile.d/hm-session-vars.sh" --suppress-skip-message + cat "$HOME/.cache/wallust/sequences" From 1e5ae3b644715042332d5c926757a6bdf4ef078f Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sat, 16 Mar 2024 11:12:22 -0700 Subject: [PATCH 076/412] Switch to upstream repo, change xonsh config --- flake.lock | 151 +++++++++++++++++++++++++++---------- flake.nix | 7 +- home.nix | 6 +- programs/xonsh/default.nix | 24 +++--- programs/xonsh/rc.xsh | 7 ++ 5 files changed, 138 insertions(+), 57 deletions(-) create mode 100644 programs/xonsh/rc.xsh diff --git a/flake.lock b/flake.lock index 2ca6ad9..abe0102 100644 --- a/flake.lock +++ b/flake.lock @@ -5,11 +5,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1708193735, - "narHash": "sha256-6DmQo9n3mrgpCH9wtSia0dAHXzGmpCjOqG35S0QrxWQ=", + "lastModified": 1710523796, + "narHash": "sha256-VlzW+B/6Ifk+BRy1leU0GHuQ4KqlQXLO/pRRCCHcvDQ=", "owner": "Aylur", "repo": "ags", - "rev": "785f1a941a52c32d1cbe77a5eb935713fe45cddb", + "rev": "5dec6c7f37be13781144a7964e75cc00c7d7045f", "type": "github" }, "original": { @@ -25,33 +25,61 @@ ] }, "locked": { - "lastModified": 1708031129, - "narHash": "sha256-EH20hJfNnc1/ODdDVat9B7aKm0B95L3YtkIRwKLvQG8=", - "owner": "langedev", + "lastModified": 1710532761, + "narHash": "sha256-SUXGZNrXX05YA9G6EmgupxhOr3swI1gcxLUeDMUhrEY=", + "owner": "nix-community", "repo": "home-manager", - "rev": "3d6791b3897b526c82920a2ab5f61d71985b3cf8", + "rev": "206f457fffdb9a73596a4cb2211a471bd305243d", "type": "github" }, "original": { - "owner": "langedev", + "owner": "nix-community", "repo": "home-manager", "type": "github" } }, + "hyprcursor": { + "inputs": { + "hyprlang": "hyprlang", + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1710257359, + "narHash": "sha256-43re5pzE/cswFAgw92/ugsB3+d5ufDaCcLtl9ztKfBo=", + "owner": "hyprwm", + "repo": "hyprcursor", + "rev": "1761f6cefd77f4fcd2039d930c88d6716ddc4974", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprcursor", + "type": "github" + } + }, "hyprland": { "inputs": { + "hyprcursor": "hyprcursor", "hyprland-protocols": "hyprland-protocols", + "hyprlang": "hyprlang_2", "nixpkgs": "nixpkgs_2", - "systems": "systems", + "systems": "systems_2", "wlroots": "wlroots", "xdph": "xdph" }, "locked": { - "lastModified": 1708215223, - "narHash": "sha256-5z+NPNoiWKoaz3M4LZJ2fP+N7Vl9XGwr4QAV8rh4l4o=", + "lastModified": 1710611769, + "narHash": "sha256-gM4cDw45J8mBmM0aR5Ko/zMAA8UWnQhc4uZ5Ydvc4uo=", "owner": "hyprwm", "repo": "Hyprland", - "rev": "683a4b07c514fa3c13cdf09e475283a69fcc7653", + "rev": "0e87a08e15c023325b64920d9e1159f38a090695", "type": "github" }, "original": { @@ -67,11 +95,11 @@ ] }, "locked": { - "lastModified": 1706198673, - "narHash": "sha256-bHlxFd+3QHy6eXtTzzhwVNcyxBSOxTvBuJGNUzI4C4M=", + "lastModified": 1710415616, + "narHash": "sha256-1qVByzzCcKoCmP8ReUSAjKU5V9pfTLHQIM4WI1tvQ9E=", "owner": "hyprwm", "repo": "contrib", - "rev": "16884001b26e6955ff4b88b4dfe4c8986e20f153", + "rev": "75420d09f93346d9d23d5a1e26b42699f6b66cd6", "type": "github" }, "original": { @@ -109,16 +137,42 @@ "inputs": { "nixpkgs": [ "hyprland", - "xdph", + "hyprcursor", "nixpkgs" + ], + "systems": "systems" + }, + "locked": { + "lastModified": 1709914708, + "narHash": "sha256-bR4o3mynoTa1Wi4ZTjbnsZ6iqVcPGriXp56bZh5UFTk=", + "owner": "hyprwm", + "repo": "hyprlang", + "rev": "a685493fdbeec01ca8ccdf1f3655c044a8ce2fe2", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprlang", + "type": "github" + } + }, + "hyprlang_2": { + "inputs": { + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" ] }, "locked": { - "lastModified": 1704287638, - "narHash": "sha256-TuRXJGwtK440AXQNl5eiqmQqY4LZ/9+z/R7xC0ie3iA=", + "lastModified": 1709914708, + "narHash": "sha256-bR4o3mynoTa1Wi4ZTjbnsZ6iqVcPGriXp56bZh5UFTk=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "6624f2bb66d4d27975766e81f77174adbe58ec97", + "rev": "a685493fdbeec01ca8ccdf1f3655c044a8ce2fe2", "type": "github" }, "original": { @@ -129,11 +183,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1705496572, - "narHash": "sha256-rPIe9G5EBLXdBdn9ilGc0nq082lzQd0xGGe092R/5QE=", + "lastModified": 1708475490, + "narHash": "sha256-g1v0TsWBQPX97ziznfJdWhgMyMGtoBFs102xSYO4syU=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "842d9d80cfd4560648c785f8a4e6f3b096790e19", + "rev": "0e74ca98a74bc7270d28838369593635a5db3260", "type": "github" }, "original": { @@ -145,11 +199,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1707546158, - "narHash": "sha256-nYYJTpzfPMDxI8mzhQsYjIUX+grorqjKEU9Np6Xwy/0=", + "lastModified": 1710272261, + "narHash": "sha256-g0bDwXFmTE7uGDOs9HcJsfLFhH7fOsASbAuOzDC+fhQ=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "d934204a0f8d9198e1e4515dd6fec76a139c87f0", + "rev": "0ad13a6833440b8e238947e47bea7f11071dc2b2", "type": "github" }, "original": { @@ -161,18 +215,17 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1701902328, - "narHash": "sha256-3tiiSEgQRPps0aV40belvLk1k4Max7oRh/+hZGLtfGc=", - "owner": "langedev", + "lastModified": 1710451336, + "narHash": "sha256-pP86Pcfu3BrAvRO7R64x7hs+GaQrjFes+mEPowCfkxY=", + "owner": "NixOS", "repo": "nixpkgs", - "rev": "162f092c27afe0949253753f088c2babfba5b902", + "rev": "d691274a972b3165335d261cc4671335f5c67de9", "type": "github" }, "original": { - "owner": "langedev", + "id": "nixpkgs", "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" + "type": "indirect" } }, "root": { @@ -199,22 +252,37 @@ "type": "github" } }, + "systems_2": { + "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" + } + }, "wlroots": { "flake": false, "locked": { "host": "gitlab.freedesktop.org", - "lastModified": 1706359063, - "narHash": "sha256-5HUTG0p+nCJv3cn73AmFHRZdfRV5AD5N43g8xAePSKM=", + "lastModified": 1709983277, + "narHash": "sha256-wXWIJLd4F2JZeMaihWVDW/yYXCLEC8OpeNJZg9a9ly8=", "owner": "wlroots", "repo": "wlroots", - "rev": "00b869c1a96f300a8f25da95d624524895e0ddf2", + "rev": "50eae512d9cecbf0b3b1898bb1f0b40fa05fe19b", "type": "gitlab" }, "original": { "host": "gitlab.freedesktop.org", "owner": "wlroots", "repo": "wlroots", - "rev": "00b869c1a96f300a8f25da95d624524895e0ddf2", + "rev": "50eae512d9cecbf0b3b1898bb1f0b40fa05fe19b", "type": "gitlab" } }, @@ -224,7 +292,10 @@ "hyprland", "hyprland-protocols" ], - "hyprlang": "hyprlang", + "hyprlang": [ + "hyprland", + "hyprlang" + ], "nixpkgs": [ "hyprland", "nixpkgs" @@ -235,11 +306,11 @@ ] }, "locked": { - "lastModified": 1706521509, - "narHash": "sha256-AInZ50acOJ3wzUwGzNr1TmxGTMx+8j6oSTzz4E7Vbp8=", + "lastModified": 1709299639, + "narHash": "sha256-jYqJM5khksLIbqSxCLUUcqEgI+O2LdlSlcMEBs39CAU=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "c06fd88b3da492b8f9067be021b9184f7012b5a8", + "rev": "2d2fb547178ec025da643db57d40a971507b82fe", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index c40464f..5004e37 100644 --- a/flake.nix +++ b/flake.nix @@ -2,14 +2,11 @@ description = "Home Manager configuration of pan"; inputs = { - # Specify the source of Home Manager and Nixpkgs. - nixpkgs.url = "github:langedev/nixpkgs/nixos-unstable"; - + nixpkgs.url = "nixpkgs/nixos-unstable"; home-manager = { - url = "github:langedev/home-manager"; + url = "github:nix-community/home-manager"; inputs.nixpkgs.follows = "nixpkgs"; }; - hyprland.url = "github:hyprwm/Hyprland"; hyprland-contrib = { url = "github:hyprwm/contrib"; diff --git a/home.nix b/home.nix index b1c70ae..434155e 100644 --- a/home.nix +++ b/home.nix @@ -1,4 +1,4 @@ -{ config, pkgs, ... }: +{ config, pkgs, xdg, ... }: { nixpkgs.config.allowUnfree = true; @@ -23,6 +23,7 @@ ./programs/ssh ./programs/wal ./programs/xdg + ./programs/xonsh ./services/timers ]; @@ -39,6 +40,7 @@ zathura # PDF viewer ani-cli # Easy anime player lutgen # LUT generator + prismlauncher # Minecraft launcher texlive.combined.scheme-full # Latex @@ -52,6 +54,8 @@ EDITOR = "nvim"; VISUAL = "nvim"; BROWSER = "librewolf"; + GRADLE_USER_HOME = "/home/pan/.local/share" + "/gradle"; + CUDA_CACHE_PATH = "/home/pan/.cache" + "/nv"; }; home.sessionPath = [ diff --git a/programs/xonsh/default.nix b/programs/xonsh/default.nix index 3dd83ce..9700e76 100644 --- a/programs/xonsh/default.nix +++ b/programs/xonsh/default.nix @@ -1,15 +1,17 @@ { config, pkgs, ... }: - +let rootPath = ./.; in { - programs.xonsh.enable = true; - - programs.xonsh.interactiveShellInit = '' - cat ~/.cache/wal/sequences - ''; - - home.sessionVariables = { - PROMPT = "τ "; - RIGHT_PROMPT = "{YELLOW}{gitstatus: {} }{BLUE}{short_cwd}{DEFAULT}"; - VI_MODE = 1; + home.packages = with pkgs; [ + xonsh + ]; + home.sessionVariables = { + PROMPT = "τ "; + RIGHT_PROMPT = "{YELLOW}{gitstatus: {} }{BLUE}{short_cwd}{DEFAULT}"; + VI_MODE = 1; }; + xdg.configFile."xonshrc" = { + source = rootPath + "/rc.xsh"; + target = "xonsh/rc.xsh"; + }; + } diff --git a/programs/xonsh/rc.xsh b/programs/xonsh/rc.xsh new file mode 100644 index 0000000..681ad03 --- /dev/null +++ b/programs/xonsh/rc.xsh @@ -0,0 +1,7 @@ +#!/usr/bin/env xonsh + +if $XONSH_INTERACTIVE: + if '__HM_SESS_VARS_SOURCED' in ${...}: + del $__HM_SESS_VARS_SOURCED + source-bash "$HOME/.nix-profile/etc/profile.d/hm-session-vars.sh" --suppress-skip-message + cat "$HOME/.cache/wallust/sequences" From 3c2e9b0bf08873cea7fbafb1178d20d11016d84a Mon Sep 17 00:00:00 2001 From: JuliaLange Date: Sat, 16 Mar 2024 11:13:04 -0700 Subject: [PATCH 077/412] temp disable wallust templates while empty --- programs/wal/default.nix | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/programs/wal/default.nix b/programs/wal/default.nix index d0746b3..5d63ae9 100644 --- a/programs/wal/default.nix +++ b/programs/wal/default.nix @@ -3,7 +3,7 @@ let rootPath = ./.; in { home.packages = with pkgs; [ wallust # A better pywal - pywalfox # Update librewolf's colorscheme based on wal + pywalfox-native # Update librewolf's colorscheme based on wal ]; xdg.configFile."wallust-config" = { target = "wallust/wallust.toml"; @@ -21,8 +21,8 @@ let rootPath = ./.; in # target = "~/.config/dunst/dunstrc" ''; }; - xdg.configFile."wallust-templates" = { - source = rootPath + "/templates"; - target = "wallust/"; - }; + #xdg.configFile."wallust-templates" = { + # source = rootPath + "/templates"; + # target = "wallust/"; + #}; } From db541d13537ec383c3da75cc1d6b8fe39c528af8 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sat, 16 Mar 2024 11:13:04 -0700 Subject: [PATCH 078/412] temp disable wallust templates while empty --- programs/wal/default.nix | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/programs/wal/default.nix b/programs/wal/default.nix index d0746b3..5d63ae9 100644 --- a/programs/wal/default.nix +++ b/programs/wal/default.nix @@ -3,7 +3,7 @@ let rootPath = ./.; in { home.packages = with pkgs; [ wallust # A better pywal - pywalfox # Update librewolf's colorscheme based on wal + pywalfox-native # Update librewolf's colorscheme based on wal ]; xdg.configFile."wallust-config" = { target = "wallust/wallust.toml"; @@ -21,8 +21,8 @@ let rootPath = ./.; in # target = "~/.config/dunst/dunstrc" ''; }; - xdg.configFile."wallust-templates" = { - source = rootPath + "/templates"; - target = "wallust/"; - }; + #xdg.configFile."wallust-templates" = { + # source = rootPath + "/templates"; + # target = "wallust/"; + #}; } From a5c524ed3394103e0d07576797ead1b3a868c78c Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sun, 17 Mar 2024 16:14:40 -0700 Subject: [PATCH 079/412] Add anime-launcher, remove commented code in flake Add anime-launcher because it needs to be installed at the system level to interact with /etc/hosts configuration. Remove commented code as it wasn't being used to overlay packages, and can be easily researched later --- flake.lock | 145 +++++++++++++++++++++---- flake.nix | 14 +-- modules/etc/anime-launcher/default.nix | 8 ++ systems/onizuka/default.nix | 1 + 4 files changed, 138 insertions(+), 30 deletions(-) create mode 100644 modules/etc/anime-launcher/default.nix diff --git a/flake.lock b/flake.lock index 7ac01d9..b9e574c 100644 --- a/flake.lock +++ b/flake.lock @@ -1,20 +1,84 @@ { "nodes": { + "aagl": { + "inputs": { + "flake-compat": "flake-compat", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1710342492, + "narHash": "sha256-vEE+z5Tm0xWRAJo6xBai88kojzfROfHJ1a5dkNWoGRA=", + "owner": "ezKEa", + "repo": "aagl-gtk-on-nix", + "rev": "c0943e683baedeb19498562497aec35701b1fe02", + "type": "github" + }, + "original": { + "owner": "ezKEa", + "repo": "aagl-gtk-on-nix", + "type": "github" + } + }, + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "hyprcursor": { + "inputs": { + "hyprlang": "hyprlang", + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1710257359, + "narHash": "sha256-43re5pzE/cswFAgw92/ugsB3+d5ufDaCcLtl9ztKfBo=", + "owner": "hyprwm", + "repo": "hyprcursor", + "rev": "1761f6cefd77f4fcd2039d930c88d6716ddc4974", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprcursor", + "type": "github" + } + }, "hyprland": { "inputs": { + "hyprcursor": "hyprcursor", "hyprland-protocols": "hyprland-protocols", - "hyprlang": "hyprlang", + "hyprlang": "hyprlang_2", "nixpkgs": "nixpkgs", - "systems": "systems", + "systems": "systems_2", "wlroots": "wlroots", "xdph": "xdph" }, "locked": { - "lastModified": 1709684144, - "narHash": "sha256-7j+EjESpJYRx6tRkeTd6YgQxFUWXJ1vmhnwh0S8jlaA=", + "lastModified": 1710611769, + "narHash": "sha256-gM4cDw45J8mBmM0aR5Ko/zMAA8UWnQhc4uZ5Ydvc4uo=", "owner": "hyprwm", "repo": "Hyprland", - "rev": "fb87e332c59ce386a095b3e81bb1abbcc9cc3e5c", + "rev": "0e87a08e15c023325b64920d9e1159f38a090695", "type": "github" }, "original": { @@ -49,6 +113,29 @@ } }, "hyprlang": { + "inputs": { + "nixpkgs": [ + "hyprland", + "hyprcursor", + "nixpkgs" + ], + "systems": "systems" + }, + "locked": { + "lastModified": 1709914708, + "narHash": "sha256-bR4o3mynoTa1Wi4ZTjbnsZ6iqVcPGriXp56bZh5UFTk=", + "owner": "hyprwm", + "repo": "hyprlang", + "rev": "a685493fdbeec01ca8ccdf1f3655c044a8ce2fe2", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprlang", + "type": "github" + } + }, + "hyprlang_2": { "inputs": { "nixpkgs": [ "hyprland", @@ -60,11 +147,11 @@ ] }, "locked": { - "lastModified": 1708787654, - "narHash": "sha256-7ACgM3ZuAhPqurXHUvR2nWMRcnmzGGPjLK6q4DSTelI=", + "lastModified": 1709914708, + "narHash": "sha256-bR4o3mynoTa1Wi4ZTjbnsZ6iqVcPGriXp56bZh5UFTk=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "0fce791ba2334aca183f2ed42399518947550d0d", + "rev": "a685493fdbeec01ca8ccdf1f3655c044a8ce2fe2", "type": "github" }, "original": { @@ -75,11 +162,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1708807242, - "narHash": "sha256-sRTRkhMD4delO/hPxxi+XwLqPn8BuUq6nnj4JqLwOu0=", + "lastModified": 1710272261, + "narHash": "sha256-g0bDwXFmTE7uGDOs9HcJsfLFhH7fOsASbAuOzDC+fhQ=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "73de017ef2d18a04ac4bfd0c02650007ccb31c2a", + "rev": "0ad13a6833440b8e238947e47bea7f11071dc2b2", "type": "github" }, "original": { @@ -91,11 +178,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1709479366, - "narHash": "sha256-n6F0n8UV6lnTZbYPl1A9q1BS0p4hduAv1mGAP17CVd0=", + "lastModified": 1710451336, + "narHash": "sha256-pP86Pcfu3BrAvRO7R64x7hs+GaQrjFes+mEPowCfkxY=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "b8697e57f10292a6165a20f03d2f42920dfaf973", + "rev": "d691274a972b3165335d261cc4671335f5c67de9", "type": "github" }, "original": { @@ -106,6 +193,7 @@ }, "root": { "inputs": { + "aagl": "aagl", "hyprland": "hyprland", "nixpkgs": "nixpkgs_2" } @@ -125,22 +213,37 @@ "type": "github" } }, + "systems_2": { + "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" + } + }, "wlroots": { "flake": false, "locked": { "host": "gitlab.freedesktop.org", - "lastModified": 1708558866, - "narHash": "sha256-Mz6hCtommq7RQfcPnxLINigO4RYSNt23HeJHC6mVmWI=", + "lastModified": 1709983277, + "narHash": "sha256-wXWIJLd4F2JZeMaihWVDW/yYXCLEC8OpeNJZg9a9ly8=", "owner": "wlroots", "repo": "wlroots", - "rev": "0cb091f1a2d345f37d2ee445f4ffd04f7f4ec9e5", + "rev": "50eae512d9cecbf0b3b1898bb1f0b40fa05fe19b", "type": "gitlab" }, "original": { "host": "gitlab.freedesktop.org", "owner": "wlroots", "repo": "wlroots", - "rev": "0cb091f1a2d345f37d2ee445f4ffd04f7f4ec9e5", + "rev": "50eae512d9cecbf0b3b1898bb1f0b40fa05fe19b", "type": "gitlab" } }, @@ -164,11 +267,11 @@ ] }, "locked": { - "lastModified": 1708696469, - "narHash": "sha256-shh5wmpeYy3MmsBfkm4f76yPsBDGk6OLYRVG+ARy2F0=", + "lastModified": 1709299639, + "narHash": "sha256-jYqJM5khksLIbqSxCLUUcqEgI+O2LdlSlcMEBs39CAU=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "1b713911c2f12b96c2574474686e4027ac4bf826", + "rev": "2d2fb547178ec025da643db57d40a971507b82fe", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 7efa651..709e78d 100644 --- a/flake.nix +++ b/flake.nix @@ -1,21 +1,18 @@ { inputs = { nixpkgs.url = "nixpkgs/nixos-unstable"; - # personalpkgs.url = "github:langedev/nixpkgs/nixos-unstable"; hyprland.url = "github:hyprwm/Hyprland"; + aagl = { + url = "github:ezKEa/aagl-gtk-on-nix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; }; - outputs = { self, nixpkgs, hyprland, ... }: - # let - # personal-overlay = final: prev: { - # personal = personalpkgs.legacyPackages.${prev.system}; - # }; - # in { + outputs = { self, nixpkgs, hyprland, aagl, ... }@inputs: { nixosConfigurations.onizuka = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; modules = [ - # ({ config, pkgs, ... }: { nixpkgs.overlays = [ personal-overlay ]; }) hyprland.nixosModules.default { programs.hyprland.enable = true; } ./systems/shared @@ -26,7 +23,6 @@ nixosConfigurations.jibril = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; modules = [ - # ({ config, pkgs, ... }: { nixpkgs.overlays = [ personal-overlay ]; }) hyprland.nixosModules.default { programs.hyprland.enable = true; } ./systems/shared diff --git a/modules/etc/anime-launcher/default.nix b/modules/etc/anime-launcher/default.nix new file mode 100644 index 0000000..c57fa32 --- /dev/null +++ b/modules/etc/anime-launcher/default.nix @@ -0,0 +1,8 @@ +{ inputs, pkgs, lib, ... }: + +{ + imports = [ inputs.aagl.nixosModules.default ]; + nix.settings = aagl.nixConfig; + + programs.honkers-railway-launcher.enable = true; +} diff --git a/systems/onizuka/default.nix b/systems/onizuka/default.nix index b8d7de5..b6747bd 100644 --- a/systems/onizuka/default.nix +++ b/systems/onizuka/default.nix @@ -6,5 +6,6 @@ ./hardware.nix ../../modules/graphics/nvidia ../../modules/etc/steam + ../../modules/etc/anime-launcher ]; } From 875e7c8f24b938fe6463272bbee2151583c39f77 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sun, 17 Mar 2024 16:14:40 -0700 Subject: [PATCH 080/412] Add anime-launcher, remove commented code in flake Add anime-launcher because it needs to be installed at the system level to interact with /etc/hosts configuration. Remove commented code as it wasn't being used to overlay packages, and can be easily researched later --- flake.lock | 145 +++++++++++++++++++++---- flake.nix | 14 +-- modules/etc/anime-launcher/default.nix | 8 ++ systems/onizuka/default.nix | 1 + 4 files changed, 138 insertions(+), 30 deletions(-) create mode 100644 modules/etc/anime-launcher/default.nix diff --git a/flake.lock b/flake.lock index 7ac01d9..b9e574c 100644 --- a/flake.lock +++ b/flake.lock @@ -1,20 +1,84 @@ { "nodes": { + "aagl": { + "inputs": { + "flake-compat": "flake-compat", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1710342492, + "narHash": "sha256-vEE+z5Tm0xWRAJo6xBai88kojzfROfHJ1a5dkNWoGRA=", + "owner": "ezKEa", + "repo": "aagl-gtk-on-nix", + "rev": "c0943e683baedeb19498562497aec35701b1fe02", + "type": "github" + }, + "original": { + "owner": "ezKEa", + "repo": "aagl-gtk-on-nix", + "type": "github" + } + }, + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "hyprcursor": { + "inputs": { + "hyprlang": "hyprlang", + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1710257359, + "narHash": "sha256-43re5pzE/cswFAgw92/ugsB3+d5ufDaCcLtl9ztKfBo=", + "owner": "hyprwm", + "repo": "hyprcursor", + "rev": "1761f6cefd77f4fcd2039d930c88d6716ddc4974", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprcursor", + "type": "github" + } + }, "hyprland": { "inputs": { + "hyprcursor": "hyprcursor", "hyprland-protocols": "hyprland-protocols", - "hyprlang": "hyprlang", + "hyprlang": "hyprlang_2", "nixpkgs": "nixpkgs", - "systems": "systems", + "systems": "systems_2", "wlroots": "wlroots", "xdph": "xdph" }, "locked": { - "lastModified": 1709684144, - "narHash": "sha256-7j+EjESpJYRx6tRkeTd6YgQxFUWXJ1vmhnwh0S8jlaA=", + "lastModified": 1710611769, + "narHash": "sha256-gM4cDw45J8mBmM0aR5Ko/zMAA8UWnQhc4uZ5Ydvc4uo=", "owner": "hyprwm", "repo": "Hyprland", - "rev": "fb87e332c59ce386a095b3e81bb1abbcc9cc3e5c", + "rev": "0e87a08e15c023325b64920d9e1159f38a090695", "type": "github" }, "original": { @@ -49,6 +113,29 @@ } }, "hyprlang": { + "inputs": { + "nixpkgs": [ + "hyprland", + "hyprcursor", + "nixpkgs" + ], + "systems": "systems" + }, + "locked": { + "lastModified": 1709914708, + "narHash": "sha256-bR4o3mynoTa1Wi4ZTjbnsZ6iqVcPGriXp56bZh5UFTk=", + "owner": "hyprwm", + "repo": "hyprlang", + "rev": "a685493fdbeec01ca8ccdf1f3655c044a8ce2fe2", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprlang", + "type": "github" + } + }, + "hyprlang_2": { "inputs": { "nixpkgs": [ "hyprland", @@ -60,11 +147,11 @@ ] }, "locked": { - "lastModified": 1708787654, - "narHash": "sha256-7ACgM3ZuAhPqurXHUvR2nWMRcnmzGGPjLK6q4DSTelI=", + "lastModified": 1709914708, + "narHash": "sha256-bR4o3mynoTa1Wi4ZTjbnsZ6iqVcPGriXp56bZh5UFTk=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "0fce791ba2334aca183f2ed42399518947550d0d", + "rev": "a685493fdbeec01ca8ccdf1f3655c044a8ce2fe2", "type": "github" }, "original": { @@ -75,11 +162,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1708807242, - "narHash": "sha256-sRTRkhMD4delO/hPxxi+XwLqPn8BuUq6nnj4JqLwOu0=", + "lastModified": 1710272261, + "narHash": "sha256-g0bDwXFmTE7uGDOs9HcJsfLFhH7fOsASbAuOzDC+fhQ=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "73de017ef2d18a04ac4bfd0c02650007ccb31c2a", + "rev": "0ad13a6833440b8e238947e47bea7f11071dc2b2", "type": "github" }, "original": { @@ -91,11 +178,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1709479366, - "narHash": "sha256-n6F0n8UV6lnTZbYPl1A9q1BS0p4hduAv1mGAP17CVd0=", + "lastModified": 1710451336, + "narHash": "sha256-pP86Pcfu3BrAvRO7R64x7hs+GaQrjFes+mEPowCfkxY=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "b8697e57f10292a6165a20f03d2f42920dfaf973", + "rev": "d691274a972b3165335d261cc4671335f5c67de9", "type": "github" }, "original": { @@ -106,6 +193,7 @@ }, "root": { "inputs": { + "aagl": "aagl", "hyprland": "hyprland", "nixpkgs": "nixpkgs_2" } @@ -125,22 +213,37 @@ "type": "github" } }, + "systems_2": { + "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" + } + }, "wlroots": { "flake": false, "locked": { "host": "gitlab.freedesktop.org", - "lastModified": 1708558866, - "narHash": "sha256-Mz6hCtommq7RQfcPnxLINigO4RYSNt23HeJHC6mVmWI=", + "lastModified": 1709983277, + "narHash": "sha256-wXWIJLd4F2JZeMaihWVDW/yYXCLEC8OpeNJZg9a9ly8=", "owner": "wlroots", "repo": "wlroots", - "rev": "0cb091f1a2d345f37d2ee445f4ffd04f7f4ec9e5", + "rev": "50eae512d9cecbf0b3b1898bb1f0b40fa05fe19b", "type": "gitlab" }, "original": { "host": "gitlab.freedesktop.org", "owner": "wlroots", "repo": "wlroots", - "rev": "0cb091f1a2d345f37d2ee445f4ffd04f7f4ec9e5", + "rev": "50eae512d9cecbf0b3b1898bb1f0b40fa05fe19b", "type": "gitlab" } }, @@ -164,11 +267,11 @@ ] }, "locked": { - "lastModified": 1708696469, - "narHash": "sha256-shh5wmpeYy3MmsBfkm4f76yPsBDGk6OLYRVG+ARy2F0=", + "lastModified": 1709299639, + "narHash": "sha256-jYqJM5khksLIbqSxCLUUcqEgI+O2LdlSlcMEBs39CAU=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "1b713911c2f12b96c2574474686e4027ac4bf826", + "rev": "2d2fb547178ec025da643db57d40a971507b82fe", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 7efa651..709e78d 100644 --- a/flake.nix +++ b/flake.nix @@ -1,21 +1,18 @@ { inputs = { nixpkgs.url = "nixpkgs/nixos-unstable"; - # personalpkgs.url = "github:langedev/nixpkgs/nixos-unstable"; hyprland.url = "github:hyprwm/Hyprland"; + aagl = { + url = "github:ezKEa/aagl-gtk-on-nix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; }; - outputs = { self, nixpkgs, hyprland, ... }: - # let - # personal-overlay = final: prev: { - # personal = personalpkgs.legacyPackages.${prev.system}; - # }; - # in { + outputs = { self, nixpkgs, hyprland, aagl, ... }@inputs: { nixosConfigurations.onizuka = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; modules = [ - # ({ config, pkgs, ... }: { nixpkgs.overlays = [ personal-overlay ]; }) hyprland.nixosModules.default { programs.hyprland.enable = true; } ./systems/shared @@ -26,7 +23,6 @@ nixosConfigurations.jibril = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; modules = [ - # ({ config, pkgs, ... }: { nixpkgs.overlays = [ personal-overlay ]; }) hyprland.nixosModules.default { programs.hyprland.enable = true; } ./systems/shared diff --git a/modules/etc/anime-launcher/default.nix b/modules/etc/anime-launcher/default.nix new file mode 100644 index 0000000..c57fa32 --- /dev/null +++ b/modules/etc/anime-launcher/default.nix @@ -0,0 +1,8 @@ +{ inputs, pkgs, lib, ... }: + +{ + imports = [ inputs.aagl.nixosModules.default ]; + nix.settings = aagl.nixConfig; + + programs.honkers-railway-launcher.enable = true; +} diff --git a/systems/onizuka/default.nix b/systems/onizuka/default.nix index b8d7de5..b6747bd 100644 --- a/systems/onizuka/default.nix +++ b/systems/onizuka/default.nix @@ -6,5 +6,6 @@ ./hardware.nix ../../modules/graphics/nvidia ../../modules/etc/steam + ../../modules/etc/anime-launcher ]; } From 408461407e1fd49e61d3c8629cf01dc5b8f7c916 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sun, 17 Mar 2024 16:50:13 -0700 Subject: [PATCH 081/412] Pass input variable --- flake.nix | 1 + modules/etc/anime-launcher/default.nix | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/flake.nix b/flake.nix index 709e78d..b304f4e 100644 --- a/flake.nix +++ b/flake.nix @@ -11,6 +11,7 @@ outputs = { self, nixpkgs, hyprland, aagl, ... }@inputs: { nixosConfigurations.onizuka = nixpkgs.lib.nixosSystem { + specialArgs = { inherit inputs; }; system = "x86_64-linux"; modules = [ hyprland.nixosModules.default diff --git a/modules/etc/anime-launcher/default.nix b/modules/etc/anime-launcher/default.nix index c57fa32..8633388 100644 --- a/modules/etc/anime-launcher/default.nix +++ b/modules/etc/anime-launcher/default.nix @@ -2,7 +2,7 @@ { imports = [ inputs.aagl.nixosModules.default ]; - nix.settings = aagl.nixConfig; + nix.settings = inputs.aagl.nixConfig; programs.honkers-railway-launcher.enable = true; } From 1e10c8561eef21b1706ad735bc5463b58f666bc6 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sun, 17 Mar 2024 16:50:13 -0700 Subject: [PATCH 082/412] Pass input variable --- flake.nix | 1 + modules/etc/anime-launcher/default.nix | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/flake.nix b/flake.nix index 709e78d..b304f4e 100644 --- a/flake.nix +++ b/flake.nix @@ -11,6 +11,7 @@ outputs = { self, nixpkgs, hyprland, aagl, ... }@inputs: { nixosConfigurations.onizuka = nixpkgs.lib.nixosSystem { + specialArgs = { inherit inputs; }; system = "x86_64-linux"; modules = [ hyprland.nixosModules.default diff --git a/modules/etc/anime-launcher/default.nix b/modules/etc/anime-launcher/default.nix index c57fa32..8633388 100644 --- a/modules/etc/anime-launcher/default.nix +++ b/modules/etc/anime-launcher/default.nix @@ -2,7 +2,7 @@ { imports = [ inputs.aagl.nixosModules.default ]; - nix.settings = aagl.nixConfig; + nix.settings = inputs.aagl.nixConfig; programs.honkers-railway-launcher.enable = true; } From af12ea65e3b2a7270931c8ffa05f1bfde3b17bce Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Fri, 22 Mar 2024 02:54:25 -0700 Subject: [PATCH 083/412] Reformat flake.nix for cleaner management --- flake.lock | 85 +++++++++++++++++--- flake.nix | 28 +++---- modules/window_managers/hyprland/default.nix | 11 +++ systems/shared/default.nix | 6 +- 4 files changed, 98 insertions(+), 32 deletions(-) create mode 100644 modules/window_managers/hyprland/default.nix diff --git a/flake.lock b/flake.lock index b9e574c..f283cae 100644 --- a/flake.lock +++ b/flake.lock @@ -4,7 +4,7 @@ "inputs": { "flake-compat": "flake-compat", "nixpkgs": [ - "nixpkgs" + "nixpkgs-stable" ] }, "locked": { @@ -74,11 +74,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1710611769, - "narHash": "sha256-gM4cDw45J8mBmM0aR5Ko/zMAA8UWnQhc4uZ5Ydvc4uo=", + "lastModified": 1711070930, + "narHash": "sha256-jKOAO/NlfaTC/OcZkPoT87gsfVqt/+Ye+KcaIv6e2mU=", "owner": "hyprwm", "repo": "Hyprland", - "rev": "0e87a08e15c023325b64920d9e1159f38a090695", + "rev": "9bad62b85f179ad2c95c6e7f734768ef060a604b", "type": "github" }, "original": { @@ -176,13 +176,44 @@ "type": "github" } }, - "nixpkgs_2": { + "nixpkgs-stable": { "locked": { - "lastModified": 1710451336, - "narHash": "sha256-pP86Pcfu3BrAvRO7R64x7hs+GaQrjFes+mEPowCfkxY=", + "lastModified": 1710951922, + "narHash": "sha256-FOOBJ3DQenLpTNdxMHR2CpGZmYuctb92gF0lpiirZ30=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "d691274a972b3165335d261cc4671335f5c67de9", + "rev": "f091af045dff8347d66d186a62d42aceff159456", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "nixos-23.11", + "type": "indirect" + } + }, + "nixpkgs-stable_2": { + "locked": { + "lastModified": 1710628718, + "narHash": "sha256-y+l3eH53UlENaYa1lmnCBHusZb1kxBEFd2/c7lDsGpw=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "6dc11d9859d6a18ab0c5e5829a5b8e4810658de3", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "release-23.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1710806803, + "narHash": "sha256-qrxvLS888pNJFwJdK+hf1wpRCSQcqA6W5+Ox202NDa0=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "b06025f1533a1e07b6db3e75151caa155d1c7eb3", "type": "github" }, "original": { @@ -191,11 +222,47 @@ "type": "indirect" } }, + "nixpkgs_3": { + "locked": { + "lastModified": 1710534455, + "narHash": "sha256-huQT4Xs0y4EeFKn2BTBVYgEwJSv8SDlm82uWgMnCMmI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "9af9c1c87ed3e3ed271934cb896e0cdd33dae212", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, "root": { "inputs": { "aagl": "aagl", "hyprland": "hyprland", - "nixpkgs": "nixpkgs_2" + "nixpkgs": "nixpkgs_2", + "nixpkgs-stable": "nixpkgs-stable", + "sops-nix": "sops-nix" + } + }, + "sops-nix": { + "inputs": { + "nixpkgs": "nixpkgs_3", + "nixpkgs-stable": "nixpkgs-stable_2" + }, + "locked": { + "lastModified": 1710644594, + "narHash": "sha256-RquCuzxfy4Nr8DPbdp3D/AsbYep21JgQzG8aMH9jJ4A=", + "owner": "Mic92", + "repo": "sops-nix", + "rev": "83b68a0e8c94b72cdd0a6e547a14ca7eb1c03616", + "type": "github" + }, + "original": { + "id": "sops-nix", + "type": "indirect" } }, "systems": { diff --git a/flake.nix b/flake.nix index b304f4e..6996e97 100644 --- a/flake.nix +++ b/flake.nix @@ -1,34 +1,26 @@ { inputs = { nixpkgs.url = "nixpkgs/nixos-unstable"; + nixpkgs-stable.url = "nixpkgs/nixos-23.11"; hyprland.url = "github:hyprwm/Hyprland"; aagl = { url = "github:ezKEa/aagl-gtk-on-nix"; - inputs.nixpkgs.follows = "nixpkgs"; + inputs.nixpkgs.follows = "nixpkgs-stable"; }; }; - outputs = { self, nixpkgs, hyprland, aagl, ... }@inputs: - { - nixosConfigurations.onizuka = nixpkgs.lib.nixosSystem { + outputs = { self, nixpkgs, hyprland, aagl, sops-nix, ... }@inputs: + let + defaultConfig = extraModules: nixpkgs.lib.nixosSystem { specialArgs = { inherit inputs; }; system = "x86_64-linux"; modules = [ - hyprland.nixosModules.default - { programs.hyprland.enable = true; } ./systems/shared - ./systems/onizuka - ]; - }; - - nixosConfigurations.jibril = nixpkgs.lib.nixosSystem { - system = "x86_64-linux"; - modules = [ - hyprland.nixosModules.default - { programs.hyprland.enable = true; } - ./systems/shared - ./systems/jibril - ]; + ] ++ extraModules; }; + in + { + nixosConfigurations.onizuka = defaultConfig [ ./systems/onizuka ]; + nixosConfigurations.jibril = defaultConfig [ ./systems/jibril ]; }; } diff --git a/modules/window_managers/hyprland/default.nix b/modules/window_managers/hyprland/default.nix new file mode 100644 index 0000000..72babdb --- /dev/null +++ b/modules/window_managers/hyprland/default.nix @@ -0,0 +1,11 @@ +{ inputs, pkgs, lib, ... }: + +{ + imports = [ inputs.hyprland.nixosModules.default ]; + programs.hyprland.enable = true; + nix.settings = { + substituters = [ "https://hyprland.cachix.org" ]; + trusted-public-keys = [ "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" ]; + experimental-features = [ "nix-command" "flakes" ]; + }; +} diff --git a/systems/shared/default.nix b/systems/shared/default.nix index 3a62bd3..46bcf0e 100644 --- a/systems/shared/default.nix +++ b/systems/shared/default.nix @@ -21,14 +21,10 @@ ../../modules/network/syncthing ../../modules/login/greetd + ../../modules/window_managers/hyprland ]; nixpkgs.config.allowUnfree = true; - nix.settings = { - substituters = [ "https://hyprland.cachix.org" ]; - trusted-public-keys = [ "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" ]; - experimental-features = [ "nix-command" "flakes" ]; - }; system.stateVersion = "23.05"; } From c5f8a1b9bf5594f4bb026b14d2fb92b7180f96c7 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Fri, 22 Mar 2024 02:54:25 -0700 Subject: [PATCH 084/412] Reformat flake.nix for cleaner management --- flake.lock | 85 +++++++++++++++++--- flake.nix | 28 +++---- modules/window_managers/hyprland/default.nix | 11 +++ systems/shared/default.nix | 6 +- 4 files changed, 98 insertions(+), 32 deletions(-) create mode 100644 modules/window_managers/hyprland/default.nix diff --git a/flake.lock b/flake.lock index b9e574c..f283cae 100644 --- a/flake.lock +++ b/flake.lock @@ -4,7 +4,7 @@ "inputs": { "flake-compat": "flake-compat", "nixpkgs": [ - "nixpkgs" + "nixpkgs-stable" ] }, "locked": { @@ -74,11 +74,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1710611769, - "narHash": "sha256-gM4cDw45J8mBmM0aR5Ko/zMAA8UWnQhc4uZ5Ydvc4uo=", + "lastModified": 1711070930, + "narHash": "sha256-jKOAO/NlfaTC/OcZkPoT87gsfVqt/+Ye+KcaIv6e2mU=", "owner": "hyprwm", "repo": "Hyprland", - "rev": "0e87a08e15c023325b64920d9e1159f38a090695", + "rev": "9bad62b85f179ad2c95c6e7f734768ef060a604b", "type": "github" }, "original": { @@ -176,13 +176,44 @@ "type": "github" } }, - "nixpkgs_2": { + "nixpkgs-stable": { "locked": { - "lastModified": 1710451336, - "narHash": "sha256-pP86Pcfu3BrAvRO7R64x7hs+GaQrjFes+mEPowCfkxY=", + "lastModified": 1710951922, + "narHash": "sha256-FOOBJ3DQenLpTNdxMHR2CpGZmYuctb92gF0lpiirZ30=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "d691274a972b3165335d261cc4671335f5c67de9", + "rev": "f091af045dff8347d66d186a62d42aceff159456", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "nixos-23.11", + "type": "indirect" + } + }, + "nixpkgs-stable_2": { + "locked": { + "lastModified": 1710628718, + "narHash": "sha256-y+l3eH53UlENaYa1lmnCBHusZb1kxBEFd2/c7lDsGpw=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "6dc11d9859d6a18ab0c5e5829a5b8e4810658de3", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "release-23.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1710806803, + "narHash": "sha256-qrxvLS888pNJFwJdK+hf1wpRCSQcqA6W5+Ox202NDa0=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "b06025f1533a1e07b6db3e75151caa155d1c7eb3", "type": "github" }, "original": { @@ -191,11 +222,47 @@ "type": "indirect" } }, + "nixpkgs_3": { + "locked": { + "lastModified": 1710534455, + "narHash": "sha256-huQT4Xs0y4EeFKn2BTBVYgEwJSv8SDlm82uWgMnCMmI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "9af9c1c87ed3e3ed271934cb896e0cdd33dae212", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, "root": { "inputs": { "aagl": "aagl", "hyprland": "hyprland", - "nixpkgs": "nixpkgs_2" + "nixpkgs": "nixpkgs_2", + "nixpkgs-stable": "nixpkgs-stable", + "sops-nix": "sops-nix" + } + }, + "sops-nix": { + "inputs": { + "nixpkgs": "nixpkgs_3", + "nixpkgs-stable": "nixpkgs-stable_2" + }, + "locked": { + "lastModified": 1710644594, + "narHash": "sha256-RquCuzxfy4Nr8DPbdp3D/AsbYep21JgQzG8aMH9jJ4A=", + "owner": "Mic92", + "repo": "sops-nix", + "rev": "83b68a0e8c94b72cdd0a6e547a14ca7eb1c03616", + "type": "github" + }, + "original": { + "id": "sops-nix", + "type": "indirect" } }, "systems": { diff --git a/flake.nix b/flake.nix index b304f4e..6996e97 100644 --- a/flake.nix +++ b/flake.nix @@ -1,34 +1,26 @@ { inputs = { nixpkgs.url = "nixpkgs/nixos-unstable"; + nixpkgs-stable.url = "nixpkgs/nixos-23.11"; hyprland.url = "github:hyprwm/Hyprland"; aagl = { url = "github:ezKEa/aagl-gtk-on-nix"; - inputs.nixpkgs.follows = "nixpkgs"; + inputs.nixpkgs.follows = "nixpkgs-stable"; }; }; - outputs = { self, nixpkgs, hyprland, aagl, ... }@inputs: - { - nixosConfigurations.onizuka = nixpkgs.lib.nixosSystem { + outputs = { self, nixpkgs, hyprland, aagl, sops-nix, ... }@inputs: + let + defaultConfig = extraModules: nixpkgs.lib.nixosSystem { specialArgs = { inherit inputs; }; system = "x86_64-linux"; modules = [ - hyprland.nixosModules.default - { programs.hyprland.enable = true; } ./systems/shared - ./systems/onizuka - ]; - }; - - nixosConfigurations.jibril = nixpkgs.lib.nixosSystem { - system = "x86_64-linux"; - modules = [ - hyprland.nixosModules.default - { programs.hyprland.enable = true; } - ./systems/shared - ./systems/jibril - ]; + ] ++ extraModules; }; + in + { + nixosConfigurations.onizuka = defaultConfig [ ./systems/onizuka ]; + nixosConfigurations.jibril = defaultConfig [ ./systems/jibril ]; }; } diff --git a/modules/window_managers/hyprland/default.nix b/modules/window_managers/hyprland/default.nix new file mode 100644 index 0000000..72babdb --- /dev/null +++ b/modules/window_managers/hyprland/default.nix @@ -0,0 +1,11 @@ +{ inputs, pkgs, lib, ... }: + +{ + imports = [ inputs.hyprland.nixosModules.default ]; + programs.hyprland.enable = true; + nix.settings = { + substituters = [ "https://hyprland.cachix.org" ]; + trusted-public-keys = [ "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" ]; + experimental-features = [ "nix-command" "flakes" ]; + }; +} diff --git a/systems/shared/default.nix b/systems/shared/default.nix index 3a62bd3..46bcf0e 100644 --- a/systems/shared/default.nix +++ b/systems/shared/default.nix @@ -21,14 +21,10 @@ ../../modules/network/syncthing ../../modules/login/greetd + ../../modules/window_managers/hyprland ]; nixpkgs.config.allowUnfree = true; - nix.settings = { - substituters = [ "https://hyprland.cachix.org" ]; - trusted-public-keys = [ "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" ]; - experimental-features = [ "nix-command" "flakes" ]; - }; system.stateVersion = "23.05"; } From 3edbef3fdd255387044e426e6a106f73d71dc93d Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 4 Apr 2024 20:47:44 -0700 Subject: [PATCH 085/412] Add a CJK font --- modules/themeing/default.nix | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/modules/themeing/default.nix b/modules/themeing/default.nix index 13e7abe..ad298d1 100644 --- a/modules/themeing/default.nix +++ b/modules/themeing/default.nix @@ -1,7 +1,11 @@ { config, pkgs, lib, ... }: { - fonts.packages = with pkgs; [ - cascadia-code - ]; + fonts = { + enableDefaultPackages = true; + packages = with pkgs; [ + cascadia-code + source-han-sans # Pan-CJK font + ]; + }; } From 917044e1e02ed83e11f019ca008cba6cce488958 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 4 Apr 2024 20:47:44 -0700 Subject: [PATCH 086/412] Add a CJK font --- modules/themeing/default.nix | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/modules/themeing/default.nix b/modules/themeing/default.nix index 13e7abe..ad298d1 100644 --- a/modules/themeing/default.nix +++ b/modules/themeing/default.nix @@ -1,7 +1,11 @@ { config, pkgs, lib, ... }: { - fonts.packages = with pkgs; [ - cascadia-code - ]; + fonts = { + enableDefaultPackages = true; + packages = with pkgs; [ + cascadia-code + source-han-sans # Pan-CJK font + ]; + }; } From f4ffca3fc8359b14cec5abf05d18492c5dbfaf5c Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Fri, 5 Apr 2024 16:25:46 -0700 Subject: [PATCH 087/412] Clean up syncthing, change data and config dir --- modules/network/syncthing/default.nix | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/modules/network/syncthing/default.nix b/modules/network/syncthing/default.nix index 3397cd1..c5f9dab 100644 --- a/modules/network/syncthing/default.nix +++ b/modules/network/syncthing/default.nix @@ -1,9 +1,19 @@ { config, pkgs, lib, ... }: { - services.syncthing.enable = true; - services.syncthing.user = "pan"; - services.syncthing.dataDir = "/home/pan/dox"; - services.syncthing.overrideFolders = false; - services.syncthing.overrideDevices = false; + services.syncthing = { + enable = true; + user = "pan"; + dataDir = "/home/pan/dox/Sync"; + configDir = "/home/pan/.config/syncthing"; + overrideFolders = true; + overrideDevices = true; + + settings = { + gui = { + user = "pan"; + password = "password"; + }; + }; + }; } From 265905397759ff3bc612b8039936ea0f9f2a8759 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Fri, 5 Apr 2024 16:25:46 -0700 Subject: [PATCH 088/412] Clean up syncthing, change data and config dir --- modules/network/syncthing/default.nix | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/modules/network/syncthing/default.nix b/modules/network/syncthing/default.nix index 3397cd1..c5f9dab 100644 --- a/modules/network/syncthing/default.nix +++ b/modules/network/syncthing/default.nix @@ -1,9 +1,19 @@ { config, pkgs, lib, ... }: { - services.syncthing.enable = true; - services.syncthing.user = "pan"; - services.syncthing.dataDir = "/home/pan/dox"; - services.syncthing.overrideFolders = false; - services.syncthing.overrideDevices = false; + services.syncthing = { + enable = true; + user = "pan"; + dataDir = "/home/pan/dox/Sync"; + configDir = "/home/pan/.config/syncthing"; + overrideFolders = true; + overrideDevices = true; + + settings = { + gui = { + user = "pan"; + password = "password"; + }; + }; + }; } From e174c88c13b4e4b3ea239f4d934682d4c7209708 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Fri, 5 Apr 2024 16:31:07 -0700 Subject: [PATCH 089/412] Add polkit support --- modules/login/polkit/default.nix | 5 +++++ modules/system/default.nix | 1 + systems/shared/default.nix | 14 ++++---------- 3 files changed, 10 insertions(+), 10 deletions(-) create mode 100644 modules/login/polkit/default.nix diff --git a/modules/login/polkit/default.nix b/modules/login/polkit/default.nix new file mode 100644 index 0000000..5c0a462 --- /dev/null +++ b/modules/login/polkit/default.nix @@ -0,0 +1,5 @@ +{ config, pkgs, lib, ... }: + +{ + security.polkit.enable = true; +} diff --git a/modules/system/default.nix b/modules/system/default.nix index 458ad20..c0992ad 100644 --- a/modules/system/default.nix +++ b/modules/system/default.nix @@ -6,6 +6,7 @@ boot.loader.systemd-boot.enable = true; boot.loader.timeout = 1; boot.loader.efi.canTouchEfiVariables = true; + security.polkit.enable = true; time.timeZone = "America/Los_Angeles"; diff --git a/systems/shared/default.nix b/systems/shared/default.nix index 46bcf0e..70e2e0c 100644 --- a/systems/shared/default.nix +++ b/systems/shared/default.nix @@ -1,25 +1,19 @@ -# Edit this configuration file to define what should be installed on -# your system. Help is available in the configuration.nix(5) man page -# and in the NixOS manual (accessible by running ‘nixos-help’). - { config, pkgs, ... }: { nix.package = pkgs.nixUnstable; imports = [ # System essentials (boot, lang, hostname, ...) - ../../modules/system - - ../../modules/user - - ../../modules/themeing - ../../modules/audio/pipewire + ../../modules/login/polkit + ../../modules/system + ../../modules/user ../../modules/shell/xonsh ../../modules/network/browsers/librewolf ../../modules/network/syncthing + ../../modules/themeing ../../modules/login/greetd ../../modules/window_managers/hyprland ]; From 1ceabc24059041908638658c1eff0c9b16a6cb20 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Fri, 5 Apr 2024 16:31:07 -0700 Subject: [PATCH 090/412] Add polkit support --- modules/login/polkit/default.nix | 5 +++++ modules/system/default.nix | 1 + systems/shared/default.nix | 14 ++++---------- 3 files changed, 10 insertions(+), 10 deletions(-) create mode 100644 modules/login/polkit/default.nix diff --git a/modules/login/polkit/default.nix b/modules/login/polkit/default.nix new file mode 100644 index 0000000..5c0a462 --- /dev/null +++ b/modules/login/polkit/default.nix @@ -0,0 +1,5 @@ +{ config, pkgs, lib, ... }: + +{ + security.polkit.enable = true; +} diff --git a/modules/system/default.nix b/modules/system/default.nix index 458ad20..c0992ad 100644 --- a/modules/system/default.nix +++ b/modules/system/default.nix @@ -6,6 +6,7 @@ boot.loader.systemd-boot.enable = true; boot.loader.timeout = 1; boot.loader.efi.canTouchEfiVariables = true; + security.polkit.enable = true; time.timeZone = "America/Los_Angeles"; diff --git a/systems/shared/default.nix b/systems/shared/default.nix index 46bcf0e..70e2e0c 100644 --- a/systems/shared/default.nix +++ b/systems/shared/default.nix @@ -1,25 +1,19 @@ -# Edit this configuration file to define what should be installed on -# your system. Help is available in the configuration.nix(5) man page -# and in the NixOS manual (accessible by running ‘nixos-help’). - { config, pkgs, ... }: { nix.package = pkgs.nixUnstable; imports = [ # System essentials (boot, lang, hostname, ...) - ../../modules/system - - ../../modules/user - - ../../modules/themeing - ../../modules/audio/pipewire + ../../modules/login/polkit + ../../modules/system + ../../modules/user ../../modules/shell/xonsh ../../modules/network/browsers/librewolf ../../modules/network/syncthing + ../../modules/themeing ../../modules/login/greetd ../../modules/window_managers/hyprland ]; From 5fe7efc5a29f1d79ff84d6f714cc0ba1ed6f7039 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Fri, 5 Apr 2024 16:32:10 -0700 Subject: [PATCH 091/412] Add input remapper --- modules/etc/input-remapper/default.nix | 5 +++++ systems/onizuka/default.nix | 1 + 2 files changed, 6 insertions(+) create mode 100644 modules/etc/input-remapper/default.nix diff --git a/modules/etc/input-remapper/default.nix b/modules/etc/input-remapper/default.nix new file mode 100644 index 0000000..3cf6a65 --- /dev/null +++ b/modules/etc/input-remapper/default.nix @@ -0,0 +1,5 @@ +{ config, pkgs, lib, ... }: + +{ + services.input-remapper.enable = true; +} diff --git a/systems/onizuka/default.nix b/systems/onizuka/default.nix index b6747bd..8156468 100644 --- a/systems/onizuka/default.nix +++ b/systems/onizuka/default.nix @@ -7,5 +7,6 @@ ../../modules/graphics/nvidia ../../modules/etc/steam ../../modules/etc/anime-launcher + ../../modules/etc/input-remapper ]; } From ad14289517b02268a83054a3bca5f3bd403d2585 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Fri, 5 Apr 2024 16:32:10 -0700 Subject: [PATCH 092/412] Add input remapper --- modules/etc/input-remapper/default.nix | 5 +++++ systems/onizuka/default.nix | 1 + 2 files changed, 6 insertions(+) create mode 100644 modules/etc/input-remapper/default.nix diff --git a/modules/etc/input-remapper/default.nix b/modules/etc/input-remapper/default.nix new file mode 100644 index 0000000..3cf6a65 --- /dev/null +++ b/modules/etc/input-remapper/default.nix @@ -0,0 +1,5 @@ +{ config, pkgs, lib, ... }: + +{ + services.input-remapper.enable = true; +} diff --git a/systems/onizuka/default.nix b/systems/onizuka/default.nix index b6747bd..8156468 100644 --- a/systems/onizuka/default.nix +++ b/systems/onizuka/default.nix @@ -7,5 +7,6 @@ ../../modules/graphics/nvidia ../../modules/etc/steam ../../modules/etc/anime-launcher + ../../modules/etc/input-remapper ]; } From ed2a7f94cfd61c160ed0197b166f7391f530d72d Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sun, 7 Apr 2024 00:33:49 -0700 Subject: [PATCH 093/412] Add sops-nix for secret management --- .sops.yaml | 11 +++ flake.lock | 112 ++++++++++----------------- flake.nix | 1 + modules/secrets/sops-nix/default.nix | 11 +++ secrets.yaml | 24 ++++++ 5 files changed, 86 insertions(+), 73 deletions(-) create mode 100644 .sops.yaml create mode 100644 modules/secrets/sops-nix/default.nix create mode 100644 secrets.yaml diff --git a/.sops.yaml b/.sops.yaml new file mode 100644 index 0000000..530c11f --- /dev/null +++ b/.sops.yaml @@ -0,0 +1,11 @@ +# This example uses YAML anchors which allows reuse of multiple keys +# without having to repeat yourself. +# Also see https://github.com/Mic92/dotfiles/blob/master/nixos/.sops.yaml +# for a more complex example. +keys: + - &onizuka age1ey3wr2wnkgny3dfgvnyrf0cptwzr7s5x464p2y9ya58lpay8lfrsds3y68 +creation_rules: + - path_regex: secrets.yaml$ + key_groups: + - age: + - *onizuka diff --git a/flake.lock b/flake.lock index f283cae..54d6c12 100644 --- a/flake.lock +++ b/flake.lock @@ -8,11 +8,11 @@ ] }, "locked": { - "lastModified": 1710342492, - "narHash": "sha256-vEE+z5Tm0xWRAJo6xBai88kojzfROfHJ1a5dkNWoGRA=", + "lastModified": 1712185015, + "narHash": "sha256-mL3VSJRkyDJbMh/QqUeOhGOsEOTS7Jw9Tqw4fM+VjB4=", "owner": "ezKEa", "repo": "aagl-gtk-on-nix", - "rev": "c0943e683baedeb19498562497aec35701b1fe02", + "rev": "1dbb1c233a249e8cbc03907e965bd2a48d880262", "type": "github" }, "original": { @@ -39,7 +39,10 @@ }, "hyprcursor": { "inputs": { - "hyprlang": "hyprlang", + "hyprlang": [ + "hyprland", + "hyprlang" + ], "nixpkgs": [ "hyprland", "nixpkgs" @@ -50,11 +53,11 @@ ] }, "locked": { - "lastModified": 1710257359, - "narHash": "sha256-43re5pzE/cswFAgw92/ugsB3+d5ufDaCcLtl9ztKfBo=", + "lastModified": 1712339458, + "narHash": "sha256-j8pv3tL2EFLGuvFoO64dHWD8YzNvD77hRb4EEx5ADgE=", "owner": "hyprwm", "repo": "hyprcursor", - "rev": "1761f6cefd77f4fcd2039d930c88d6716ddc4974", + "rev": "981b6617822dadc40246a6c70194d02dfc12e4c6", "type": "github" }, "original": { @@ -67,18 +70,18 @@ "inputs": { "hyprcursor": "hyprcursor", "hyprland-protocols": "hyprland-protocols", - "hyprlang": "hyprlang_2", + "hyprlang": "hyprlang", "nixpkgs": "nixpkgs", - "systems": "systems_2", + "systems": "systems", "wlroots": "wlroots", "xdph": "xdph" }, "locked": { - "lastModified": 1711070930, - "narHash": "sha256-jKOAO/NlfaTC/OcZkPoT87gsfVqt/+Ye+KcaIv6e2mU=", + "lastModified": 1712457111, + "narHash": "sha256-hTRMWHl49SYfui2W3qCq790MHnX8JTBfYQcxgwjbQ0g=", "owner": "hyprwm", "repo": "Hyprland", - "rev": "9bad62b85f179ad2c95c6e7f734768ef060a604b", + "rev": "f2a848cbcc41f29fb62ee67aef95136ae1a650da", "type": "github" }, "original": { @@ -113,29 +116,6 @@ } }, "hyprlang": { - "inputs": { - "nixpkgs": [ - "hyprland", - "hyprcursor", - "nixpkgs" - ], - "systems": "systems" - }, - "locked": { - "lastModified": 1709914708, - "narHash": "sha256-bR4o3mynoTa1Wi4ZTjbnsZ6iqVcPGriXp56bZh5UFTk=", - "owner": "hyprwm", - "repo": "hyprlang", - "rev": "a685493fdbeec01ca8ccdf1f3655c044a8ce2fe2", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "hyprlang", - "type": "github" - } - }, - "hyprlang_2": { "inputs": { "nixpkgs": [ "hyprland", @@ -147,11 +127,11 @@ ] }, "locked": { - "lastModified": 1709914708, - "narHash": "sha256-bR4o3mynoTa1Wi4ZTjbnsZ6iqVcPGriXp56bZh5UFTk=", + "lastModified": 1711671891, + "narHash": "sha256-C/Wwsy/RLxHP1axFFl+AnwJRWfd8gxDKKoa8nt8Qk3c=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "a685493fdbeec01ca8ccdf1f3655c044a8ce2fe2", + "rev": "c1402612146ba06606ebf64963a02bc1efe11e74", "type": "github" }, "original": { @@ -162,11 +142,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1710272261, - "narHash": "sha256-g0bDwXFmTE7uGDOs9HcJsfLFhH7fOsASbAuOzDC+fhQ=", + "lastModified": 1712163089, + "narHash": "sha256-Um+8kTIrC19vD4/lUCN9/cU9kcOsD1O1m+axJqQPyMM=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "0ad13a6833440b8e238947e47bea7f11071dc2b2", + "rev": "fd281bd6b7d3e32ddfa399853946f782553163b5", "type": "github" }, "original": { @@ -178,11 +158,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1710951922, - "narHash": "sha256-FOOBJ3DQenLpTNdxMHR2CpGZmYuctb92gF0lpiirZ30=", + "lastModified": 1712310679, + "narHash": "sha256-XgC/a/giEeNkhme/AV1ToipoZ/IVm1MV2ntiK4Tm+pw=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "f091af045dff8347d66d186a62d42aceff159456", + "rev": "72da83d9515b43550436891f538ff41d68eecc7f", "type": "github" }, "original": { @@ -193,11 +173,11 @@ }, "nixpkgs-stable_2": { "locked": { - "lastModified": 1710628718, - "narHash": "sha256-y+l3eH53UlENaYa1lmnCBHusZb1kxBEFd2/c7lDsGpw=", + "lastModified": 1712437997, + "narHash": "sha256-g0whLLwRvgO2FsyhY8fNk+TWenS3jg5UdlWL4uqgFeo=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "6dc11d9859d6a18ab0c5e5829a5b8e4810658de3", + "rev": "e38d7cb66ea4f7a0eb6681920615dfcc30fc2920", "type": "github" }, "original": { @@ -209,11 +189,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1710806803, - "narHash": "sha256-qrxvLS888pNJFwJdK+hf1wpRCSQcqA6W5+Ox202NDa0=", + "lastModified": 1712163089, + "narHash": "sha256-Um+8kTIrC19vD4/lUCN9/cU9kcOsD1O1m+axJqQPyMM=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "b06025f1533a1e07b6db3e75151caa155d1c7eb3", + "rev": "fd281bd6b7d3e32ddfa399853946f782553163b5", "type": "github" }, "original": { @@ -224,11 +204,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1710534455, - "narHash": "sha256-huQT4Xs0y4EeFKn2BTBVYgEwJSv8SDlm82uWgMnCMmI=", + "lastModified": 1712420723, + "narHash": "sha256-VnG0Eu394Ga2FCe8Q66m6OEQF8iAqjDYsjmtl+N2omk=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "9af9c1c87ed3e3ed271934cb896e0cdd33dae212", + "rev": "9e7f26f82acb057498335362905fde6fea4ca50a", "type": "github" }, "original": { @@ -253,16 +233,17 @@ "nixpkgs-stable": "nixpkgs-stable_2" }, "locked": { - "lastModified": 1710644594, - "narHash": "sha256-RquCuzxfy4Nr8DPbdp3D/AsbYep21JgQzG8aMH9jJ4A=", + "lastModified": 1712458908, + "narHash": "sha256-DMgBS+jNHDg8z3g9GkwqL8xTKXCRQ/0FGsAyrniVonc=", "owner": "Mic92", "repo": "sops-nix", - "rev": "83b68a0e8c94b72cdd0a6e547a14ca7eb1c03616", + "rev": "39191e8e6265b106c9a2ba0cfd3a4dafe98a31c6", "type": "github" }, "original": { - "id": "sops-nix", - "type": "indirect" + "owner": "Mic92", + "repo": "sops-nix", + "type": "github" } }, "systems": { @@ -280,21 +261,6 @@ "type": "github" } }, - "systems_2": { - "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" - } - }, "wlroots": { "flake": false, "locked": { diff --git a/flake.nix b/flake.nix index 6996e97..bd59e11 100644 --- a/flake.nix +++ b/flake.nix @@ -7,6 +7,7 @@ url = "github:ezKEa/aagl-gtk-on-nix"; inputs.nixpkgs.follows = "nixpkgs-stable"; }; + sops-nix.url = "github:Mic92/sops-nix"; }; outputs = { self, nixpkgs, hyprland, aagl, sops-nix, ... }@inputs: diff --git a/modules/secrets/sops-nix/default.nix b/modules/secrets/sops-nix/default.nix new file mode 100644 index 0000000..2c26d07 --- /dev/null +++ b/modules/secrets/sops-nix/default.nix @@ -0,0 +1,11 @@ +{ inputs, pkgs, lib, ... }: +let rootPath = ./.; in +{ + imports = [ inputs.sops-nix.nixosModules.sops ]; + + sops = { + defaultSopsFile = rootPath + "secrets.yaml"; + defaultSopsFormat = "yaml"; + age.keyFile = "/home/pan/.config/sops/age/keys.txt"; + }; +} diff --git a/secrets.yaml b/secrets.yaml new file mode 100644 index 0000000..0c3098f --- /dev/null +++ b/secrets.yaml @@ -0,0 +1,24 @@ +services: + spotify: + username: ENC[AES256_GCM,data:xyhcpSN4v9k294Vtxd+6RIicsd/QbWBr3Qk=,iv:fhKAo9sti/CFRQijzvAoWAAfSETVYTjvRsdUeTVj5rU=,tag:jggBE9ZKHiDerI0Fm+n12w==,type:str] + password: ENC[AES256_GCM,data:fmx/1zTF/Xc32tpjnq1pp7jzpIM=,iv:kwAzuhAcw3+v9Ilfh1GrdqmINR0w0F6nkjJJXjABcmI=,tag:Yyutz0EmQQ6n/UYgHLpYWA==,type:str] +sops: + kms: [] + gcp_kms: [] + azure_kv: [] + hc_vault: [] + age: + - recipient: age1ey3wr2wnkgny3dfgvnyrf0cptwzr7s5x464p2y9ya58lpay8lfrsds3y68 + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBHM1REVU9wTVhxWHo3UW0x + WnNmanFmbXVCVGJwcmdZVzFJaTBxRnJzcEJZClFJdjB1QkpxS1QySVUzbGJySWY5 + QURScWI5UTFzN1NVdkVZeG9WUkdnWWcKLS0tIGgrNEFpWi9idTQrZWNrZXMzcFZI + RUljSSs5L1JCampTOXdmY1IzYjNzeFEK2WC5HivIt77z0+yopZnmlUWYJCwn/eI+ + V4UIgITsmTjN2c6df5Pc4nb7jWC7XsMq7VL1nG+uo39QQPRW/FaZYQ== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2024-04-06T02:39:34Z" + mac: ENC[AES256_GCM,data:QAFXEXOm0Mi0GOJU4EG8JC9BizTGdbDjYfGlBAe6uhJAcMAO47vRwPADx7bWxSrAZ6kQRy+3OCBjin0YSADRHHmXOPXhqPzpFTeG3T19hLRG79W7R1UoRVm/PhajOimEj4urbZqdHC8mqtU0XngB/zlfRkfbT053J87TsvAlmwI=,iv:HMEhCmnXCEANA4s1L1nmnckHRIjWKxS3D9gbLcNTnmE=,tag:Chbl2JTKVqs8t91BTlX9QQ==,type:str] + pgp: [] + unencrypted_suffix: _unencrypted + version: 3.8.1 From 13a4fa146f46a34c5699959f0082c65bc9934959 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sun, 7 Apr 2024 00:33:49 -0700 Subject: [PATCH 094/412] Add sops-nix for secret management --- .sops.yaml | 11 +++ flake.lock | 112 ++++++++++----------------- flake.nix | 1 + modules/secrets/sops-nix/default.nix | 11 +++ secrets.yaml | 24 ++++++ 5 files changed, 86 insertions(+), 73 deletions(-) create mode 100644 .sops.yaml create mode 100644 modules/secrets/sops-nix/default.nix create mode 100644 secrets.yaml diff --git a/.sops.yaml b/.sops.yaml new file mode 100644 index 0000000..530c11f --- /dev/null +++ b/.sops.yaml @@ -0,0 +1,11 @@ +# This example uses YAML anchors which allows reuse of multiple keys +# without having to repeat yourself. +# Also see https://github.com/Mic92/dotfiles/blob/master/nixos/.sops.yaml +# for a more complex example. +keys: + - &onizuka age1ey3wr2wnkgny3dfgvnyrf0cptwzr7s5x464p2y9ya58lpay8lfrsds3y68 +creation_rules: + - path_regex: secrets.yaml$ + key_groups: + - age: + - *onizuka diff --git a/flake.lock b/flake.lock index f283cae..54d6c12 100644 --- a/flake.lock +++ b/flake.lock @@ -8,11 +8,11 @@ ] }, "locked": { - "lastModified": 1710342492, - "narHash": "sha256-vEE+z5Tm0xWRAJo6xBai88kojzfROfHJ1a5dkNWoGRA=", + "lastModified": 1712185015, + "narHash": "sha256-mL3VSJRkyDJbMh/QqUeOhGOsEOTS7Jw9Tqw4fM+VjB4=", "owner": "ezKEa", "repo": "aagl-gtk-on-nix", - "rev": "c0943e683baedeb19498562497aec35701b1fe02", + "rev": "1dbb1c233a249e8cbc03907e965bd2a48d880262", "type": "github" }, "original": { @@ -39,7 +39,10 @@ }, "hyprcursor": { "inputs": { - "hyprlang": "hyprlang", + "hyprlang": [ + "hyprland", + "hyprlang" + ], "nixpkgs": [ "hyprland", "nixpkgs" @@ -50,11 +53,11 @@ ] }, "locked": { - "lastModified": 1710257359, - "narHash": "sha256-43re5pzE/cswFAgw92/ugsB3+d5ufDaCcLtl9ztKfBo=", + "lastModified": 1712339458, + "narHash": "sha256-j8pv3tL2EFLGuvFoO64dHWD8YzNvD77hRb4EEx5ADgE=", "owner": "hyprwm", "repo": "hyprcursor", - "rev": "1761f6cefd77f4fcd2039d930c88d6716ddc4974", + "rev": "981b6617822dadc40246a6c70194d02dfc12e4c6", "type": "github" }, "original": { @@ -67,18 +70,18 @@ "inputs": { "hyprcursor": "hyprcursor", "hyprland-protocols": "hyprland-protocols", - "hyprlang": "hyprlang_2", + "hyprlang": "hyprlang", "nixpkgs": "nixpkgs", - "systems": "systems_2", + "systems": "systems", "wlroots": "wlroots", "xdph": "xdph" }, "locked": { - "lastModified": 1711070930, - "narHash": "sha256-jKOAO/NlfaTC/OcZkPoT87gsfVqt/+Ye+KcaIv6e2mU=", + "lastModified": 1712457111, + "narHash": "sha256-hTRMWHl49SYfui2W3qCq790MHnX8JTBfYQcxgwjbQ0g=", "owner": "hyprwm", "repo": "Hyprland", - "rev": "9bad62b85f179ad2c95c6e7f734768ef060a604b", + "rev": "f2a848cbcc41f29fb62ee67aef95136ae1a650da", "type": "github" }, "original": { @@ -113,29 +116,6 @@ } }, "hyprlang": { - "inputs": { - "nixpkgs": [ - "hyprland", - "hyprcursor", - "nixpkgs" - ], - "systems": "systems" - }, - "locked": { - "lastModified": 1709914708, - "narHash": "sha256-bR4o3mynoTa1Wi4ZTjbnsZ6iqVcPGriXp56bZh5UFTk=", - "owner": "hyprwm", - "repo": "hyprlang", - "rev": "a685493fdbeec01ca8ccdf1f3655c044a8ce2fe2", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "hyprlang", - "type": "github" - } - }, - "hyprlang_2": { "inputs": { "nixpkgs": [ "hyprland", @@ -147,11 +127,11 @@ ] }, "locked": { - "lastModified": 1709914708, - "narHash": "sha256-bR4o3mynoTa1Wi4ZTjbnsZ6iqVcPGriXp56bZh5UFTk=", + "lastModified": 1711671891, + "narHash": "sha256-C/Wwsy/RLxHP1axFFl+AnwJRWfd8gxDKKoa8nt8Qk3c=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "a685493fdbeec01ca8ccdf1f3655c044a8ce2fe2", + "rev": "c1402612146ba06606ebf64963a02bc1efe11e74", "type": "github" }, "original": { @@ -162,11 +142,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1710272261, - "narHash": "sha256-g0bDwXFmTE7uGDOs9HcJsfLFhH7fOsASbAuOzDC+fhQ=", + "lastModified": 1712163089, + "narHash": "sha256-Um+8kTIrC19vD4/lUCN9/cU9kcOsD1O1m+axJqQPyMM=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "0ad13a6833440b8e238947e47bea7f11071dc2b2", + "rev": "fd281bd6b7d3e32ddfa399853946f782553163b5", "type": "github" }, "original": { @@ -178,11 +158,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1710951922, - "narHash": "sha256-FOOBJ3DQenLpTNdxMHR2CpGZmYuctb92gF0lpiirZ30=", + "lastModified": 1712310679, + "narHash": "sha256-XgC/a/giEeNkhme/AV1ToipoZ/IVm1MV2ntiK4Tm+pw=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "f091af045dff8347d66d186a62d42aceff159456", + "rev": "72da83d9515b43550436891f538ff41d68eecc7f", "type": "github" }, "original": { @@ -193,11 +173,11 @@ }, "nixpkgs-stable_2": { "locked": { - "lastModified": 1710628718, - "narHash": "sha256-y+l3eH53UlENaYa1lmnCBHusZb1kxBEFd2/c7lDsGpw=", + "lastModified": 1712437997, + "narHash": "sha256-g0whLLwRvgO2FsyhY8fNk+TWenS3jg5UdlWL4uqgFeo=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "6dc11d9859d6a18ab0c5e5829a5b8e4810658de3", + "rev": "e38d7cb66ea4f7a0eb6681920615dfcc30fc2920", "type": "github" }, "original": { @@ -209,11 +189,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1710806803, - "narHash": "sha256-qrxvLS888pNJFwJdK+hf1wpRCSQcqA6W5+Ox202NDa0=", + "lastModified": 1712163089, + "narHash": "sha256-Um+8kTIrC19vD4/lUCN9/cU9kcOsD1O1m+axJqQPyMM=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "b06025f1533a1e07b6db3e75151caa155d1c7eb3", + "rev": "fd281bd6b7d3e32ddfa399853946f782553163b5", "type": "github" }, "original": { @@ -224,11 +204,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1710534455, - "narHash": "sha256-huQT4Xs0y4EeFKn2BTBVYgEwJSv8SDlm82uWgMnCMmI=", + "lastModified": 1712420723, + "narHash": "sha256-VnG0Eu394Ga2FCe8Q66m6OEQF8iAqjDYsjmtl+N2omk=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "9af9c1c87ed3e3ed271934cb896e0cdd33dae212", + "rev": "9e7f26f82acb057498335362905fde6fea4ca50a", "type": "github" }, "original": { @@ -253,16 +233,17 @@ "nixpkgs-stable": "nixpkgs-stable_2" }, "locked": { - "lastModified": 1710644594, - "narHash": "sha256-RquCuzxfy4Nr8DPbdp3D/AsbYep21JgQzG8aMH9jJ4A=", + "lastModified": 1712458908, + "narHash": "sha256-DMgBS+jNHDg8z3g9GkwqL8xTKXCRQ/0FGsAyrniVonc=", "owner": "Mic92", "repo": "sops-nix", - "rev": "83b68a0e8c94b72cdd0a6e547a14ca7eb1c03616", + "rev": "39191e8e6265b106c9a2ba0cfd3a4dafe98a31c6", "type": "github" }, "original": { - "id": "sops-nix", - "type": "indirect" + "owner": "Mic92", + "repo": "sops-nix", + "type": "github" } }, "systems": { @@ -280,21 +261,6 @@ "type": "github" } }, - "systems_2": { - "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" - } - }, "wlroots": { "flake": false, "locked": { diff --git a/flake.nix b/flake.nix index 6996e97..bd59e11 100644 --- a/flake.nix +++ b/flake.nix @@ -7,6 +7,7 @@ url = "github:ezKEa/aagl-gtk-on-nix"; inputs.nixpkgs.follows = "nixpkgs-stable"; }; + sops-nix.url = "github:Mic92/sops-nix"; }; outputs = { self, nixpkgs, hyprland, aagl, sops-nix, ... }@inputs: diff --git a/modules/secrets/sops-nix/default.nix b/modules/secrets/sops-nix/default.nix new file mode 100644 index 0000000..2c26d07 --- /dev/null +++ b/modules/secrets/sops-nix/default.nix @@ -0,0 +1,11 @@ +{ inputs, pkgs, lib, ... }: +let rootPath = ./.; in +{ + imports = [ inputs.sops-nix.nixosModules.sops ]; + + sops = { + defaultSopsFile = rootPath + "secrets.yaml"; + defaultSopsFormat = "yaml"; + age.keyFile = "/home/pan/.config/sops/age/keys.txt"; + }; +} diff --git a/secrets.yaml b/secrets.yaml new file mode 100644 index 0000000..0c3098f --- /dev/null +++ b/secrets.yaml @@ -0,0 +1,24 @@ +services: + spotify: + username: ENC[AES256_GCM,data:xyhcpSN4v9k294Vtxd+6RIicsd/QbWBr3Qk=,iv:fhKAo9sti/CFRQijzvAoWAAfSETVYTjvRsdUeTVj5rU=,tag:jggBE9ZKHiDerI0Fm+n12w==,type:str] + password: ENC[AES256_GCM,data:fmx/1zTF/Xc32tpjnq1pp7jzpIM=,iv:kwAzuhAcw3+v9Ilfh1GrdqmINR0w0F6nkjJJXjABcmI=,tag:Yyutz0EmQQ6n/UYgHLpYWA==,type:str] +sops: + kms: [] + gcp_kms: [] + azure_kv: [] + hc_vault: [] + age: + - recipient: age1ey3wr2wnkgny3dfgvnyrf0cptwzr7s5x464p2y9ya58lpay8lfrsds3y68 + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBHM1REVU9wTVhxWHo3UW0x + WnNmanFmbXVCVGJwcmdZVzFJaTBxRnJzcEJZClFJdjB1QkpxS1QySVUzbGJySWY5 + QURScWI5UTFzN1NVdkVZeG9WUkdnWWcKLS0tIGgrNEFpWi9idTQrZWNrZXMzcFZI + RUljSSs5L1JCampTOXdmY1IzYjNzeFEK2WC5HivIt77z0+yopZnmlUWYJCwn/eI+ + V4UIgITsmTjN2c6df5Pc4nb7jWC7XsMq7VL1nG+uo39QQPRW/FaZYQ== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2024-04-06T02:39:34Z" + mac: ENC[AES256_GCM,data:QAFXEXOm0Mi0GOJU4EG8JC9BizTGdbDjYfGlBAe6uhJAcMAO47vRwPADx7bWxSrAZ6kQRy+3OCBjin0YSADRHHmXOPXhqPzpFTeG3T19hLRG79W7R1UoRVm/PhajOimEj4urbZqdHC8mqtU0XngB/zlfRkfbT053J87TsvAlmwI=,iv:HMEhCmnXCEANA4s1L1nmnckHRIjWKxS3D9gbLcNTnmE=,tag:Chbl2JTKVqs8t91BTlX9QQ==,type:str] + pgp: [] + unencrypted_suffix: _unencrypted + version: 3.8.1 From cc95386f1aa38c0f060adc83b2311c9ce2b599b3 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sun, 7 Apr 2024 17:08:48 -0700 Subject: [PATCH 095/412] Refactor modules style --- flake.nix | 2 +- modules/audio/pipewire/default.nix | 13 ---- modules/etc/anime-launcher/default.nix | 8 --- modules/etc/input-remapper/default.nix | 5 -- modules/etc/steam/default.nix | 9 --- modules/graphics/nvidia/default.nix | 21 ------- modules/login/greetd/default.nix | 17 ------ modules/login/polkit/default.nix | 5 -- modules/network/bluetooth/default.nix | 10 --- .../network/browsers/librewolf/default.nix | 6 -- modules/network/networking/default.nix | 49 --------------- modules/network/syncthing/default.nix | 19 ------ modules/secrets/sops-nix/default.nix | 11 ---- modules/shell/fish/default.nix | 11 ---- modules/shell/xonsh/default.nix | 9 --- modules/system/default.nix | 40 ------------ modules/themeing/default.nix | 11 ---- modules/user/default.nix | 8 --- modules/window_managers/hyprland/default.nix | 11 ---- nixosModules/apps/default.nix | 11 ++++ .../apps/games/anime-launcher/default.nix | 26 ++++++++ nixosModules/apps/games/default.nix | 8 +++ nixosModules/apps/games/steam/default.nix | 15 +++++ nixosModules/apps/input-remapper/default.nix | 11 ++++ nixosModules/apps/librewolf/default.nix | 12 ++++ nixosModules/apps/shells/fish/default.nix | 15 +++++ nixosModules/apps/shells/xonsh/default.nix | 15 +++++ nixosModules/apps/syncthing/default.nix | 25 ++++++++ nixosModules/default.nix | 8 +++ nixosModules/services/default.nix | 12 ++++ nixosModules/services/graphics/default.nix | 9 +++ .../graphics/display_manager/default.nix | 23 +++++++ .../services/graphics/nvidia/default.nix | 28 +++++++++ .../graphics/wayland_compositors/default.nix | 17 ++++++ .../services/networking/bluetooth/default.nix | 16 +++++ nixosModules/services/networking/default.nix | 8 +++ .../services/networking/wireless/default.nix | 33 ++++++++++ nixosModules/services/pipewire/default.nix | 21 +++++++ nixosModules/services/polkit/default.nix | 14 +++++ nixosModules/services/sops-nix/default.nix | 20 ++++++ nixosModules/services/system/default.nix | 61 +++++++++++++++++++ systems/jibril/default.nix | 25 ++++++-- systems/onizuka/default.nix | 30 +++++++-- systems/shared/default.nix | 24 -------- 44 files changed, 455 insertions(+), 297 deletions(-) delete mode 100644 modules/audio/pipewire/default.nix delete mode 100644 modules/etc/anime-launcher/default.nix delete mode 100644 modules/etc/input-remapper/default.nix delete mode 100644 modules/etc/steam/default.nix delete mode 100644 modules/graphics/nvidia/default.nix delete mode 100644 modules/login/greetd/default.nix delete mode 100644 modules/login/polkit/default.nix delete mode 100644 modules/network/bluetooth/default.nix delete mode 100644 modules/network/browsers/librewolf/default.nix delete mode 100644 modules/network/networking/default.nix delete mode 100644 modules/network/syncthing/default.nix delete mode 100644 modules/secrets/sops-nix/default.nix delete mode 100644 modules/shell/fish/default.nix delete mode 100644 modules/shell/xonsh/default.nix delete mode 100644 modules/system/default.nix delete mode 100644 modules/themeing/default.nix delete mode 100644 modules/user/default.nix delete mode 100644 modules/window_managers/hyprland/default.nix create mode 100644 nixosModules/apps/default.nix create mode 100644 nixosModules/apps/games/anime-launcher/default.nix create mode 100644 nixosModules/apps/games/default.nix create mode 100644 nixosModules/apps/games/steam/default.nix create mode 100644 nixosModules/apps/input-remapper/default.nix create mode 100644 nixosModules/apps/librewolf/default.nix create mode 100644 nixosModules/apps/shells/fish/default.nix create mode 100644 nixosModules/apps/shells/xonsh/default.nix create mode 100644 nixosModules/apps/syncthing/default.nix create mode 100644 nixosModules/default.nix create mode 100644 nixosModules/services/default.nix create mode 100644 nixosModules/services/graphics/default.nix create mode 100644 nixosModules/services/graphics/display_manager/default.nix create mode 100644 nixosModules/services/graphics/nvidia/default.nix create mode 100644 nixosModules/services/graphics/wayland_compositors/default.nix create mode 100644 nixosModules/services/networking/bluetooth/default.nix create mode 100644 nixosModules/services/networking/default.nix create mode 100644 nixosModules/services/networking/wireless/default.nix create mode 100644 nixosModules/services/pipewire/default.nix create mode 100644 nixosModules/services/polkit/default.nix create mode 100644 nixosModules/services/sops-nix/default.nix create mode 100644 nixosModules/services/system/default.nix delete mode 100644 systems/shared/default.nix diff --git a/flake.nix b/flake.nix index bd59e11..4f8bfaf 100644 --- a/flake.nix +++ b/flake.nix @@ -16,7 +16,7 @@ specialArgs = { inherit inputs; }; system = "x86_64-linux"; modules = [ - ./systems/shared + ./nixosModules ] ++ extraModules; }; in diff --git a/modules/audio/pipewire/default.nix b/modules/audio/pipewire/default.nix deleted file mode 100644 index 3e55b02..0000000 --- a/modules/audio/pipewire/default.nix +++ /dev/null @@ -1,13 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - security.rtkit.enable = true; - - services.pipewire = { - enable = true; - wireplumber.enable = true; - alsa.enable = false; - alsa.support32Bit = false; - pulse.enable = true; - }; -} diff --git a/modules/etc/anime-launcher/default.nix b/modules/etc/anime-launcher/default.nix deleted file mode 100644 index 8633388..0000000 --- a/modules/etc/anime-launcher/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ inputs, pkgs, lib, ... }: - -{ - imports = [ inputs.aagl.nixosModules.default ]; - nix.settings = inputs.aagl.nixConfig; - - programs.honkers-railway-launcher.enable = true; -} diff --git a/modules/etc/input-remapper/default.nix b/modules/etc/input-remapper/default.nix deleted file mode 100644 index 3cf6a65..0000000 --- a/modules/etc/input-remapper/default.nix +++ /dev/null @@ -1,5 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - services.input-remapper.enable = true; -} diff --git a/modules/etc/steam/default.nix b/modules/etc/steam/default.nix deleted file mode 100644 index 192899c..0000000 --- a/modules/etc/steam/default.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - programs.steam = { - enable = true; - remotePlay.openFirewall = true; - dedicatedServer.openFirewall = true; - }; -} diff --git a/modules/graphics/nvidia/default.nix b/modules/graphics/nvidia/default.nix deleted file mode 100644 index 7e0e568..0000000 --- a/modules/graphics/nvidia/default.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - # Enable OpenGL - hardware.opengl = { - enable = true; - driSupport = true; - driSupport32Bit = true; - }; - - services.xserver.videoDrivers = ["nvidia"]; - - hardware.nvidia = { - modesetting.enable = true; - package = config.boot.kernelPackages.nvidiaPackages.stable; - }; - - environment.systemPackages = with pkgs; [ - nvidia-vaapi-driver - ]; -} diff --git a/modules/login/greetd/default.nix b/modules/login/greetd/default.nix deleted file mode 100644 index 23620f8..0000000 --- a/modules/login/greetd/default.nix +++ /dev/null @@ -1,17 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - services.greetd = { - enable = true; - package = pkgs.greetd.tuigreet; - settings = { - terminal = { - vt = 2; - }; - default_session = { - command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time --cmd Hyprland"; - user = "pan"; - }; - }; - }; -} diff --git a/modules/login/polkit/default.nix b/modules/login/polkit/default.nix deleted file mode 100644 index 5c0a462..0000000 --- a/modules/login/polkit/default.nix +++ /dev/null @@ -1,5 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - security.polkit.enable = true; -} diff --git a/modules/network/bluetooth/default.nix b/modules/network/bluetooth/default.nix deleted file mode 100644 index 739a9bd..0000000 --- a/modules/network/bluetooth/default.nix +++ /dev/null @@ -1,10 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - hardware.bluetooth.enable = true; - hardware.bluetooth.powerOnBoot = true; - services.blueman.enable = true; - environment.systemPackages = with pkgs; [ - blueman - ]; -} diff --git a/modules/network/browsers/librewolf/default.nix b/modules/network/browsers/librewolf/default.nix deleted file mode 100644 index 034c5eb..0000000 --- a/modules/network/browsers/librewolf/default.nix +++ /dev/null @@ -1,6 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - environment.variables.WEBBROWSER = "librewolf"; - environment.systemPackages = with pkgs; [ librewolf ]; -} diff --git a/modules/network/networking/default.nix b/modules/network/networking/default.nix deleted file mode 100644 index d778498..0000000 --- a/modules/network/networking/default.nix +++ /dev/null @@ -1,49 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - networking.wireless = { - enable = true; - userControlled = { - enable = true; - group = "network"; - }; - networks = { - "The Kabal 2.4" = { - pskRaw = "56302c1b1c7499f4a4f0e01cefe14b4393c5092420ebf71c68336cd084acd357"; - priority = 1; - }; - "WWUwireless-Secure" = { - auth = '' - key_mgmt=WPA-EAP - eap=PEAP - identity="langed@wwu.edu" - password="Slashed-Tidy4-Cubbyhole" - ''; - priority = 1; - }; - "Yellowsticky" = { - pskRaw = "8984d7e1e2f5bd9c3ccf92e429886bc64d40d42d4771ed5946556227afa4abf0"; - priority = 1; - }; - "Lange" = { - pskRaw = "bbbbf63e23747bc0ff36aed4c20dcee0221a6ccb2d2db07e4c64058e645e5f1e"; - priority = 1; - }; - "foofoo2" = { - pskRaw = "1269f8db0aec9d9c30bff6de9951f0ab2d18d7cea4dacd8bd253ebc237e73e2d"; - priority = 1; - }; - "OrbiWanKenobe" = { - pskRaw = "0128447a146d359c1224e558b0f4e3fc0a53b0b4a178334075b50f8d07e179d2"; - priority = 1; - }; - "Homura" = { - pskRaw = "dd77456e1df3f2c17bccc917a0e609684fa6d2ccb6a2e0fb122d50d243e0c87e"; - priority = 0; - }; - }; - }; - - - networking.enableIPv6 = false; -} diff --git a/modules/network/syncthing/default.nix b/modules/network/syncthing/default.nix deleted file mode 100644 index c5f9dab..0000000 --- a/modules/network/syncthing/default.nix +++ /dev/null @@ -1,19 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - services.syncthing = { - enable = true; - user = "pan"; - dataDir = "/home/pan/dox/Sync"; - configDir = "/home/pan/.config/syncthing"; - overrideFolders = true; - overrideDevices = true; - - settings = { - gui = { - user = "pan"; - password = "password"; - }; - }; - }; -} diff --git a/modules/secrets/sops-nix/default.nix b/modules/secrets/sops-nix/default.nix deleted file mode 100644 index 2c26d07..0000000 --- a/modules/secrets/sops-nix/default.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ inputs, pkgs, lib, ... }: -let rootPath = ./.; in -{ - imports = [ inputs.sops-nix.nixosModules.sops ]; - - sops = { - defaultSopsFile = rootPath + "secrets.yaml"; - defaultSopsFormat = "yaml"; - age.keyFile = "/home/pan/.config/sops/age/keys.txt"; - }; -} diff --git a/modules/shell/fish/default.nix b/modules/shell/fish/default.nix deleted file mode 100644 index 37eef00..0000000 --- a/modules/shell/fish/default.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - programs.fish.enable = true; - - users.defaultUserShell = pkgs.fish; - - environment.shells = with pkgs; [ fish ]; - - # environment.variables.NIX_BUILD_SHELL = "fish"; -} diff --git a/modules/shell/xonsh/default.nix b/modules/shell/xonsh/default.nix deleted file mode 100644 index 2c5904d..0000000 --- a/modules/shell/xonsh/default.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - programs.xonsh.enable = true; - - users.defaultUserShell = pkgs.xonsh; - - environment.shells = with pkgs; [ xonsh ]; -} diff --git a/modules/system/default.nix b/modules/system/default.nix deleted file mode 100644 index c0992ad..0000000 --- a/modules/system/default.nix +++ /dev/null @@ -1,40 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - # Use the systemd-boot EFI boot loader. - boot.kernelPackages = pkgs.linuxPackages_latest; - boot.loader.systemd-boot.enable = true; - boot.loader.timeout = 1; - boot.loader.efi.canTouchEfiVariables = true; - security.polkit.enable = true; - - time.timeZone = "America/Los_Angeles"; - - i18n.defaultLocale = "en_US.UTF-8"; - - # "Essential" Packages - environment.systemPackages = with pkgs; [ - git - neovim - nnn - xdg-user-dirs - ]; - - # XDG Compliance - xdg.portal.config.common.default = "*"; - environment.sessionVariables = rec { - XDG_CONFIG_HOME = "\${HOME}/.config"; - XDG_CACHE_HOME = "\${HOME}/.cache"; - XDG_STATE_HOME = "\${HOME}/.local/state"; - XDG_DATA_HOME = "\${HOME}/.local/share"; - XDG_BIN_HOME = "\${HOME}/.local/bin"; - PATH = [ - "\${HOME}/prog/scripts" - ]; - }; - - users.groups = { - wheel = { }; - network = { }; - }; -} diff --git a/modules/themeing/default.nix b/modules/themeing/default.nix deleted file mode 100644 index ad298d1..0000000 --- a/modules/themeing/default.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - fonts = { - enableDefaultPackages = true; - packages = with pkgs; [ - cascadia-code - source-han-sans # Pan-CJK font - ]; - }; -} diff --git a/modules/user/default.nix b/modules/user/default.nix deleted file mode 100644 index 58a4426..0000000 --- a/modules/user/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - users.users.pan = { - isNormalUser = true; - extraGroups = [ "wheel" "network" ]; - }; -} diff --git a/modules/window_managers/hyprland/default.nix b/modules/window_managers/hyprland/default.nix deleted file mode 100644 index 72babdb..0000000 --- a/modules/window_managers/hyprland/default.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ inputs, pkgs, lib, ... }: - -{ - imports = [ inputs.hyprland.nixosModules.default ]; - programs.hyprland.enable = true; - nix.settings = { - substituters = [ "https://hyprland.cachix.org" ]; - trusted-public-keys = [ "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" ]; - experimental-features = [ "nix-command" "flakes" ]; - }; -} diff --git a/nixosModules/apps/default.nix b/nixosModules/apps/default.nix new file mode 100644 index 0000000..b851878 --- /dev/null +++ b/nixosModules/apps/default.nix @@ -0,0 +1,11 @@ +{ config, pkgs, lib, ... }: + +{ + import = [ + ./games + ./input-remapper + ./librewolf + ./shells + ./syncthing + ]; +} diff --git a/nixosModules/apps/games/anime-launcher/default.nix b/nixosModules/apps/games/anime-launcher/default.nix new file mode 100644 index 0000000..ef10e49 --- /dev/null +++ b/nixosModules/apps/games/anime-launcher/default.nix @@ -0,0 +1,26 @@ +{ config, inputs, pkgs, lib, ... }: + +{ + options = { + aagl.enable = lib.mkEnableOption + "Enables another anime game launcher settings"; + aagl.honkai-rail = lib.mkEnableOption + "Enables honkai star rail"; + aagl.genshin = lib.mkEnableOption + "Enables genshin impact"; + aagl.honkai-3rd = lib.mkEnableOption + "Enables honkai 3rd impact"; + }; + + config = lib.mkIf config.aagl.enable { + imports = [ inputs.aagl.nixosModules.default ]; + nix.settings = inputs.aagl.nixConfig; + + programs.honkers-railway-launcher.enable = + lib.mkIf config.aagl.honkai-rail true; + programs.anime-game-launcher.enable = + lib.mkIf config.aagl.genshin true; + programs.honkers-launcher.enable = + lib.mkIf config.aagl.honkai-3rd true; + }; +} diff --git a/nixosModules/apps/games/default.nix b/nixosModules/apps/games/default.nix new file mode 100644 index 0000000..3d6b374 --- /dev/null +++ b/nixosModules/apps/games/default.nix @@ -0,0 +1,8 @@ +{ config, pkgs, lib, ... }: + +{ + import = [ + ./anime-launcher + ./steam + ]; +} diff --git a/nixosModules/apps/games/steam/default.nix b/nixosModules/apps/games/steam/default.nix new file mode 100644 index 0000000..9ae522a --- /dev/null +++ b/nixosModules/apps/games/steam/default.nix @@ -0,0 +1,15 @@ +{ config, pkgs, lib, ... }: + +{ + options = { + steam.enable = lib.mkEnableOption "Enables steam"; + }; + + config = lib.mkIf config.steam.enable { + programs.steam = { + enable = true; + remotePlay.openFirewall = true; + dedicatedServer.openFirewall = true; + }; + }; +} diff --git a/nixosModules/apps/input-remapper/default.nix b/nixosModules/apps/input-remapper/default.nix new file mode 100644 index 0000000..0646dfc --- /dev/null +++ b/nixosModules/apps/input-remapper/default.nix @@ -0,0 +1,11 @@ +{ config, pkgs, lib, ... }: + +{ + options = { + input-remapper.enable = lib.mkEnableOption "Enables input-remapper"; + }; + + config = lib.mkIf config.input-remapper.enable { + services.input-remapper.enable = true; + }; +} diff --git a/nixosModules/apps/librewolf/default.nix b/nixosModules/apps/librewolf/default.nix new file mode 100644 index 0000000..f0d4406 --- /dev/null +++ b/nixosModules/apps/librewolf/default.nix @@ -0,0 +1,12 @@ +{ config, pkgs, lib, ... }: + +{ + options = { + librewolf.enable = lib.mkEnableOption "Enables librewolf"; + }; + + config = lib.mkIf config.librewolf.enable { + environment.variables.BROWSER = "librewolf"; + environment.systemPackages = with pkgs; [ librewolf ]; + }; +} diff --git a/nixosModules/apps/shells/fish/default.nix b/nixosModules/apps/shells/fish/default.nix new file mode 100644 index 0000000..d4885f9 --- /dev/null +++ b/nixosModules/apps/shells/fish/default.nix @@ -0,0 +1,15 @@ +{ config, pkgs, lib, ... }: + +{ + options = { + fish.enable = lib.mkEnableOption "Enables fish"; + fish.setDefault = lib.mkEnableOption + "Sets fish as the default user's shell"; + }; + + config = lib.mkIf config.fish.enable { + programs.fish.enable = true; + users.users.defaultUser.shell = lib.mkIf config.fish.setDefault pkgs.fish; + environment.shells = with pkgs; [ fish ]; + }; +} diff --git a/nixosModules/apps/shells/xonsh/default.nix b/nixosModules/apps/shells/xonsh/default.nix new file mode 100644 index 0000000..4842ba0 --- /dev/null +++ b/nixosModules/apps/shells/xonsh/default.nix @@ -0,0 +1,15 @@ +{ config, pkgs, lib, ... }: + +{ + options = { + xonsh.enable = lib.mkEnableOption "Enables xonsh"; + xonsh.setDefault = lib.mkEnableOption + "Sets xonsh as the default user's shell"; + }; + + config = lib.mkIf config.xonsh.enable { + programs.xonsh.enable = true; + users.users.defaultUser.shell = lib.mkIf config.fish.setDefault pkgs.xonsh; + environment.shells = with pkgs; [ xonsh ]; + }; +} diff --git a/nixosModules/apps/syncthing/default.nix b/nixosModules/apps/syncthing/default.nix new file mode 100644 index 0000000..69cea88 --- /dev/null +++ b/nixosModules/apps/syncthing/default.nix @@ -0,0 +1,25 @@ +{ config, pkgs, lib, ... }: + +{ + options = { + syncthing.enable = lib.mkEnableOption "Enables syncthing"; + }; + + config = lib.mkIf config.syncthing.enable { + services.syncthing = { + enable = true; + user = config.user.name; + dataDir = "/home/" + config.user.name + "/dox/Sync"; + configDir = "/home/" + config.user.name + "/.config/syncthing"; + overrideFolders = true; + overrideDevices = true; + + settings = { + gui = { + user = config.user.name; + password = "password"; + }; + }; + }; + }; +} diff --git a/nixosModules/default.nix b/nixosModules/default.nix new file mode 100644 index 0000000..e243737 --- /dev/null +++ b/nixosModules/default.nix @@ -0,0 +1,8 @@ +{ config, pkgs, lib, ... }: + +{ + import = [ + ./apps + ./services + ]; +} diff --git a/nixosModules/services/default.nix b/nixosModules/services/default.nix new file mode 100644 index 0000000..e797297 --- /dev/null +++ b/nixosModules/services/default.nix @@ -0,0 +1,12 @@ +{ config, pkgs, lib, ... }: + +{ + import = [ + ./graphics + ./networking + ./pipewire + ./polkit + ./sops-nix + ./system + ]; +} diff --git a/nixosModules/services/graphics/default.nix b/nixosModules/services/graphics/default.nix new file mode 100644 index 0000000..76e68bf --- /dev/null +++ b/nixosModules/services/graphics/default.nix @@ -0,0 +1,9 @@ +{ config, pkgs, lib, ... }: + +{ + imports = [ + ./display_manager + ./nvidia + ./wayland_compositors + ]; +} diff --git a/nixosModules/services/graphics/display_manager/default.nix b/nixosModules/services/graphics/display_manager/default.nix new file mode 100644 index 0000000..8e0c4c1 --- /dev/null +++ b/nixosModules/services/graphics/display_manager/default.nix @@ -0,0 +1,23 @@ +{ config, pkgs, lib, ... }: + +{ + options = { + tuigreet.enable = lib.mkEnableOption "enables tuigreet with greetd"; + }; + + config = lib.mkIf config.tuigreet.enable { + services.greetd = { + enable = true; + package = pkgs.greetd.tuigreet; + settings = { + terminal = { + vt = 2; + }; + default_session = lib.mkIf config.hyprland.enable { + command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time --cmd Hyprland"; + user = config.user.name; + }; + }; + }; + }; +} diff --git a/nixosModules/services/graphics/nvidia/default.nix b/nixosModules/services/graphics/nvidia/default.nix new file mode 100644 index 0000000..ca25c5a --- /dev/null +++ b/nixosModules/services/graphics/nvidia/default.nix @@ -0,0 +1,28 @@ +{ config, pkgs, lib, ... }: + +{ + options = { + nvidia.enable = lib.mkEnableOption + "Enables nvidia with proprietary drivers"; + }; + + config = lib.mkIf config.nvidia.enable { + # Enable OpenGL + hardware.opengl = { + enable = true; + driSupport = true; + driSupport32Bit = true; + }; + + services.xserver.videoDrivers = ["nvidia"]; + + hardware.nvidia = { + modesetting.enable = true; + package = config.boot.kernelPackages.nvidiaPackages.stable; + }; + + environment.systemPackages = with pkgs; [ + nvidia-vaapi-driver + ]; + }; +} diff --git a/nixosModules/services/graphics/wayland_compositors/default.nix b/nixosModules/services/graphics/wayland_compositors/default.nix new file mode 100644 index 0000000..ae7dca2 --- /dev/null +++ b/nixosModules/services/graphics/wayland_compositors/default.nix @@ -0,0 +1,17 @@ +{ inputs, config, pkgs, lib, ... }: + +{ + options = { + hyprland.enable = lib.mkEnableOption "Enables hyprland"; + }; + + config = lib.mkIf config.hyprland.enable { + imports = [ inputs.hyprland.nixosModules.default ]; + programs.hyprland.enable = true; + nix.settings = { + substituters = [ "https://hyprland.cachix.org" ]; + trusted-public-keys = [ "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" ]; + experimental-features = [ "nix-command" "flakes" ]; + }; + }; +} diff --git a/nixosModules/services/networking/bluetooth/default.nix b/nixosModules/services/networking/bluetooth/default.nix new file mode 100644 index 0000000..30bed32 --- /dev/null +++ b/nixosModules/services/networking/bluetooth/default.nix @@ -0,0 +1,16 @@ +{ config, pkgs, lib, ... }: + +{ + options = { + bluetooth.enable = lib.mkEnableOption "Enables Bluetooth with blueman"; + }; + + config = lib.mkIf config.bluetooth.enable { + hardware.bluetooth.enable = true; + hardware.bluetooth.powerOnBoot = true; + services.blueman.enable = true; + environment.systemPackages = with pkgs; [ + blueman + ]; + }; +} diff --git a/nixosModules/services/networking/default.nix b/nixosModules/services/networking/default.nix new file mode 100644 index 0000000..867600d --- /dev/null +++ b/nixosModules/services/networking/default.nix @@ -0,0 +1,8 @@ +{ config, pkgs, lib, ... }: + +{ + import = [ + ./bluetooth + ./wireless + ]; +} diff --git a/nixosModules/services/networking/wireless/default.nix b/nixosModules/services/networking/wireless/default.nix new file mode 100644 index 0000000..972d057 --- /dev/null +++ b/nixosModules/services/networking/wireless/default.nix @@ -0,0 +1,33 @@ +{ config, pkgs, lib, ... }: + +{ + options = { + wireless.enable = lib.mkEnableOption "Enables wireless"; + }; + + config = lib.mkIf confi.wireless.enable { + networking.wireless = { + enable = true; + userControlled = { + enable = true; + group = "network"; + }; + networks = { + "foofoo2" = { + pskRaw = "1269f8db0aec9d9c30bff6de9951f0ab2d18d7cea4dacd8bd253ebc237e73e2d"; + priority = 1; + }; + "OrbiWanKenobe" = { + pskRaw = "0128447a146d359c1224e558b0f4e3fc0a53b0b4a178334075b50f8d07e179d2"; + priority = 1; + }; + "Homura" = { + pskRaw = "dd77456e1df3f2c17bccc917a0e609684fa6d2ccb6a2e0fb122d50d243e0c87e"; + priority = 0; + }; + }; + }; + + networking.enableIPv6 = false; + }; +} diff --git a/nixosModules/services/pipewire/default.nix b/nixosModules/services/pipewire/default.nix new file mode 100644 index 0000000..0e22758 --- /dev/null +++ b/nixosModules/services/pipewire/default.nix @@ -0,0 +1,21 @@ +{ config, pkgs, lib, ... }: + +{ + options = { + pipewire.enable = lib.mkEnableOption "Enables pipewire and pulsemixer"; + }; + + config = lib.mkIf config.pipewire.enable { + security.rtkit.enable = true; + services.pipewire = { + enable = true; + wireplumber.enable = true; + alsa.enable = false; + alsa.support32Bit = false; + pulse.enable = true; + environment.systemPackages = with pkgs; [ + pulsemixer + ]; + }; + }; +} diff --git a/nixosModules/services/polkit/default.nix b/nixosModules/services/polkit/default.nix new file mode 100644 index 0000000..917e9bc --- /dev/null +++ b/nixosModules/services/polkit/default.nix @@ -0,0 +1,14 @@ +{ config, pkgs, lib, ... }: + +{ + options = { + polkit.enable = lib.mkEnableOption "Enables polkit with kde handler"; + }; + + config = lib.mkIf config.polkit.enable { + security.polkit.enable = true; + environment.systemPackages = with pkgs; [ + polkit-kde-agent + ]; + } +} diff --git a/nixosModules/services/sops-nix/default.nix b/nixosModules/services/sops-nix/default.nix new file mode 100644 index 0000000..65d5747 --- /dev/null +++ b/nixosModules/services/sops-nix/default.nix @@ -0,0 +1,20 @@ +{ inputs, config, pkgs, lib, ... }: +let rootPath = ./.; in +{ + options = { + sops-nix.enable = lib.mkEnableOption "Enables nix-sops for secret management"; + }; + + config = lib.mkIf config.sops-nix.enable { + imports = [ inputs.sops-nix.nixosModules.sops ]; + + sops = { + defaultSopsFile = rootPath + "secrets.yaml"; + defaultSopsFormat = "yaml"; + age.keyFile = "/home/" + config.user.name + ".config/sops/age/keys.txt"; + }; + environment.systemPackages = with pkgs; [ + sops + ]; + }; +} diff --git a/nixosModules/services/system/default.nix b/nixosModules/services/system/default.nix new file mode 100644 index 0000000..eec6490 --- /dev/null +++ b/nixosModules/services/system/default.nix @@ -0,0 +1,61 @@ +{ config, pkgs, lib, ... }: + +{ + options = { + user.name = lib.mkOption { default = "pan"; }; + user.timezone = lib.mkOption { default = "America/Los_Angeles"; }; + font.extraFonts = lib.mkOption { default = []; }; + }; + + config = { + # Use the systemd-boot EFI boot loader. + boot.kernelPackages = pkgs.linuxPackages_latest; + boot.loader.systemd-boot.enable = true; + boot.loader.timeout = 1; + boot.loader.efi.canTouchEfiVariables = true; + + time.timeZone = config.user.timezone; + + i18n.defaultLocale = "en_US.UTF-8"; + + # "Essential" Packages + environment.systemPackages = with pkgs; [ + git + neovim + nnn + xdg-user-dirs + ]; + + # XDG Compliance + xdg.portal.config.common.default = "*"; + environment.sessionVariables = rec { + XDG_CONFIG_HOME = "\${HOME}/.config"; + XDG_CACHE_HOME = "\${HOME}/.cache"; + XDG_STATE_HOME = "\${HOME}/.local/state"; + XDG_DATA_HOME = "\${HOME}/.local/share"; + XDG_BIN_HOME = "\${HOME}/.local/bin"; + PATH = [ + "\${HOME}/prog/scripts" + ]; + }; + + users.groups = { + wheel = { }; + network = { }; + }; + + users.users.defaultUser = { + name = config.user.name; + isNormalUser = true; + extraGroups = [ "wheel" "network" ]; + }; + + fonts = { + enableDefaultPackages = true; + packages = with pkgs; [ + cascadia-code + source-han-sans # Pan-CJK font + ] ++ config.system.extraFonts; + }; + }; +} diff --git a/systems/jibril/default.nix b/systems/jibril/default.nix index bd3a34e..8a342f8 100644 --- a/systems/jibril/default.nix +++ b/systems/jibril/default.nix @@ -1,11 +1,28 @@ { config, pkgs, lib, ... }: { - networking.hostName = "jibril"; imports = [ ./hardware.nix - - ../../modules/network/bluetooth - ../../modules/network/networking ]; + networking.hostName = "jibril"; + nix.package = pkgs.nixUnstable; + nixpkgs.config.allowUnfree = true; + system.stateVersion = "23.05"; + + config = { + pipewire.enable = true; + polkit.enable = true; + bluetooth.enable = true; + wireless.enable = true; + + user.name = "pan"; + user.timezone = "America/Los_Angeles"; + + tuigreet.enable = true; + hyprland.enable = true; + + librewolf.enable = true; + xonsh.enable = true; + syncthing.enable = true; + }; } diff --git a/systems/onizuka/default.nix b/systems/onizuka/default.nix index 8156468..d602924 100644 --- a/systems/onizuka/default.nix +++ b/systems/onizuka/default.nix @@ -1,12 +1,32 @@ { config, pkgs, lib, ... }: { - networking.hostName = "onizuka"; imports = [ ./hardware.nix - ../../modules/graphics/nvidia - ../../modules/etc/steam - ../../modules/etc/anime-launcher - ../../modules/etc/input-remapper ]; + networking.hostName = "onizuka"; + nix.package = pkgs.nixUnstable; + nixpkgs.config.allowUnfree = true; + system.stateVersion = "23.05"; + + config = { + nvidia.enable = true; + pipewire.enable = true; + polkit.enable = true; + + user.name = "pan"; + user.timezone = "America/Los_Angeles"; + + tuigreet.enable = true; + hyprland.enable = true; + + librewolf.enable = true; + xonsh.enable = true; + syncthing.enable = true; + + steam.enable = true; + aagl.enable = true; + aagl.honkai-rail = true; + input-remapper.enable = true; + }; } diff --git a/systems/shared/default.nix b/systems/shared/default.nix deleted file mode 100644 index 70e2e0c..0000000 --- a/systems/shared/default.nix +++ /dev/null @@ -1,24 +0,0 @@ -{ config, pkgs, ... }: -{ - nix.package = pkgs.nixUnstable; - imports = - [ - # System essentials (boot, lang, hostname, ...) - ../../modules/audio/pipewire - ../../modules/login/polkit - ../../modules/system - ../../modules/user - - ../../modules/shell/xonsh - ../../modules/network/browsers/librewolf - ../../modules/network/syncthing - - ../../modules/themeing - ../../modules/login/greetd - ../../modules/window_managers/hyprland - ]; - - nixpkgs.config.allowUnfree = true; - - system.stateVersion = "23.05"; -} From 30810224f0f424382479e2a55159a46ea316219b Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sun, 7 Apr 2024 17:08:48 -0700 Subject: [PATCH 096/412] Refactor modules style --- flake.nix | 2 +- modules/audio/pipewire/default.nix | 13 ---- modules/etc/anime-launcher/default.nix | 8 --- modules/etc/input-remapper/default.nix | 5 -- modules/etc/steam/default.nix | 9 --- modules/graphics/nvidia/default.nix | 21 ------- modules/login/greetd/default.nix | 17 ------ modules/login/polkit/default.nix | 5 -- modules/network/bluetooth/default.nix | 10 --- .../network/browsers/librewolf/default.nix | 6 -- modules/network/networking/default.nix | 49 --------------- modules/network/syncthing/default.nix | 19 ------ modules/secrets/sops-nix/default.nix | 11 ---- modules/shell/fish/default.nix | 11 ---- modules/shell/xonsh/default.nix | 9 --- modules/system/default.nix | 40 ------------ modules/themeing/default.nix | 11 ---- modules/user/default.nix | 8 --- modules/window_managers/hyprland/default.nix | 11 ---- nixosModules/apps/default.nix | 11 ++++ .../apps/games/anime-launcher/default.nix | 26 ++++++++ nixosModules/apps/games/default.nix | 8 +++ nixosModules/apps/games/steam/default.nix | 15 +++++ nixosModules/apps/input-remapper/default.nix | 11 ++++ nixosModules/apps/librewolf/default.nix | 12 ++++ nixosModules/apps/shells/fish/default.nix | 15 +++++ nixosModules/apps/shells/xonsh/default.nix | 15 +++++ nixosModules/apps/syncthing/default.nix | 25 ++++++++ nixosModules/default.nix | 8 +++ nixosModules/services/default.nix | 12 ++++ nixosModules/services/graphics/default.nix | 9 +++ .../graphics/display_manager/default.nix | 23 +++++++ .../services/graphics/nvidia/default.nix | 28 +++++++++ .../graphics/wayland_compositors/default.nix | 17 ++++++ .../services/networking/bluetooth/default.nix | 16 +++++ nixosModules/services/networking/default.nix | 8 +++ .../services/networking/wireless/default.nix | 33 ++++++++++ nixosModules/services/pipewire/default.nix | 21 +++++++ nixosModules/services/polkit/default.nix | 14 +++++ nixosModules/services/sops-nix/default.nix | 20 ++++++ nixosModules/services/system/default.nix | 61 +++++++++++++++++++ systems/jibril/default.nix | 25 ++++++-- systems/onizuka/default.nix | 30 +++++++-- systems/shared/default.nix | 24 -------- 44 files changed, 455 insertions(+), 297 deletions(-) delete mode 100644 modules/audio/pipewire/default.nix delete mode 100644 modules/etc/anime-launcher/default.nix delete mode 100644 modules/etc/input-remapper/default.nix delete mode 100644 modules/etc/steam/default.nix delete mode 100644 modules/graphics/nvidia/default.nix delete mode 100644 modules/login/greetd/default.nix delete mode 100644 modules/login/polkit/default.nix delete mode 100644 modules/network/bluetooth/default.nix delete mode 100644 modules/network/browsers/librewolf/default.nix delete mode 100644 modules/network/networking/default.nix delete mode 100644 modules/network/syncthing/default.nix delete mode 100644 modules/secrets/sops-nix/default.nix delete mode 100644 modules/shell/fish/default.nix delete mode 100644 modules/shell/xonsh/default.nix delete mode 100644 modules/system/default.nix delete mode 100644 modules/themeing/default.nix delete mode 100644 modules/user/default.nix delete mode 100644 modules/window_managers/hyprland/default.nix create mode 100644 nixosModules/apps/default.nix create mode 100644 nixosModules/apps/games/anime-launcher/default.nix create mode 100644 nixosModules/apps/games/default.nix create mode 100644 nixosModules/apps/games/steam/default.nix create mode 100644 nixosModules/apps/input-remapper/default.nix create mode 100644 nixosModules/apps/librewolf/default.nix create mode 100644 nixosModules/apps/shells/fish/default.nix create mode 100644 nixosModules/apps/shells/xonsh/default.nix create mode 100644 nixosModules/apps/syncthing/default.nix create mode 100644 nixosModules/default.nix create mode 100644 nixosModules/services/default.nix create mode 100644 nixosModules/services/graphics/default.nix create mode 100644 nixosModules/services/graphics/display_manager/default.nix create mode 100644 nixosModules/services/graphics/nvidia/default.nix create mode 100644 nixosModules/services/graphics/wayland_compositors/default.nix create mode 100644 nixosModules/services/networking/bluetooth/default.nix create mode 100644 nixosModules/services/networking/default.nix create mode 100644 nixosModules/services/networking/wireless/default.nix create mode 100644 nixosModules/services/pipewire/default.nix create mode 100644 nixosModules/services/polkit/default.nix create mode 100644 nixosModules/services/sops-nix/default.nix create mode 100644 nixosModules/services/system/default.nix delete mode 100644 systems/shared/default.nix diff --git a/flake.nix b/flake.nix index bd59e11..4f8bfaf 100644 --- a/flake.nix +++ b/flake.nix @@ -16,7 +16,7 @@ specialArgs = { inherit inputs; }; system = "x86_64-linux"; modules = [ - ./systems/shared + ./nixosModules ] ++ extraModules; }; in diff --git a/modules/audio/pipewire/default.nix b/modules/audio/pipewire/default.nix deleted file mode 100644 index 3e55b02..0000000 --- a/modules/audio/pipewire/default.nix +++ /dev/null @@ -1,13 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - security.rtkit.enable = true; - - services.pipewire = { - enable = true; - wireplumber.enable = true; - alsa.enable = false; - alsa.support32Bit = false; - pulse.enable = true; - }; -} diff --git a/modules/etc/anime-launcher/default.nix b/modules/etc/anime-launcher/default.nix deleted file mode 100644 index 8633388..0000000 --- a/modules/etc/anime-launcher/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ inputs, pkgs, lib, ... }: - -{ - imports = [ inputs.aagl.nixosModules.default ]; - nix.settings = inputs.aagl.nixConfig; - - programs.honkers-railway-launcher.enable = true; -} diff --git a/modules/etc/input-remapper/default.nix b/modules/etc/input-remapper/default.nix deleted file mode 100644 index 3cf6a65..0000000 --- a/modules/etc/input-remapper/default.nix +++ /dev/null @@ -1,5 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - services.input-remapper.enable = true; -} diff --git a/modules/etc/steam/default.nix b/modules/etc/steam/default.nix deleted file mode 100644 index 192899c..0000000 --- a/modules/etc/steam/default.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - programs.steam = { - enable = true; - remotePlay.openFirewall = true; - dedicatedServer.openFirewall = true; - }; -} diff --git a/modules/graphics/nvidia/default.nix b/modules/graphics/nvidia/default.nix deleted file mode 100644 index 7e0e568..0000000 --- a/modules/graphics/nvidia/default.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - # Enable OpenGL - hardware.opengl = { - enable = true; - driSupport = true; - driSupport32Bit = true; - }; - - services.xserver.videoDrivers = ["nvidia"]; - - hardware.nvidia = { - modesetting.enable = true; - package = config.boot.kernelPackages.nvidiaPackages.stable; - }; - - environment.systemPackages = with pkgs; [ - nvidia-vaapi-driver - ]; -} diff --git a/modules/login/greetd/default.nix b/modules/login/greetd/default.nix deleted file mode 100644 index 23620f8..0000000 --- a/modules/login/greetd/default.nix +++ /dev/null @@ -1,17 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - services.greetd = { - enable = true; - package = pkgs.greetd.tuigreet; - settings = { - terminal = { - vt = 2; - }; - default_session = { - command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time --cmd Hyprland"; - user = "pan"; - }; - }; - }; -} diff --git a/modules/login/polkit/default.nix b/modules/login/polkit/default.nix deleted file mode 100644 index 5c0a462..0000000 --- a/modules/login/polkit/default.nix +++ /dev/null @@ -1,5 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - security.polkit.enable = true; -} diff --git a/modules/network/bluetooth/default.nix b/modules/network/bluetooth/default.nix deleted file mode 100644 index 739a9bd..0000000 --- a/modules/network/bluetooth/default.nix +++ /dev/null @@ -1,10 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - hardware.bluetooth.enable = true; - hardware.bluetooth.powerOnBoot = true; - services.blueman.enable = true; - environment.systemPackages = with pkgs; [ - blueman - ]; -} diff --git a/modules/network/browsers/librewolf/default.nix b/modules/network/browsers/librewolf/default.nix deleted file mode 100644 index 034c5eb..0000000 --- a/modules/network/browsers/librewolf/default.nix +++ /dev/null @@ -1,6 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - environment.variables.WEBBROWSER = "librewolf"; - environment.systemPackages = with pkgs; [ librewolf ]; -} diff --git a/modules/network/networking/default.nix b/modules/network/networking/default.nix deleted file mode 100644 index d778498..0000000 --- a/modules/network/networking/default.nix +++ /dev/null @@ -1,49 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - networking.wireless = { - enable = true; - userControlled = { - enable = true; - group = "network"; - }; - networks = { - "The Kabal 2.4" = { - pskRaw = "56302c1b1c7499f4a4f0e01cefe14b4393c5092420ebf71c68336cd084acd357"; - priority = 1; - }; - "WWUwireless-Secure" = { - auth = '' - key_mgmt=WPA-EAP - eap=PEAP - identity="langed@wwu.edu" - password="Slashed-Tidy4-Cubbyhole" - ''; - priority = 1; - }; - "Yellowsticky" = { - pskRaw = "8984d7e1e2f5bd9c3ccf92e429886bc64d40d42d4771ed5946556227afa4abf0"; - priority = 1; - }; - "Lange" = { - pskRaw = "bbbbf63e23747bc0ff36aed4c20dcee0221a6ccb2d2db07e4c64058e645e5f1e"; - priority = 1; - }; - "foofoo2" = { - pskRaw = "1269f8db0aec9d9c30bff6de9951f0ab2d18d7cea4dacd8bd253ebc237e73e2d"; - priority = 1; - }; - "OrbiWanKenobe" = { - pskRaw = "0128447a146d359c1224e558b0f4e3fc0a53b0b4a178334075b50f8d07e179d2"; - priority = 1; - }; - "Homura" = { - pskRaw = "dd77456e1df3f2c17bccc917a0e609684fa6d2ccb6a2e0fb122d50d243e0c87e"; - priority = 0; - }; - }; - }; - - - networking.enableIPv6 = false; -} diff --git a/modules/network/syncthing/default.nix b/modules/network/syncthing/default.nix deleted file mode 100644 index c5f9dab..0000000 --- a/modules/network/syncthing/default.nix +++ /dev/null @@ -1,19 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - services.syncthing = { - enable = true; - user = "pan"; - dataDir = "/home/pan/dox/Sync"; - configDir = "/home/pan/.config/syncthing"; - overrideFolders = true; - overrideDevices = true; - - settings = { - gui = { - user = "pan"; - password = "password"; - }; - }; - }; -} diff --git a/modules/secrets/sops-nix/default.nix b/modules/secrets/sops-nix/default.nix deleted file mode 100644 index 2c26d07..0000000 --- a/modules/secrets/sops-nix/default.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ inputs, pkgs, lib, ... }: -let rootPath = ./.; in -{ - imports = [ inputs.sops-nix.nixosModules.sops ]; - - sops = { - defaultSopsFile = rootPath + "secrets.yaml"; - defaultSopsFormat = "yaml"; - age.keyFile = "/home/pan/.config/sops/age/keys.txt"; - }; -} diff --git a/modules/shell/fish/default.nix b/modules/shell/fish/default.nix deleted file mode 100644 index 37eef00..0000000 --- a/modules/shell/fish/default.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - programs.fish.enable = true; - - users.defaultUserShell = pkgs.fish; - - environment.shells = with pkgs; [ fish ]; - - # environment.variables.NIX_BUILD_SHELL = "fish"; -} diff --git a/modules/shell/xonsh/default.nix b/modules/shell/xonsh/default.nix deleted file mode 100644 index 2c5904d..0000000 --- a/modules/shell/xonsh/default.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - programs.xonsh.enable = true; - - users.defaultUserShell = pkgs.xonsh; - - environment.shells = with pkgs; [ xonsh ]; -} diff --git a/modules/system/default.nix b/modules/system/default.nix deleted file mode 100644 index c0992ad..0000000 --- a/modules/system/default.nix +++ /dev/null @@ -1,40 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - # Use the systemd-boot EFI boot loader. - boot.kernelPackages = pkgs.linuxPackages_latest; - boot.loader.systemd-boot.enable = true; - boot.loader.timeout = 1; - boot.loader.efi.canTouchEfiVariables = true; - security.polkit.enable = true; - - time.timeZone = "America/Los_Angeles"; - - i18n.defaultLocale = "en_US.UTF-8"; - - # "Essential" Packages - environment.systemPackages = with pkgs; [ - git - neovim - nnn - xdg-user-dirs - ]; - - # XDG Compliance - xdg.portal.config.common.default = "*"; - environment.sessionVariables = rec { - XDG_CONFIG_HOME = "\${HOME}/.config"; - XDG_CACHE_HOME = "\${HOME}/.cache"; - XDG_STATE_HOME = "\${HOME}/.local/state"; - XDG_DATA_HOME = "\${HOME}/.local/share"; - XDG_BIN_HOME = "\${HOME}/.local/bin"; - PATH = [ - "\${HOME}/prog/scripts" - ]; - }; - - users.groups = { - wheel = { }; - network = { }; - }; -} diff --git a/modules/themeing/default.nix b/modules/themeing/default.nix deleted file mode 100644 index ad298d1..0000000 --- a/modules/themeing/default.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - fonts = { - enableDefaultPackages = true; - packages = with pkgs; [ - cascadia-code - source-han-sans # Pan-CJK font - ]; - }; -} diff --git a/modules/user/default.nix b/modules/user/default.nix deleted file mode 100644 index 58a4426..0000000 --- a/modules/user/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - users.users.pan = { - isNormalUser = true; - extraGroups = [ "wheel" "network" ]; - }; -} diff --git a/modules/window_managers/hyprland/default.nix b/modules/window_managers/hyprland/default.nix deleted file mode 100644 index 72babdb..0000000 --- a/modules/window_managers/hyprland/default.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ inputs, pkgs, lib, ... }: - -{ - imports = [ inputs.hyprland.nixosModules.default ]; - programs.hyprland.enable = true; - nix.settings = { - substituters = [ "https://hyprland.cachix.org" ]; - trusted-public-keys = [ "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" ]; - experimental-features = [ "nix-command" "flakes" ]; - }; -} diff --git a/nixosModules/apps/default.nix b/nixosModules/apps/default.nix new file mode 100644 index 0000000..b851878 --- /dev/null +++ b/nixosModules/apps/default.nix @@ -0,0 +1,11 @@ +{ config, pkgs, lib, ... }: + +{ + import = [ + ./games + ./input-remapper + ./librewolf + ./shells + ./syncthing + ]; +} diff --git a/nixosModules/apps/games/anime-launcher/default.nix b/nixosModules/apps/games/anime-launcher/default.nix new file mode 100644 index 0000000..ef10e49 --- /dev/null +++ b/nixosModules/apps/games/anime-launcher/default.nix @@ -0,0 +1,26 @@ +{ config, inputs, pkgs, lib, ... }: + +{ + options = { + aagl.enable = lib.mkEnableOption + "Enables another anime game launcher settings"; + aagl.honkai-rail = lib.mkEnableOption + "Enables honkai star rail"; + aagl.genshin = lib.mkEnableOption + "Enables genshin impact"; + aagl.honkai-3rd = lib.mkEnableOption + "Enables honkai 3rd impact"; + }; + + config = lib.mkIf config.aagl.enable { + imports = [ inputs.aagl.nixosModules.default ]; + nix.settings = inputs.aagl.nixConfig; + + programs.honkers-railway-launcher.enable = + lib.mkIf config.aagl.honkai-rail true; + programs.anime-game-launcher.enable = + lib.mkIf config.aagl.genshin true; + programs.honkers-launcher.enable = + lib.mkIf config.aagl.honkai-3rd true; + }; +} diff --git a/nixosModules/apps/games/default.nix b/nixosModules/apps/games/default.nix new file mode 100644 index 0000000..3d6b374 --- /dev/null +++ b/nixosModules/apps/games/default.nix @@ -0,0 +1,8 @@ +{ config, pkgs, lib, ... }: + +{ + import = [ + ./anime-launcher + ./steam + ]; +} diff --git a/nixosModules/apps/games/steam/default.nix b/nixosModules/apps/games/steam/default.nix new file mode 100644 index 0000000..9ae522a --- /dev/null +++ b/nixosModules/apps/games/steam/default.nix @@ -0,0 +1,15 @@ +{ config, pkgs, lib, ... }: + +{ + options = { + steam.enable = lib.mkEnableOption "Enables steam"; + }; + + config = lib.mkIf config.steam.enable { + programs.steam = { + enable = true; + remotePlay.openFirewall = true; + dedicatedServer.openFirewall = true; + }; + }; +} diff --git a/nixosModules/apps/input-remapper/default.nix b/nixosModules/apps/input-remapper/default.nix new file mode 100644 index 0000000..0646dfc --- /dev/null +++ b/nixosModules/apps/input-remapper/default.nix @@ -0,0 +1,11 @@ +{ config, pkgs, lib, ... }: + +{ + options = { + input-remapper.enable = lib.mkEnableOption "Enables input-remapper"; + }; + + config = lib.mkIf config.input-remapper.enable { + services.input-remapper.enable = true; + }; +} diff --git a/nixosModules/apps/librewolf/default.nix b/nixosModules/apps/librewolf/default.nix new file mode 100644 index 0000000..f0d4406 --- /dev/null +++ b/nixosModules/apps/librewolf/default.nix @@ -0,0 +1,12 @@ +{ config, pkgs, lib, ... }: + +{ + options = { + librewolf.enable = lib.mkEnableOption "Enables librewolf"; + }; + + config = lib.mkIf config.librewolf.enable { + environment.variables.BROWSER = "librewolf"; + environment.systemPackages = with pkgs; [ librewolf ]; + }; +} diff --git a/nixosModules/apps/shells/fish/default.nix b/nixosModules/apps/shells/fish/default.nix new file mode 100644 index 0000000..d4885f9 --- /dev/null +++ b/nixosModules/apps/shells/fish/default.nix @@ -0,0 +1,15 @@ +{ config, pkgs, lib, ... }: + +{ + options = { + fish.enable = lib.mkEnableOption "Enables fish"; + fish.setDefault = lib.mkEnableOption + "Sets fish as the default user's shell"; + }; + + config = lib.mkIf config.fish.enable { + programs.fish.enable = true; + users.users.defaultUser.shell = lib.mkIf config.fish.setDefault pkgs.fish; + environment.shells = with pkgs; [ fish ]; + }; +} diff --git a/nixosModules/apps/shells/xonsh/default.nix b/nixosModules/apps/shells/xonsh/default.nix new file mode 100644 index 0000000..4842ba0 --- /dev/null +++ b/nixosModules/apps/shells/xonsh/default.nix @@ -0,0 +1,15 @@ +{ config, pkgs, lib, ... }: + +{ + options = { + xonsh.enable = lib.mkEnableOption "Enables xonsh"; + xonsh.setDefault = lib.mkEnableOption + "Sets xonsh as the default user's shell"; + }; + + config = lib.mkIf config.xonsh.enable { + programs.xonsh.enable = true; + users.users.defaultUser.shell = lib.mkIf config.fish.setDefault pkgs.xonsh; + environment.shells = with pkgs; [ xonsh ]; + }; +} diff --git a/nixosModules/apps/syncthing/default.nix b/nixosModules/apps/syncthing/default.nix new file mode 100644 index 0000000..69cea88 --- /dev/null +++ b/nixosModules/apps/syncthing/default.nix @@ -0,0 +1,25 @@ +{ config, pkgs, lib, ... }: + +{ + options = { + syncthing.enable = lib.mkEnableOption "Enables syncthing"; + }; + + config = lib.mkIf config.syncthing.enable { + services.syncthing = { + enable = true; + user = config.user.name; + dataDir = "/home/" + config.user.name + "/dox/Sync"; + configDir = "/home/" + config.user.name + "/.config/syncthing"; + overrideFolders = true; + overrideDevices = true; + + settings = { + gui = { + user = config.user.name; + password = "password"; + }; + }; + }; + }; +} diff --git a/nixosModules/default.nix b/nixosModules/default.nix new file mode 100644 index 0000000..e243737 --- /dev/null +++ b/nixosModules/default.nix @@ -0,0 +1,8 @@ +{ config, pkgs, lib, ... }: + +{ + import = [ + ./apps + ./services + ]; +} diff --git a/nixosModules/services/default.nix b/nixosModules/services/default.nix new file mode 100644 index 0000000..e797297 --- /dev/null +++ b/nixosModules/services/default.nix @@ -0,0 +1,12 @@ +{ config, pkgs, lib, ... }: + +{ + import = [ + ./graphics + ./networking + ./pipewire + ./polkit + ./sops-nix + ./system + ]; +} diff --git a/nixosModules/services/graphics/default.nix b/nixosModules/services/graphics/default.nix new file mode 100644 index 0000000..76e68bf --- /dev/null +++ b/nixosModules/services/graphics/default.nix @@ -0,0 +1,9 @@ +{ config, pkgs, lib, ... }: + +{ + imports = [ + ./display_manager + ./nvidia + ./wayland_compositors + ]; +} diff --git a/nixosModules/services/graphics/display_manager/default.nix b/nixosModules/services/graphics/display_manager/default.nix new file mode 100644 index 0000000..8e0c4c1 --- /dev/null +++ b/nixosModules/services/graphics/display_manager/default.nix @@ -0,0 +1,23 @@ +{ config, pkgs, lib, ... }: + +{ + options = { + tuigreet.enable = lib.mkEnableOption "enables tuigreet with greetd"; + }; + + config = lib.mkIf config.tuigreet.enable { + services.greetd = { + enable = true; + package = pkgs.greetd.tuigreet; + settings = { + terminal = { + vt = 2; + }; + default_session = lib.mkIf config.hyprland.enable { + command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time --cmd Hyprland"; + user = config.user.name; + }; + }; + }; + }; +} diff --git a/nixosModules/services/graphics/nvidia/default.nix b/nixosModules/services/graphics/nvidia/default.nix new file mode 100644 index 0000000..ca25c5a --- /dev/null +++ b/nixosModules/services/graphics/nvidia/default.nix @@ -0,0 +1,28 @@ +{ config, pkgs, lib, ... }: + +{ + options = { + nvidia.enable = lib.mkEnableOption + "Enables nvidia with proprietary drivers"; + }; + + config = lib.mkIf config.nvidia.enable { + # Enable OpenGL + hardware.opengl = { + enable = true; + driSupport = true; + driSupport32Bit = true; + }; + + services.xserver.videoDrivers = ["nvidia"]; + + hardware.nvidia = { + modesetting.enable = true; + package = config.boot.kernelPackages.nvidiaPackages.stable; + }; + + environment.systemPackages = with pkgs; [ + nvidia-vaapi-driver + ]; + }; +} diff --git a/nixosModules/services/graphics/wayland_compositors/default.nix b/nixosModules/services/graphics/wayland_compositors/default.nix new file mode 100644 index 0000000..ae7dca2 --- /dev/null +++ b/nixosModules/services/graphics/wayland_compositors/default.nix @@ -0,0 +1,17 @@ +{ inputs, config, pkgs, lib, ... }: + +{ + options = { + hyprland.enable = lib.mkEnableOption "Enables hyprland"; + }; + + config = lib.mkIf config.hyprland.enable { + imports = [ inputs.hyprland.nixosModules.default ]; + programs.hyprland.enable = true; + nix.settings = { + substituters = [ "https://hyprland.cachix.org" ]; + trusted-public-keys = [ "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" ]; + experimental-features = [ "nix-command" "flakes" ]; + }; + }; +} diff --git a/nixosModules/services/networking/bluetooth/default.nix b/nixosModules/services/networking/bluetooth/default.nix new file mode 100644 index 0000000..30bed32 --- /dev/null +++ b/nixosModules/services/networking/bluetooth/default.nix @@ -0,0 +1,16 @@ +{ config, pkgs, lib, ... }: + +{ + options = { + bluetooth.enable = lib.mkEnableOption "Enables Bluetooth with blueman"; + }; + + config = lib.mkIf config.bluetooth.enable { + hardware.bluetooth.enable = true; + hardware.bluetooth.powerOnBoot = true; + services.blueman.enable = true; + environment.systemPackages = with pkgs; [ + blueman + ]; + }; +} diff --git a/nixosModules/services/networking/default.nix b/nixosModules/services/networking/default.nix new file mode 100644 index 0000000..867600d --- /dev/null +++ b/nixosModules/services/networking/default.nix @@ -0,0 +1,8 @@ +{ config, pkgs, lib, ... }: + +{ + import = [ + ./bluetooth + ./wireless + ]; +} diff --git a/nixosModules/services/networking/wireless/default.nix b/nixosModules/services/networking/wireless/default.nix new file mode 100644 index 0000000..972d057 --- /dev/null +++ b/nixosModules/services/networking/wireless/default.nix @@ -0,0 +1,33 @@ +{ config, pkgs, lib, ... }: + +{ + options = { + wireless.enable = lib.mkEnableOption "Enables wireless"; + }; + + config = lib.mkIf confi.wireless.enable { + networking.wireless = { + enable = true; + userControlled = { + enable = true; + group = "network"; + }; + networks = { + "foofoo2" = { + pskRaw = "1269f8db0aec9d9c30bff6de9951f0ab2d18d7cea4dacd8bd253ebc237e73e2d"; + priority = 1; + }; + "OrbiWanKenobe" = { + pskRaw = "0128447a146d359c1224e558b0f4e3fc0a53b0b4a178334075b50f8d07e179d2"; + priority = 1; + }; + "Homura" = { + pskRaw = "dd77456e1df3f2c17bccc917a0e609684fa6d2ccb6a2e0fb122d50d243e0c87e"; + priority = 0; + }; + }; + }; + + networking.enableIPv6 = false; + }; +} diff --git a/nixosModules/services/pipewire/default.nix b/nixosModules/services/pipewire/default.nix new file mode 100644 index 0000000..0e22758 --- /dev/null +++ b/nixosModules/services/pipewire/default.nix @@ -0,0 +1,21 @@ +{ config, pkgs, lib, ... }: + +{ + options = { + pipewire.enable = lib.mkEnableOption "Enables pipewire and pulsemixer"; + }; + + config = lib.mkIf config.pipewire.enable { + security.rtkit.enable = true; + services.pipewire = { + enable = true; + wireplumber.enable = true; + alsa.enable = false; + alsa.support32Bit = false; + pulse.enable = true; + environment.systemPackages = with pkgs; [ + pulsemixer + ]; + }; + }; +} diff --git a/nixosModules/services/polkit/default.nix b/nixosModules/services/polkit/default.nix new file mode 100644 index 0000000..917e9bc --- /dev/null +++ b/nixosModules/services/polkit/default.nix @@ -0,0 +1,14 @@ +{ config, pkgs, lib, ... }: + +{ + options = { + polkit.enable = lib.mkEnableOption "Enables polkit with kde handler"; + }; + + config = lib.mkIf config.polkit.enable { + security.polkit.enable = true; + environment.systemPackages = with pkgs; [ + polkit-kde-agent + ]; + } +} diff --git a/nixosModules/services/sops-nix/default.nix b/nixosModules/services/sops-nix/default.nix new file mode 100644 index 0000000..65d5747 --- /dev/null +++ b/nixosModules/services/sops-nix/default.nix @@ -0,0 +1,20 @@ +{ inputs, config, pkgs, lib, ... }: +let rootPath = ./.; in +{ + options = { + sops-nix.enable = lib.mkEnableOption "Enables nix-sops for secret management"; + }; + + config = lib.mkIf config.sops-nix.enable { + imports = [ inputs.sops-nix.nixosModules.sops ]; + + sops = { + defaultSopsFile = rootPath + "secrets.yaml"; + defaultSopsFormat = "yaml"; + age.keyFile = "/home/" + config.user.name + ".config/sops/age/keys.txt"; + }; + environment.systemPackages = with pkgs; [ + sops + ]; + }; +} diff --git a/nixosModules/services/system/default.nix b/nixosModules/services/system/default.nix new file mode 100644 index 0000000..eec6490 --- /dev/null +++ b/nixosModules/services/system/default.nix @@ -0,0 +1,61 @@ +{ config, pkgs, lib, ... }: + +{ + options = { + user.name = lib.mkOption { default = "pan"; }; + user.timezone = lib.mkOption { default = "America/Los_Angeles"; }; + font.extraFonts = lib.mkOption { default = []; }; + }; + + config = { + # Use the systemd-boot EFI boot loader. + boot.kernelPackages = pkgs.linuxPackages_latest; + boot.loader.systemd-boot.enable = true; + boot.loader.timeout = 1; + boot.loader.efi.canTouchEfiVariables = true; + + time.timeZone = config.user.timezone; + + i18n.defaultLocale = "en_US.UTF-8"; + + # "Essential" Packages + environment.systemPackages = with pkgs; [ + git + neovim + nnn + xdg-user-dirs + ]; + + # XDG Compliance + xdg.portal.config.common.default = "*"; + environment.sessionVariables = rec { + XDG_CONFIG_HOME = "\${HOME}/.config"; + XDG_CACHE_HOME = "\${HOME}/.cache"; + XDG_STATE_HOME = "\${HOME}/.local/state"; + XDG_DATA_HOME = "\${HOME}/.local/share"; + XDG_BIN_HOME = "\${HOME}/.local/bin"; + PATH = [ + "\${HOME}/prog/scripts" + ]; + }; + + users.groups = { + wheel = { }; + network = { }; + }; + + users.users.defaultUser = { + name = config.user.name; + isNormalUser = true; + extraGroups = [ "wheel" "network" ]; + }; + + fonts = { + enableDefaultPackages = true; + packages = with pkgs; [ + cascadia-code + source-han-sans # Pan-CJK font + ] ++ config.system.extraFonts; + }; + }; +} diff --git a/systems/jibril/default.nix b/systems/jibril/default.nix index bd3a34e..8a342f8 100644 --- a/systems/jibril/default.nix +++ b/systems/jibril/default.nix @@ -1,11 +1,28 @@ { config, pkgs, lib, ... }: { - networking.hostName = "jibril"; imports = [ ./hardware.nix - - ../../modules/network/bluetooth - ../../modules/network/networking ]; + networking.hostName = "jibril"; + nix.package = pkgs.nixUnstable; + nixpkgs.config.allowUnfree = true; + system.stateVersion = "23.05"; + + config = { + pipewire.enable = true; + polkit.enable = true; + bluetooth.enable = true; + wireless.enable = true; + + user.name = "pan"; + user.timezone = "America/Los_Angeles"; + + tuigreet.enable = true; + hyprland.enable = true; + + librewolf.enable = true; + xonsh.enable = true; + syncthing.enable = true; + }; } diff --git a/systems/onizuka/default.nix b/systems/onizuka/default.nix index 8156468..d602924 100644 --- a/systems/onizuka/default.nix +++ b/systems/onizuka/default.nix @@ -1,12 +1,32 @@ { config, pkgs, lib, ... }: { - networking.hostName = "onizuka"; imports = [ ./hardware.nix - ../../modules/graphics/nvidia - ../../modules/etc/steam - ../../modules/etc/anime-launcher - ../../modules/etc/input-remapper ]; + networking.hostName = "onizuka"; + nix.package = pkgs.nixUnstable; + nixpkgs.config.allowUnfree = true; + system.stateVersion = "23.05"; + + config = { + nvidia.enable = true; + pipewire.enable = true; + polkit.enable = true; + + user.name = "pan"; + user.timezone = "America/Los_Angeles"; + + tuigreet.enable = true; + hyprland.enable = true; + + librewolf.enable = true; + xonsh.enable = true; + syncthing.enable = true; + + steam.enable = true; + aagl.enable = true; + aagl.honkai-rail = true; + input-remapper.enable = true; + }; } diff --git a/systems/shared/default.nix b/systems/shared/default.nix deleted file mode 100644 index 70e2e0c..0000000 --- a/systems/shared/default.nix +++ /dev/null @@ -1,24 +0,0 @@ -{ config, pkgs, ... }: -{ - nix.package = pkgs.nixUnstable; - imports = - [ - # System essentials (boot, lang, hostname, ...) - ../../modules/audio/pipewire - ../../modules/login/polkit - ../../modules/system - ../../modules/user - - ../../modules/shell/xonsh - ../../modules/network/browsers/librewolf - ../../modules/network/syncthing - - ../../modules/themeing - ../../modules/login/greetd - ../../modules/window_managers/hyprland - ]; - - nixpkgs.config.allowUnfree = true; - - system.stateVersion = "23.05"; -} From 73142b1bdff9b46af6a25c2668481081674439db Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sun, 7 Apr 2024 17:14:00 -0700 Subject: [PATCH 097/412] Fix imports in refactor --- nixosModules/apps/default.nix | 2 +- nixosModules/apps/games/default.nix | 2 +- nixosModules/apps/shells/default.nix | 8 ++++++ nixosModules/default.nix | 2 +- nixosModules/services/default.nix | 2 +- nixosModules/services/networking/default.nix | 2 +- systems/jibril/default.nix | 24 +++++++--------- systems/onizuka/default.nix | 30 +++++++++----------- 8 files changed, 38 insertions(+), 34 deletions(-) create mode 100644 nixosModules/apps/shells/default.nix diff --git a/nixosModules/apps/default.nix b/nixosModules/apps/default.nix index b851878..8b3447d 100644 --- a/nixosModules/apps/default.nix +++ b/nixosModules/apps/default.nix @@ -1,7 +1,7 @@ { config, pkgs, lib, ... }: { - import = [ + imports = [ ./games ./input-remapper ./librewolf diff --git a/nixosModules/apps/games/default.nix b/nixosModules/apps/games/default.nix index 3d6b374..905db78 100644 --- a/nixosModules/apps/games/default.nix +++ b/nixosModules/apps/games/default.nix @@ -1,7 +1,7 @@ { config, pkgs, lib, ... }: { - import = [ + imports = [ ./anime-launcher ./steam ]; diff --git a/nixosModules/apps/shells/default.nix b/nixosModules/apps/shells/default.nix new file mode 100644 index 0000000..9169af8 --- /dev/null +++ b/nixosModules/apps/shells/default.nix @@ -0,0 +1,8 @@ +{ config, pkgs, lib, ... }: + +{ + imports = [ + ./fish + ./xonsh + ]; +} diff --git a/nixosModules/default.nix b/nixosModules/default.nix index e243737..a1d9d7b 100644 --- a/nixosModules/default.nix +++ b/nixosModules/default.nix @@ -1,7 +1,7 @@ { config, pkgs, lib, ... }: { - import = [ + imports = [ ./apps ./services ]; diff --git a/nixosModules/services/default.nix b/nixosModules/services/default.nix index e797297..128d32b 100644 --- a/nixosModules/services/default.nix +++ b/nixosModules/services/default.nix @@ -1,7 +1,7 @@ { config, pkgs, lib, ... }: { - import = [ + imports = [ ./graphics ./networking ./pipewire diff --git a/nixosModules/services/networking/default.nix b/nixosModules/services/networking/default.nix index 867600d..0da82d9 100644 --- a/nixosModules/services/networking/default.nix +++ b/nixosModules/services/networking/default.nix @@ -1,7 +1,7 @@ { config, pkgs, lib, ... }: { - import = [ + imports = [ ./bluetooth ./wireless ]; diff --git a/systems/jibril/default.nix b/systems/jibril/default.nix index 8a342f8..8024813 100644 --- a/systems/jibril/default.nix +++ b/systems/jibril/default.nix @@ -9,20 +9,18 @@ nixpkgs.config.allowUnfree = true; system.stateVersion = "23.05"; - config = { - pipewire.enable = true; - polkit.enable = true; - bluetooth.enable = true; - wireless.enable = true; + pipewire.enable = true; + polkit.enable = true; + bluetooth.enable = true; + wireless.enable = true; - user.name = "pan"; - user.timezone = "America/Los_Angeles"; + user.name = "pan"; + user.timezone = "America/Los_Angeles"; - tuigreet.enable = true; - hyprland.enable = true; + tuigreet.enable = true; + hyprland.enable = true; - librewolf.enable = true; - xonsh.enable = true; - syncthing.enable = true; - }; + librewolf.enable = true; + xonsh.enable = true; + syncthing.enable = true; } diff --git a/systems/onizuka/default.nix b/systems/onizuka/default.nix index d602924..9a85e4a 100644 --- a/systems/onizuka/default.nix +++ b/systems/onizuka/default.nix @@ -9,24 +9,22 @@ nixpkgs.config.allowUnfree = true; system.stateVersion = "23.05"; - config = { - nvidia.enable = true; - pipewire.enable = true; - polkit.enable = true; + nvidia.enable = true; + pipewire.enable = true; + polkit.enable = true; - user.name = "pan"; - user.timezone = "America/Los_Angeles"; + user.name = "pan"; + user.timezone = "America/Los_Angeles"; - tuigreet.enable = true; - hyprland.enable = true; + tuigreet.enable = true; + hyprland.enable = true; - librewolf.enable = true; - xonsh.enable = true; - syncthing.enable = true; + librewolf.enable = true; + xonsh.enable = true; + syncthing.enable = true; - steam.enable = true; - aagl.enable = true; - aagl.honkai-rail = true; - input-remapper.enable = true; - }; + steam.enable = true; + aagl.enable = true; + aagl.honkai-rail = true; + input-remapper.enable = true; } From 2056fe95aab29b77659e7452f6e1ad8c4f501a14 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sun, 7 Apr 2024 17:14:00 -0700 Subject: [PATCH 098/412] Fix imports in refactor --- nixosModules/apps/default.nix | 2 +- nixosModules/apps/games/default.nix | 2 +- nixosModules/apps/shells/default.nix | 8 ++++++ nixosModules/default.nix | 2 +- nixosModules/services/default.nix | 2 +- nixosModules/services/networking/default.nix | 2 +- systems/jibril/default.nix | 24 +++++++--------- systems/onizuka/default.nix | 30 +++++++++----------- 8 files changed, 38 insertions(+), 34 deletions(-) create mode 100644 nixosModules/apps/shells/default.nix diff --git a/nixosModules/apps/default.nix b/nixosModules/apps/default.nix index b851878..8b3447d 100644 --- a/nixosModules/apps/default.nix +++ b/nixosModules/apps/default.nix @@ -1,7 +1,7 @@ { config, pkgs, lib, ... }: { - import = [ + imports = [ ./games ./input-remapper ./librewolf diff --git a/nixosModules/apps/games/default.nix b/nixosModules/apps/games/default.nix index 3d6b374..905db78 100644 --- a/nixosModules/apps/games/default.nix +++ b/nixosModules/apps/games/default.nix @@ -1,7 +1,7 @@ { config, pkgs, lib, ... }: { - import = [ + imports = [ ./anime-launcher ./steam ]; diff --git a/nixosModules/apps/shells/default.nix b/nixosModules/apps/shells/default.nix new file mode 100644 index 0000000..9169af8 --- /dev/null +++ b/nixosModules/apps/shells/default.nix @@ -0,0 +1,8 @@ +{ config, pkgs, lib, ... }: + +{ + imports = [ + ./fish + ./xonsh + ]; +} diff --git a/nixosModules/default.nix b/nixosModules/default.nix index e243737..a1d9d7b 100644 --- a/nixosModules/default.nix +++ b/nixosModules/default.nix @@ -1,7 +1,7 @@ { config, pkgs, lib, ... }: { - import = [ + imports = [ ./apps ./services ]; diff --git a/nixosModules/services/default.nix b/nixosModules/services/default.nix index e797297..128d32b 100644 --- a/nixosModules/services/default.nix +++ b/nixosModules/services/default.nix @@ -1,7 +1,7 @@ { config, pkgs, lib, ... }: { - import = [ + imports = [ ./graphics ./networking ./pipewire diff --git a/nixosModules/services/networking/default.nix b/nixosModules/services/networking/default.nix index 867600d..0da82d9 100644 --- a/nixosModules/services/networking/default.nix +++ b/nixosModules/services/networking/default.nix @@ -1,7 +1,7 @@ { config, pkgs, lib, ... }: { - import = [ + imports = [ ./bluetooth ./wireless ]; diff --git a/systems/jibril/default.nix b/systems/jibril/default.nix index 8a342f8..8024813 100644 --- a/systems/jibril/default.nix +++ b/systems/jibril/default.nix @@ -9,20 +9,18 @@ nixpkgs.config.allowUnfree = true; system.stateVersion = "23.05"; - config = { - pipewire.enable = true; - polkit.enable = true; - bluetooth.enable = true; - wireless.enable = true; + pipewire.enable = true; + polkit.enable = true; + bluetooth.enable = true; + wireless.enable = true; - user.name = "pan"; - user.timezone = "America/Los_Angeles"; + user.name = "pan"; + user.timezone = "America/Los_Angeles"; - tuigreet.enable = true; - hyprland.enable = true; + tuigreet.enable = true; + hyprland.enable = true; - librewolf.enable = true; - xonsh.enable = true; - syncthing.enable = true; - }; + librewolf.enable = true; + xonsh.enable = true; + syncthing.enable = true; } diff --git a/systems/onizuka/default.nix b/systems/onizuka/default.nix index d602924..9a85e4a 100644 --- a/systems/onizuka/default.nix +++ b/systems/onizuka/default.nix @@ -9,24 +9,22 @@ nixpkgs.config.allowUnfree = true; system.stateVersion = "23.05"; - config = { - nvidia.enable = true; - pipewire.enable = true; - polkit.enable = true; + nvidia.enable = true; + pipewire.enable = true; + polkit.enable = true; - user.name = "pan"; - user.timezone = "America/Los_Angeles"; + user.name = "pan"; + user.timezone = "America/Los_Angeles"; - tuigreet.enable = true; - hyprland.enable = true; + tuigreet.enable = true; + hyprland.enable = true; - librewolf.enable = true; - xonsh.enable = true; - syncthing.enable = true; + librewolf.enable = true; + xonsh.enable = true; + syncthing.enable = true; - steam.enable = true; - aagl.enable = true; - aagl.honkai-rail = true; - input-remapper.enable = true; - }; + steam.enable = true; + aagl.enable = true; + aagl.honkai-rail = true; + input-remapper.enable = true; } From a43df0207640960e430a13ab9299fc934d736eac Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 9 Apr 2024 00:00:42 -0700 Subject: [PATCH 099/412] Fix errors so system builds --- flake.lock | 76 ++++++------------- flake.nix | 11 +-- .../apps/games/anime-launcher/default.nix | 3 +- .../graphics/wayland_compositors/default.nix | 6 +- .../services/networking/wireless/default.nix | 2 +- nixosModules/services/pipewire/default.nix | 6 +- nixosModules/services/polkit/default.nix | 2 +- nixosModules/services/sops-nix/default.nix | 3 +- nixosModules/services/system/default.nix | 2 +- 9 files changed, 45 insertions(+), 66 deletions(-) diff --git a/flake.lock b/flake.lock index 54d6c12..b45cc4b 100644 --- a/flake.lock +++ b/flake.lock @@ -53,11 +53,11 @@ ] }, "locked": { - "lastModified": 1712339458, - "narHash": "sha256-j8pv3tL2EFLGuvFoO64dHWD8YzNvD77hRb4EEx5ADgE=", + "lastModified": 1712434681, + "narHash": "sha256-qwmR2p1oc48Bj7gUDvb1oGL19Rjs2PmEmk4ChV01A5o=", "owner": "hyprwm", "repo": "hyprcursor", - "rev": "981b6617822dadc40246a6c70194d02dfc12e4c6", + "rev": "818d8c4b69e0997483d60b75f701fe14b561a7a3", "type": "github" }, "original": { @@ -71,17 +71,19 @@ "hyprcursor": "hyprcursor", "hyprland-protocols": "hyprland-protocols", "hyprlang": "hyprlang", - "nixpkgs": "nixpkgs", + "nixpkgs": [ + "nixpkgs" + ], "systems": "systems", "wlroots": "wlroots", "xdph": "xdph" }, "locked": { - "lastModified": 1712457111, - "narHash": "sha256-hTRMWHl49SYfui2W3qCq790MHnX8JTBfYQcxgwjbQ0g=", + "lastModified": 1712635734, + "narHash": "sha256-x4vfyFFVh8X2Y84gKkhUqeM92u/2hpkD8lx9RAscqFw=", "owner": "hyprwm", "repo": "Hyprland", - "rev": "f2a848cbcc41f29fb62ee67aef95136ae1a650da", + "rev": "d0d1ba5918206f16128e56988dd4db5d6d143338", "type": "github" }, "original": { @@ -142,27 +144,26 @@ }, "nixpkgs": { "locked": { - "lastModified": 1712163089, - "narHash": "sha256-Um+8kTIrC19vD4/lUCN9/cU9kcOsD1O1m+axJqQPyMM=", + "lastModified": 1712439257, + "narHash": "sha256-aSpiNepFOMk9932HOax0XwNxbA38GOUVOiXfUVPOrck=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "fd281bd6b7d3e32ddfa399853946f782553163b5", + "rev": "ff0dbd94265ac470dda06a657d5fe49de93b4599", "type": "github" }, "original": { - "owner": "NixOS", + "id": "nixpkgs", "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" + "type": "indirect" } }, "nixpkgs-stable": { "locked": { - "lastModified": 1712310679, - "narHash": "sha256-XgC/a/giEeNkhme/AV1ToipoZ/IVm1MV2ntiK4Tm+pw=", + "lastModified": 1712437997, + "narHash": "sha256-g0whLLwRvgO2FsyhY8fNk+TWenS3jg5UdlWL4uqgFeo=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "72da83d9515b43550436891f538ff41d68eecc7f", + "rev": "e38d7cb66ea4f7a0eb6681920615dfcc30fc2920", "type": "github" }, "original": { @@ -187,57 +188,28 @@ "type": "github" } }, - "nixpkgs_2": { - "locked": { - "lastModified": 1712163089, - "narHash": "sha256-Um+8kTIrC19vD4/lUCN9/cU9kcOsD1O1m+axJqQPyMM=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "fd281bd6b7d3e32ddfa399853946f782553163b5", - "type": "github" - }, - "original": { - "id": "nixpkgs", - "ref": "nixos-unstable", - "type": "indirect" - } - }, - "nixpkgs_3": { - "locked": { - "lastModified": 1712420723, - "narHash": "sha256-VnG0Eu394Ga2FCe8Q66m6OEQF8iAqjDYsjmtl+N2omk=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "9e7f26f82acb057498335362905fde6fea4ca50a", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixpkgs-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, "root": { "inputs": { "aagl": "aagl", "hyprland": "hyprland", - "nixpkgs": "nixpkgs_2", + "nixpkgs": "nixpkgs", "nixpkgs-stable": "nixpkgs-stable", "sops-nix": "sops-nix" } }, "sops-nix": { "inputs": { - "nixpkgs": "nixpkgs_3", + "nixpkgs": [ + "nixpkgs" + ], "nixpkgs-stable": "nixpkgs-stable_2" }, "locked": { - "lastModified": 1712458908, - "narHash": "sha256-DMgBS+jNHDg8z3g9GkwqL8xTKXCRQ/0FGsAyrniVonc=", + "lastModified": 1712617241, + "narHash": "sha256-a4hbls4vlLRMciv62YrYT/Xs/3Cubce8WFHPUDWwzf8=", "owner": "Mic92", "repo": "sops-nix", - "rev": "39191e8e6265b106c9a2ba0cfd3a4dafe98a31c6", + "rev": "538c114cfdf1f0458f507087b1dcf018ce1c0c4c", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 4f8bfaf..8fcf762 100644 --- a/flake.nix +++ b/flake.nix @@ -2,15 +2,16 @@ inputs = { nixpkgs.url = "nixpkgs/nixos-unstable"; nixpkgs-stable.url = "nixpkgs/nixos-23.11"; + hyprland.url = "github:hyprwm/Hyprland"; - aagl = { - url = "github:ezKEa/aagl-gtk-on-nix"; - inputs.nixpkgs.follows = "nixpkgs-stable"; - }; + hyprland.inputs.nixpkgs.follows = "nixpkgs"; sops-nix.url = "github:Mic92/sops-nix"; + sops-nix.inputs.nixpkgs.follows = "nixpkgs"; + aagl.url = "github:ezKEa/aagl-gtk-on-nix"; + aagl.inputs.nixpkgs.follows = "nixpkgs-stable"; }; - outputs = { self, nixpkgs, hyprland, aagl, sops-nix, ... }@inputs: + outputs = { self, nixpkgs, ... }@inputs: let defaultConfig = extraModules: nixpkgs.lib.nixosSystem { specialArgs = { inherit inputs; }; diff --git a/nixosModules/apps/games/anime-launcher/default.nix b/nixosModules/apps/games/anime-launcher/default.nix index ef10e49..bdf76d9 100644 --- a/nixosModules/apps/games/anime-launcher/default.nix +++ b/nixosModules/apps/games/anime-launcher/default.nix @@ -12,8 +12,9 @@ "Enables honkai 3rd impact"; }; + imports = [ inputs.aagl.nixosModules.default ]; + config = lib.mkIf config.aagl.enable { - imports = [ inputs.aagl.nixosModules.default ]; nix.settings = inputs.aagl.nixConfig; programs.honkers-railway-launcher.enable = diff --git a/nixosModules/services/graphics/wayland_compositors/default.nix b/nixosModules/services/graphics/wayland_compositors/default.nix index ae7dca2..cb22931 100644 --- a/nixosModules/services/graphics/wayland_compositors/default.nix +++ b/nixosModules/services/graphics/wayland_compositors/default.nix @@ -1,12 +1,16 @@ { inputs, config, pkgs, lib, ... }: { + options = { hyprland.enable = lib.mkEnableOption "Enables hyprland"; }; + imports = [ + inputs.hyprland.nixosModules.default + ]; + config = lib.mkIf config.hyprland.enable { - imports = [ inputs.hyprland.nixosModules.default ]; programs.hyprland.enable = true; nix.settings = { substituters = [ "https://hyprland.cachix.org" ]; diff --git a/nixosModules/services/networking/wireless/default.nix b/nixosModules/services/networking/wireless/default.nix index 972d057..a4259f7 100644 --- a/nixosModules/services/networking/wireless/default.nix +++ b/nixosModules/services/networking/wireless/default.nix @@ -5,7 +5,7 @@ wireless.enable = lib.mkEnableOption "Enables wireless"; }; - config = lib.mkIf confi.wireless.enable { + config = lib.mkIf config.wireless.enable { networking.wireless = { enable = true; userControlled = { diff --git a/nixosModules/services/pipewire/default.nix b/nixosModules/services/pipewire/default.nix index 0e22758..20387b6 100644 --- a/nixosModules/services/pipewire/default.nix +++ b/nixosModules/services/pipewire/default.nix @@ -13,9 +13,9 @@ alsa.enable = false; alsa.support32Bit = false; pulse.enable = true; - environment.systemPackages = with pkgs; [ - pulsemixer - ]; }; + environment.systemPackages = with pkgs; [ + pulsemixer + ]; }; } diff --git a/nixosModules/services/polkit/default.nix b/nixosModules/services/polkit/default.nix index 917e9bc..07f03f8 100644 --- a/nixosModules/services/polkit/default.nix +++ b/nixosModules/services/polkit/default.nix @@ -10,5 +10,5 @@ environment.systemPackages = with pkgs; [ polkit-kde-agent ]; - } + }; } diff --git a/nixosModules/services/sops-nix/default.nix b/nixosModules/services/sops-nix/default.nix index 65d5747..fae5829 100644 --- a/nixosModules/services/sops-nix/default.nix +++ b/nixosModules/services/sops-nix/default.nix @@ -5,8 +5,9 @@ let rootPath = ./.; in sops-nix.enable = lib.mkEnableOption "Enables nix-sops for secret management"; }; + imports = [ inputs.sops-nix.nixosModules.sops ]; + config = lib.mkIf config.sops-nix.enable { - imports = [ inputs.sops-nix.nixosModules.sops ]; sops = { defaultSopsFile = rootPath + "secrets.yaml"; diff --git a/nixosModules/services/system/default.nix b/nixosModules/services/system/default.nix index eec6490..fb40314 100644 --- a/nixosModules/services/system/default.nix +++ b/nixosModules/services/system/default.nix @@ -4,7 +4,7 @@ options = { user.name = lib.mkOption { default = "pan"; }; user.timezone = lib.mkOption { default = "America/Los_Angeles"; }; - font.extraFonts = lib.mkOption { default = []; }; + system.extraFonts = lib.mkOption { default = []; }; }; config = { From fc5d2b948367285f8394a0f79fbf998ccb12c155 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 9 Apr 2024 00:00:42 -0700 Subject: [PATCH 100/412] Fix errors so system builds --- flake.lock | 76 ++++++------------- flake.nix | 11 +-- .../apps/games/anime-launcher/default.nix | 3 +- .../graphics/wayland_compositors/default.nix | 6 +- .../services/networking/wireless/default.nix | 2 +- nixosModules/services/pipewire/default.nix | 6 +- nixosModules/services/polkit/default.nix | 2 +- nixosModules/services/sops-nix/default.nix | 3 +- nixosModules/services/system/default.nix | 2 +- 9 files changed, 45 insertions(+), 66 deletions(-) diff --git a/flake.lock b/flake.lock index 54d6c12..b45cc4b 100644 --- a/flake.lock +++ b/flake.lock @@ -53,11 +53,11 @@ ] }, "locked": { - "lastModified": 1712339458, - "narHash": "sha256-j8pv3tL2EFLGuvFoO64dHWD8YzNvD77hRb4EEx5ADgE=", + "lastModified": 1712434681, + "narHash": "sha256-qwmR2p1oc48Bj7gUDvb1oGL19Rjs2PmEmk4ChV01A5o=", "owner": "hyprwm", "repo": "hyprcursor", - "rev": "981b6617822dadc40246a6c70194d02dfc12e4c6", + "rev": "818d8c4b69e0997483d60b75f701fe14b561a7a3", "type": "github" }, "original": { @@ -71,17 +71,19 @@ "hyprcursor": "hyprcursor", "hyprland-protocols": "hyprland-protocols", "hyprlang": "hyprlang", - "nixpkgs": "nixpkgs", + "nixpkgs": [ + "nixpkgs" + ], "systems": "systems", "wlroots": "wlroots", "xdph": "xdph" }, "locked": { - "lastModified": 1712457111, - "narHash": "sha256-hTRMWHl49SYfui2W3qCq790MHnX8JTBfYQcxgwjbQ0g=", + "lastModified": 1712635734, + "narHash": "sha256-x4vfyFFVh8X2Y84gKkhUqeM92u/2hpkD8lx9RAscqFw=", "owner": "hyprwm", "repo": "Hyprland", - "rev": "f2a848cbcc41f29fb62ee67aef95136ae1a650da", + "rev": "d0d1ba5918206f16128e56988dd4db5d6d143338", "type": "github" }, "original": { @@ -142,27 +144,26 @@ }, "nixpkgs": { "locked": { - "lastModified": 1712163089, - "narHash": "sha256-Um+8kTIrC19vD4/lUCN9/cU9kcOsD1O1m+axJqQPyMM=", + "lastModified": 1712439257, + "narHash": "sha256-aSpiNepFOMk9932HOax0XwNxbA38GOUVOiXfUVPOrck=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "fd281bd6b7d3e32ddfa399853946f782553163b5", + "rev": "ff0dbd94265ac470dda06a657d5fe49de93b4599", "type": "github" }, "original": { - "owner": "NixOS", + "id": "nixpkgs", "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" + "type": "indirect" } }, "nixpkgs-stable": { "locked": { - "lastModified": 1712310679, - "narHash": "sha256-XgC/a/giEeNkhme/AV1ToipoZ/IVm1MV2ntiK4Tm+pw=", + "lastModified": 1712437997, + "narHash": "sha256-g0whLLwRvgO2FsyhY8fNk+TWenS3jg5UdlWL4uqgFeo=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "72da83d9515b43550436891f538ff41d68eecc7f", + "rev": "e38d7cb66ea4f7a0eb6681920615dfcc30fc2920", "type": "github" }, "original": { @@ -187,57 +188,28 @@ "type": "github" } }, - "nixpkgs_2": { - "locked": { - "lastModified": 1712163089, - "narHash": "sha256-Um+8kTIrC19vD4/lUCN9/cU9kcOsD1O1m+axJqQPyMM=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "fd281bd6b7d3e32ddfa399853946f782553163b5", - "type": "github" - }, - "original": { - "id": "nixpkgs", - "ref": "nixos-unstable", - "type": "indirect" - } - }, - "nixpkgs_3": { - "locked": { - "lastModified": 1712420723, - "narHash": "sha256-VnG0Eu394Ga2FCe8Q66m6OEQF8iAqjDYsjmtl+N2omk=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "9e7f26f82acb057498335362905fde6fea4ca50a", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixpkgs-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, "root": { "inputs": { "aagl": "aagl", "hyprland": "hyprland", - "nixpkgs": "nixpkgs_2", + "nixpkgs": "nixpkgs", "nixpkgs-stable": "nixpkgs-stable", "sops-nix": "sops-nix" } }, "sops-nix": { "inputs": { - "nixpkgs": "nixpkgs_3", + "nixpkgs": [ + "nixpkgs" + ], "nixpkgs-stable": "nixpkgs-stable_2" }, "locked": { - "lastModified": 1712458908, - "narHash": "sha256-DMgBS+jNHDg8z3g9GkwqL8xTKXCRQ/0FGsAyrniVonc=", + "lastModified": 1712617241, + "narHash": "sha256-a4hbls4vlLRMciv62YrYT/Xs/3Cubce8WFHPUDWwzf8=", "owner": "Mic92", "repo": "sops-nix", - "rev": "39191e8e6265b106c9a2ba0cfd3a4dafe98a31c6", + "rev": "538c114cfdf1f0458f507087b1dcf018ce1c0c4c", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 4f8bfaf..8fcf762 100644 --- a/flake.nix +++ b/flake.nix @@ -2,15 +2,16 @@ inputs = { nixpkgs.url = "nixpkgs/nixos-unstable"; nixpkgs-stable.url = "nixpkgs/nixos-23.11"; + hyprland.url = "github:hyprwm/Hyprland"; - aagl = { - url = "github:ezKEa/aagl-gtk-on-nix"; - inputs.nixpkgs.follows = "nixpkgs-stable"; - }; + hyprland.inputs.nixpkgs.follows = "nixpkgs"; sops-nix.url = "github:Mic92/sops-nix"; + sops-nix.inputs.nixpkgs.follows = "nixpkgs"; + aagl.url = "github:ezKEa/aagl-gtk-on-nix"; + aagl.inputs.nixpkgs.follows = "nixpkgs-stable"; }; - outputs = { self, nixpkgs, hyprland, aagl, sops-nix, ... }@inputs: + outputs = { self, nixpkgs, ... }@inputs: let defaultConfig = extraModules: nixpkgs.lib.nixosSystem { specialArgs = { inherit inputs; }; diff --git a/nixosModules/apps/games/anime-launcher/default.nix b/nixosModules/apps/games/anime-launcher/default.nix index ef10e49..bdf76d9 100644 --- a/nixosModules/apps/games/anime-launcher/default.nix +++ b/nixosModules/apps/games/anime-launcher/default.nix @@ -12,8 +12,9 @@ "Enables honkai 3rd impact"; }; + imports = [ inputs.aagl.nixosModules.default ]; + config = lib.mkIf config.aagl.enable { - imports = [ inputs.aagl.nixosModules.default ]; nix.settings = inputs.aagl.nixConfig; programs.honkers-railway-launcher.enable = diff --git a/nixosModules/services/graphics/wayland_compositors/default.nix b/nixosModules/services/graphics/wayland_compositors/default.nix index ae7dca2..cb22931 100644 --- a/nixosModules/services/graphics/wayland_compositors/default.nix +++ b/nixosModules/services/graphics/wayland_compositors/default.nix @@ -1,12 +1,16 @@ { inputs, config, pkgs, lib, ... }: { + options = { hyprland.enable = lib.mkEnableOption "Enables hyprland"; }; + imports = [ + inputs.hyprland.nixosModules.default + ]; + config = lib.mkIf config.hyprland.enable { - imports = [ inputs.hyprland.nixosModules.default ]; programs.hyprland.enable = true; nix.settings = { substituters = [ "https://hyprland.cachix.org" ]; diff --git a/nixosModules/services/networking/wireless/default.nix b/nixosModules/services/networking/wireless/default.nix index 972d057..a4259f7 100644 --- a/nixosModules/services/networking/wireless/default.nix +++ b/nixosModules/services/networking/wireless/default.nix @@ -5,7 +5,7 @@ wireless.enable = lib.mkEnableOption "Enables wireless"; }; - config = lib.mkIf confi.wireless.enable { + config = lib.mkIf config.wireless.enable { networking.wireless = { enable = true; userControlled = { diff --git a/nixosModules/services/pipewire/default.nix b/nixosModules/services/pipewire/default.nix index 0e22758..20387b6 100644 --- a/nixosModules/services/pipewire/default.nix +++ b/nixosModules/services/pipewire/default.nix @@ -13,9 +13,9 @@ alsa.enable = false; alsa.support32Bit = false; pulse.enable = true; - environment.systemPackages = with pkgs; [ - pulsemixer - ]; }; + environment.systemPackages = with pkgs; [ + pulsemixer + ]; }; } diff --git a/nixosModules/services/polkit/default.nix b/nixosModules/services/polkit/default.nix index 917e9bc..07f03f8 100644 --- a/nixosModules/services/polkit/default.nix +++ b/nixosModules/services/polkit/default.nix @@ -10,5 +10,5 @@ environment.systemPackages = with pkgs; [ polkit-kde-agent ]; - } + }; } diff --git a/nixosModules/services/sops-nix/default.nix b/nixosModules/services/sops-nix/default.nix index 65d5747..fae5829 100644 --- a/nixosModules/services/sops-nix/default.nix +++ b/nixosModules/services/sops-nix/default.nix @@ -5,8 +5,9 @@ let rootPath = ./.; in sops-nix.enable = lib.mkEnableOption "Enables nix-sops for secret management"; }; + imports = [ inputs.sops-nix.nixosModules.sops ]; + config = lib.mkIf config.sops-nix.enable { - imports = [ inputs.sops-nix.nixosModules.sops ]; sops = { defaultSopsFile = rootPath + "secrets.yaml"; diff --git a/nixosModules/services/system/default.nix b/nixosModules/services/system/default.nix index eec6490..fb40314 100644 --- a/nixosModules/services/system/default.nix +++ b/nixosModules/services/system/default.nix @@ -4,7 +4,7 @@ options = { user.name = lib.mkOption { default = "pan"; }; user.timezone = lib.mkOption { default = "America/Los_Angeles"; }; - font.extraFonts = lib.mkOption { default = []; }; + system.extraFonts = lib.mkOption { default = []; }; }; config = { From 7afb3bd74bca97e58fb3e2db1782773102d77b05 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 9 Apr 2024 15:04:39 -0700 Subject: [PATCH 101/412] Add zsh shell, enable in onizuka --- nixosModules/apps/shells/default.nix | 1 + nixosModules/apps/shells/zsh/default.nix | 20 ++++++++++++++++++++ systems/onizuka/default.nix | 3 ++- 3 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 nixosModules/apps/shells/zsh/default.nix diff --git a/nixosModules/apps/shells/default.nix b/nixosModules/apps/shells/default.nix index 9169af8..03ae484 100644 --- a/nixosModules/apps/shells/default.nix +++ b/nixosModules/apps/shells/default.nix @@ -4,5 +4,6 @@ imports = [ ./fish ./xonsh + ./zsh ]; } diff --git a/nixosModules/apps/shells/zsh/default.nix b/nixosModules/apps/shells/zsh/default.nix new file mode 100644 index 0000000..5ede3d1 --- /dev/null +++ b/nixosModules/apps/shells/zsh/default.nix @@ -0,0 +1,20 @@ +{ config, pkgs, lib, ... }: + +{ + options = { + zsh.enable = lib.mkEnableOption "Enables zsh"; + zsh.setDefault = lib.mkEnableOption "Sets zsh as the default user's shell"; + }; + + config = lib.mkIf config.zsh.enable { + programs.zsh = { + enable = true; + enableCompletion = true; + autosuggestions.enable = true; + histFile = "$HOME/.config/zsh/history"; + histSize = 2000; + }; + users.users.defaultUser.shell = lib.mkIf config.zsh.setDefault pkgs.zsh; + environment.shells = with pkgs; [ zsh ]; + }; +} diff --git a/systems/onizuka/default.nix b/systems/onizuka/default.nix index 9a85e4a..65bf1ba 100644 --- a/systems/onizuka/default.nix +++ b/systems/onizuka/default.nix @@ -20,7 +20,8 @@ hyprland.enable = true; librewolf.enable = true; - xonsh.enable = true; + zsh.enable = true; + zsh.setDefault = true; syncthing.enable = true; steam.enable = true; From 7c53ec4f7c63b95843b7f6a99a64fd093cfd69a4 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 9 Apr 2024 15:04:39 -0700 Subject: [PATCH 102/412] Add zsh shell, enable in onizuka --- nixosModules/apps/shells/default.nix | 1 + nixosModules/apps/shells/zsh/default.nix | 20 ++++++++++++++++++++ systems/onizuka/default.nix | 3 ++- 3 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 nixosModules/apps/shells/zsh/default.nix diff --git a/nixosModules/apps/shells/default.nix b/nixosModules/apps/shells/default.nix index 9169af8..03ae484 100644 --- a/nixosModules/apps/shells/default.nix +++ b/nixosModules/apps/shells/default.nix @@ -4,5 +4,6 @@ imports = [ ./fish ./xonsh + ./zsh ]; } diff --git a/nixosModules/apps/shells/zsh/default.nix b/nixosModules/apps/shells/zsh/default.nix new file mode 100644 index 0000000..5ede3d1 --- /dev/null +++ b/nixosModules/apps/shells/zsh/default.nix @@ -0,0 +1,20 @@ +{ config, pkgs, lib, ... }: + +{ + options = { + zsh.enable = lib.mkEnableOption "Enables zsh"; + zsh.setDefault = lib.mkEnableOption "Sets zsh as the default user's shell"; + }; + + config = lib.mkIf config.zsh.enable { + programs.zsh = { + enable = true; + enableCompletion = true; + autosuggestions.enable = true; + histFile = "$HOME/.config/zsh/history"; + histSize = 2000; + }; + users.users.defaultUser.shell = lib.mkIf config.zsh.setDefault pkgs.zsh; + environment.shells = with pkgs; [ zsh ]; + }; +} diff --git a/systems/onizuka/default.nix b/systems/onizuka/default.nix index 9a85e4a..65bf1ba 100644 --- a/systems/onizuka/default.nix +++ b/systems/onizuka/default.nix @@ -20,7 +20,8 @@ hyprland.enable = true; librewolf.enable = true; - xonsh.enable = true; + zsh.enable = true; + zsh.setDefault = true; syncthing.enable = true; steam.enable = true; From 12c42e665d819e92a1ffd787218722d9bf004482 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 9 Apr 2024 15:04:54 -0700 Subject: [PATCH 103/412] Fix xonsh module using fish.defaultShell --- nixosModules/apps/shells/xonsh/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixosModules/apps/shells/xonsh/default.nix b/nixosModules/apps/shells/xonsh/default.nix index 4842ba0..644e14e 100644 --- a/nixosModules/apps/shells/xonsh/default.nix +++ b/nixosModules/apps/shells/xonsh/default.nix @@ -9,7 +9,7 @@ config = lib.mkIf config.xonsh.enable { programs.xonsh.enable = true; - users.users.defaultUser.shell = lib.mkIf config.fish.setDefault pkgs.xonsh; + users.users.defaultUser.shell = lib.mkIf config.xonsh.setDefault pkgs.xonsh; environment.shells = with pkgs; [ xonsh ]; }; } From 42f24cd033277996eb640a6025abcb4361576cea Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 9 Apr 2024 15:04:54 -0700 Subject: [PATCH 104/412] Fix xonsh module using fish.defaultShell --- nixosModules/apps/shells/xonsh/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixosModules/apps/shells/xonsh/default.nix b/nixosModules/apps/shells/xonsh/default.nix index 4842ba0..644e14e 100644 --- a/nixosModules/apps/shells/xonsh/default.nix +++ b/nixosModules/apps/shells/xonsh/default.nix @@ -9,7 +9,7 @@ config = lib.mkIf config.xonsh.enable { programs.xonsh.enable = true; - users.users.defaultUser.shell = lib.mkIf config.fish.setDefault pkgs.xonsh; + users.users.defaultUser.shell = lib.mkIf config.xonsh.setDefault pkgs.xonsh; environment.shells = with pkgs; [ xonsh ]; }; } From 9ee7e4279c060d919f1825ccd1707fda39c167a0 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 10 Apr 2024 15:37:33 -0700 Subject: [PATCH 105/412] Add nerdfont icon support --- nixosModules/services/system/default.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixosModules/services/system/default.nix b/nixosModules/services/system/default.nix index fb40314..bde5bda 100644 --- a/nixosModules/services/system/default.nix +++ b/nixosModules/services/system/default.nix @@ -54,6 +54,7 @@ enableDefaultPackages = true; packages = with pkgs; [ cascadia-code + (nerdfonts.override { fonts = [ "CascadiaCode" ]; }) source-han-sans # Pan-CJK font ] ++ config.system.extraFonts; }; From fc611b015cb61313d4318308ede8ddeae2ccd3d0 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 10 Apr 2024 15:37:33 -0700 Subject: [PATCH 106/412] Add nerdfont icon support --- nixosModules/services/system/default.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixosModules/services/system/default.nix b/nixosModules/services/system/default.nix index fb40314..bde5bda 100644 --- a/nixosModules/services/system/default.nix +++ b/nixosModules/services/system/default.nix @@ -54,6 +54,7 @@ enableDefaultPackages = true; packages = with pkgs; [ cascadia-code + (nerdfonts.override { fonts = [ "CascadiaCode" ]; }) source-han-sans # Pan-CJK font ] ++ config.system.extraFonts; }; From 400980e6a057d40d3f9e90b0c6222365e24ec738 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 11 Apr 2024 16:26:10 -0700 Subject: [PATCH 107/412] add virtualbox, enable for onizuka --- nixosModules/apps/default.nix | 1 + nixosModules/apps/virtualbox/default.nix | 15 +++++++++++++++ systems/onizuka/default.nix | 1 + 3 files changed, 17 insertions(+) create mode 100644 nixosModules/apps/virtualbox/default.nix diff --git a/nixosModules/apps/default.nix b/nixosModules/apps/default.nix index 8b3447d..aebe893 100644 --- a/nixosModules/apps/default.nix +++ b/nixosModules/apps/default.nix @@ -7,5 +7,6 @@ ./librewolf ./shells ./syncthing + ./virtualbox ]; } diff --git a/nixosModules/apps/virtualbox/default.nix b/nixosModules/apps/virtualbox/default.nix new file mode 100644 index 0000000..87e825d --- /dev/null +++ b/nixosModules/apps/virtualbox/default.nix @@ -0,0 +1,15 @@ +{ config, pkgs, lib, ... }: + +{ + options.virtualbox = { + enable = lib.mkEnableOption "Enables virtualbox"; + extra-users = lib.mkOption { default = []; }; + }; + + config = lib.mkIf config.virtualbox.enable { + virtualisation.virtualbox.host.enable = true; + users.extraGroups.vboxusers.members = [ + config.user.name + ] ++ config.virtualbox.extra-users; + }; +} diff --git a/systems/onizuka/default.nix b/systems/onizuka/default.nix index 65bf1ba..978f277 100644 --- a/systems/onizuka/default.nix +++ b/systems/onizuka/default.nix @@ -23,6 +23,7 @@ zsh.enable = true; zsh.setDefault = true; syncthing.enable = true; + virtualbox.enable = true; steam.enable = true; aagl.enable = true; From fb4716170b6e818502b47bf31279b057b0c24d38 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 11 Apr 2024 16:26:10 -0700 Subject: [PATCH 108/412] add virtualbox, enable for onizuka --- nixosModules/apps/default.nix | 1 + nixosModules/apps/virtualbox/default.nix | 15 +++++++++++++++ systems/onizuka/default.nix | 1 + 3 files changed, 17 insertions(+) create mode 100644 nixosModules/apps/virtualbox/default.nix diff --git a/nixosModules/apps/default.nix b/nixosModules/apps/default.nix index 8b3447d..aebe893 100644 --- a/nixosModules/apps/default.nix +++ b/nixosModules/apps/default.nix @@ -7,5 +7,6 @@ ./librewolf ./shells ./syncthing + ./virtualbox ]; } diff --git a/nixosModules/apps/virtualbox/default.nix b/nixosModules/apps/virtualbox/default.nix new file mode 100644 index 0000000..87e825d --- /dev/null +++ b/nixosModules/apps/virtualbox/default.nix @@ -0,0 +1,15 @@ +{ config, pkgs, lib, ... }: + +{ + options.virtualbox = { + enable = lib.mkEnableOption "Enables virtualbox"; + extra-users = lib.mkOption { default = []; }; + }; + + config = lib.mkIf config.virtualbox.enable { + virtualisation.virtualbox.host.enable = true; + users.extraGroups.vboxusers.members = [ + config.user.name + ] ++ config.virtualbox.extra-users; + }; +} diff --git a/systems/onizuka/default.nix b/systems/onizuka/default.nix index 65bf1ba..978f277 100644 --- a/systems/onizuka/default.nix +++ b/systems/onizuka/default.nix @@ -23,6 +23,7 @@ zsh.enable = true; zsh.setDefault = true; syncthing.enable = true; + virtualbox.enable = true; steam.enable = true; aagl.enable = true; From 4135d53c14dbef6ca2563d6467c83dec0fad32ee Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sat, 13 Apr 2024 18:32:38 -0700 Subject: [PATCH 109/412] Add autoupgrade option, enable in onizuka --- flake.lock | 40 +++++++++++------------- nixosModules/services/system/default.nix | 16 ++++++++++ systems/onizuka/default.nix | 1 + 3 files changed, 36 insertions(+), 21 deletions(-) diff --git a/flake.lock b/flake.lock index b45cc4b..78a1d41 100644 --- a/flake.lock +++ b/flake.lock @@ -79,11 +79,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1712635734, - "narHash": "sha256-x4vfyFFVh8X2Y84gKkhUqeM92u/2hpkD8lx9RAscqFw=", + "lastModified": 1713050186, + "narHash": "sha256-AKdzVa0Zz5PQ1ptQgD0jj8J+UZUW9OeKGZ0mNVnkyI4=", "owner": "hyprwm", "repo": "Hyprland", - "rev": "d0d1ba5918206f16128e56988dd4db5d6d143338", + "rev": "0634aaeac6cca12e4f72174c431c2db9da9c0072", "type": "github" }, "original": { @@ -144,11 +144,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1712439257, - "narHash": "sha256-aSpiNepFOMk9932HOax0XwNxbA38GOUVOiXfUVPOrck=", + "lastModified": 1712791164, + "narHash": "sha256-3sbWO1mbpWsLepZGbWaMovSO7ndZeFqDSdX0hZ9nVyw=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "ff0dbd94265ac470dda06a657d5fe49de93b4599", + "rev": "1042fd8b148a9105f3c0aca3a6177fd1d9360ba5", "type": "github" }, "original": { @@ -159,11 +159,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1712437997, - "narHash": "sha256-g0whLLwRvgO2FsyhY8fNk+TWenS3jg5UdlWL4uqgFeo=", + "lastModified": 1712867921, + "narHash": "sha256-edTFV4KldkCMdViC/rmpJa7oLIU8SE/S35lh/ukC7bg=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "e38d7cb66ea4f7a0eb6681920615dfcc30fc2920", + "rev": "51651a540816273b67bc4dedea2d37d116c5f7fe", "type": "github" }, "original": { @@ -236,20 +236,18 @@ "wlroots": { "flake": false, "locked": { - "host": "gitlab.freedesktop.org", - "lastModified": 1709983277, - "narHash": "sha256-wXWIJLd4F2JZeMaihWVDW/yYXCLEC8OpeNJZg9a9ly8=", - "owner": "wlroots", - "repo": "wlroots", - "rev": "50eae512d9cecbf0b3b1898bb1f0b40fa05fe19b", - "type": "gitlab" + "lastModified": 1712935342, + "narHash": "sha256-zzIbTFNFd/as42jyGx23fil2uBDYYv+8GA5JmRq5y9c=", + "owner": "hyprwm", + "repo": "wlroots-hyprland", + "rev": "62eeffbe233d199f520a5755c344e85f8eab7940", + "type": "github" }, "original": { - "host": "gitlab.freedesktop.org", - "owner": "wlroots", - "repo": "wlroots", - "rev": "50eae512d9cecbf0b3b1898bb1f0b40fa05fe19b", - "type": "gitlab" + "owner": "hyprwm", + "repo": "wlroots-hyprland", + "rev": "62eeffbe233d199f520a5755c344e85f8eab7940", + "type": "github" } }, "xdph": { diff --git a/nixosModules/services/system/default.nix b/nixosModules/services/system/default.nix index bde5bda..d6b8a47 100644 --- a/nixosModules/services/system/default.nix +++ b/nixosModules/services/system/default.nix @@ -5,6 +5,7 @@ user.name = lib.mkOption { default = "pan"; }; user.timezone = lib.mkOption { default = "America/Los_Angeles"; }; system.extraFonts = lib.mkOption { default = []; }; + system.doAutoUpgrade = lib.mkEnableOption "Enable auto upgrading system"; }; config = { @@ -58,5 +59,20 @@ source-han-sans # Pan-CJK font ] ++ config.system.extraFonts; }; + + system.autoUpgrade = lib.mkIf config.system.doAutoUpgrade { + enable = true; + flake = inputs.self.outPath; + flags = [ + "--update-input" + "nixpkgs" + "--commit-lock-file" + "-L" + ]; + operation = "boot"; + dates = "22:30"; + randomizedDelaySec = "30min"; + }; + }; } diff --git a/systems/onizuka/default.nix b/systems/onizuka/default.nix index 978f277..1a7191d 100644 --- a/systems/onizuka/default.nix +++ b/systems/onizuka/default.nix @@ -15,6 +15,7 @@ user.name = "pan"; user.timezone = "America/Los_Angeles"; + system.doAutoUpgrade = true; tuigreet.enable = true; hyprland.enable = true; From f899e58b3c44d6d013416fb6f2ac81ba09dbbe2d Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sat, 13 Apr 2024 18:32:38 -0700 Subject: [PATCH 110/412] Add autoupgrade option, enable in onizuka --- flake.lock | 40 +++++++++++------------- nixosModules/services/system/default.nix | 16 ++++++++++ systems/onizuka/default.nix | 1 + 3 files changed, 36 insertions(+), 21 deletions(-) diff --git a/flake.lock b/flake.lock index b45cc4b..78a1d41 100644 --- a/flake.lock +++ b/flake.lock @@ -79,11 +79,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1712635734, - "narHash": "sha256-x4vfyFFVh8X2Y84gKkhUqeM92u/2hpkD8lx9RAscqFw=", + "lastModified": 1713050186, + "narHash": "sha256-AKdzVa0Zz5PQ1ptQgD0jj8J+UZUW9OeKGZ0mNVnkyI4=", "owner": "hyprwm", "repo": "Hyprland", - "rev": "d0d1ba5918206f16128e56988dd4db5d6d143338", + "rev": "0634aaeac6cca12e4f72174c431c2db9da9c0072", "type": "github" }, "original": { @@ -144,11 +144,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1712439257, - "narHash": "sha256-aSpiNepFOMk9932HOax0XwNxbA38GOUVOiXfUVPOrck=", + "lastModified": 1712791164, + "narHash": "sha256-3sbWO1mbpWsLepZGbWaMovSO7ndZeFqDSdX0hZ9nVyw=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "ff0dbd94265ac470dda06a657d5fe49de93b4599", + "rev": "1042fd8b148a9105f3c0aca3a6177fd1d9360ba5", "type": "github" }, "original": { @@ -159,11 +159,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1712437997, - "narHash": "sha256-g0whLLwRvgO2FsyhY8fNk+TWenS3jg5UdlWL4uqgFeo=", + "lastModified": 1712867921, + "narHash": "sha256-edTFV4KldkCMdViC/rmpJa7oLIU8SE/S35lh/ukC7bg=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "e38d7cb66ea4f7a0eb6681920615dfcc30fc2920", + "rev": "51651a540816273b67bc4dedea2d37d116c5f7fe", "type": "github" }, "original": { @@ -236,20 +236,18 @@ "wlroots": { "flake": false, "locked": { - "host": "gitlab.freedesktop.org", - "lastModified": 1709983277, - "narHash": "sha256-wXWIJLd4F2JZeMaihWVDW/yYXCLEC8OpeNJZg9a9ly8=", - "owner": "wlroots", - "repo": "wlroots", - "rev": "50eae512d9cecbf0b3b1898bb1f0b40fa05fe19b", - "type": "gitlab" + "lastModified": 1712935342, + "narHash": "sha256-zzIbTFNFd/as42jyGx23fil2uBDYYv+8GA5JmRq5y9c=", + "owner": "hyprwm", + "repo": "wlroots-hyprland", + "rev": "62eeffbe233d199f520a5755c344e85f8eab7940", + "type": "github" }, "original": { - "host": "gitlab.freedesktop.org", - "owner": "wlroots", - "repo": "wlroots", - "rev": "50eae512d9cecbf0b3b1898bb1f0b40fa05fe19b", - "type": "gitlab" + "owner": "hyprwm", + "repo": "wlroots-hyprland", + "rev": "62eeffbe233d199f520a5755c344e85f8eab7940", + "type": "github" } }, "xdph": { diff --git a/nixosModules/services/system/default.nix b/nixosModules/services/system/default.nix index bde5bda..d6b8a47 100644 --- a/nixosModules/services/system/default.nix +++ b/nixosModules/services/system/default.nix @@ -5,6 +5,7 @@ user.name = lib.mkOption { default = "pan"; }; user.timezone = lib.mkOption { default = "America/Los_Angeles"; }; system.extraFonts = lib.mkOption { default = []; }; + system.doAutoUpgrade = lib.mkEnableOption "Enable auto upgrading system"; }; config = { @@ -58,5 +59,20 @@ source-han-sans # Pan-CJK font ] ++ config.system.extraFonts; }; + + system.autoUpgrade = lib.mkIf config.system.doAutoUpgrade { + enable = true; + flake = inputs.self.outPath; + flags = [ + "--update-input" + "nixpkgs" + "--commit-lock-file" + "-L" + ]; + operation = "boot"; + dates = "22:30"; + randomizedDelaySec = "30min"; + }; + }; } diff --git a/systems/onizuka/default.nix b/systems/onizuka/default.nix index 978f277..1a7191d 100644 --- a/systems/onizuka/default.nix +++ b/systems/onizuka/default.nix @@ -15,6 +15,7 @@ user.name = "pan"; user.timezone = "America/Los_Angeles"; + system.doAutoUpgrade = true; tuigreet.enable = true; hyprland.enable = true; From f5f76fdb0e3bab5b258df9817ab80cd7aa30b474 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sat, 13 Apr 2024 18:33:30 -0700 Subject: [PATCH 111/412] Fix not importning inputs --- nixosModules/services/system/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixosModules/services/system/default.nix b/nixosModules/services/system/default.nix index d6b8a47..c79cc2a 100644 --- a/nixosModules/services/system/default.nix +++ b/nixosModules/services/system/default.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, ... }: +{ config, inputs, pkgs, lib, ... }: { options = { From 6389907fc51f0affc7b1916720dc298d6b43e788 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sat, 13 Apr 2024 18:33:30 -0700 Subject: [PATCH 112/412] Fix not importning inputs --- nixosModules/services/system/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixosModules/services/system/default.nix b/nixosModules/services/system/default.nix index d6b8a47..c79cc2a 100644 --- a/nixosModules/services/system/default.nix +++ b/nixosModules/services/system/default.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, ... }: +{ config, inputs, pkgs, lib, ... }: { options = { From 7167c10484a99ed7bceaa81209606b60368a6523 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 16 Apr 2024 00:26:29 -0700 Subject: [PATCH 113/412] make nix use xdg-standard --- flake.lock | 12 ++++++------ nixosModules/services/system/default.nix | 1 + 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/flake.lock b/flake.lock index 78a1d41..4b58270 100644 --- a/flake.lock +++ b/flake.lock @@ -174,11 +174,11 @@ }, "nixpkgs-stable_2": { "locked": { - "lastModified": 1712437997, - "narHash": "sha256-g0whLLwRvgO2FsyhY8fNk+TWenS3jg5UdlWL4uqgFeo=", + "lastModified": 1713042715, + "narHash": "sha256-RifMwYuKu5v6x6O65msKDTqKkQ9crGwOB7yr20qMEuE=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "e38d7cb66ea4f7a0eb6681920615dfcc30fc2920", + "rev": "c27f3b6d8e29346af16eecc0e9d54b1071eae27e", "type": "github" }, "original": { @@ -205,11 +205,11 @@ "nixpkgs-stable": "nixpkgs-stable_2" }, "locked": { - "lastModified": 1712617241, - "narHash": "sha256-a4hbls4vlLRMciv62YrYT/Xs/3Cubce8WFHPUDWwzf8=", + "lastModified": 1713066950, + "narHash": "sha256-ZaefFyvt5369XdjzSw43NhfbPM9MN5b9YXhzx4lFIRc=", "owner": "Mic92", "repo": "sops-nix", - "rev": "538c114cfdf1f0458f507087b1dcf018ce1c0c4c", + "rev": "226062b47fe0e2130ba3ee9f4f1c880dc815cf87", "type": "github" }, "original": { diff --git a/nixosModules/services/system/default.nix b/nixosModules/services/system/default.nix index c79cc2a..0f4bb75 100644 --- a/nixosModules/services/system/default.nix +++ b/nixosModules/services/system/default.nix @@ -39,6 +39,7 @@ "\${HOME}/prog/scripts" ]; }; + nix.settings.use-xdg-base-directories = true; users.groups = { wheel = { }; From 5d9f2aaf2946456c345ff3a103a9998ef07d83b1 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 16 Apr 2024 00:26:29 -0700 Subject: [PATCH 114/412] make nix use xdg-standard --- flake.lock | 12 ++++++------ nixosModules/services/system/default.nix | 1 + 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/flake.lock b/flake.lock index 78a1d41..4b58270 100644 --- a/flake.lock +++ b/flake.lock @@ -174,11 +174,11 @@ }, "nixpkgs-stable_2": { "locked": { - "lastModified": 1712437997, - "narHash": "sha256-g0whLLwRvgO2FsyhY8fNk+TWenS3jg5UdlWL4uqgFeo=", + "lastModified": 1713042715, + "narHash": "sha256-RifMwYuKu5v6x6O65msKDTqKkQ9crGwOB7yr20qMEuE=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "e38d7cb66ea4f7a0eb6681920615dfcc30fc2920", + "rev": "c27f3b6d8e29346af16eecc0e9d54b1071eae27e", "type": "github" }, "original": { @@ -205,11 +205,11 @@ "nixpkgs-stable": "nixpkgs-stable_2" }, "locked": { - "lastModified": 1712617241, - "narHash": "sha256-a4hbls4vlLRMciv62YrYT/Xs/3Cubce8WFHPUDWwzf8=", + "lastModified": 1713066950, + "narHash": "sha256-ZaefFyvt5369XdjzSw43NhfbPM9MN5b9YXhzx4lFIRc=", "owner": "Mic92", "repo": "sops-nix", - "rev": "538c114cfdf1f0458f507087b1dcf018ce1c0c4c", + "rev": "226062b47fe0e2130ba3ee9f4f1c880dc815cf87", "type": "github" }, "original": { diff --git a/nixosModules/services/system/default.nix b/nixosModules/services/system/default.nix index c79cc2a..0f4bb75 100644 --- a/nixosModules/services/system/default.nix +++ b/nixosModules/services/system/default.nix @@ -39,6 +39,7 @@ "\${HOME}/prog/scripts" ]; }; + nix.settings.use-xdg-base-directories = true; users.groups = { wheel = { }; From 269c6f6e673a88caeb74cb97479baeb9bbd9965c Mon Sep 17 00:00:00 2001 From: JuliaLange Date: Mon, 8 Apr 2024 23:01:37 -0700 Subject: [PATCH 115/412] Discord, swap betterdiscord for vesktop Change better discord for vesktop Update hypr rules to call vesktop instead of discord --- programs/discord/default.nix | 9 +- .../discord/plugins/chatlessdisc.plugin.js | 197 ------------------ programs/hypr/window_rules.conf | 2 +- 3 files changed, 2 insertions(+), 206 deletions(-) delete mode 100644 programs/discord/plugins/chatlessdisc.plugin.js diff --git a/programs/discord/default.nix b/programs/discord/default.nix index 4221921..8344f47 100644 --- a/programs/discord/default.nix +++ b/programs/discord/default.nix @@ -1,13 +1,6 @@ { config, pkgs, ... }: -let rootPath = ./.; in { home.packages = with pkgs; [ - discord # Base app - betterdiscordctl # Better Discord Installer + vesktop # Base app ]; - # Better Discord plugins - xdg.configFile."better-discord" = { - source = rootPath + "/plugins"; - target = "BetterDiscord/plugins"; - }; } diff --git a/programs/discord/plugins/chatlessdisc.plugin.js b/programs/discord/plugins/chatlessdisc.plugin.js deleted file mode 100644 index 76d78d2..0000000 --- a/programs/discord/plugins/chatlessdisc.plugin.js +++ /dev/null @@ -1,197 +0,0 @@ -/** - * @name chatlessdisc - * @version 1.1.0 - * @description removes the chatting from disc, as god intended - * @author Julia Lange - * - */ - -const TITLE = "chatless-disc"; - -function getChat() { - let chatsPotentialChild = document.querySelector( - "div > section[aria-label='Channel header']"); - if (chatsPotentialChild) { - let chat = chatsPotentialChild.parentElement; - return chat; - } - return null; -} - -function removeChat() { - let chat = getChat() - if (chat) chat.style = "display: none"; -} -function restoreChat() { - let chat = getChat() - if (chat) chat.style = "display: flex"; -} - -function expandSidebar() { - let userArea = document.querySelector("section[aria-label='User area']"); - let sidebar = userArea.parentElement; - sidebar.style = "width: 100%"; - removeChat(); - - userArea.childNodes.forEach(node => { - node.style = "justify-content: space-between"; - }); -} - -function contractSidebar() { - let userArea = document.querySelector("section[aria-label='User area']"); - let sidebar = userArea.parentElement; - sidebar.style = ""; - restoreChat(); - - userArea.childNodes.forEach(node => { - node.style = ""; - }); -} - -function addChannelClass() { - let dms = document.querySelector("ul[aria-label='Direct Messages']"); - if (dms == null) return ""; - let friendsElement = dms.childNodes[1] - if (friendsElement == null) return ""; - let channelClassName = friendsElement.className.split(" ")[0] - if (channelClassName != "") { - BdApi.DOM.addStyle(TITLE, `.${channelClassName} { - max-width: 100%; - }`); - } - return channelClassName; -} - -function clickPopOut() { - let popOutButton = document.querySelector("button[aria-label='Pop Out']"); - if (popOutButton == null) return; - popOutButton.click(); -} - -function addToggleButton(button) { - let muteButton = document.querySelector("div > button[aria-label='Mute']"); - if (muteButton == null) return; - let buttonList = muteButton.parentElement; - buttonList.prepend(button) - - enablePortraitStyle() -} - -function enablePortraitStyle() { - let portrait = document.querySelector("div[aria-label='Set Status']"); - if (portrait == null) return; - portrait.style = "width: 100%; min-width: 0px"; -} - -function disablePortaitStyle() { - let portrait = document.querySelector("div[aria-label='Set Status']"); - if (portrait == null) return; - portrait.style = ""; -} - -function enableChanges() { - expandSidebar(); - - return true -} - -function disableChanges() { - contractSidebar(); - - return false -} - -function createToggleButton(onClickFunction) { - let toggleButton = document.createElement("button"); - toggleButton.role = "switch"; - toggleButton.ariaLabel = "Chattless Toggle"; - toggleButton.className = "chattless_button"; - toggleButton.style.cssText = ` - display: flex; - align-items: center; - justify-content: center; - background: transparent;` - toggleButton.addEventListener("click", onClickFunction); - - const div = document.createElement("div"); - div.style.cssText = ` - display: flex; - align-items: center; - justify-content: center;`; - - const svg = document.createElementNS("http://www.w3.org/2000/svg", "svg"); - svg.setAttribute("aria-hidden", "false"); - svg.setAttribute("width", "20"); - svg.setAttribute("height", "20"); - svg.setAttribute("viewBox", "0 0 512.08 512.08"); - - const path = document.createElementNS("http://www.w3.org/2000/svg", "path"); - path.setAttribute("fill", "var(--interactive-normal)"); - path.setAttribute("d", "M256.04,0C134.28,0,35.208,97.248,35.208,216.8c0,66.56,30.208,127.776,83.168,169.216V512.08 \ - l103.552-81.2c11.536,1.776,22.992,2.688,34.112,2.688c121.76,0,220.832-97.232,220.832-216.768C476.872,97.248,377.8,0,256.04,0z \ - M444.872,216.8c0,44.336-16.064,85.056-42.768,116.928L140.408,71.024C172.408,46.656,212.456,32,256.04,32 \ - C360.168,32,444.872,114.912,444.872,216.8z M220.552,398.192l-7.104-1.312l-63.056,49.456v-76.432l-6.592-4.8 \ - C95.128,329.776,67.224,275.712,67.224,216.8c0-47.872,18.848-91.408,49.472-124.256l262.768,263.792 \ - c-33.136,28.096-76.224,45.232-123.408,45.232C244.536,401.568,232.6,400.416,220.552,398.192z"); - - svg.appendChild(path); - div.appendChild(svg); - toggleButton.appendChild(div); - - return toggleButton; -} - - - - - -class chatlessdisc { - - constructor() { - this.enabled = false; - this.channelActionsModule = BdApi.findModuleByProps('selectChannel'); - - this.toggleButton = createToggleButton(async () => { - if (this.enabled) - this.enabled = disableChanges(); - else - this.enabled = enableChanges(); - }); - } - - start() { - this.enabled = enableChanges(); - addToggleButton(this.toggleButton); - this.channelClassName = addChannelClass(); - - BdApi.DOM.addStyle(TITLE, `.chattless_button:hover { - background: rgba(255,255,255,0.125) !important; - }`); - - BdApi.Patcher.instead(TITLE, this.channelActionsModule, - "selectChannel", async (_, args, originalFunction) => { - await originalFunction(...args); - if (this.enabled) { - removeChat(); - if (this.channelClassName == "") - this.channelClassName = addChannelClass(); - } - }); - BdApi.Patcher.instead(TITLE, this.channelActionsModule, - "selectVoiceChannel", async (_, args, originalFunction) => { - await originalFunction(...args); - if (this.enabled) { - await this.channelActionsModule.selectPrivateChannel(args[0]); - clickPopOut(); - } - }); - } - //Turn off and remove all parts of the plugin - stop() { - this.toggleButton.remove() - disableChanges(); - BdApi.Patcher.unpatchAll(TITLE); - BdApi.DOM.removeStyle(TITLE); - } -} diff --git a/programs/hypr/window_rules.conf b/programs/hypr/window_rules.conf index 6643f96..8d084ea 100644 --- a/programs/hypr/window_rules.conf +++ b/programs/hypr/window_rules.conf @@ -35,5 +35,5 @@ windowrulev2 = opacity 1 override, class:^(mpv)$ env = HYPR_WORK_DB,$XDG_CACHE_HOME/hypr/workspace.db exec-once = [workspace special:mus silent;float;size 70% 70%;center] alacritty -e spt -exec-once = [workspace name:chat silent] Discord +exec-once = [workspace name:chat silent] vesktop exec-once = [workspace name:chat silent] beeper From 4492690057f6ed4a039e8a55ba375b873c549656 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 8 Apr 2024 23:01:37 -0700 Subject: [PATCH 116/412] Discord, swap betterdiscord for vesktop Change better discord for vesktop Update hypr rules to call vesktop instead of discord --- programs/discord/default.nix | 9 +- .../discord/plugins/chatlessdisc.plugin.js | 197 ------------------ programs/hypr/window_rules.conf | 2 +- 3 files changed, 2 insertions(+), 206 deletions(-) delete mode 100644 programs/discord/plugins/chatlessdisc.plugin.js diff --git a/programs/discord/default.nix b/programs/discord/default.nix index 4221921..8344f47 100644 --- a/programs/discord/default.nix +++ b/programs/discord/default.nix @@ -1,13 +1,6 @@ { config, pkgs, ... }: -let rootPath = ./.; in { home.packages = with pkgs; [ - discord # Base app - betterdiscordctl # Better Discord Installer + vesktop # Base app ]; - # Better Discord plugins - xdg.configFile."better-discord" = { - source = rootPath + "/plugins"; - target = "BetterDiscord/plugins"; - }; } diff --git a/programs/discord/plugins/chatlessdisc.plugin.js b/programs/discord/plugins/chatlessdisc.plugin.js deleted file mode 100644 index 76d78d2..0000000 --- a/programs/discord/plugins/chatlessdisc.plugin.js +++ /dev/null @@ -1,197 +0,0 @@ -/** - * @name chatlessdisc - * @version 1.1.0 - * @description removes the chatting from disc, as god intended - * @author Julia Lange - * - */ - -const TITLE = "chatless-disc"; - -function getChat() { - let chatsPotentialChild = document.querySelector( - "div > section[aria-label='Channel header']"); - if (chatsPotentialChild) { - let chat = chatsPotentialChild.parentElement; - return chat; - } - return null; -} - -function removeChat() { - let chat = getChat() - if (chat) chat.style = "display: none"; -} -function restoreChat() { - let chat = getChat() - if (chat) chat.style = "display: flex"; -} - -function expandSidebar() { - let userArea = document.querySelector("section[aria-label='User area']"); - let sidebar = userArea.parentElement; - sidebar.style = "width: 100%"; - removeChat(); - - userArea.childNodes.forEach(node => { - node.style = "justify-content: space-between"; - }); -} - -function contractSidebar() { - let userArea = document.querySelector("section[aria-label='User area']"); - let sidebar = userArea.parentElement; - sidebar.style = ""; - restoreChat(); - - userArea.childNodes.forEach(node => { - node.style = ""; - }); -} - -function addChannelClass() { - let dms = document.querySelector("ul[aria-label='Direct Messages']"); - if (dms == null) return ""; - let friendsElement = dms.childNodes[1] - if (friendsElement == null) return ""; - let channelClassName = friendsElement.className.split(" ")[0] - if (channelClassName != "") { - BdApi.DOM.addStyle(TITLE, `.${channelClassName} { - max-width: 100%; - }`); - } - return channelClassName; -} - -function clickPopOut() { - let popOutButton = document.querySelector("button[aria-label='Pop Out']"); - if (popOutButton == null) return; - popOutButton.click(); -} - -function addToggleButton(button) { - let muteButton = document.querySelector("div > button[aria-label='Mute']"); - if (muteButton == null) return; - let buttonList = muteButton.parentElement; - buttonList.prepend(button) - - enablePortraitStyle() -} - -function enablePortraitStyle() { - let portrait = document.querySelector("div[aria-label='Set Status']"); - if (portrait == null) return; - portrait.style = "width: 100%; min-width: 0px"; -} - -function disablePortaitStyle() { - let portrait = document.querySelector("div[aria-label='Set Status']"); - if (portrait == null) return; - portrait.style = ""; -} - -function enableChanges() { - expandSidebar(); - - return true -} - -function disableChanges() { - contractSidebar(); - - return false -} - -function createToggleButton(onClickFunction) { - let toggleButton = document.createElement("button"); - toggleButton.role = "switch"; - toggleButton.ariaLabel = "Chattless Toggle"; - toggleButton.className = "chattless_button"; - toggleButton.style.cssText = ` - display: flex; - align-items: center; - justify-content: center; - background: transparent;` - toggleButton.addEventListener("click", onClickFunction); - - const div = document.createElement("div"); - div.style.cssText = ` - display: flex; - align-items: center; - justify-content: center;`; - - const svg = document.createElementNS("http://www.w3.org/2000/svg", "svg"); - svg.setAttribute("aria-hidden", "false"); - svg.setAttribute("width", "20"); - svg.setAttribute("height", "20"); - svg.setAttribute("viewBox", "0 0 512.08 512.08"); - - const path = document.createElementNS("http://www.w3.org/2000/svg", "path"); - path.setAttribute("fill", "var(--interactive-normal)"); - path.setAttribute("d", "M256.04,0C134.28,0,35.208,97.248,35.208,216.8c0,66.56,30.208,127.776,83.168,169.216V512.08 \ - l103.552-81.2c11.536,1.776,22.992,2.688,34.112,2.688c121.76,0,220.832-97.232,220.832-216.768C476.872,97.248,377.8,0,256.04,0z \ - M444.872,216.8c0,44.336-16.064,85.056-42.768,116.928L140.408,71.024C172.408,46.656,212.456,32,256.04,32 \ - C360.168,32,444.872,114.912,444.872,216.8z M220.552,398.192l-7.104-1.312l-63.056,49.456v-76.432l-6.592-4.8 \ - C95.128,329.776,67.224,275.712,67.224,216.8c0-47.872,18.848-91.408,49.472-124.256l262.768,263.792 \ - c-33.136,28.096-76.224,45.232-123.408,45.232C244.536,401.568,232.6,400.416,220.552,398.192z"); - - svg.appendChild(path); - div.appendChild(svg); - toggleButton.appendChild(div); - - return toggleButton; -} - - - - - -class chatlessdisc { - - constructor() { - this.enabled = false; - this.channelActionsModule = BdApi.findModuleByProps('selectChannel'); - - this.toggleButton = createToggleButton(async () => { - if (this.enabled) - this.enabled = disableChanges(); - else - this.enabled = enableChanges(); - }); - } - - start() { - this.enabled = enableChanges(); - addToggleButton(this.toggleButton); - this.channelClassName = addChannelClass(); - - BdApi.DOM.addStyle(TITLE, `.chattless_button:hover { - background: rgba(255,255,255,0.125) !important; - }`); - - BdApi.Patcher.instead(TITLE, this.channelActionsModule, - "selectChannel", async (_, args, originalFunction) => { - await originalFunction(...args); - if (this.enabled) { - removeChat(); - if (this.channelClassName == "") - this.channelClassName = addChannelClass(); - } - }); - BdApi.Patcher.instead(TITLE, this.channelActionsModule, - "selectVoiceChannel", async (_, args, originalFunction) => { - await originalFunction(...args); - if (this.enabled) { - await this.channelActionsModule.selectPrivateChannel(args[0]); - clickPopOut(); - } - }); - } - //Turn off and remove all parts of the plugin - stop() { - this.toggleButton.remove() - disableChanges(); - BdApi.Patcher.unpatchAll(TITLE); - BdApi.DOM.removeStyle(TITLE); - } -} diff --git a/programs/hypr/window_rules.conf b/programs/hypr/window_rules.conf index 6643f96..8d084ea 100644 --- a/programs/hypr/window_rules.conf +++ b/programs/hypr/window_rules.conf @@ -35,5 +35,5 @@ windowrulev2 = opacity 1 override, class:^(mpv)$ env = HYPR_WORK_DB,$XDG_CACHE_HOME/hypr/workspace.db exec-once = [workspace special:mus silent;float;size 70% 70%;center] alacritty -e spt -exec-once = [workspace name:chat silent] Discord +exec-once = [workspace name:chat silent] vesktop exec-once = [workspace name:chat silent] beeper From 14a235cdcc56ec8a96fc8a2c2b68ad9264375b88 Mon Sep 17 00:00:00 2001 From: JuliaLange Date: Mon, 8 Apr 2024 23:03:32 -0700 Subject: [PATCH 117/412] Hypr, fix nvidia screen tearing issue Fixes an issue causing screen tearing by reducing refresh rate to 60Hz. Disables window swallowing because I accidentally added that to this commit --- programs/hypr/settings.conf | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/programs/hypr/settings.conf b/programs/hypr/settings.conf index 77eceff..ca95da9 100644 --- a/programs/hypr/settings.conf +++ b/programs/hypr/settings.conf @@ -1,11 +1,8 @@ # Monitor Settings -monitor=DP-2,2560x1440@144,0x0,1 +monitor=DP-2,2560x1440@60,0x0,1 monitor=DP-1,2560x1440@144,-2560x0,1 monitor=HDMI-A-1,disable -# Fix screen tearing -env = WLR_DRM_NO_ATOMIC,1 - # Inits exec-once = swww init exec-once = swww img $HOME/med/pix/bg.png @@ -28,7 +25,6 @@ general { col.inactive_border = rgb(1E1D2F) layout = master - allow_tearing = true } decoration { @@ -61,6 +57,6 @@ master { misc { focus_on_activate = true - enable_swallow = true + enable_swallow = false swallow_regex = ^(Alacritty)$ } From d40316ca70bb4fbef4089d350fda1d73d43065c6 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 8 Apr 2024 23:03:32 -0700 Subject: [PATCH 118/412] Hypr, fix nvidia screen tearing issue Fixes an issue causing screen tearing by reducing refresh rate to 60Hz. Disables window swallowing because I accidentally added that to this commit --- programs/hypr/settings.conf | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/programs/hypr/settings.conf b/programs/hypr/settings.conf index 77eceff..ca95da9 100644 --- a/programs/hypr/settings.conf +++ b/programs/hypr/settings.conf @@ -1,11 +1,8 @@ # Monitor Settings -monitor=DP-2,2560x1440@144,0x0,1 +monitor=DP-2,2560x1440@60,0x0,1 monitor=DP-1,2560x1440@144,-2560x0,1 monitor=HDMI-A-1,disable -# Fix screen tearing -env = WLR_DRM_NO_ATOMIC,1 - # Inits exec-once = swww init exec-once = swww img $HOME/med/pix/bg.png @@ -28,7 +25,6 @@ general { col.inactive_border = rgb(1E1D2F) layout = master - allow_tearing = true } decoration { @@ -61,6 +57,6 @@ master { misc { focus_on_activate = true - enable_swallow = true + enable_swallow = false swallow_regex = ^(Alacritty)$ } From 7f6b461f29fc189395bcf9bebd8d9e6f6e6a4975 Mon Sep 17 00:00:00 2001 From: JuliaLange Date: Mon, 8 Apr 2024 23:03:47 -0700 Subject: [PATCH 119/412] Hypr, Add kde-polkit client to hypr --- programs/hypr/default.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/programs/hypr/default.nix b/programs/hypr/default.nix index 4c2caeb..645ef5c 100644 --- a/programs/hypr/default.nix +++ b/programs/hypr/default.nix @@ -9,6 +9,7 @@ let rootPath = ./.; in ${builtins.readFile ./nvidia.conf} ${builtins.readFile ./keybinds.conf} ${builtins.readFile ./xwaylandvideobridge.conf} + exec-once=${pkgs.polkit-kde-agent}/libexec/polkit-kde-authentication-agent-1 ''; # wayland.windowManager.hyprland.enableNvidiaPatches = true; home.packages = with pkgs; [ @@ -20,6 +21,7 @@ let rootPath = ./.; in hyprpicker # Colorpicker, needed for screenshot tool inputs.hyprland-contrib.packages.${pkgs.system}.grimblast # Screenshot tool xwaylandvideobridge # Allows screensharing with xwayland apps + polkit-kde-agent # Polkit handler ]; # Hyprland screenshot tool xdg.configFile."hypr-scripts" = { From da01356041b659d0beb965901568a4390e91eb2a Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 8 Apr 2024 23:03:47 -0700 Subject: [PATCH 120/412] Hypr, Add kde-polkit client to hypr --- programs/hypr/default.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/programs/hypr/default.nix b/programs/hypr/default.nix index 4c2caeb..645ef5c 100644 --- a/programs/hypr/default.nix +++ b/programs/hypr/default.nix @@ -9,6 +9,7 @@ let rootPath = ./.; in ${builtins.readFile ./nvidia.conf} ${builtins.readFile ./keybinds.conf} ${builtins.readFile ./xwaylandvideobridge.conf} + exec-once=${pkgs.polkit-kde-agent}/libexec/polkit-kde-authentication-agent-1 ''; # wayland.windowManager.hyprland.enableNvidiaPatches = true; home.packages = with pkgs; [ @@ -20,6 +21,7 @@ let rootPath = ./.; in hyprpicker # Colorpicker, needed for screenshot tool inputs.hyprland-contrib.packages.${pkgs.system}.grimblast # Screenshot tool xwaylandvideobridge # Allows screensharing with xwayland apps + polkit-kde-agent # Polkit handler ]; # Hyprland screenshot tool xdg.configFile."hypr-scripts" = { From c9cd42eaa3d28ebc9665514844dd6cc754e16378 Mon Sep 17 00:00:00 2001 From: JuliaLange Date: Mon, 8 Apr 2024 23:04:16 -0700 Subject: [PATCH 121/412] Hypr, Add window rules for touhou and overwatch --- programs/hypr/league_rules.conf | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/programs/hypr/league_rules.conf b/programs/hypr/league_rules.conf index a2730bc..5c573f0 100644 --- a/programs/hypr/league_rules.conf +++ b/programs/hypr/league_rules.conf @@ -9,11 +9,17 @@ windowrulev2 = noborder, class:^(leagueclient.exe)$ windowrulev2 = nofocus, class:^(leagueclient.exe)$ windowrulev2 = noshadow, class:^(leagueclient.exe)$ -# gamer settings (set ingame to borderless) -#windowrulev2 = immediate, class:^(league of legends.exe)$ +# windowrulev2 = immediate, class:^(league of legends.exe)$ +# windowrulev2 = immediate, class:^(overwatch.exe)$ +# windowrulev2 = immediate, class:^(steam_app_1384160)$ +windowrulev2 = fullscreen, class:^(overwatch.exe)$ +windowrulev2 = fullscreen, class:^(steam_app_1384160)$ windowrulev2 = fullscreen, class:^(league of legends.exe)$ # workspaces windowrule = workspace name:game, leagueclient.exe windowrule = workspace name:game, leagueclientux.exe windowrule = workspace name:game, league of legends.exe +windowrule = workspace name:game, overwatch.exe +windowrule = workspace name:game, 東方紅魔郷.exe +windowrule = workspace name:game, steam_app_1384160 From 60abc1009291f083e3246bbc1ef6ee1564922ea8 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 8 Apr 2024 23:04:16 -0700 Subject: [PATCH 122/412] Hypr, Add window rules for touhou and overwatch --- programs/hypr/league_rules.conf | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/programs/hypr/league_rules.conf b/programs/hypr/league_rules.conf index a2730bc..5c573f0 100644 --- a/programs/hypr/league_rules.conf +++ b/programs/hypr/league_rules.conf @@ -9,11 +9,17 @@ windowrulev2 = noborder, class:^(leagueclient.exe)$ windowrulev2 = nofocus, class:^(leagueclient.exe)$ windowrulev2 = noshadow, class:^(leagueclient.exe)$ -# gamer settings (set ingame to borderless) -#windowrulev2 = immediate, class:^(league of legends.exe)$ +# windowrulev2 = immediate, class:^(league of legends.exe)$ +# windowrulev2 = immediate, class:^(overwatch.exe)$ +# windowrulev2 = immediate, class:^(steam_app_1384160)$ +windowrulev2 = fullscreen, class:^(overwatch.exe)$ +windowrulev2 = fullscreen, class:^(steam_app_1384160)$ windowrulev2 = fullscreen, class:^(league of legends.exe)$ # workspaces windowrule = workspace name:game, leagueclient.exe windowrule = workspace name:game, leagueclientux.exe windowrule = workspace name:game, league of legends.exe +windowrule = workspace name:game, overwatch.exe +windowrule = workspace name:game, 東方紅魔郷.exe +windowrule = workspace name:game, steam_app_1384160 From c97d94408e5baa8cf2903de1b5f54c07bda4012f Mon Sep 17 00:00:00 2001 From: JuliaLange Date: Mon, 8 Apr 2024 23:19:54 -0700 Subject: [PATCH 123/412] Add kitty, obs, and scripts skeleton code Also refactors some flake.nix code to not use dictionaries --- flake.lock | 131 +++++++++-------------------------- flake.nix | 43 ++++++------ home.nix | 10 ++- programs/kitty/default.nix | 12 ++++ programs/obs/default.nix | 11 +++ services/scripts/default.nix | 10 +++ services/scripts/select.nix | 15 ++++ 7 files changed, 111 insertions(+), 121 deletions(-) create mode 100644 programs/kitty/default.nix create mode 100644 programs/obs/default.nix create mode 100644 services/scripts/default.nix create mode 100644 services/scripts/select.nix diff --git a/flake.lock b/flake.lock index abe0102..7c3d189 100644 --- a/flake.lock +++ b/flake.lock @@ -2,14 +2,16 @@ "nodes": { "ags": { "inputs": { - "nixpkgs": "nixpkgs" + "nixpkgs": [ + "nixpkgs" + ] }, "locked": { - "lastModified": 1710523796, - "narHash": "sha256-VlzW+B/6Ifk+BRy1leU0GHuQ4KqlQXLO/pRRCCHcvDQ=", + "lastModified": 1712250145, + "narHash": "sha256-8WTGn7It2kZfAmN97Epi3g/Su/w3Hbw/T4dWxE7OrBw=", "owner": "Aylur", "repo": "ags", - "rev": "5dec6c7f37be13781144a7964e75cc00c7d7045f", + "rev": "d589077199ec8a055ef936bf8a1f051b7a0c7e34", "type": "github" }, "original": { @@ -25,11 +27,11 @@ ] }, "locked": { - "lastModified": 1710532761, - "narHash": "sha256-SUXGZNrXX05YA9G6EmgupxhOr3swI1gcxLUeDMUhrEY=", + "lastModified": 1712462372, + "narHash": "sha256-WA3bbBWhd3o1wAgyHZNypjb/LG4oq+IWxFq8ey8yNPU=", "owner": "nix-community", "repo": "home-manager", - "rev": "206f457fffdb9a73596a4cb2211a471bd305243d", + "rev": "a561ad6ab38578c812cc9af3b04f2cc60ebf48c9", "type": "github" }, "original": { @@ -40,7 +42,10 @@ }, "hyprcursor": { "inputs": { - "hyprlang": "hyprlang", + "hyprlang": [ + "hyprland", + "hyprlang" + ], "nixpkgs": [ "hyprland", "nixpkgs" @@ -51,11 +56,11 @@ ] }, "locked": { - "lastModified": 1710257359, - "narHash": "sha256-43re5pzE/cswFAgw92/ugsB3+d5ufDaCcLtl9ztKfBo=", + "lastModified": 1712434681, + "narHash": "sha256-qwmR2p1oc48Bj7gUDvb1oGL19Rjs2PmEmk4ChV01A5o=", "owner": "hyprwm", "repo": "hyprcursor", - "rev": "1761f6cefd77f4fcd2039d930c88d6716ddc4974", + "rev": "818d8c4b69e0997483d60b75f701fe14b561a7a3", "type": "github" }, "original": { @@ -68,18 +73,20 @@ "inputs": { "hyprcursor": "hyprcursor", "hyprland-protocols": "hyprland-protocols", - "hyprlang": "hyprlang_2", - "nixpkgs": "nixpkgs_2", - "systems": "systems_2", + "hyprlang": "hyprlang", + "nixpkgs": [ + "nixpkgs" + ], + "systems": "systems", "wlroots": "wlroots", "xdph": "xdph" }, "locked": { - "lastModified": 1710611769, - "narHash": "sha256-gM4cDw45J8mBmM0aR5Ko/zMAA8UWnQhc4uZ5Ydvc4uo=", + "lastModified": 1712528342, + "narHash": "sha256-5tRzlHnhk28M2ClRshRAEANGE/GF9A1Cl36OXAmi+Ig=", "owner": "hyprwm", "repo": "Hyprland", - "rev": "0e87a08e15c023325b64920d9e1159f38a090695", + "rev": "43b96f03b5af60586a864ea64e8c71b11ea6eb85", "type": "github" }, "original": { @@ -95,11 +102,11 @@ ] }, "locked": { - "lastModified": 1710415616, - "narHash": "sha256-1qVByzzCcKoCmP8ReUSAjKU5V9pfTLHQIM4WI1tvQ9E=", + "lastModified": 1712505318, + "narHash": "sha256-fzlBLhXUN6y7mzEtcGNRDXxFakBEfaj4Bmj5PuoCNaM=", "owner": "hyprwm", "repo": "contrib", - "rev": "75420d09f93346d9d23d5a1e26b42699f6b66cd6", + "rev": "5870244b592c22558b658dbaf94f9e41afb0316f", "type": "github" }, "original": { @@ -134,29 +141,6 @@ } }, "hyprlang": { - "inputs": { - "nixpkgs": [ - "hyprland", - "hyprcursor", - "nixpkgs" - ], - "systems": "systems" - }, - "locked": { - "lastModified": 1709914708, - "narHash": "sha256-bR4o3mynoTa1Wi4ZTjbnsZ6iqVcPGriXp56bZh5UFTk=", - "owner": "hyprwm", - "repo": "hyprlang", - "rev": "a685493fdbeec01ca8ccdf1f3655c044a8ce2fe2", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "hyprlang", - "type": "github" - } - }, - "hyprlang_2": { "inputs": { "nixpkgs": [ "hyprland", @@ -168,11 +152,11 @@ ] }, "locked": { - "lastModified": 1709914708, - "narHash": "sha256-bR4o3mynoTa1Wi4ZTjbnsZ6iqVcPGriXp56bZh5UFTk=", + "lastModified": 1711671891, + "narHash": "sha256-C/Wwsy/RLxHP1axFFl+AnwJRWfd8gxDKKoa8nt8Qk3c=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "a685493fdbeec01ca8ccdf1f3655c044a8ce2fe2", + "rev": "c1402612146ba06606ebf64963a02bc1efe11e74", "type": "github" }, "original": { @@ -183,43 +167,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1708475490, - "narHash": "sha256-g1v0TsWBQPX97ziznfJdWhgMyMGtoBFs102xSYO4syU=", + "lastModified": 1712439257, + "narHash": "sha256-aSpiNepFOMk9932HOax0XwNxbA38GOUVOiXfUVPOrck=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "0e74ca98a74bc7270d28838369593635a5db3260", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_2": { - "locked": { - "lastModified": 1710272261, - "narHash": "sha256-g0bDwXFmTE7uGDOs9HcJsfLFhH7fOsASbAuOzDC+fhQ=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "0ad13a6833440b8e238947e47bea7f11071dc2b2", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_3": { - "locked": { - "lastModified": 1710451336, - "narHash": "sha256-pP86Pcfu3BrAvRO7R64x7hs+GaQrjFes+mEPowCfkxY=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "d691274a972b3165335d261cc4671335f5c67de9", + "rev": "ff0dbd94265ac470dda06a657d5fe49de93b4599", "type": "github" }, "original": { @@ -234,7 +186,7 @@ "home-manager": "home-manager", "hyprland": "hyprland", "hyprland-contrib": "hyprland-contrib", - "nixpkgs": "nixpkgs_3" + "nixpkgs": "nixpkgs" } }, "systems": { @@ -252,21 +204,6 @@ "type": "github" } }, - "systems_2": { - "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" - } - }, "wlroots": { "flake": false, "locked": { diff --git a/flake.nix b/flake.nix index 5004e37..d3ec4c7 100644 --- a/flake.nix +++ b/flake.nix @@ -3,30 +3,31 @@ inputs = { nixpkgs.url = "nixpkgs/nixos-unstable"; - home-manager = { - url = "github:nix-community/home-manager"; - inputs.nixpkgs.follows = "nixpkgs"; - }; + + home-manager.url = "github:nix-community/home-manager"; + home-manager.inputs.nixpkgs.follows = "nixpkgs"; + hyprland.url = "github:hyprwm/Hyprland"; - hyprland-contrib = { - url = "github:hyprwm/contrib"; - inputs.nixpkgs.follows = "nixpkgs"; - }; + hyprland.inputs.nixpkgs.follows = "nixpkgs"; + + hyprland-contrib.url = "github:hyprwm/contrib"; + hyprland-contrib.inputs.nixpkgs.follows = "nixpkgs"; + ags.url = "github:Aylur/ags"; + ags.inputs.nixpkgs.follows = "nixpkgs"; }; - outputs = { nixpkgs, home-manager, hyprland, ... }@inputs: - let - system = "x86_64-linux"; - pkgs = nixpkgs.legacyPackages.${system}; - in { - homeConfigurations."pan" = home-manager.lib.homeManagerConfiguration { - inherit pkgs; - extraSpecialArgs = { inherit inputs; }; - modules = [ - hyprland.homeManagerModules.default - ./home.nix - ]; - }; + outputs = { nixpkgs, home-manager, hyprland, ... }@inputs: let + system = "x86_64-linux"; + pkgs = nixpkgs.legacyPackages.${system}; + in { + homeConfigurations."pan" = home-manager.lib.homeManagerConfiguration { + inherit pkgs; + extraSpecialArgs = { inherit inputs; }; + modules = [ + hyprland.homeManagerModules.default + ./home.nix + ]; }; + }; } diff --git a/home.nix b/home.nix index 434155e..097a0d3 100644 --- a/home.nix +++ b/home.nix @@ -1,4 +1,4 @@ -{ config, pkgs, xdg, ... }: +{ config, pkgs, ... }: { nixpkgs.config.allowUnfree = true; @@ -8,6 +8,7 @@ imports = [ # ./programs/dunst # ./programs/eww + # ./programs/spotify ./programs/ags ./programs/alacritty ./programs/discord @@ -19,12 +20,14 @@ ./programs/nnn ./programs/nvim ./programs/rofi - ./programs/spotify ./programs/ssh ./programs/wal ./programs/xdg ./programs/xonsh + ./programs/obs + ./programs/kitty + # ./services/scripts ./services/timers ]; @@ -41,6 +44,7 @@ ani-cli # Easy anime player lutgen # LUT generator prismlauncher # Minecraft launcher + unzip # Unzip utility texlive.combined.scheme-full # Latex @@ -67,5 +71,5 @@ programs.man.generateCaches = false; # Let Home Manager install and manage itself. programs.home-manager.enable = true; - home.stateVersion = "23.05"; # don't change lol, u know why + home.stateVersion = "23.05"; } diff --git a/programs/kitty/default.nix b/programs/kitty/default.nix new file mode 100644 index 0000000..2bff14d --- /dev/null +++ b/programs/kitty/default.nix @@ -0,0 +1,12 @@ +{ config, pkgs, ... }: + +{ + programs.kitty = { + enable = true; + settings = { + font_family = "Cascadia Code"; + font_size = 18; + enable_audio_bell = "no"; + }; + }; +} diff --git a/programs/obs/default.nix b/programs/obs/default.nix new file mode 100644 index 0000000..edd2865 --- /dev/null +++ b/programs/obs/default.nix @@ -0,0 +1,11 @@ +{ config, pkgs, ... }: +{ + programs.obs-studio = { + enable = true; + plugins = with pkgs.obs-studio-plugins; [ + wlrobs + obs-backgroundremoval + obs-pipewire-audio-capture + ]; + }; +} diff --git a/services/scripts/default.nix b/services/scripts/default.nix new file mode 100644 index 0000000..aa31a14 --- /dev/null +++ b/services/scripts/default.nix @@ -0,0 +1,10 @@ +{ config, pkgs, ... }: + +let + select = import ./select.nix { inherit pkgs; }; +in +{ + home.packages = [ + select + ]; +} diff --git a/services/scripts/select.nix b/services/scripts/select.nix new file mode 100644 index 0000000..c9462ab --- /dev/null +++ b/services/scripts/select.nix @@ -0,0 +1,15 @@ +{ pkgs }: + +pkgs.writeShellApplication { + name = "select"; + + runtimeInputs = [ fzf rofi ]; + + text = '' + if [ ${PPID} -ne 1 ]; then + echo -e $1 | fzf + else + echo -e $1 | rofi -dmenu -p $2 + fi + ''; +} From 79ff5f13015e4f1bb2134aa63f1a10dcec4d5b65 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 8 Apr 2024 23:19:54 -0700 Subject: [PATCH 124/412] Add kitty, obs, and scripts skeleton code Also refactors some flake.nix code to not use dictionaries --- flake.lock | 131 +++++++++-------------------------- flake.nix | 43 ++++++------ home.nix | 10 ++- programs/kitty/default.nix | 12 ++++ programs/obs/default.nix | 11 +++ services/scripts/default.nix | 10 +++ services/scripts/select.nix | 15 ++++ 7 files changed, 111 insertions(+), 121 deletions(-) create mode 100644 programs/kitty/default.nix create mode 100644 programs/obs/default.nix create mode 100644 services/scripts/default.nix create mode 100644 services/scripts/select.nix diff --git a/flake.lock b/flake.lock index abe0102..7c3d189 100644 --- a/flake.lock +++ b/flake.lock @@ -2,14 +2,16 @@ "nodes": { "ags": { "inputs": { - "nixpkgs": "nixpkgs" + "nixpkgs": [ + "nixpkgs" + ] }, "locked": { - "lastModified": 1710523796, - "narHash": "sha256-VlzW+B/6Ifk+BRy1leU0GHuQ4KqlQXLO/pRRCCHcvDQ=", + "lastModified": 1712250145, + "narHash": "sha256-8WTGn7It2kZfAmN97Epi3g/Su/w3Hbw/T4dWxE7OrBw=", "owner": "Aylur", "repo": "ags", - "rev": "5dec6c7f37be13781144a7964e75cc00c7d7045f", + "rev": "d589077199ec8a055ef936bf8a1f051b7a0c7e34", "type": "github" }, "original": { @@ -25,11 +27,11 @@ ] }, "locked": { - "lastModified": 1710532761, - "narHash": "sha256-SUXGZNrXX05YA9G6EmgupxhOr3swI1gcxLUeDMUhrEY=", + "lastModified": 1712462372, + "narHash": "sha256-WA3bbBWhd3o1wAgyHZNypjb/LG4oq+IWxFq8ey8yNPU=", "owner": "nix-community", "repo": "home-manager", - "rev": "206f457fffdb9a73596a4cb2211a471bd305243d", + "rev": "a561ad6ab38578c812cc9af3b04f2cc60ebf48c9", "type": "github" }, "original": { @@ -40,7 +42,10 @@ }, "hyprcursor": { "inputs": { - "hyprlang": "hyprlang", + "hyprlang": [ + "hyprland", + "hyprlang" + ], "nixpkgs": [ "hyprland", "nixpkgs" @@ -51,11 +56,11 @@ ] }, "locked": { - "lastModified": 1710257359, - "narHash": "sha256-43re5pzE/cswFAgw92/ugsB3+d5ufDaCcLtl9ztKfBo=", + "lastModified": 1712434681, + "narHash": "sha256-qwmR2p1oc48Bj7gUDvb1oGL19Rjs2PmEmk4ChV01A5o=", "owner": "hyprwm", "repo": "hyprcursor", - "rev": "1761f6cefd77f4fcd2039d930c88d6716ddc4974", + "rev": "818d8c4b69e0997483d60b75f701fe14b561a7a3", "type": "github" }, "original": { @@ -68,18 +73,20 @@ "inputs": { "hyprcursor": "hyprcursor", "hyprland-protocols": "hyprland-protocols", - "hyprlang": "hyprlang_2", - "nixpkgs": "nixpkgs_2", - "systems": "systems_2", + "hyprlang": "hyprlang", + "nixpkgs": [ + "nixpkgs" + ], + "systems": "systems", "wlroots": "wlroots", "xdph": "xdph" }, "locked": { - "lastModified": 1710611769, - "narHash": "sha256-gM4cDw45J8mBmM0aR5Ko/zMAA8UWnQhc4uZ5Ydvc4uo=", + "lastModified": 1712528342, + "narHash": "sha256-5tRzlHnhk28M2ClRshRAEANGE/GF9A1Cl36OXAmi+Ig=", "owner": "hyprwm", "repo": "Hyprland", - "rev": "0e87a08e15c023325b64920d9e1159f38a090695", + "rev": "43b96f03b5af60586a864ea64e8c71b11ea6eb85", "type": "github" }, "original": { @@ -95,11 +102,11 @@ ] }, "locked": { - "lastModified": 1710415616, - "narHash": "sha256-1qVByzzCcKoCmP8ReUSAjKU5V9pfTLHQIM4WI1tvQ9E=", + "lastModified": 1712505318, + "narHash": "sha256-fzlBLhXUN6y7mzEtcGNRDXxFakBEfaj4Bmj5PuoCNaM=", "owner": "hyprwm", "repo": "contrib", - "rev": "75420d09f93346d9d23d5a1e26b42699f6b66cd6", + "rev": "5870244b592c22558b658dbaf94f9e41afb0316f", "type": "github" }, "original": { @@ -134,29 +141,6 @@ } }, "hyprlang": { - "inputs": { - "nixpkgs": [ - "hyprland", - "hyprcursor", - "nixpkgs" - ], - "systems": "systems" - }, - "locked": { - "lastModified": 1709914708, - "narHash": "sha256-bR4o3mynoTa1Wi4ZTjbnsZ6iqVcPGriXp56bZh5UFTk=", - "owner": "hyprwm", - "repo": "hyprlang", - "rev": "a685493fdbeec01ca8ccdf1f3655c044a8ce2fe2", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "hyprlang", - "type": "github" - } - }, - "hyprlang_2": { "inputs": { "nixpkgs": [ "hyprland", @@ -168,11 +152,11 @@ ] }, "locked": { - "lastModified": 1709914708, - "narHash": "sha256-bR4o3mynoTa1Wi4ZTjbnsZ6iqVcPGriXp56bZh5UFTk=", + "lastModified": 1711671891, + "narHash": "sha256-C/Wwsy/RLxHP1axFFl+AnwJRWfd8gxDKKoa8nt8Qk3c=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "a685493fdbeec01ca8ccdf1f3655c044a8ce2fe2", + "rev": "c1402612146ba06606ebf64963a02bc1efe11e74", "type": "github" }, "original": { @@ -183,43 +167,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1708475490, - "narHash": "sha256-g1v0TsWBQPX97ziznfJdWhgMyMGtoBFs102xSYO4syU=", + "lastModified": 1712439257, + "narHash": "sha256-aSpiNepFOMk9932HOax0XwNxbA38GOUVOiXfUVPOrck=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "0e74ca98a74bc7270d28838369593635a5db3260", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_2": { - "locked": { - "lastModified": 1710272261, - "narHash": "sha256-g0bDwXFmTE7uGDOs9HcJsfLFhH7fOsASbAuOzDC+fhQ=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "0ad13a6833440b8e238947e47bea7f11071dc2b2", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_3": { - "locked": { - "lastModified": 1710451336, - "narHash": "sha256-pP86Pcfu3BrAvRO7R64x7hs+GaQrjFes+mEPowCfkxY=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "d691274a972b3165335d261cc4671335f5c67de9", + "rev": "ff0dbd94265ac470dda06a657d5fe49de93b4599", "type": "github" }, "original": { @@ -234,7 +186,7 @@ "home-manager": "home-manager", "hyprland": "hyprland", "hyprland-contrib": "hyprland-contrib", - "nixpkgs": "nixpkgs_3" + "nixpkgs": "nixpkgs" } }, "systems": { @@ -252,21 +204,6 @@ "type": "github" } }, - "systems_2": { - "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" - } - }, "wlroots": { "flake": false, "locked": { diff --git a/flake.nix b/flake.nix index 5004e37..d3ec4c7 100644 --- a/flake.nix +++ b/flake.nix @@ -3,30 +3,31 @@ inputs = { nixpkgs.url = "nixpkgs/nixos-unstable"; - home-manager = { - url = "github:nix-community/home-manager"; - inputs.nixpkgs.follows = "nixpkgs"; - }; + + home-manager.url = "github:nix-community/home-manager"; + home-manager.inputs.nixpkgs.follows = "nixpkgs"; + hyprland.url = "github:hyprwm/Hyprland"; - hyprland-contrib = { - url = "github:hyprwm/contrib"; - inputs.nixpkgs.follows = "nixpkgs"; - }; + hyprland.inputs.nixpkgs.follows = "nixpkgs"; + + hyprland-contrib.url = "github:hyprwm/contrib"; + hyprland-contrib.inputs.nixpkgs.follows = "nixpkgs"; + ags.url = "github:Aylur/ags"; + ags.inputs.nixpkgs.follows = "nixpkgs"; }; - outputs = { nixpkgs, home-manager, hyprland, ... }@inputs: - let - system = "x86_64-linux"; - pkgs = nixpkgs.legacyPackages.${system}; - in { - homeConfigurations."pan" = home-manager.lib.homeManagerConfiguration { - inherit pkgs; - extraSpecialArgs = { inherit inputs; }; - modules = [ - hyprland.homeManagerModules.default - ./home.nix - ]; - }; + outputs = { nixpkgs, home-manager, hyprland, ... }@inputs: let + system = "x86_64-linux"; + pkgs = nixpkgs.legacyPackages.${system}; + in { + homeConfigurations."pan" = home-manager.lib.homeManagerConfiguration { + inherit pkgs; + extraSpecialArgs = { inherit inputs; }; + modules = [ + hyprland.homeManagerModules.default + ./home.nix + ]; }; + }; } diff --git a/home.nix b/home.nix index 434155e..097a0d3 100644 --- a/home.nix +++ b/home.nix @@ -1,4 +1,4 @@ -{ config, pkgs, xdg, ... }: +{ config, pkgs, ... }: { nixpkgs.config.allowUnfree = true; @@ -8,6 +8,7 @@ imports = [ # ./programs/dunst # ./programs/eww + # ./programs/spotify ./programs/ags ./programs/alacritty ./programs/discord @@ -19,12 +20,14 @@ ./programs/nnn ./programs/nvim ./programs/rofi - ./programs/spotify ./programs/ssh ./programs/wal ./programs/xdg ./programs/xonsh + ./programs/obs + ./programs/kitty + # ./services/scripts ./services/timers ]; @@ -41,6 +44,7 @@ ani-cli # Easy anime player lutgen # LUT generator prismlauncher # Minecraft launcher + unzip # Unzip utility texlive.combined.scheme-full # Latex @@ -67,5 +71,5 @@ programs.man.generateCaches = false; # Let Home Manager install and manage itself. programs.home-manager.enable = true; - home.stateVersion = "23.05"; # don't change lol, u know why + home.stateVersion = "23.05"; } diff --git a/programs/kitty/default.nix b/programs/kitty/default.nix new file mode 100644 index 0000000..2bff14d --- /dev/null +++ b/programs/kitty/default.nix @@ -0,0 +1,12 @@ +{ config, pkgs, ... }: + +{ + programs.kitty = { + enable = true; + settings = { + font_family = "Cascadia Code"; + font_size = 18; + enable_audio_bell = "no"; + }; + }; +} diff --git a/programs/obs/default.nix b/programs/obs/default.nix new file mode 100644 index 0000000..edd2865 --- /dev/null +++ b/programs/obs/default.nix @@ -0,0 +1,11 @@ +{ config, pkgs, ... }: +{ + programs.obs-studio = { + enable = true; + plugins = with pkgs.obs-studio-plugins; [ + wlrobs + obs-backgroundremoval + obs-pipewire-audio-capture + ]; + }; +} diff --git a/services/scripts/default.nix b/services/scripts/default.nix new file mode 100644 index 0000000..aa31a14 --- /dev/null +++ b/services/scripts/default.nix @@ -0,0 +1,10 @@ +{ config, pkgs, ... }: + +let + select = import ./select.nix { inherit pkgs; }; +in +{ + home.packages = [ + select + ]; +} diff --git a/services/scripts/select.nix b/services/scripts/select.nix new file mode 100644 index 0000000..c9462ab --- /dev/null +++ b/services/scripts/select.nix @@ -0,0 +1,15 @@ +{ pkgs }: + +pkgs.writeShellApplication { + name = "select"; + + runtimeInputs = [ fzf rofi ]; + + text = '' + if [ ${PPID} -ne 1 ]; then + echo -e $1 | fzf + else + echo -e $1 | rofi -dmenu -p $2 + fi + ''; +} From a07b300be7b7daeb7763291ef76fbb0e9efa9e05 Mon Sep 17 00:00:00 2001 From: JuliaLange Date: Tue, 9 Apr 2024 15:07:17 -0700 Subject: [PATCH 125/412] Add zsh, swap alacritty for kitty Adds zsh with nix-your-shell support switch from alacritty to kitty Add zsh Fix ZSH, and switch to ZSH from alacritty Add zsh prompt Swap any-nix-shell for nix-your-shell --- home.nix | 1 + programs/hypr/keybinds.conf | 2 +- programs/hypr/window_rules.conf | 5 +++-- programs/zsh/default.nix | 31 +++++++++++++++++++++++++++++++ 4 files changed, 36 insertions(+), 3 deletions(-) create mode 100644 programs/zsh/default.nix diff --git a/home.nix b/home.nix index 097a0d3..00fedd6 100644 --- a/home.nix +++ b/home.nix @@ -26,6 +26,7 @@ ./programs/xonsh ./programs/obs ./programs/kitty + ./programs/zsh # ./services/scripts ./services/timers diff --git a/programs/hypr/keybinds.conf b/programs/hypr/keybinds.conf index d769a46..26e89e0 100644 --- a/programs/hypr/keybinds.conf +++ b/programs/hypr/keybinds.conf @@ -1,7 +1,7 @@ $mainMod = SUPER # Exec programs -bind = $mainMod, return, exec, alacritty +bind = $mainMod, return, exec, kitty bind = $mainMod SHIFT, return, exec, rofi -show run bind = $mainMod, P, exec, grimblast --freeze copy area bind = $mainMod SHIFT, P, exec, grimblast --freeze copysave area diff --git a/programs/hypr/window_rules.conf b/programs/hypr/window_rules.conf index 8d084ea..57be0c8 100644 --- a/programs/hypr/window_rules.conf +++ b/programs/hypr/window_rules.conf @@ -14,7 +14,7 @@ workspace=name:web , monitor:DP-1, persistent:true workspace=name:med , monitor:DP-1, persistent:true # Pseudo workspace=special:mus, persistent:true -workspace=special:scratch, on-created-empty: [float; size 50% 50%; center] alacritty +workspace=special:scratch, on-created-empty: [float; size 50% 50%; center] kitty windowrule = workspace name:web, librewolf windowrulev2 = workspace name:med, librewolf,title:Picture-in-Picture @@ -26,6 +26,7 @@ windowrule = workspace name:game, explorer.exe windowrulev2 = opacity 0.94 fullscreen:0 windowrulev2 = opacity 0.79 override, class:^(Alacritty)$ +windowrulev2 = opacity 0.79 override, class:^(kitty)$ windowrulev2 = opacity 1 override, initialTitle:^(Discord Popout)$ windowrulev2 = opacity 1 override, class:^(firefox)$ windowrulev2 = opacity 1 override, class:^(Gimp)$ @@ -34,6 +35,6 @@ windowrulev2 = opacity 1 override, class:^(mpv)$ env = HYPR_WORK_DB,$XDG_CACHE_HOME/hypr/workspace.db -exec-once = [workspace special:mus silent;float;size 70% 70%;center] alacritty -e spt +# exec-once = [workspace special:mus silent;float;size 70% 70%;center] mus client exec-once = [workspace name:chat silent] vesktop exec-once = [workspace name:chat silent] beeper diff --git a/programs/zsh/default.nix b/programs/zsh/default.nix new file mode 100644 index 0000000..694b981 --- /dev/null +++ b/programs/zsh/default.nix @@ -0,0 +1,31 @@ +{ config, pkgs, ... }: +{ + programs.zsh = { + enable = true; + enableCompletion = true; + autosuggestion.enable = true; + syntaxHighlighting.enable = true; + dotDir = ".config/zsh"; + + history.save = 10000; + history.size = 10000; + history.path = "${config.xdg.dataHome}/zsh/history"; + initExtra = '' + # Nix-shell + ${pkgs.nix-your-shell}/bin/nix-your-shell zsh | source /dev/stdin + + # Prompt + autoload -U colors && colors + autoload -Uz vcs_info + precmd_vcs_info() { vcs_info } + precmd_functions+=( precmd_vcs_info ) + setopt prompt_subst + zstyle ':vcs_info:*' check-for-changes true + zstyle ':vcs_info:*' unstagedstr '·*' + zstyle ':vcs_info:*' stagedstr '·+' + zstyle ':vcs_info:git:*' formats '%b%u%c' + export PROMPT="%(0?.%F{white}.%? %F{red})τ%f " + export RPROMPT="%F{yellow}\$vcs_info_msg_0_%f %F{blue}%~%f" + ''; + }; +} From 1d3bd89f144daf4a02f938eb456f2e1e770b088e Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 9 Apr 2024 15:07:17 -0700 Subject: [PATCH 126/412] Add zsh, swap alacritty for kitty Adds zsh with nix-your-shell support switch from alacritty to kitty Add zsh Fix ZSH, and switch to ZSH from alacritty Add zsh prompt Swap any-nix-shell for nix-your-shell --- home.nix | 1 + programs/hypr/keybinds.conf | 2 +- programs/hypr/window_rules.conf | 5 +++-- programs/zsh/default.nix | 31 +++++++++++++++++++++++++++++++ 4 files changed, 36 insertions(+), 3 deletions(-) create mode 100644 programs/zsh/default.nix diff --git a/home.nix b/home.nix index 097a0d3..00fedd6 100644 --- a/home.nix +++ b/home.nix @@ -26,6 +26,7 @@ ./programs/xonsh ./programs/obs ./programs/kitty + ./programs/zsh # ./services/scripts ./services/timers diff --git a/programs/hypr/keybinds.conf b/programs/hypr/keybinds.conf index d769a46..26e89e0 100644 --- a/programs/hypr/keybinds.conf +++ b/programs/hypr/keybinds.conf @@ -1,7 +1,7 @@ $mainMod = SUPER # Exec programs -bind = $mainMod, return, exec, alacritty +bind = $mainMod, return, exec, kitty bind = $mainMod SHIFT, return, exec, rofi -show run bind = $mainMod, P, exec, grimblast --freeze copy area bind = $mainMod SHIFT, P, exec, grimblast --freeze copysave area diff --git a/programs/hypr/window_rules.conf b/programs/hypr/window_rules.conf index 8d084ea..57be0c8 100644 --- a/programs/hypr/window_rules.conf +++ b/programs/hypr/window_rules.conf @@ -14,7 +14,7 @@ workspace=name:web , monitor:DP-1, persistent:true workspace=name:med , monitor:DP-1, persistent:true # Pseudo workspace=special:mus, persistent:true -workspace=special:scratch, on-created-empty: [float; size 50% 50%; center] alacritty +workspace=special:scratch, on-created-empty: [float; size 50% 50%; center] kitty windowrule = workspace name:web, librewolf windowrulev2 = workspace name:med, librewolf,title:Picture-in-Picture @@ -26,6 +26,7 @@ windowrule = workspace name:game, explorer.exe windowrulev2 = opacity 0.94 fullscreen:0 windowrulev2 = opacity 0.79 override, class:^(Alacritty)$ +windowrulev2 = opacity 0.79 override, class:^(kitty)$ windowrulev2 = opacity 1 override, initialTitle:^(Discord Popout)$ windowrulev2 = opacity 1 override, class:^(firefox)$ windowrulev2 = opacity 1 override, class:^(Gimp)$ @@ -34,6 +35,6 @@ windowrulev2 = opacity 1 override, class:^(mpv)$ env = HYPR_WORK_DB,$XDG_CACHE_HOME/hypr/workspace.db -exec-once = [workspace special:mus silent;float;size 70% 70%;center] alacritty -e spt +# exec-once = [workspace special:mus silent;float;size 70% 70%;center] mus client exec-once = [workspace name:chat silent] vesktop exec-once = [workspace name:chat silent] beeper diff --git a/programs/zsh/default.nix b/programs/zsh/default.nix new file mode 100644 index 0000000..694b981 --- /dev/null +++ b/programs/zsh/default.nix @@ -0,0 +1,31 @@ +{ config, pkgs, ... }: +{ + programs.zsh = { + enable = true; + enableCompletion = true; + autosuggestion.enable = true; + syntaxHighlighting.enable = true; + dotDir = ".config/zsh"; + + history.save = 10000; + history.size = 10000; + history.path = "${config.xdg.dataHome}/zsh/history"; + initExtra = '' + # Nix-shell + ${pkgs.nix-your-shell}/bin/nix-your-shell zsh | source /dev/stdin + + # Prompt + autoload -U colors && colors + autoload -Uz vcs_info + precmd_vcs_info() { vcs_info } + precmd_functions+=( precmd_vcs_info ) + setopt prompt_subst + zstyle ':vcs_info:*' check-for-changes true + zstyle ':vcs_info:*' unstagedstr '·*' + zstyle ':vcs_info:*' stagedstr '·+' + zstyle ':vcs_info:git:*' formats '%b%u%c' + export PROMPT="%(0?.%F{white}.%? %F{red})τ%f " + export RPROMPT="%F{yellow}\$vcs_info_msg_0_%f %F{blue}%~%f" + ''; + }; +} From 90087c06063cc119b5c442146d850c78afe79ebc Mon Sep 17 00:00:00 2001 From: JuliaLange Date: Wed, 10 Apr 2024 15:15:08 -0700 Subject: [PATCH 127/412] Add lf --- home.nix | 1 + programs/lf/default.nix | 85 ++++++++++ programs/lf/icons | 361 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 447 insertions(+) create mode 100644 programs/lf/default.nix create mode 100644 programs/lf/icons diff --git a/home.nix b/home.nix index 00fedd6..34a4693 100644 --- a/home.nix +++ b/home.nix @@ -27,6 +27,7 @@ ./programs/obs ./programs/kitty ./programs/zsh + ./programs/lf # ./services/scripts ./services/timers diff --git a/programs/lf/default.nix b/programs/lf/default.nix new file mode 100644 index 0000000..1eb8c30 --- /dev/null +++ b/programs/lf/default.nix @@ -0,0 +1,85 @@ +{ config, pkgs, ... }: + +{ + xdg.configFile."lf/icons".source = ./icons; + + home.packages = with pkgs; [ + trash-cli # Trash program for lf + ]; + + programs.lf = { + enable = true; + settings = { + # Hide specific files rather than "hidden" files + hiddenfiles = [ + "${config.home.homeDirectory}/.librewolf" + "${config.home.homeDirectory}/.nix-defexpr" + "${config.home.homeDirectory}/.nix-profile" + "${config.home.homeDirectory}/.nv" + "${config.home.homeDirectory}/.pki" + "${config.home.homeDirectory}/.steam*" + "${config.home.homeDirectory}/.zshenv" + ]; + ratios = [ + 2 + 3 + ]; + preview = true; + ignorecase = true; + icons = true; + number = true; + relativenumber = true; + }; + commands = { + dragon-out = ''%${pkgs.xdragon}/bin/xdragon -a -x "$fx"''; + mkdir = '' + ''${{ + printf "Directory Name: " + read DIR + mkdir $DIR + }} + ''; + mkfile = '' + ''${{ + printf "File Name: " + read FILE + mkdir $FILE + }} + ''; + trash = ''trash "$fx"''; + }; + keybindings = { + ";" = ""; + x = "trash"; + "." = "set hidden!"; + ";d" = "mkdir"; + ";f" = "mkfile"; + ";m" = "dragon-out"; + }; + extraConfig = + let + previewer = + pkgs.writeShellScriptBin "pv.sh" '' + file=$1 + w=$2 + h=$3 + x=$4 + y=$5 + + if [[ "$( ${pkgs.file}/bin/file -Lb --mime-type "$file")" =~ ^image ]]; then + ${pkgs.kitty}/bin/kitty +kitten icat --silent --stdin no --transfer-mode file --place "''${w}x''${h}@''${x}x''${y}" "$file" < /dev/null > /dev/tty + exit 1 + fi + + ${pkgs.pistol}/bin/pistol "$file" + ''; + cleaner = pkgs.writeShellScriptBin "clean.sh" '' + ${pkgs.kitty}/bin/kitty +kitten icat --clear --stdin no --silent --transfer-mode file < /dev/null > /dev/tty + ''; + in + '' + set cleaner ${cleaner}/bin/clean.sh + set previewer ${previewer}/bin/pv.sh + ''; + }; +} diff --git a/programs/lf/icons b/programs/lf/icons new file mode 100644 index 0000000..43dbe5d --- /dev/null +++ b/programs/lf/icons @@ -0,0 +1,361 @@ +# vim:ft=conf + +# These examples require Nerd Fonts or a compatible font to be used. +# See https://www.nerdfonts.com for more information. + +# default values from lf (with matching order) +# ln l # LINK +# or l # ORPHAN +# tw t # STICKY_OTHER_WRITABLE +# ow d # OTHER_WRITABLE +# st t # STICKY +# di d # DIR +# pi p # FIFO +# so s # SOCK +# bd b # BLK +# cd c # CHR +# su u # SETUID +# sg g # SETGID +# ex x # EXEC +# fi - # FILE + +# file types (with matching order) +ln  # LINK +or  # ORPHAN +tw t # STICKY_OTHER_WRITABLE +ow  # OTHER_WRITABLE +st t # STICKY +di  # DIR +pi p # FIFO +so s # SOCK +bd b # BLK +cd c # CHR +su u # SETUID +sg g # SETGID +ex  # EXEC +fi  # FILE + +# file extensions (vim-devicons) +*.styl  +*.sass  +*.scss  +*.htm  +*.html  +*.slim  +*.haml  +*.ejs  +*.css  +*.less  +*.md  +*.mdx  +*.markdown  +*.rmd  +*.json  +*.webmanifest  +*.js  +*.mjs  +*.jsx  +*.rb  +*.gemspec  +*.rake  +*.php  +*.py  +*.pyc  +*.pyo  +*.pyd  +*.coffee  +*.mustache  +*.hbs  +*.conf  +*.ini  +*.yml  +*.yaml  +*.toml  +*.bat  +*.mk  +*.jpg  +*.jpeg  +*.bmp  +*.png  +*.webp  +*.gif  +*.ico  +*.twig  +*.cpp  +*.c++  +*.cxx  +*.cc  +*.cp  +*.c  +*.cs 󰌛 +*.h  +*.hh  +*.hpp  +*.hxx  +*.hs  +*.lhs  +*.nix  +*.lua  +*.java  +*.sh  +*.fish  +*.bash  +*.zsh  +*.ksh  +*.csh  +*.awk  +*.ps1  +*.ml λ +*.mli λ +*.diff  +*.db  +*.sql  +*.dump  +*.clj  +*.cljc  +*.cljs  +*.edn  +*.scala  +*.go  +*.dart  +*.xul  +*.sln  +*.suo  +*.pl  +*.pm  +*.t  +*.rss  +'*.f#'  +*.fsscript  +*.fsx  +*.fs  +*.fsi  +*.rs  +*.rlib  +*.d  +*.erl  +*.hrl  +*.ex  +*.exs  +*.eex  +*.leex  +*.heex  +*.vim  +*.ai  +*.psd  +*.psb  +*.ts  +*.tsx  +*.jl  +*.pp  +*.vue  +*.elm  +*.swift  +*.xcplayground  +*.tex 󰙩 +*.r 󰟔 +*.rproj 󰗆 +*.sol 󰡪 +*.pem  + +# file names (vim-devicons) (case-insensitive not supported in lf) +*gruntfile.coffee  +*gruntfile.js  +*gruntfile.ls  +*gulpfile.coffee  +*gulpfile.js  +*gulpfile.ls  +*mix.lock  +*dropbox  +*.ds_store  +*.gitconfig  +*.gitignore  +*.gitattributes  +*.gitlab-ci.yml  +*.bashrc  +*.zshrc  +*.zshenv  +*.zprofile  +*.vimrc  +*.gvimrc  +*_vimrc  +*_gvimrc  +*.bashprofile  +*favicon.ico  +*license  +*node_modules  +*react.jsx  +*procfile  +*dockerfile  +*docker-compose.yml  +*docker-compose.yaml  +*compose.yml  +*compose.yaml  +*rakefile  +*config.ru  +*gemfile  +*makefile  +*cmakelists.txt  +*robots.txt 󰚩 + +# file names (case-sensitive adaptations) +*Gruntfile.coffee  +*Gruntfile.js  +*Gruntfile.ls  +*Gulpfile.coffee  +*Gulpfile.js  +*Gulpfile.ls  +*Dropbox  +*.DS_Store  +*LICENSE  +*React.jsx  +*Procfile  +*Dockerfile  +*Docker-compose.yml  +*Docker-compose.yaml  +*Rakefile  +*Gemfile  +*Makefile  +*CMakeLists.txt  + +# file patterns (vim-devicons) (patterns not supported in lf) +# .*jquery.*\.js$  +# .*angular.*\.js$  +# .*backbone.*\.js$  +# .*require.*\.js$  +# .*materialize.*\.js$  +# .*materialize.*\.css$  +# .*mootools.*\.js$  +# .*vimrc.*  +# Vagrantfile$  + +# file patterns (file name adaptations) +*jquery.min.js  +*angular.min.js  +*backbone.min.js  +*require.min.js  +*materialize.min.js  +*materialize.min.css  +*mootools.min.js  +*vimrc  +Vagrantfile  + +# archives or compressed (extensions from dircolors defaults) +*.tar  +*.tgz  +*.arc  +*.arj  +*.taz  +*.lha  +*.lz4  +*.lzh  +*.lzma  +*.tlz  +*.txz  +*.tzo  +*.t7z  +*.zip  +*.z  +*.dz  +*.gz  +*.lrz  +*.lz  +*.lzo  +*.xz  +*.zst  +*.tzst  +*.bz2  +*.bz  +*.tbz  +*.tbz2  +*.tz  +*.deb  +*.rpm  +*.jar  +*.war  +*.ear  +*.sar  +*.rar  +*.alz  +*.ace  +*.zoo  +*.cpio  +*.7z  +*.rz  +*.cab  +*.wim  +*.swm  +*.dwm  +*.esd  + +# image formats (extensions from dircolors defaults) +*.jpg  +*.jpeg  +*.mjpg  +*.mjpeg  +*.gif  +*.bmp  +*.pbm  +*.pgm  +*.ppm  +*.tga  +*.xbm  +*.xpm  +*.tif  +*.tiff  +*.png  +*.svg  +*.svgz  +*.mng  +*.pcx  +*.mov  +*.mpg  +*.mpeg  +*.m2v  +*.mkv  +*.webm  +*.ogm  +*.mp4  +*.m4v  +*.mp4v  +*.vob  +*.qt  +*.nuv  +*.wmv  +*.asf  +*.rm  +*.rmvb  +*.flc  +*.avi  +*.fli  +*.flv  +*.gl  +*.dl  +*.xcf  +*.xwd  +*.yuv  +*.cgm  +*.emf  +*.ogv  +*.ogx  + +# audio formats (extensions from dircolors defaults) +*.aac  +*.au  +*.flac  +*.m4a  +*.mid  +*.midi  +*.mka  +*.mp3  +*.mpc  +*.ogg  +*.ra  +*.wav  +*.oga  +*.opus  +*.spx  +*.xspf  + +# other formats +*.pdf  From aa74f4c04008e7ea20aabf0811c9cf0aef6a6c27 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 10 Apr 2024 15:15:08 -0700 Subject: [PATCH 128/412] Add lf --- home.nix | 1 + programs/lf/default.nix | 85 ++++++++++ programs/lf/icons | 361 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 447 insertions(+) create mode 100644 programs/lf/default.nix create mode 100644 programs/lf/icons diff --git a/home.nix b/home.nix index 00fedd6..34a4693 100644 --- a/home.nix +++ b/home.nix @@ -27,6 +27,7 @@ ./programs/obs ./programs/kitty ./programs/zsh + ./programs/lf # ./services/scripts ./services/timers diff --git a/programs/lf/default.nix b/programs/lf/default.nix new file mode 100644 index 0000000..1eb8c30 --- /dev/null +++ b/programs/lf/default.nix @@ -0,0 +1,85 @@ +{ config, pkgs, ... }: + +{ + xdg.configFile."lf/icons".source = ./icons; + + home.packages = with pkgs; [ + trash-cli # Trash program for lf + ]; + + programs.lf = { + enable = true; + settings = { + # Hide specific files rather than "hidden" files + hiddenfiles = [ + "${config.home.homeDirectory}/.librewolf" + "${config.home.homeDirectory}/.nix-defexpr" + "${config.home.homeDirectory}/.nix-profile" + "${config.home.homeDirectory}/.nv" + "${config.home.homeDirectory}/.pki" + "${config.home.homeDirectory}/.steam*" + "${config.home.homeDirectory}/.zshenv" + ]; + ratios = [ + 2 + 3 + ]; + preview = true; + ignorecase = true; + icons = true; + number = true; + relativenumber = true; + }; + commands = { + dragon-out = ''%${pkgs.xdragon}/bin/xdragon -a -x "$fx"''; + mkdir = '' + ''${{ + printf "Directory Name: " + read DIR + mkdir $DIR + }} + ''; + mkfile = '' + ''${{ + printf "File Name: " + read FILE + mkdir $FILE + }} + ''; + trash = ''trash "$fx"''; + }; + keybindings = { + ";" = ""; + x = "trash"; + "." = "set hidden!"; + ";d" = "mkdir"; + ";f" = "mkfile"; + ";m" = "dragon-out"; + }; + extraConfig = + let + previewer = + pkgs.writeShellScriptBin "pv.sh" '' + file=$1 + w=$2 + h=$3 + x=$4 + y=$5 + + if [[ "$( ${pkgs.file}/bin/file -Lb --mime-type "$file")" =~ ^image ]]; then + ${pkgs.kitty}/bin/kitty +kitten icat --silent --stdin no --transfer-mode file --place "''${w}x''${h}@''${x}x''${y}" "$file" < /dev/null > /dev/tty + exit 1 + fi + + ${pkgs.pistol}/bin/pistol "$file" + ''; + cleaner = pkgs.writeShellScriptBin "clean.sh" '' + ${pkgs.kitty}/bin/kitty +kitten icat --clear --stdin no --silent --transfer-mode file < /dev/null > /dev/tty + ''; + in + '' + set cleaner ${cleaner}/bin/clean.sh + set previewer ${previewer}/bin/pv.sh + ''; + }; +} diff --git a/programs/lf/icons b/programs/lf/icons new file mode 100644 index 0000000..43dbe5d --- /dev/null +++ b/programs/lf/icons @@ -0,0 +1,361 @@ +# vim:ft=conf + +# These examples require Nerd Fonts or a compatible font to be used. +# See https://www.nerdfonts.com for more information. + +# default values from lf (with matching order) +# ln l # LINK +# or l # ORPHAN +# tw t # STICKY_OTHER_WRITABLE +# ow d # OTHER_WRITABLE +# st t # STICKY +# di d # DIR +# pi p # FIFO +# so s # SOCK +# bd b # BLK +# cd c # CHR +# su u # SETUID +# sg g # SETGID +# ex x # EXEC +# fi - # FILE + +# file types (with matching order) +ln  # LINK +or  # ORPHAN +tw t # STICKY_OTHER_WRITABLE +ow  # OTHER_WRITABLE +st t # STICKY +di  # DIR +pi p # FIFO +so s # SOCK +bd b # BLK +cd c # CHR +su u # SETUID +sg g # SETGID +ex  # EXEC +fi  # FILE + +# file extensions (vim-devicons) +*.styl  +*.sass  +*.scss  +*.htm  +*.html  +*.slim  +*.haml  +*.ejs  +*.css  +*.less  +*.md  +*.mdx  +*.markdown  +*.rmd  +*.json  +*.webmanifest  +*.js  +*.mjs  +*.jsx  +*.rb  +*.gemspec  +*.rake  +*.php  +*.py  +*.pyc  +*.pyo  +*.pyd  +*.coffee  +*.mustache  +*.hbs  +*.conf  +*.ini  +*.yml  +*.yaml  +*.toml  +*.bat  +*.mk  +*.jpg  +*.jpeg  +*.bmp  +*.png  +*.webp  +*.gif  +*.ico  +*.twig  +*.cpp  +*.c++  +*.cxx  +*.cc  +*.cp  +*.c  +*.cs 󰌛 +*.h  +*.hh  +*.hpp  +*.hxx  +*.hs  +*.lhs  +*.nix  +*.lua  +*.java  +*.sh  +*.fish  +*.bash  +*.zsh  +*.ksh  +*.csh  +*.awk  +*.ps1  +*.ml λ +*.mli λ +*.diff  +*.db  +*.sql  +*.dump  +*.clj  +*.cljc  +*.cljs  +*.edn  +*.scala  +*.go  +*.dart  +*.xul  +*.sln  +*.suo  +*.pl  +*.pm  +*.t  +*.rss  +'*.f#'  +*.fsscript  +*.fsx  +*.fs  +*.fsi  +*.rs  +*.rlib  +*.d  +*.erl  +*.hrl  +*.ex  +*.exs  +*.eex  +*.leex  +*.heex  +*.vim  +*.ai  +*.psd  +*.psb  +*.ts  +*.tsx  +*.jl  +*.pp  +*.vue  +*.elm  +*.swift  +*.xcplayground  +*.tex 󰙩 +*.r 󰟔 +*.rproj 󰗆 +*.sol 󰡪 +*.pem  + +# file names (vim-devicons) (case-insensitive not supported in lf) +*gruntfile.coffee  +*gruntfile.js  +*gruntfile.ls  +*gulpfile.coffee  +*gulpfile.js  +*gulpfile.ls  +*mix.lock  +*dropbox  +*.ds_store  +*.gitconfig  +*.gitignore  +*.gitattributes  +*.gitlab-ci.yml  +*.bashrc  +*.zshrc  +*.zshenv  +*.zprofile  +*.vimrc  +*.gvimrc  +*_vimrc  +*_gvimrc  +*.bashprofile  +*favicon.ico  +*license  +*node_modules  +*react.jsx  +*procfile  +*dockerfile  +*docker-compose.yml  +*docker-compose.yaml  +*compose.yml  +*compose.yaml  +*rakefile  +*config.ru  +*gemfile  +*makefile  +*cmakelists.txt  +*robots.txt 󰚩 + +# file names (case-sensitive adaptations) +*Gruntfile.coffee  +*Gruntfile.js  +*Gruntfile.ls  +*Gulpfile.coffee  +*Gulpfile.js  +*Gulpfile.ls  +*Dropbox  +*.DS_Store  +*LICENSE  +*React.jsx  +*Procfile  +*Dockerfile  +*Docker-compose.yml  +*Docker-compose.yaml  +*Rakefile  +*Gemfile  +*Makefile  +*CMakeLists.txt  + +# file patterns (vim-devicons) (patterns not supported in lf) +# .*jquery.*\.js$  +# .*angular.*\.js$  +# .*backbone.*\.js$  +# .*require.*\.js$  +# .*materialize.*\.js$  +# .*materialize.*\.css$  +# .*mootools.*\.js$  +# .*vimrc.*  +# Vagrantfile$  + +# file patterns (file name adaptations) +*jquery.min.js  +*angular.min.js  +*backbone.min.js  +*require.min.js  +*materialize.min.js  +*materialize.min.css  +*mootools.min.js  +*vimrc  +Vagrantfile  + +# archives or compressed (extensions from dircolors defaults) +*.tar  +*.tgz  +*.arc  +*.arj  +*.taz  +*.lha  +*.lz4  +*.lzh  +*.lzma  +*.tlz  +*.txz  +*.tzo  +*.t7z  +*.zip  +*.z  +*.dz  +*.gz  +*.lrz  +*.lz  +*.lzo  +*.xz  +*.zst  +*.tzst  +*.bz2  +*.bz  +*.tbz  +*.tbz2  +*.tz  +*.deb  +*.rpm  +*.jar  +*.war  +*.ear  +*.sar  +*.rar  +*.alz  +*.ace  +*.zoo  +*.cpio  +*.7z  +*.rz  +*.cab  +*.wim  +*.swm  +*.dwm  +*.esd  + +# image formats (extensions from dircolors defaults) +*.jpg  +*.jpeg  +*.mjpg  +*.mjpeg  +*.gif  +*.bmp  +*.pbm  +*.pgm  +*.ppm  +*.tga  +*.xbm  +*.xpm  +*.tif  +*.tiff  +*.png  +*.svg  +*.svgz  +*.mng  +*.pcx  +*.mov  +*.mpg  +*.mpeg  +*.m2v  +*.mkv  +*.webm  +*.ogm  +*.mp4  +*.m4v  +*.mp4v  +*.vob  +*.qt  +*.nuv  +*.wmv  +*.asf  +*.rm  +*.rmvb  +*.flc  +*.avi  +*.fli  +*.flv  +*.gl  +*.dl  +*.xcf  +*.xwd  +*.yuv  +*.cgm  +*.emf  +*.ogv  +*.ogx  + +# audio formats (extensions from dircolors defaults) +*.aac  +*.au  +*.flac  +*.m4a  +*.mid  +*.midi  +*.mka  +*.mp3  +*.mpc  +*.ogg  +*.ra  +*.wav  +*.oga  +*.opus  +*.spx  +*.xspf  + +# other formats +*.pdf  From a4735423b4c46a6ef5cf1bbe54ab4435370bac89 Mon Sep 17 00:00:00 2001 From: JuliaLange Date: Sun, 14 Apr 2024 02:44:42 -0700 Subject: [PATCH 129/412] Hypr, add icon support --- .gitignore | 2 +- programs/hypr/default.nix | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 7c22503..fe40c22 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -**/**/plugins/*.plugin.js +hmModules/apps/hypr/icons/ diff --git a/programs/hypr/default.nix b/programs/hypr/default.nix index 645ef5c..f390790 100644 --- a/programs/hypr/default.nix +++ b/programs/hypr/default.nix @@ -10,6 +10,9 @@ let rootPath = ./.; in ${builtins.readFile ./keybinds.conf} ${builtins.readFile ./xwaylandvideobridge.conf} exec-once=${pkgs.polkit-kde-agent}/libexec/polkit-kde-authentication-agent-1 + + env = HYPRCURSOR_THEME,miku + env = HYPRCURSOR_SIZE,64 ''; # wayland.windowManager.hyprland.enableNvidiaPatches = true; home.packages = with pkgs; [ @@ -19,14 +22,22 @@ let rootPath = ./.; in wl-clipboard # Clipboard manager for wayland xdg-desktop-portal-hyprland # XDP for hyprland hyprpicker # Colorpicker, needed for screenshot tool + hyprcursor # Hyprland cursor inputs.hyprland-contrib.packages.${pkgs.system}.grimblast # Screenshot tool xwaylandvideobridge # Allows screensharing with xwayland apps polkit-kde-agent # Polkit handler ]; + # Hyprland screenshot tool xdg.configFile."hypr-scripts" = { source = rootPath + "/scripts"; target = "hypr/scripts"; executable = true; }; + + xdg.dataFile."hypr-icons" = { + source = rootPath + "/icons"; + target = "icons/"; + recursive = true; + }; } From bbd5b2f423368da8e2b3ba2d9e1892908c39683c Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sun, 14 Apr 2024 02:44:42 -0700 Subject: [PATCH 130/412] Hypr, add icon support --- .gitignore | 2 +- programs/hypr/default.nix | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 7c22503..fe40c22 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -**/**/plugins/*.plugin.js +hmModules/apps/hypr/icons/ diff --git a/programs/hypr/default.nix b/programs/hypr/default.nix index 645ef5c..f390790 100644 --- a/programs/hypr/default.nix +++ b/programs/hypr/default.nix @@ -10,6 +10,9 @@ let rootPath = ./.; in ${builtins.readFile ./keybinds.conf} ${builtins.readFile ./xwaylandvideobridge.conf} exec-once=${pkgs.polkit-kde-agent}/libexec/polkit-kde-authentication-agent-1 + + env = HYPRCURSOR_THEME,miku + env = HYPRCURSOR_SIZE,64 ''; # wayland.windowManager.hyprland.enableNvidiaPatches = true; home.packages = with pkgs; [ @@ -19,14 +22,22 @@ let rootPath = ./.; in wl-clipboard # Clipboard manager for wayland xdg-desktop-portal-hyprland # XDP for hyprland hyprpicker # Colorpicker, needed for screenshot tool + hyprcursor # Hyprland cursor inputs.hyprland-contrib.packages.${pkgs.system}.grimblast # Screenshot tool xwaylandvideobridge # Allows screensharing with xwayland apps polkit-kde-agent # Polkit handler ]; + # Hyprland screenshot tool xdg.configFile."hypr-scripts" = { source = rootPath + "/scripts"; target = "hypr/scripts"; executable = true; }; + + xdg.dataFile."hypr-icons" = { + source = rootPath + "/icons"; + target = "icons/"; + recursive = true; + }; } From ffada2703cf16ed5e3b8e38710fd49ca84152998 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sun, 14 Apr 2024 05:40:02 -0700 Subject: [PATCH 131/412] Refactor codebase to use nix modules --- flake.lock | 46 +++++----- flake.nix | 13 +-- hmModules/apps/chat/beeper/default.nix | 13 +++ hmModules/apps/chat/default.nix | 8 ++ hmModules/apps/chat/discord/default.nix | 12 +++ hmModules/apps/default.nix | 18 ++++ hmModules/apps/file-browsers/default.nix | 8 ++ hmModules/apps/file-browsers/lf/default.nix | 82 +++++++++++++++++ .../apps/file-browsers}/lf/icons | 0 hmModules/apps/file-browsers/nnn/default.nix | 17 ++++ hmModules/apps/gimp/default.nix | 13 +++ hmModules/apps/git/default.nix | 19 ++++ hmModules/apps/hypr/default.nix | 50 ++++++++++ .../apps}/hypr/keybinds.conf | 0 .../apps}/hypr/league_rules.conf | 0 {programs => hmModules/apps}/hypr/nvidia.conf | 0 .../apps}/hypr/scripts/changeprimary.xsh | 0 .../apps}/hypr/scripts/changesecondary.xsh | 0 .../apps}/hypr/scripts/initdb.xsh | 0 .../apps}/hypr/settings.conf | 0 .../apps}/hypr/window_rules.conf | 0 .../apps}/hypr/xwaylandvideobridge.conf | 0 hmModules/apps/librewolf/default.nix | 16 ++++ hmModules/apps/lutris/default.nix | 22 +++++ hmModules/apps/media-viewers/default.nix | 9 ++ hmModules/apps/media-viewers/feh/default.nix | 13 +++ hmModules/apps/media-viewers/mpv/default.nix | 22 +++++ .../apps/media-viewers/zathura/default.nix | 13 +++ hmModules/apps/neovim/default.nix | 86 ++++++++++++++++++ .../nvim => hmModules/apps/neovim}/init.vim | 3 +- hmModules/apps/obs/default.nix | 17 ++++ hmModules/apps/rofi/default.nix | 14 +++ hmModules/apps/shells/default.nix | 9 ++ hmModules/apps/shells/fish/default.nix | 45 +++++++++ .../shells}/fish/functions/fish_prompt.fish | 0 .../fish/functions/fish_right_prompt.fish | 0 .../fish/functions/git_branch_name.fish | 0 .../shells}/fish/functions/git_is_dirty.fish | 0 .../shells}/fish/functions/git_is_repo.fish | 0 .../shells}/fish/functions/git_is_staged.fish | 0 .../fish/functions/git_is_touched.fish | 0 .../fish/functions/git_is_worktree.fish | 0 .../apps/shells}/fish/functions/n.fish | 0 .../apps/shells}/fish/functions/ssh.fish | 0 hmModules/apps/shells/xonsh/default.nix | 22 +++++ .../apps/shells}/xonsh/rc.xsh | 0 hmModules/apps/shells/zsh/default.nix | 47 ++++++++++ .../terminal-emulators/alacritty/default.nix | 39 ++++++++ hmModules/apps/terminal-emulators/default.nix | 8 ++ .../apps/terminal-emulators/kitty/default.nix | 20 ++++ hmModules/default.nix | 8 ++ hmModules/services/default.nix | 14 +++ hmModules/services/dunst/default.nix | 49 ++++++++++ hmModules/services/home/default.nix | 38 ++++++++ hmModules/services/manpages/default.nix | 15 +++ hmModules/services/ssh/default.nix | 14 +++ hmModules/services/timers/default.nix | 60 ++++++++++++ .../services}/timers/scripts/chimes.ogg | Bin .../services}/timers/scripts/notify-time.sh | 0 hmModules/services/trash/default.nix | 13 +++ hmModules/services/wal/default.nix | 34 +++++++ .../services/widgets}/ags/config/config.js | 0 .../widgets}/ags/config/modules/clock.js | 0 .../notifications/notificationPopup.ts | 0 .../config/modules/notifications/style.css | 0 .../ags/config/modules/workspace-switch.js | 0 hmModules/services/widgets/ags/default.nix | 25 +++++ hmModules/services/widgets/default.nix | 8 ++ .../services/widgets}/eww/config/eww.scss | 0 .../services/widgets}/eww/config/eww.yuck | 0 .../widgets}/eww/config/modules/bar.yuck | 0 .../config/modules/components/hyprwindow.yuck | 0 .../modules/components/hyprworkspaces.yuck | 0 .../config/modules/components/internet.yuck | 0 .../modules/components/japaneseaudio.yuck | 0 .../modules/components/japanesebattery.yuck | 0 .../modules/components/japanesedate.yuck | 0 .../widgets}/eww/config/modules/powerbar.yuck | 0 .../widgets}/eww/config/modules/switch.yuck | 0 .../config/scripts/change-active-workspace | 0 .../eww/config/scripts/get-active-workspace | 0 .../eww/config/scripts/get-window-title | 0 .../eww/config/scripts/get-workspaces | 0 .../widgets}/eww/config/scripts/japanesedate | 0 .../widgets}/eww/config/scripts/medpreview | 0 .../widgets}/eww/config/variables.yuck | 0 hmModules/services/widgets/eww/default.nix | 13 +++ home.nix | 77 ---------------- programs/ags/default.nix | 23 ----- programs/alacritty/default.nix | 32 ------- programs/discord/default.nix | 6 -- programs/dunst/default.nix | 41 --------- programs/eww/default.nix | 7 -- programs/fish/default.nix | 43 --------- programs/git/default.nix | 12 --- programs/hypr/default.nix | 43 --------- programs/kitty/default.nix | 12 --- programs/lf/default.nix | 85 ----------------- programs/lutris/default.nix | 16 ---- programs/mpv/default.nix | 14 --- programs/nnn/default.nix | 14 --- programs/nvim/default.nix | 74 --------------- programs/obs/default.nix | 11 --- programs/rofi/default.nix | 6 -- programs/spotify/default.nix | 18 ---- programs/ssh/default.nix | 8 -- programs/wal/default.nix | 28 ------ programs/xdg/default.nix | 18 ---- programs/xonsh/default.nix | 17 ---- programs/zsh/default.nix | 31 ------- services/scripts/default.nix | 10 -- services/scripts/select.nix | 15 --- services/timers/default.nix | 52 ----------- systems/pan/default.nix | 54 +++++++++++ 114 files changed, 1018 insertions(+), 744 deletions(-) create mode 100644 hmModules/apps/chat/beeper/default.nix create mode 100644 hmModules/apps/chat/default.nix create mode 100644 hmModules/apps/chat/discord/default.nix create mode 100644 hmModules/apps/default.nix create mode 100644 hmModules/apps/file-browsers/default.nix create mode 100644 hmModules/apps/file-browsers/lf/default.nix rename {programs => hmModules/apps/file-browsers}/lf/icons (100%) create mode 100644 hmModules/apps/file-browsers/nnn/default.nix create mode 100644 hmModules/apps/gimp/default.nix create mode 100644 hmModules/apps/git/default.nix create mode 100644 hmModules/apps/hypr/default.nix rename {programs => hmModules/apps}/hypr/keybinds.conf (100%) rename {programs => hmModules/apps}/hypr/league_rules.conf (100%) rename {programs => hmModules/apps}/hypr/nvidia.conf (100%) rename {programs => hmModules/apps}/hypr/scripts/changeprimary.xsh (100%) rename {programs => hmModules/apps}/hypr/scripts/changesecondary.xsh (100%) rename {programs => hmModules/apps}/hypr/scripts/initdb.xsh (100%) rename {programs => hmModules/apps}/hypr/settings.conf (100%) rename {programs => hmModules/apps}/hypr/window_rules.conf (100%) rename {programs => hmModules/apps}/hypr/xwaylandvideobridge.conf (100%) create mode 100644 hmModules/apps/librewolf/default.nix create mode 100644 hmModules/apps/lutris/default.nix create mode 100644 hmModules/apps/media-viewers/default.nix create mode 100644 hmModules/apps/media-viewers/feh/default.nix create mode 100644 hmModules/apps/media-viewers/mpv/default.nix create mode 100644 hmModules/apps/media-viewers/zathura/default.nix create mode 100644 hmModules/apps/neovim/default.nix rename {programs/nvim => hmModules/apps/neovim}/init.vim (93%) create mode 100644 hmModules/apps/obs/default.nix create mode 100644 hmModules/apps/rofi/default.nix create mode 100644 hmModules/apps/shells/default.nix create mode 100644 hmModules/apps/shells/fish/default.nix rename {programs => hmModules/apps/shells}/fish/functions/fish_prompt.fish (100%) rename {programs => hmModules/apps/shells}/fish/functions/fish_right_prompt.fish (100%) rename {programs => hmModules/apps/shells}/fish/functions/git_branch_name.fish (100%) rename {programs => hmModules/apps/shells}/fish/functions/git_is_dirty.fish (100%) rename {programs => hmModules/apps/shells}/fish/functions/git_is_repo.fish (100%) rename {programs => hmModules/apps/shells}/fish/functions/git_is_staged.fish (100%) rename {programs => hmModules/apps/shells}/fish/functions/git_is_touched.fish (100%) rename {programs => hmModules/apps/shells}/fish/functions/git_is_worktree.fish (100%) rename {programs => hmModules/apps/shells}/fish/functions/n.fish (100%) rename {programs => hmModules/apps/shells}/fish/functions/ssh.fish (100%) create mode 100644 hmModules/apps/shells/xonsh/default.nix rename {programs => hmModules/apps/shells}/xonsh/rc.xsh (100%) create mode 100644 hmModules/apps/shells/zsh/default.nix create mode 100644 hmModules/apps/terminal-emulators/alacritty/default.nix create mode 100644 hmModules/apps/terminal-emulators/default.nix create mode 100644 hmModules/apps/terminal-emulators/kitty/default.nix create mode 100644 hmModules/default.nix create mode 100644 hmModules/services/default.nix create mode 100644 hmModules/services/dunst/default.nix create mode 100644 hmModules/services/home/default.nix create mode 100644 hmModules/services/manpages/default.nix create mode 100644 hmModules/services/ssh/default.nix create mode 100644 hmModules/services/timers/default.nix rename {services => hmModules/services}/timers/scripts/chimes.ogg (100%) rename {services => hmModules/services}/timers/scripts/notify-time.sh (100%) create mode 100644 hmModules/services/trash/default.nix create mode 100644 hmModules/services/wal/default.nix rename {programs => hmModules/services/widgets}/ags/config/config.js (100%) rename {programs => hmModules/services/widgets}/ags/config/modules/clock.js (100%) rename {programs => hmModules/services/widgets}/ags/config/modules/notifications/notificationPopup.ts (100%) rename {programs => hmModules/services/widgets}/ags/config/modules/notifications/style.css (100%) rename {programs => hmModules/services/widgets}/ags/config/modules/workspace-switch.js (100%) create mode 100644 hmModules/services/widgets/ags/default.nix create mode 100644 hmModules/services/widgets/default.nix rename {programs => hmModules/services/widgets}/eww/config/eww.scss (100%) rename {programs => hmModules/services/widgets}/eww/config/eww.yuck (100%) rename {programs => hmModules/services/widgets}/eww/config/modules/bar.yuck (100%) rename {programs => hmModules/services/widgets}/eww/config/modules/components/hyprwindow.yuck (100%) rename {programs => hmModules/services/widgets}/eww/config/modules/components/hyprworkspaces.yuck (100%) rename {programs => hmModules/services/widgets}/eww/config/modules/components/internet.yuck (100%) rename {programs => hmModules/services/widgets}/eww/config/modules/components/japaneseaudio.yuck (100%) rename {programs => hmModules/services/widgets}/eww/config/modules/components/japanesebattery.yuck (100%) rename {programs => hmModules/services/widgets}/eww/config/modules/components/japanesedate.yuck (100%) rename {programs => hmModules/services/widgets}/eww/config/modules/powerbar.yuck (100%) rename {programs => hmModules/services/widgets}/eww/config/modules/switch.yuck (100%) rename {programs => hmModules/services/widgets}/eww/config/scripts/change-active-workspace (100%) rename {programs => hmModules/services/widgets}/eww/config/scripts/get-active-workspace (100%) rename {programs => hmModules/services/widgets}/eww/config/scripts/get-window-title (100%) rename {programs => hmModules/services/widgets}/eww/config/scripts/get-workspaces (100%) rename {programs => hmModules/services/widgets}/eww/config/scripts/japanesedate (100%) rename {programs => hmModules/services/widgets}/eww/config/scripts/medpreview (100%) rename {programs => hmModules/services/widgets}/eww/config/variables.yuck (100%) create mode 100644 hmModules/services/widgets/eww/default.nix delete mode 100644 home.nix delete mode 100644 programs/ags/default.nix delete mode 100644 programs/alacritty/default.nix delete mode 100644 programs/discord/default.nix delete mode 100644 programs/dunst/default.nix delete mode 100644 programs/eww/default.nix delete mode 100644 programs/fish/default.nix delete mode 100644 programs/git/default.nix delete mode 100644 programs/hypr/default.nix delete mode 100644 programs/kitty/default.nix delete mode 100644 programs/lf/default.nix delete mode 100644 programs/lutris/default.nix delete mode 100644 programs/mpv/default.nix delete mode 100644 programs/nnn/default.nix delete mode 100644 programs/nvim/default.nix delete mode 100644 programs/obs/default.nix delete mode 100644 programs/rofi/default.nix delete mode 100644 programs/spotify/default.nix delete mode 100644 programs/ssh/default.nix delete mode 100644 programs/wal/default.nix delete mode 100644 programs/xdg/default.nix delete mode 100644 programs/xonsh/default.nix delete mode 100644 programs/zsh/default.nix delete mode 100644 services/scripts/default.nix delete mode 100644 services/scripts/select.nix delete mode 100644 services/timers/default.nix create mode 100644 systems/pan/default.nix diff --git a/flake.lock b/flake.lock index 7c3d189..3a7bcc5 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1712250145, - "narHash": "sha256-8WTGn7It2kZfAmN97Epi3g/Su/w3Hbw/T4dWxE7OrBw=", + "lastModified": 1712834339, + "narHash": "sha256-gRYAbyxx4Z2s4hMoXHSu3wv2+VSiiR2Nk+AZmCZ6kc4=", "owner": "Aylur", "repo": "ags", - "rev": "d589077199ec8a055ef936bf8a1f051b7a0c7e34", + "rev": "c13bcba224f9ecaaa2f22b1d2895bb62e8face19", "type": "github" }, "original": { @@ -27,11 +27,11 @@ ] }, "locked": { - "lastModified": 1712462372, - "narHash": "sha256-WA3bbBWhd3o1wAgyHZNypjb/LG4oq+IWxFq8ey8yNPU=", + "lastModified": 1713077896, + "narHash": "sha256-Noot8H0EZEAFRQWyGxh9ryvhK96xpIqKbh78X447JWs=", "owner": "nix-community", "repo": "home-manager", - "rev": "a561ad6ab38578c812cc9af3b04f2cc60ebf48c9", + "rev": "630a0992b3627c64e34f179fab68e3d48c6991c0", "type": "github" }, "original": { @@ -82,11 +82,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1712528342, - "narHash": "sha256-5tRzlHnhk28M2ClRshRAEANGE/GF9A1Cl36OXAmi+Ig=", + "lastModified": 1713050186, + "narHash": "sha256-AKdzVa0Zz5PQ1ptQgD0jj8J+UZUW9OeKGZ0mNVnkyI4=", "owner": "hyprwm", "repo": "Hyprland", - "rev": "43b96f03b5af60586a864ea64e8c71b11ea6eb85", + "rev": "0634aaeac6cca12e4f72174c431c2db9da9c0072", "type": "github" }, "original": { @@ -167,11 +167,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1712439257, - "narHash": "sha256-aSpiNepFOMk9932HOax0XwNxbA38GOUVOiXfUVPOrck=", + "lastModified": 1712791164, + "narHash": "sha256-3sbWO1mbpWsLepZGbWaMovSO7ndZeFqDSdX0hZ9nVyw=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "ff0dbd94265ac470dda06a657d5fe49de93b4599", + "rev": "1042fd8b148a9105f3c0aca3a6177fd1d9360ba5", "type": "github" }, "original": { @@ -207,20 +207,18 @@ "wlroots": { "flake": false, "locked": { - "host": "gitlab.freedesktop.org", - "lastModified": 1709983277, - "narHash": "sha256-wXWIJLd4F2JZeMaihWVDW/yYXCLEC8OpeNJZg9a9ly8=", - "owner": "wlroots", - "repo": "wlroots", - "rev": "50eae512d9cecbf0b3b1898bb1f0b40fa05fe19b", - "type": "gitlab" + "lastModified": 1712935342, + "narHash": "sha256-zzIbTFNFd/as42jyGx23fil2uBDYYv+8GA5JmRq5y9c=", + "owner": "hyprwm", + "repo": "wlroots-hyprland", + "rev": "62eeffbe233d199f520a5755c344e85f8eab7940", + "type": "github" }, "original": { - "host": "gitlab.freedesktop.org", - "owner": "wlroots", - "repo": "wlroots", - "rev": "50eae512d9cecbf0b3b1898bb1f0b40fa05fe19b", - "type": "gitlab" + "owner": "hyprwm", + "repo": "wlroots-hyprland", + "rev": "62eeffbe233d199f520a5755c344e85f8eab7940", + "type": "github" } }, "xdph": { diff --git a/flake.nix b/flake.nix index d3ec4c7..af16e17 100644 --- a/flake.nix +++ b/flake.nix @@ -17,17 +17,18 @@ ags.inputs.nixpkgs.follows = "nixpkgs"; }; - outputs = { nixpkgs, home-manager, hyprland, ... }@inputs: let + outputs = { nixpkgs, home-manager, ... }@inputs: + let system = "x86_64-linux"; pkgs = nixpkgs.legacyPackages.${system}; - in { - homeConfigurations."pan" = home-manager.lib.homeManagerConfiguration { + defaultConfig = extraModules: home-manager.lib.homeManagerConfiguration { inherit pkgs; extraSpecialArgs = { inherit inputs; }; modules = [ - hyprland.homeManagerModules.default - ./home.nix - ]; + ./hmModules + ] ++ extraModules; }; + in { + homeConfigurations.pan = defaultConfig [ ./systems/pan ]; }; } diff --git a/hmModules/apps/chat/beeper/default.nix b/hmModules/apps/chat/beeper/default.nix new file mode 100644 index 0000000..9f43a70 --- /dev/null +++ b/hmModules/apps/chat/beeper/default.nix @@ -0,0 +1,13 @@ +{ config, pkgs, lib, ... }: + +{ + options.beeper = { + enable = lib.mkEnableOption "Enables beeper"; + }; + + config = lib.mkIf config.beeper.enable { + home.packages = with pkgs; [ + beeper + ]; + }; +} diff --git a/hmModules/apps/chat/default.nix b/hmModules/apps/chat/default.nix new file mode 100644 index 0000000..84ad4e5 --- /dev/null +++ b/hmModules/apps/chat/default.nix @@ -0,0 +1,8 @@ +{ config, pkgs, ... }: + +{ + imports = [ + ./discord + ./beeper + ]; +} diff --git a/hmModules/apps/chat/discord/default.nix b/hmModules/apps/chat/discord/default.nix new file mode 100644 index 0000000..474b6ac --- /dev/null +++ b/hmModules/apps/chat/discord/default.nix @@ -0,0 +1,12 @@ +{ config, pkgs, lib, ... }: +{ + options.discord = { + enable = lib.mkEnableOption "Enables discord"; + }; + + config = lib.mkIf config.discord.enable { + home.packages = with pkgs; [ + vesktop # Base app + ]; + }; +} diff --git a/hmModules/apps/default.nix b/hmModules/apps/default.nix new file mode 100644 index 0000000..4d496dc --- /dev/null +++ b/hmModules/apps/default.nix @@ -0,0 +1,18 @@ +{ config, pkgs, ... }: + +{ + imports = [ + ./chat + ./file-browsers + ./gimp + ./git + ./hypr + ./lutris + ./media-viewers + ./neovim + ./obs + ./rofi + ./shells + ./terminal-emulators + ]; +} diff --git a/hmModules/apps/file-browsers/default.nix b/hmModules/apps/file-browsers/default.nix new file mode 100644 index 0000000..118e357 --- /dev/null +++ b/hmModules/apps/file-browsers/default.nix @@ -0,0 +1,8 @@ +{ config, pkgs, lib, ... }: + +{ + imports = [ + ./lf + ./nnn + ]; +} diff --git a/hmModules/apps/file-browsers/lf/default.nix b/hmModules/apps/file-browsers/lf/default.nix new file mode 100644 index 0000000..c37b608 --- /dev/null +++ b/hmModules/apps/file-browsers/lf/default.nix @@ -0,0 +1,82 @@ +{ config, pkgs, lib, ... }: + +{ + options.lf = { + enable = lib.mkEnableOption "Enables lf"; + hiddenfiles = lib.mkOption { default = [ ".*" ]; }; + leader = lib.mkOption { default = ""; }; + }; + + config = lib.mkIf config.lf.enable { + xdg.configFile."lf/icons".source = ./icons; + + programs.lf = { + enable = true; + settings = { + # Hide specific files rather than "hidden" files + hiddenfiles = config.lf.hiddenfiles; + ratios = [ + 2 + 3 + ]; + preview = true; + ignorecase = true; + icons = true; + number = true; + relativenumber = true; + }; + commands = { + dragon-out = ''%${pkgs.xdragon}/bin/xdragon -a -x "$fx"''; + mkdir = '' + ''${{ + printf "Directory Name: " + read DIR + mkdir $DIR + }} + ''; + mkfile = '' + ''${{ + printf "File Name: " + read FILE + mkdir $FILE + }} + ''; + }; + keybindings = let + leader = config.lf.leader; + in { + "${leader}" = ""; + "v" = ":toggle; down"; + "." = "set hidden!"; + "${leader}d" = "mkdir"; + "${leader}f" = "mkfile"; + "${leader}m" = "dragon-out"; + }; + extraConfig = + let + previewer = + pkgs.writeShellScriptBin "pv.sh" '' + file=$1 + w=$2 + h=$3 + x=$4 + y=$5 + + if [[ "$( ${pkgs.file}/bin/file -Lb --mime-type "$file")" =~ ^image ]]; then + ${pkgs.kitty}/bin/kitty +kitten icat --silent --stdin no --transfer-mode file --place "''${w}x''${h}@''${x}x''${y}" "$file" < /dev/null > /dev/tty + exit 1 + fi + + ${pkgs.pistol}/bin/pistol "$file" + ''; + cleaner = pkgs.writeShellScriptBin "clean.sh" '' + ${pkgs.kitty}/bin/kitty +kitten icat --clear --stdin no --silent --transfer-mode file < /dev/null > /dev/tty + ''; + in + '' + set cleaner ${cleaner}/bin/clean.sh + set previewer ${previewer}/bin/pv.sh + ''; + }; + }; +} diff --git a/programs/lf/icons b/hmModules/apps/file-browsers/lf/icons similarity index 100% rename from programs/lf/icons rename to hmModules/apps/file-browsers/lf/icons diff --git a/hmModules/apps/file-browsers/nnn/default.nix b/hmModules/apps/file-browsers/nnn/default.nix new file mode 100644 index 0000000..f68cec2 --- /dev/null +++ b/hmModules/apps/file-browsers/nnn/default.nix @@ -0,0 +1,17 @@ +{ config, pkgs, lib, ... }: + +{ + options.nnn = { + enable = lib.mkEnableOption "Enables nnn"; + }; + + config = lib.mkIf config.nnn.enable { + programs.nnn.enable = true; + home.sessionVariables = { + NNN_FCOLORS = "0000E6310000000000000000"; + NNN_OPTS = "eH"; + NNN_FIFO = "/tmp/nnn.fifo"; + NNN_TRASH = lib.mkIf config.trash.enable "1"; + }; + }; +} diff --git a/hmModules/apps/gimp/default.nix b/hmModules/apps/gimp/default.nix new file mode 100644 index 0000000..0998e28 --- /dev/null +++ b/hmModules/apps/gimp/default.nix @@ -0,0 +1,13 @@ +{ config, pkgs, lib, ... }: + +{ + options.gimp = { + enable = lib.mkEnableOption "Enables gimp"; + }; + + config = lib.mkIf config.gimp.enable { + home.packages = with pkgs; [ + gimp + ]; + }; +} diff --git a/hmModules/apps/git/default.nix b/hmModules/apps/git/default.nix new file mode 100644 index 0000000..0a87ff0 --- /dev/null +++ b/hmModules/apps/git/default.nix @@ -0,0 +1,19 @@ +{ config, pkgs, lib, ... }: + +{ + options.git = { + enable = lib.mkEnableOption "Enables git"; + username = lib.mkOption { default = config.home.username; }; + email = lib.mkOption { + default = "git@" + config.home.username + ".com"; + }; + }; + + config = lib.mkIf config.git.enable { + programs.git = { + enable = true; + userName = config.git.username; + userEmail = config.git.email; + }; + }; +} diff --git a/hmModules/apps/hypr/default.nix b/hmModules/apps/hypr/default.nix new file mode 100644 index 0000000..0c83ffd --- /dev/null +++ b/hmModules/apps/hypr/default.nix @@ -0,0 +1,50 @@ +{ config, inputs, pkgs, lib, ... }: +let rootPath = ./.; in +{ + options.hypr = { + enable = lib.mkEnableOption "Enables hyprland"; + }; + + imports = [ inputs.hyprland.homeManagerModules.default ]; + + config = lib.mkIf config.hypr.enable { + wayland.windowManager.hyprland = { + enable = true; + extraConfig = '' + ${builtins.readFile ./window_rules.conf} + ${builtins.readFile ./league_rules.conf} + ${builtins.readFile ./settings.conf} + ${builtins.readFile ./nvidia.conf} + ${builtins.readFile ./keybinds.conf} + ${builtins.readFile ./xwaylandvideobridge.conf} + exec-once=${pkgs.polkit-kde-agent}/libexec/polkit-kde-authentication-agent-1 + + env = HYPRCURSOR_THEME,miku + env = HYPRCURSOR_SIZE,64 + ''; + }; + home.packages = with pkgs; [ + socat # For hyprland scripts + swww # Wallpaper engine + wlr-randr # Xrandr for wayland + wl-clipboard # Clipboard manager for wayland + xdg-desktop-portal-hyprland # XDP for hyprland + hyprpicker # Colorpicker, needed for screenshot tool + hyprcursor # Hyprland cursor + inputs.hyprland-contrib.packages.${pkgs.system}.grimblast # Screenshot tool + polkit-kde-agent # Polkit handler + ]; + # Hyprland screenshot tool + xdg.configFile."hypr-scripts" = { + source = rootPath + "/scripts"; + target = "hypr/scripts"; + executable = true; + }; + + xdg.dataFile."hypr-icons" = { + source = rootPath + "/icons"; + target = "icons/"; + recursive = true; + }; + }; +} diff --git a/programs/hypr/keybinds.conf b/hmModules/apps/hypr/keybinds.conf similarity index 100% rename from programs/hypr/keybinds.conf rename to hmModules/apps/hypr/keybinds.conf diff --git a/programs/hypr/league_rules.conf b/hmModules/apps/hypr/league_rules.conf similarity index 100% rename from programs/hypr/league_rules.conf rename to hmModules/apps/hypr/league_rules.conf diff --git a/programs/hypr/nvidia.conf b/hmModules/apps/hypr/nvidia.conf similarity index 100% rename from programs/hypr/nvidia.conf rename to hmModules/apps/hypr/nvidia.conf diff --git a/programs/hypr/scripts/changeprimary.xsh b/hmModules/apps/hypr/scripts/changeprimary.xsh similarity index 100% rename from programs/hypr/scripts/changeprimary.xsh rename to hmModules/apps/hypr/scripts/changeprimary.xsh diff --git a/programs/hypr/scripts/changesecondary.xsh b/hmModules/apps/hypr/scripts/changesecondary.xsh similarity index 100% rename from programs/hypr/scripts/changesecondary.xsh rename to hmModules/apps/hypr/scripts/changesecondary.xsh diff --git a/programs/hypr/scripts/initdb.xsh b/hmModules/apps/hypr/scripts/initdb.xsh similarity index 100% rename from programs/hypr/scripts/initdb.xsh rename to hmModules/apps/hypr/scripts/initdb.xsh diff --git a/programs/hypr/settings.conf b/hmModules/apps/hypr/settings.conf similarity index 100% rename from programs/hypr/settings.conf rename to hmModules/apps/hypr/settings.conf diff --git a/programs/hypr/window_rules.conf b/hmModules/apps/hypr/window_rules.conf similarity index 100% rename from programs/hypr/window_rules.conf rename to hmModules/apps/hypr/window_rules.conf diff --git a/programs/hypr/xwaylandvideobridge.conf b/hmModules/apps/hypr/xwaylandvideobridge.conf similarity index 100% rename from programs/hypr/xwaylandvideobridge.conf rename to hmModules/apps/hypr/xwaylandvideobridge.conf diff --git a/hmModules/apps/librewolf/default.nix b/hmModules/apps/librewolf/default.nix new file mode 100644 index 0000000..7995cbb --- /dev/null +++ b/hmModules/apps/librewolf/default.nix @@ -0,0 +1,16 @@ +{ config, pkgs, lib, ... }: + +{ + options.librewolf = { + enable = lib.mkEnableOption "Enables librewolf"; + }; + + config = lib.mkIf config.librewolf.enable { + home.packages = with pkgs; [ + librewolf + ]; + home.sessionVariables = { + BROWSER = "librewolf"; + }; + }; +} diff --git a/hmModules/apps/lutris/default.nix b/hmModules/apps/lutris/default.nix new file mode 100644 index 0000000..aa78d39 --- /dev/null +++ b/hmModules/apps/lutris/default.nix @@ -0,0 +1,22 @@ +{ config, pkgs, lib, ... }: + +{ + options.lutris = { + enable = lib.mkEnableOption "Enables lutris"; + }; + + config = lib.mkIf config.lutris.enable { + home.packages = with pkgs; [ + lutris + wineWowPackages.stable + # (lutris.override { + # extraLibraries = pkgs: [ + # # List library dependencies here + # ]; + # extraPkgs = pkgs: [ + # # List package dependencies here + # ]; + # }) + ]; + }; +} diff --git a/hmModules/apps/media-viewers/default.nix b/hmModules/apps/media-viewers/default.nix new file mode 100644 index 0000000..5b26119 --- /dev/null +++ b/hmModules/apps/media-viewers/default.nix @@ -0,0 +1,9 @@ +{ config, pkgs, ... }: + +{ + imports = [ + ./feh + ./mpv + ./zathura + ]; +} diff --git a/hmModules/apps/media-viewers/feh/default.nix b/hmModules/apps/media-viewers/feh/default.nix new file mode 100644 index 0000000..c1c4462 --- /dev/null +++ b/hmModules/apps/media-viewers/feh/default.nix @@ -0,0 +1,13 @@ +{ config, pkgs, lib, ... }: + +{ + options.feh = { + enable = lib.mkEnableOption "Enables feh"; + }; + + config = lib.mkIf config.feh.enable { + programs.feh = { + enable = true; + }; + }; +} diff --git a/hmModules/apps/media-viewers/mpv/default.nix b/hmModules/apps/media-viewers/mpv/default.nix new file mode 100644 index 0000000..e64e5ce --- /dev/null +++ b/hmModules/apps/media-viewers/mpv/default.nix @@ -0,0 +1,22 @@ +{ config, pkgs, lib, ... }: + +{ + options.mpv = { + enable = lib.mkEnableOption "Enables mpv"; + }; + + config = lib.mkIf config.mpv.enable { + home.packages = with pkgs; [ + yt-dlp + ]; + programs.mpv = { + enable = true; + config = { + volume-max = 150; + force-window = "yes"; + script-opts = "ytdl_hook-ytdl_path=yt-dlp"; + ytdl-format = "bestvideo[height<=?1080][vcodec!=vp9]+bestaudio/best"; + }; + }; + }; +} diff --git a/hmModules/apps/media-viewers/zathura/default.nix b/hmModules/apps/media-viewers/zathura/default.nix new file mode 100644 index 0000000..005c2b6 --- /dev/null +++ b/hmModules/apps/media-viewers/zathura/default.nix @@ -0,0 +1,13 @@ +{ config, pkgs, lib, ... }: + +{ + options.zathura = { + enable = lib.mkEnableOption "Enables zathura"; + }; + + config = lib.mkIf config.zathura.enable { + programs.zathura = { + enable = true; + }; + }; +} diff --git a/hmModules/apps/neovim/default.nix b/hmModules/apps/neovim/default.nix new file mode 100644 index 0000000..e8a805e --- /dev/null +++ b/hmModules/apps/neovim/default.nix @@ -0,0 +1,86 @@ +{ config, pkgs, lib, ... }: + +{ + options.neovim = { + enable = lib.mkEnableOption "Enables neovim"; + }; + + config = lib.mkIf config.neovim.enable { + home.sessionVariables = { + EDITOR = "nvim"; + VISUAL = "nvim"; + }; + programs.neovim = { + enable = true; + extraConfig = '' + ${builtins.readFile ./init.vim} + ''; + plugins = with pkgs.vimPlugins; [ + { # Personal Wiki + plugin = vimwiki; + config = '' + let g:vimwiki_list = [{'path': '~/dox/wiki', 'links_space_char': '_', + \ 'ext': '.md', 'syntax': 'markdown'}] + ''; + } + { # NNN in vim + plugin = nnn-vim; + config = '' + let g:nnn#layout = { 'window': { + \ 'width': 0.35, + \ 'height': 0.5, + \ 'xoffset': 1.0, + \ 'highlight': 'Debug' } } " hover window + let g:nnn#action = { + \ '': 'tab split', + \ '': 'split', + \ '': 'vsplit' } + let g:nnn#command = 'nnn -HoeT v' + let g:nnn#replace_netrw = 1 + ''; + } + { # Fuzzy searches + plugin = fzf-vim; + config = '' + map :Files + map :Ag + ''; + } + { # Auto completions + plugin = coc-nvim; + config = '' + function! s:check_back_space() abort + let col = col('.') - 1 + return !col || getline('.')[col - 1] =~# '\s' + endfunction + + inoremap + \ pumvisible() ? "\" : + \ check_back_space() ? "\" : + \ coc#refresh() + inoremap pumvisible() ? "\" : "\" + ''; + } + vim-commentary # multi-line comments + vim-fugitive # Git Plugin + vimtex # Latex support + tagbar # File tagging + + # === LOOK AND FEEL === + { # Status Bar + plugin = vim-airline; + config = '' + let g:airline#extensions#tagbar#flags = 'fs' + ''; + } + { # Rainbow Parenthesis + plugin = rainbow; + config = '' + let g:rainbow_actve = 1 + ''; + } + vim-polyglot # Syntax Highlighting + ]; + }; + }; +} diff --git a/programs/nvim/init.vim b/hmModules/apps/neovim/init.vim similarity index 93% rename from programs/nvim/init.vim rename to hmModules/apps/neovim/init.vim index a40649a..d8b95c9 100644 --- a/programs/nvim/init.vim +++ b/hmModules/apps/neovim/init.vim @@ -14,7 +14,8 @@ nnoremap nnoremap " Indentation -set tabstop=2 softtabstop=0 shiftwidth=2 smarttab expandtab +" set tabstop=2 softtabstop=0 shiftwidth=2 smarttab expandtab +set tabstop=8 softtabstop=0 shiftwidth=8 " Searching set smartcase diff --git a/hmModules/apps/obs/default.nix b/hmModules/apps/obs/default.nix new file mode 100644 index 0000000..a42a495 --- /dev/null +++ b/hmModules/apps/obs/default.nix @@ -0,0 +1,17 @@ +{ config, pkgs, lib, ... }: +{ + options.obs = { + enable = lib.mkEnableOption "Enables obs"; + }; + + config = lib.mkIf config.obs.enable { + programs.obs-studio = { + enable = true; + plugins = with pkgs.obs-studio-plugins; [ + wlrobs + obs-backgroundremoval + obs-pipewire-audio-capture + ]; + }; + }; +} diff --git a/hmModules/apps/rofi/default.nix b/hmModules/apps/rofi/default.nix new file mode 100644 index 0000000..c98e81f --- /dev/null +++ b/hmModules/apps/rofi/default.nix @@ -0,0 +1,14 @@ +{ config, pkgs, lib, ... }: + +{ + options.rofi = { + enable = lib.mkEnableOption "Enables rofi"; + }; + + config = lib.mkIf config.rofi.enable { + programs.rofi = { + enable = true; + package = pkgs.rofi-wayland; + }; + }; +} diff --git a/hmModules/apps/shells/default.nix b/hmModules/apps/shells/default.nix new file mode 100644 index 0000000..03ae484 --- /dev/null +++ b/hmModules/apps/shells/default.nix @@ -0,0 +1,9 @@ +{ config, pkgs, lib, ... }: + +{ + imports = [ + ./fish + ./xonsh + ./zsh + ]; +} diff --git a/hmModules/apps/shells/fish/default.nix b/hmModules/apps/shells/fish/default.nix new file mode 100644 index 0000000..46e6de1 --- /dev/null +++ b/hmModules/apps/shells/fish/default.nix @@ -0,0 +1,45 @@ +{ config, pkgs, lib, ... }: + +{ + options.fish = { + enable = lib.mkEnableOption "Enables fish"; + }; + + config = lib.mkIf config.fish.enable { + programs.fish.enable = true; + + programs.fish.functions = { + fish_greeting = ""; + fish_prompt = '' + ${builtins.readFile ./functions/fish_prompt.fish} + ''; + fish_right_prompt = '' + ${builtins.readFile ./functions/fish_right_prompt.fish} + ''; + git_branch_name = '' + ${builtins.readFile ./functions/git_branch_name.fish} + ''; + git_is_dirty = '' + ${builtins.readFile ./functions/git_is_dirty.fish} + ''; + git_is_repo = '' + ${builtins.readFile ./functions/git_is_repo.fish} + ''; + git_is_staged = '' + ${builtins.readFile ./functions/git_is_staged.fish} + ''; + git_is_touched = '' + ${builtins.readFile ./functions/git_is_touched.fish} + ''; + git_is_worktree = '' + ${builtins.readFile ./functions/git_is_worktree.fish} + ''; + ssh = '' + ${builtins.readFile ./functions/ssh.fish} + ''; + n = lib.mkIf config.nnn.enable '' + ${builtins.readFile ./functions/n.fish} + ''; + }; + }; +} diff --git a/programs/fish/functions/fish_prompt.fish b/hmModules/apps/shells/fish/functions/fish_prompt.fish similarity index 100% rename from programs/fish/functions/fish_prompt.fish rename to hmModules/apps/shells/fish/functions/fish_prompt.fish diff --git a/programs/fish/functions/fish_right_prompt.fish b/hmModules/apps/shells/fish/functions/fish_right_prompt.fish similarity index 100% rename from programs/fish/functions/fish_right_prompt.fish rename to hmModules/apps/shells/fish/functions/fish_right_prompt.fish diff --git a/programs/fish/functions/git_branch_name.fish b/hmModules/apps/shells/fish/functions/git_branch_name.fish similarity index 100% rename from programs/fish/functions/git_branch_name.fish rename to hmModules/apps/shells/fish/functions/git_branch_name.fish diff --git a/programs/fish/functions/git_is_dirty.fish b/hmModules/apps/shells/fish/functions/git_is_dirty.fish similarity index 100% rename from programs/fish/functions/git_is_dirty.fish rename to hmModules/apps/shells/fish/functions/git_is_dirty.fish diff --git a/programs/fish/functions/git_is_repo.fish b/hmModules/apps/shells/fish/functions/git_is_repo.fish similarity index 100% rename from programs/fish/functions/git_is_repo.fish rename to hmModules/apps/shells/fish/functions/git_is_repo.fish diff --git a/programs/fish/functions/git_is_staged.fish b/hmModules/apps/shells/fish/functions/git_is_staged.fish similarity index 100% rename from programs/fish/functions/git_is_staged.fish rename to hmModules/apps/shells/fish/functions/git_is_staged.fish diff --git a/programs/fish/functions/git_is_touched.fish b/hmModules/apps/shells/fish/functions/git_is_touched.fish similarity index 100% rename from programs/fish/functions/git_is_touched.fish rename to hmModules/apps/shells/fish/functions/git_is_touched.fish diff --git a/programs/fish/functions/git_is_worktree.fish b/hmModules/apps/shells/fish/functions/git_is_worktree.fish similarity index 100% rename from programs/fish/functions/git_is_worktree.fish rename to hmModules/apps/shells/fish/functions/git_is_worktree.fish diff --git a/programs/fish/functions/n.fish b/hmModules/apps/shells/fish/functions/n.fish similarity index 100% rename from programs/fish/functions/n.fish rename to hmModules/apps/shells/fish/functions/n.fish diff --git a/programs/fish/functions/ssh.fish b/hmModules/apps/shells/fish/functions/ssh.fish similarity index 100% rename from programs/fish/functions/ssh.fish rename to hmModules/apps/shells/fish/functions/ssh.fish diff --git a/hmModules/apps/shells/xonsh/default.nix b/hmModules/apps/shells/xonsh/default.nix new file mode 100644 index 0000000..34a7a70 --- /dev/null +++ b/hmModules/apps/shells/xonsh/default.nix @@ -0,0 +1,22 @@ +{ config, pkgs, lib, ... }: +let rootPath = ./.; in +{ + options.xonsh = { + enable = lib.mkEnableOption "Enables xonsh"; + }; + + config = lib.mkIf config.xonsh.enable { + home.packages = with pkgs; [ + xonsh + ]; + home.sessionVariables = { + PROMPT = "τ "; + RIGHT_PROMPT = "{YELLOW}{gitstatus: {} }{BLUE}{short_cwd}{DEFAULT}"; + VI_MODE = 1; + }; + xdg.configFile."xonshrc" = { + source = rootPath + "/rc.xsh"; + target = "xonsh/rc.xsh"; + }; + }; +} diff --git a/programs/xonsh/rc.xsh b/hmModules/apps/shells/xonsh/rc.xsh similarity index 100% rename from programs/xonsh/rc.xsh rename to hmModules/apps/shells/xonsh/rc.xsh diff --git a/hmModules/apps/shells/zsh/default.nix b/hmModules/apps/shells/zsh/default.nix new file mode 100644 index 0000000..713a527 --- /dev/null +++ b/hmModules/apps/shells/zsh/default.nix @@ -0,0 +1,47 @@ +{ config, pkgs, lib, ... }: + +{ + options.zsh = { + enable = lib.mkEnableOption "Enable zsh"; + }; + + config = lib.mkIf config.zsh.enable { + programs.zsh = { + enable = true; + enableCompletion = true; + autosuggestion.enable = true; + syntaxHighlighting.enable = true; + dotDir = ".config/zsh"; + + history.save = 10000; + history.size = 10000; + history.path = "${config.xdg.dataHome}/zsh/history"; + initExtra = let + lf = lib.optionalString config.lf.enable '' + # Lf change directory command + lfcd () { + cd "$(command lf -print-last-dir "$@")" + } + bindkey -s '^o' 'lfcd\n' + ''; + + in lf + '' + # Nix-shell + ${pkgs.nix-your-shell}/bin/nix-your-shell zsh | source /dev/stdin + + # Prompt + autoload -U colors && colors + autoload -Uz vcs_info + precmd_vcs_info() { vcs_info } + precmd_functions+=( precmd_vcs_info ) + setopt prompt_subst + zstyle ':vcs_info:*' check-for-changes true + zstyle ':vcs_info:*' unstagedstr '·*' + zstyle ':vcs_info:*' stagedstr '·+' + zstyle ':vcs_info:git:*' formats '%b%u%c' + export PROMPT="%(0?.%F{white}.%? %F{red})τ%f " + export RPROMPT="%F{yellow}\$vcs_info_msg_0_%f %F{blue}%~%f" + ''; + }; + }; +} diff --git a/hmModules/apps/terminal-emulators/alacritty/default.nix b/hmModules/apps/terminal-emulators/alacritty/default.nix new file mode 100644 index 0000000..c172d63 --- /dev/null +++ b/hmModules/apps/terminal-emulators/alacritty/default.nix @@ -0,0 +1,39 @@ +{ config, pkgs, lib, ... }: + +{ + options.alacritty = { + enable = lib.mkEnableOption "Enables alacritty"; + font = lib.mkOption { default = ""; }; + font_size = lib.mkOption { default = 18; }; + }; + + config = lib.mkIf config.alacritty.enable { + programs.alacritty.enable = true; + + programs.alacritty.settings = { + font = let fam = config.alacritty.font; in { + normal = { + family = fam; + style = "Regular"; + }; + bold = { + family = fam; + style = "Bold"; + }; + italic = { + family = fam; + style = "Italic"; + }; + bold_italic = { + family = fam; + style = "Bold Italic"; + }; + offset = { + x = 0; + y = 0; + }; + size = config.alacritty.font_size; + }; + }; + }; +} diff --git a/hmModules/apps/terminal-emulators/default.nix b/hmModules/apps/terminal-emulators/default.nix new file mode 100644 index 0000000..ceb550b --- /dev/null +++ b/hmModules/apps/terminal-emulators/default.nix @@ -0,0 +1,8 @@ +{ config, pkgs, lib, ... }: + +{ + imports = [ + ./kitty + ./alacritty + ]; +} diff --git a/hmModules/apps/terminal-emulators/kitty/default.nix b/hmModules/apps/terminal-emulators/kitty/default.nix new file mode 100644 index 0000000..6195726 --- /dev/null +++ b/hmModules/apps/terminal-emulators/kitty/default.nix @@ -0,0 +1,20 @@ +{ config, pkgs, lib, ... }: + +{ + options.kitty = { + enable = lib.mkEnableOption "Enables kitty"; + font = lib.mkOption { default = ""; }; + font_size = lib.mkOption { default = 18; }; + }; + + config = lib.mkIf config.kitty.enable { + programs.kitty = { + enable = true; + settings = { + font_family = config.kitty.font; + font_size = config.kitty.font_size; + enable_audio_bell = "no"; + }; + }; + }; +} diff --git a/hmModules/default.nix b/hmModules/default.nix new file mode 100644 index 0000000..3401811 --- /dev/null +++ b/hmModules/default.nix @@ -0,0 +1,8 @@ +{ config, pkgs, ... }: + +{ + imports = [ + ./apps + ./services + ]; +} diff --git a/hmModules/services/default.nix b/hmModules/services/default.nix new file mode 100644 index 0000000..75bc088 --- /dev/null +++ b/hmModules/services/default.nix @@ -0,0 +1,14 @@ +{ config, pkgs, ... }: + +{ + imports = [ + ./dunst + ./home + ./manpages + ./ssh + ./timers + ./trash + ./wal + ./widgets + ]; +} diff --git a/hmModules/services/dunst/default.nix b/hmModules/services/dunst/default.nix new file mode 100644 index 0000000..84e4bcb --- /dev/null +++ b/hmModules/services/dunst/default.nix @@ -0,0 +1,49 @@ +{ config, pkgs, lib, ... }: + +{ + options.dunst = { + enable = lib.mkEnableOption "Enables dunst"; + }; + + config = lib.mkIf config.dunst.enable { + home.packages = with pkgs; [ + libnotify + ]; + services.dunst = { + enable = true; + settings = { + global = { + width = 280; + height = 240; + origin = "bottom-right"; + offset = "0x300"; + + notification_limit = 3; + + progress_bar_max_width = 280; + + gap_size = 4; + corner_radius = 20; + }; + + urgency_low = { + background = "#FFFFFFCC"; + foreground = "#000000"; + frame_color = "#0000"; + }; + + urgency_normal = { + background = "#FFFFFFCC"; + foreground = "#000000"; + frame_color = "#0000"; + }; + + urgency_critical = { + background = "#FFFFFFCC"; + foreground = "#000000"; + frame_color = "#0000"; + }; + }; + }; + }; +} diff --git a/hmModules/services/home/default.nix b/hmModules/services/home/default.nix new file mode 100644 index 0000000..bbb4cf2 --- /dev/null +++ b/hmModules/services/home/default.nix @@ -0,0 +1,38 @@ +{ config, pkgs, lib, ... }: + +{ + options = { + extraPkgs = lib.mkOption { default = []; }; + }; + + config = { + # Let Home Manager install and manage itself. + programs.home-manager.enable = true; + + home.sessionVariables = { + GRADLE_USER_HOME = "${config.xdg.dataHome}/gradle"; + CUDA_CACHE_PATH = "${config.xdg.cacheHome}/nv"; + }; + + xdg = { + enable = true; + mimeApps.enable = true; + userDirs = let + home = config.home.homeDirectory; + in { + enable = true; + documents = "${home}/dox"; + publicShare = "${home}/dox/public"; + templates = "${home}/dox/templates"; + music = "${home}/med/mus"; + pictures = "${home}/med/pix"; + videos = "${home}/med/vid"; + desktop = "${home}/dwn"; + download = "${home}/dwn"; + }; + }; + + home.homeDirectory = "/home/" + config.home.username; + home.packages = config.extraPkgs; + }; +} diff --git a/hmModules/services/manpages/default.nix b/hmModules/services/manpages/default.nix new file mode 100644 index 0000000..678d734 --- /dev/null +++ b/hmModules/services/manpages/default.nix @@ -0,0 +1,15 @@ +{ config, pkgs, lib, ... }: + +{ + options.manpages = { + enable = lib.mkEnableOption "Enables manpager"; + }; + + config = lib.mkIf config.manpages.enable { + programs.man.enable = true; + home.packages = with pkgs; [ + man-pages + man-pages-posix + ]; + }; +} diff --git a/hmModules/services/ssh/default.nix b/hmModules/services/ssh/default.nix new file mode 100644 index 0000000..418ae9c --- /dev/null +++ b/hmModules/services/ssh/default.nix @@ -0,0 +1,14 @@ +{ config, pkgs, lib, ... }: + +{ + options.ssh = { + enable = lib.mkEnableOption "Enables ssh"; + }; + + config = lib.mkIf config.ssh.enable { + programs.ssh.enable = true; + home.packages = with pkgs; [ + sshfs # SSH File system + ]; + }; +} diff --git a/hmModules/services/timers/default.nix b/hmModules/services/timers/default.nix new file mode 100644 index 0000000..548ab30 --- /dev/null +++ b/hmModules/services/timers/default.nix @@ -0,0 +1,60 @@ +{ config, pkgs, lib, ... }: +let rootPath = ./.; in +{ + options.timer = { + enableHourly = lib.mkEnableOption "Enables an hourly notification"; + enableQuarterly = lib.mkEnableOption "Enables a quarterly notification"; + }; + + config = { + systemd.user.timers = { + hourly-time = lib.mkIf config.timer.enableHourly { + Timer = { + OnCalendar = "hourly"; + }; + Install = { + WantedBy = [ + "timers.target" + ]; + }; + }; + quarterly-time = lib.mkIf config.timer.enableQuarterly { + Timer = { + OnCalendar = "*-*-* *:15,30,45:00"; + }; + Install = { + WantedBy = [ + "timers.target" + ]; + }; + }; + }; + + systemd.user.services = { + hourly-time = lib.mkIf config.timer.enableHourly { + Unit = { + Description = "Notify the user every hour of time passing"; + }; + Service = { + Type="simple"; + ExecStart="/home/pan/.config/timer_scripts/notify-time.sh 60000 1"; + }; + }; + quarterly-time = lib.mkIf config.timer.enableQuarterly { + Unit = { + Description = "Notify the user every 15 minutes of time passing, \ + skips hours"; + }; + Service = { + Type="simple"; + ExecStart="/home/pan/.config/timer_scripts/notify-time.sh 10000 0"; + }; + }; + }; + xdg.configFile."timer-scripts" = { + source = rootPath + "/scripts"; + target = "timer_scripts/"; + executable = true; + }; + }; +} diff --git a/services/timers/scripts/chimes.ogg b/hmModules/services/timers/scripts/chimes.ogg similarity index 100% rename from services/timers/scripts/chimes.ogg rename to hmModules/services/timers/scripts/chimes.ogg diff --git a/services/timers/scripts/notify-time.sh b/hmModules/services/timers/scripts/notify-time.sh similarity index 100% rename from services/timers/scripts/notify-time.sh rename to hmModules/services/timers/scripts/notify-time.sh diff --git a/hmModules/services/trash/default.nix b/hmModules/services/trash/default.nix new file mode 100644 index 0000000..cf54f67 --- /dev/null +++ b/hmModules/services/trash/default.nix @@ -0,0 +1,13 @@ +{ config, pkgs, lib, ... }: + +{ + options.trash = { + enable = lib.mkEnableOption "Enables trash"; + }; + + config = { + home.packages = [ + pkgs.trash-cli + ]; + }; +} diff --git a/hmModules/services/wal/default.nix b/hmModules/services/wal/default.nix new file mode 100644 index 0000000..41930fe --- /dev/null +++ b/hmModules/services/wal/default.nix @@ -0,0 +1,34 @@ +{ config, pkgs, lib, ... }: +let rootPath = ./.; in +{ + options.colors = { + enable = lib.mkEnableOption "Enables setting colors using wallust"; + }; + + config = lib.mkIf config.colors.enable { + home.packages = with pkgs; [ + wallust # A better pywal + pywalfox-native # Update librewolf's colorscheme based on wal + ]; + xdg.configFile."wallust-config" = { + target = "wallust/wallust.toml"; + text = '' + backend = "wal" + color_space = "lab" + threshold = 20 + filter = "dark16" + + # [[entry]] + # # a relative path to a file where wallust.toml is (~/.config/wallust/) + # template = "dunstrc" + # + # # absolute path to the file to write the template (after templating) + # target = "~/.config/dunst/dunstrc" + ''; + }; + #xdg.configFile."wallust-templates" = { + # source = rootPath + "/templates"; + # target = "wallust/"; + #}; + }; +} diff --git a/programs/ags/config/config.js b/hmModules/services/widgets/ags/config/config.js similarity index 100% rename from programs/ags/config/config.js rename to hmModules/services/widgets/ags/config/config.js diff --git a/programs/ags/config/modules/clock.js b/hmModules/services/widgets/ags/config/modules/clock.js similarity index 100% rename from programs/ags/config/modules/clock.js rename to hmModules/services/widgets/ags/config/modules/clock.js diff --git a/programs/ags/config/modules/notifications/notificationPopup.ts b/hmModules/services/widgets/ags/config/modules/notifications/notificationPopup.ts similarity index 100% rename from programs/ags/config/modules/notifications/notificationPopup.ts rename to hmModules/services/widgets/ags/config/modules/notifications/notificationPopup.ts diff --git a/programs/ags/config/modules/notifications/style.css b/hmModules/services/widgets/ags/config/modules/notifications/style.css similarity index 100% rename from programs/ags/config/modules/notifications/style.css rename to hmModules/services/widgets/ags/config/modules/notifications/style.css diff --git a/programs/ags/config/modules/workspace-switch.js b/hmModules/services/widgets/ags/config/modules/workspace-switch.js similarity index 100% rename from programs/ags/config/modules/workspace-switch.js rename to hmModules/services/widgets/ags/config/modules/workspace-switch.js diff --git a/hmModules/services/widgets/ags/default.nix b/hmModules/services/widgets/ags/default.nix new file mode 100644 index 0000000..5d248d1 --- /dev/null +++ b/hmModules/services/widgets/ags/default.nix @@ -0,0 +1,25 @@ +{ config, inputs, pkgs, lib, ... }: +{ + + options.ags = { + enable = lib.mkEnableOption "Enable ags"; + }; + + imports = [ inputs.ags.homeManagerModules.default ]; + + config = lib.mkIf config.ags.enable { + home.packages = with pkgs; [ + libnotify # Notifications through ags + ]; + programs.ags = { + enable = true; + configDir = ./config; + + extraPackages = with pkgs; [ + gtksourceview + webkitgtk + accountsservice + ]; + }; + }; +} diff --git a/hmModules/services/widgets/default.nix b/hmModules/services/widgets/default.nix new file mode 100644 index 0000000..caebead --- /dev/null +++ b/hmModules/services/widgets/default.nix @@ -0,0 +1,8 @@ +{ config, pkgs, lib, ... }: + +{ + imports = [ + ./ags + ./eww + ]; +} diff --git a/programs/eww/config/eww.scss b/hmModules/services/widgets/eww/config/eww.scss similarity index 100% rename from programs/eww/config/eww.scss rename to hmModules/services/widgets/eww/config/eww.scss diff --git a/programs/eww/config/eww.yuck b/hmModules/services/widgets/eww/config/eww.yuck similarity index 100% rename from programs/eww/config/eww.yuck rename to hmModules/services/widgets/eww/config/eww.yuck diff --git a/programs/eww/config/modules/bar.yuck b/hmModules/services/widgets/eww/config/modules/bar.yuck similarity index 100% rename from programs/eww/config/modules/bar.yuck rename to hmModules/services/widgets/eww/config/modules/bar.yuck diff --git a/programs/eww/config/modules/components/hyprwindow.yuck b/hmModules/services/widgets/eww/config/modules/components/hyprwindow.yuck similarity index 100% rename from programs/eww/config/modules/components/hyprwindow.yuck rename to hmModules/services/widgets/eww/config/modules/components/hyprwindow.yuck diff --git a/programs/eww/config/modules/components/hyprworkspaces.yuck b/hmModules/services/widgets/eww/config/modules/components/hyprworkspaces.yuck similarity index 100% rename from programs/eww/config/modules/components/hyprworkspaces.yuck rename to hmModules/services/widgets/eww/config/modules/components/hyprworkspaces.yuck diff --git a/programs/eww/config/modules/components/internet.yuck b/hmModules/services/widgets/eww/config/modules/components/internet.yuck similarity index 100% rename from programs/eww/config/modules/components/internet.yuck rename to hmModules/services/widgets/eww/config/modules/components/internet.yuck diff --git a/programs/eww/config/modules/components/japaneseaudio.yuck b/hmModules/services/widgets/eww/config/modules/components/japaneseaudio.yuck similarity index 100% rename from programs/eww/config/modules/components/japaneseaudio.yuck rename to hmModules/services/widgets/eww/config/modules/components/japaneseaudio.yuck diff --git a/programs/eww/config/modules/components/japanesebattery.yuck b/hmModules/services/widgets/eww/config/modules/components/japanesebattery.yuck similarity index 100% rename from programs/eww/config/modules/components/japanesebattery.yuck rename to hmModules/services/widgets/eww/config/modules/components/japanesebattery.yuck diff --git a/programs/eww/config/modules/components/japanesedate.yuck b/hmModules/services/widgets/eww/config/modules/components/japanesedate.yuck similarity index 100% rename from programs/eww/config/modules/components/japanesedate.yuck rename to hmModules/services/widgets/eww/config/modules/components/japanesedate.yuck diff --git a/programs/eww/config/modules/powerbar.yuck b/hmModules/services/widgets/eww/config/modules/powerbar.yuck similarity index 100% rename from programs/eww/config/modules/powerbar.yuck rename to hmModules/services/widgets/eww/config/modules/powerbar.yuck diff --git a/programs/eww/config/modules/switch.yuck b/hmModules/services/widgets/eww/config/modules/switch.yuck similarity index 100% rename from programs/eww/config/modules/switch.yuck rename to hmModules/services/widgets/eww/config/modules/switch.yuck diff --git a/programs/eww/config/scripts/change-active-workspace b/hmModules/services/widgets/eww/config/scripts/change-active-workspace similarity index 100% rename from programs/eww/config/scripts/change-active-workspace rename to hmModules/services/widgets/eww/config/scripts/change-active-workspace diff --git a/programs/eww/config/scripts/get-active-workspace b/hmModules/services/widgets/eww/config/scripts/get-active-workspace similarity index 100% rename from programs/eww/config/scripts/get-active-workspace rename to hmModules/services/widgets/eww/config/scripts/get-active-workspace diff --git a/programs/eww/config/scripts/get-window-title b/hmModules/services/widgets/eww/config/scripts/get-window-title similarity index 100% rename from programs/eww/config/scripts/get-window-title rename to hmModules/services/widgets/eww/config/scripts/get-window-title diff --git a/programs/eww/config/scripts/get-workspaces b/hmModules/services/widgets/eww/config/scripts/get-workspaces similarity index 100% rename from programs/eww/config/scripts/get-workspaces rename to hmModules/services/widgets/eww/config/scripts/get-workspaces diff --git a/programs/eww/config/scripts/japanesedate b/hmModules/services/widgets/eww/config/scripts/japanesedate similarity index 100% rename from programs/eww/config/scripts/japanesedate rename to hmModules/services/widgets/eww/config/scripts/japanesedate diff --git a/programs/eww/config/scripts/medpreview b/hmModules/services/widgets/eww/config/scripts/medpreview similarity index 100% rename from programs/eww/config/scripts/medpreview rename to hmModules/services/widgets/eww/config/scripts/medpreview diff --git a/programs/eww/config/variables.yuck b/hmModules/services/widgets/eww/config/variables.yuck similarity index 100% rename from programs/eww/config/variables.yuck rename to hmModules/services/widgets/eww/config/variables.yuck diff --git a/hmModules/services/widgets/eww/default.nix b/hmModules/services/widgets/eww/default.nix new file mode 100644 index 0000000..7417cdf --- /dev/null +++ b/hmModules/services/widgets/eww/default.nix @@ -0,0 +1,13 @@ +{ config, pkgs, lib, ... }: + +{ + options.eww = { + enable = lib.mkEnableOption "Enables eww"; + }; + + config = lib.mkIf config.eww.enable { + programs.eww.enable = true; + programs.eww.package = pkgs.eww-wayland; + programs.eww.configDir = ./config; + }; +} diff --git a/home.nix b/home.nix deleted file mode 100644 index 34a4693..0000000 --- a/home.nix +++ /dev/null @@ -1,77 +0,0 @@ -{ config, pkgs, ... }: - -{ - nixpkgs.config.allowUnfree = true; - home.username = "pan"; - home.homeDirectory = "/home/pan"; - - imports = [ - # ./programs/dunst - # ./programs/eww - # ./programs/spotify - ./programs/ags - ./programs/alacritty - ./programs/discord - ./programs/fish - ./programs/git - ./programs/hypr - ./programs/lutris - ./programs/mpv - ./programs/nnn - ./programs/nvim - ./programs/rofi - ./programs/ssh - ./programs/wal - ./programs/xdg - ./programs/xonsh - ./programs/obs - ./programs/kitty - ./programs/zsh - ./programs/lf - - # ./services/scripts - ./services/timers - ]; - - home.packages = with pkgs; [ - # Applications - beeper # Better Chat App - gimp # Photo editting - pamixer # Volume control - playerctl # Control media - wget # Download web stuff - feh # Image viewer - appimage-run # Lets you run app images - zathura # PDF viewer - ani-cli # Easy anime player - lutgen # LUT generator - prismlauncher # Minecraft launcher - unzip # Unzip utility - - texlive.combined.scheme-full # Latex - - # Development stuff - nodejs # For compiling JS stuff - jq # May be critical for scripts? - ]; - # home.file = {}; - - home.sessionVariables = { - EDITOR = "nvim"; - VISUAL = "nvim"; - BROWSER = "librewolf"; - GRADLE_USER_HOME = "/home/pan/.local/share" + "/gradle"; - CUDA_CACHE_PATH = "/home/pan/.cache" + "/nv"; - }; - - home.sessionPath = [ - "$HOME/prog/scripts" - ]; - - # Enable man pages, but ensure ~/.manpage isn't created - programs.man.enable = true; - programs.man.generateCaches = false; - # Let Home Manager install and manage itself. - programs.home-manager.enable = true; - home.stateVersion = "23.05"; -} diff --git a/programs/ags/default.nix b/programs/ags/default.nix deleted file mode 100644 index 74eae58..0000000 --- a/programs/ags/default.nix +++ /dev/null @@ -1,23 +0,0 @@ -{ inputs, pkgs, ... }: -{ - # add the home manager module - imports = [ inputs.ags.homeManagerModules.default ]; - - home.packages = with pkgs; [ - libnotify # Notifications through ags - ]; - - programs.ags = { - enable = true; - - # null or path, leave as null if you don't want hm to manage the config - configDir = ./config; - - # additional packages to add to ags's runtime - extraPackages = with pkgs; [ - gtksourceview - webkitgtk - accountsservice - ]; - }; -} diff --git a/programs/alacritty/default.nix b/programs/alacritty/default.nix deleted file mode 100644 index d3a0378..0000000 --- a/programs/alacritty/default.nix +++ /dev/null @@ -1,32 +0,0 @@ -{ config, pkgs, ... }: - -{ - programs.alacritty.enable = true; - - - programs.alacritty.settings = { - font = let fam = "Cascadia Code"; in { - normal = { - family = fam; - style = "Regular"; - }; - bold = { - family = fam; - style = "Bold"; - }; - italic = { - family = fam; - style = "Italic"; - }; - bold_italic = { - family = fam; - style = "Bold Italic"; - }; - offset = { - x = 0; - y = 0; - }; - size = 18.0; - }; - }; -} diff --git a/programs/discord/default.nix b/programs/discord/default.nix deleted file mode 100644 index 8344f47..0000000 --- a/programs/discord/default.nix +++ /dev/null @@ -1,6 +0,0 @@ -{ config, pkgs, ... }: -{ - home.packages = with pkgs; [ - vesktop # Base app - ]; -} diff --git a/programs/dunst/default.nix b/programs/dunst/default.nix deleted file mode 100644 index 3f1e60e..0000000 --- a/programs/dunst/default.nix +++ /dev/null @@ -1,41 +0,0 @@ -{ config, pkgs, ... }: - -{ - home.packages = with pkgs; [ - libnotify - ]; - services.dunst.enable = true; - services.dunst.settings = { - global = { - width = 280; - height = 240; - origin = "bottom-right"; - offset = "0x300"; - - notification_limit = 3; - - progress_bar_max_width = 280; - - gap_size = 4; - corner_radius = 20; - }; - - urgency_low = { - background = "#FFFFFFCC"; - foreground = "#000000"; - frame_color = "#0000"; - }; - - urgency_normal = { - background = "#FFFFFFCC"; - foreground = "#000000"; - frame_color = "#0000"; - }; - - urgency_critical = { - background = "#FFFFFFCC"; - foreground = "#000000"; - frame_color = "#0000"; - }; - }; -} diff --git a/programs/eww/default.nix b/programs/eww/default.nix deleted file mode 100644 index 135aed8..0000000 --- a/programs/eww/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ config, pkgs, ... }: - -{ - programs.eww.enable = true; - programs.eww.package = pkgs.eww-wayland; - programs.eww.configDir = ./config; -} diff --git a/programs/fish/default.nix b/programs/fish/default.nix deleted file mode 100644 index 93c6018..0000000 --- a/programs/fish/default.nix +++ /dev/null @@ -1,43 +0,0 @@ -{ config, pkgs, ... }: - -{ - programs.fish.enable = true; - - programs.fish.interactiveShellInit = '' - cat ~/.cache/wal/sequences - ''; - - programs.fish.functions = { - fish_greeting = ""; - fish_prompt = '' - ${builtins.readFile ./functions/fish_prompt.fish} - ''; - fish_right_prompt = '' - ${builtins.readFile ./functions/fish_right_prompt.fish} - ''; - git_branch_name = '' - ${builtins.readFile ./functions/git_branch_name.fish} - ''; - git_is_dirty = '' - ${builtins.readFile ./functions/git_is_dirty.fish} - ''; - git_is_repo = '' - ${builtins.readFile ./functions/git_is_repo.fish} - ''; - git_is_staged = '' - ${builtins.readFile ./functions/git_is_staged.fish} - ''; - git_is_touched = '' - ${builtins.readFile ./functions/git_is_touched.fish} - ''; - git_is_worktree = '' - ${builtins.readFile ./functions/git_is_worktree.fish} - ''; - n = '' - ${builtins.readFile ./functions/n.fish} - ''; - ssh = '' - ${builtins.readFile ./functions/ssh.fish} - ''; - }; -} diff --git a/programs/git/default.nix b/programs/git/default.nix deleted file mode 100644 index 9f134ee..0000000 --- a/programs/git/default.nix +++ /dev/null @@ -1,12 +0,0 @@ -{ config, pkgs, ... }: - -{ - programs.git.enable = true; - programs.git.userName = "JuliaLange"; - programs.git.userEmail = "git@julialange.com"; - programs.git.extraConfig = { - safe = { - directory = "/etc/nixos"; - }; - }; -} diff --git a/programs/hypr/default.nix b/programs/hypr/default.nix deleted file mode 100644 index f390790..0000000 --- a/programs/hypr/default.nix +++ /dev/null @@ -1,43 +0,0 @@ -{ inputs, pkgs, ... }: -let rootPath = ./.; in -{ - wayland.windowManager.hyprland.enable = true; - wayland.windowManager.hyprland.extraConfig = '' - ${builtins.readFile ./window_rules.conf} - ${builtins.readFile ./league_rules.conf} - ${builtins.readFile ./settings.conf} - ${builtins.readFile ./nvidia.conf} - ${builtins.readFile ./keybinds.conf} - ${builtins.readFile ./xwaylandvideobridge.conf} - exec-once=${pkgs.polkit-kde-agent}/libexec/polkit-kde-authentication-agent-1 - - env = HYPRCURSOR_THEME,miku - env = HYPRCURSOR_SIZE,64 - ''; - # wayland.windowManager.hyprland.enableNvidiaPatches = true; - home.packages = with pkgs; [ - socat # For hyprland scripts - swww # Wallpaper engine - wlr-randr # Xrandr for wayland - wl-clipboard # Clipboard manager for wayland - xdg-desktop-portal-hyprland # XDP for hyprland - hyprpicker # Colorpicker, needed for screenshot tool - hyprcursor # Hyprland cursor - inputs.hyprland-contrib.packages.${pkgs.system}.grimblast # Screenshot tool - xwaylandvideobridge # Allows screensharing with xwayland apps - polkit-kde-agent # Polkit handler - ]; - - # Hyprland screenshot tool - xdg.configFile."hypr-scripts" = { - source = rootPath + "/scripts"; - target = "hypr/scripts"; - executable = true; - }; - - xdg.dataFile."hypr-icons" = { - source = rootPath + "/icons"; - target = "icons/"; - recursive = true; - }; -} diff --git a/programs/kitty/default.nix b/programs/kitty/default.nix deleted file mode 100644 index 2bff14d..0000000 --- a/programs/kitty/default.nix +++ /dev/null @@ -1,12 +0,0 @@ -{ config, pkgs, ... }: - -{ - programs.kitty = { - enable = true; - settings = { - font_family = "Cascadia Code"; - font_size = 18; - enable_audio_bell = "no"; - }; - }; -} diff --git a/programs/lf/default.nix b/programs/lf/default.nix deleted file mode 100644 index 1eb8c30..0000000 --- a/programs/lf/default.nix +++ /dev/null @@ -1,85 +0,0 @@ -{ config, pkgs, ... }: - -{ - xdg.configFile."lf/icons".source = ./icons; - - home.packages = with pkgs; [ - trash-cli # Trash program for lf - ]; - - programs.lf = { - enable = true; - settings = { - # Hide specific files rather than "hidden" files - hiddenfiles = [ - "${config.home.homeDirectory}/.librewolf" - "${config.home.homeDirectory}/.nix-defexpr" - "${config.home.homeDirectory}/.nix-profile" - "${config.home.homeDirectory}/.nv" - "${config.home.homeDirectory}/.pki" - "${config.home.homeDirectory}/.steam*" - "${config.home.homeDirectory}/.zshenv" - ]; - ratios = [ - 2 - 3 - ]; - preview = true; - ignorecase = true; - icons = true; - number = true; - relativenumber = true; - }; - commands = { - dragon-out = ''%${pkgs.xdragon}/bin/xdragon -a -x "$fx"''; - mkdir = '' - ''${{ - printf "Directory Name: " - read DIR - mkdir $DIR - }} - ''; - mkfile = '' - ''${{ - printf "File Name: " - read FILE - mkdir $FILE - }} - ''; - trash = ''trash "$fx"''; - }; - keybindings = { - ";" = ""; - x = "trash"; - "." = "set hidden!"; - ";d" = "mkdir"; - ";f" = "mkfile"; - ";m" = "dragon-out"; - }; - extraConfig = - let - previewer = - pkgs.writeShellScriptBin "pv.sh" '' - file=$1 - w=$2 - h=$3 - x=$4 - y=$5 - - if [[ "$( ${pkgs.file}/bin/file -Lb --mime-type "$file")" =~ ^image ]]; then - ${pkgs.kitty}/bin/kitty +kitten icat --silent --stdin no --transfer-mode file --place "''${w}x''${h}@''${x}x''${y}" "$file" < /dev/null > /dev/tty - exit 1 - fi - - ${pkgs.pistol}/bin/pistol "$file" - ''; - cleaner = pkgs.writeShellScriptBin "clean.sh" '' - ${pkgs.kitty}/bin/kitty +kitten icat --clear --stdin no --silent --transfer-mode file < /dev/null > /dev/tty - ''; - in - '' - set cleaner ${cleaner}/bin/clean.sh - set previewer ${previewer}/bin/pv.sh - ''; - }; -} diff --git a/programs/lutris/default.nix b/programs/lutris/default.nix deleted file mode 100644 index 05993cd..0000000 --- a/programs/lutris/default.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ config, pkgs, ... }: - -{ - home.packages = with pkgs; [ - lutris - wineWowPackages.stable - # (lutris.override { - # extraLibraries = pkgs: [ - # # List library dependencies here - # ]; - # extraPkgs = pkgs: [ - # # List package dependencies here - # ]; - # }) - ]; -} diff --git a/programs/mpv/default.nix b/programs/mpv/default.nix deleted file mode 100644 index bc41ad5..0000000 --- a/programs/mpv/default.nix +++ /dev/null @@ -1,14 +0,0 @@ -{ config, pkgs, ... }: - -{ - programs.mpv.enable = true; - programs.mpv.config = { - volume-max = 150; - force-window = "yes"; - script-opts = "ytdl_hook-ytdl_path=yt-dlp"; - ytdl-format = "bestvideo[height<=?1080][vcodec!=vp9]+bestaudio/best"; - }; - home.packages = with pkgs; [ - yt-dlp - ]; -} diff --git a/programs/nnn/default.nix b/programs/nnn/default.nix deleted file mode 100644 index 583a7b2..0000000 --- a/programs/nnn/default.nix +++ /dev/null @@ -1,14 +0,0 @@ -{ config, pkgs, ... }: - -{ - programs.nnn.enable = true; - home.sessionVariables = { - NNN_FCOLORS = "0000E6310000000000000000"; - NNN_OPTS = "eH"; - NNN_FIFO = "/tmp/nnn.fifo"; - NNN_TRASH = "1"; - }; - home.packages = with pkgs; [ - trash-cli # Trash program for nnn - ]; -} diff --git a/programs/nvim/default.nix b/programs/nvim/default.nix deleted file mode 100644 index bd19ffd..0000000 --- a/programs/nvim/default.nix +++ /dev/null @@ -1,74 +0,0 @@ -{ config, pkgs, ... }: - -{ - programs.neovim.enable = true; - programs.neovim.extraConfig = '' - ${builtins.readFile ./init.vim} - ''; - programs.neovim.plugins = with pkgs.vimPlugins; [ - { # Personal Wiki - plugin = vimwiki; - config = '' - let g:vimwiki_list = [{'path': '~/dox/wiki', 'links_space_char': '_', - \ 'ext': '.md', 'syntax': 'markdown'}] - ''; - } - { # NNN in vim - plugin = nnn-vim; - config = '' - let g:nnn#layout = { 'window': { - \ 'width': 0.35, - \ 'height': 0.5, - \ 'xoffset': 1.0, - \ 'highlight': 'Debug' } } " hover window - let g:nnn#action = { - \ '': 'tab split', - \ '': 'split', - \ '': 'vsplit' } - let g:nnn#command = 'nnn -HoeT v' - let g:nnn#replace_netrw = 1 - ''; - } - { # Fuzzy searches - plugin = fzf-vim; - config = '' - map :Files - map :Ag - ''; - } - { # Auto completions - plugin = coc-nvim; - config = '' - function! s:check_back_space() abort - let col = col('.') - 1 - return !col || getline('.')[col - 1] =~# '\s' - endfunction - - inoremap - \ pumvisible() ? "\" : - \ check_back_space() ? "\" : - \ coc#refresh() - inoremap pumvisible() ? "\" : "\" - ''; - } - vim-commentary # multi-line comments - vim-fugitive # Git Plugin - vimtex # Latex support - tagbar # File tagging - - # === LOOK AND FEEL === - { # Status Bar - plugin = vim-airline; - config = '' - let g:airline#extensions#tagbar#flags = 'fs' - ''; - } - { # Rainbow Parenthesis - plugin = rainbow; - config = '' - let g:rainbow_actve = 1 - ''; - } - vim-polyglot # Syntax Highlighting - ]; -} diff --git a/programs/obs/default.nix b/programs/obs/default.nix deleted file mode 100644 index edd2865..0000000 --- a/programs/obs/default.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ config, pkgs, ... }: -{ - programs.obs-studio = { - enable = true; - plugins = with pkgs.obs-studio-plugins; [ - wlrobs - obs-backgroundremoval - obs-pipewire-audio-capture - ]; - }; -} diff --git a/programs/rofi/default.nix b/programs/rofi/default.nix deleted file mode 100644 index 1db30ee..0000000 --- a/programs/rofi/default.nix +++ /dev/null @@ -1,6 +0,0 @@ -{ config, pkgs, ... }: - -{ - programs.rofi.enable = true; - programs.rofi.package = pkgs.rofi-wayland; -} diff --git a/programs/spotify/default.nix b/programs/spotify/default.nix deleted file mode 100644 index 7510db3..0000000 --- a/programs/spotify/default.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ config, pkgs, ... }: - -{ - services.spotifyd.enable = true; - services.spotifyd.settings = { - global = { - username = "me@daltonlange.com"; - password = "5ThM^G3!FTfH6rH#cJEx"; - backend = "pulseaudio"; - device_name = "onizuka"; - bitrate = 320; - }; - }; - - home.packages = with pkgs; [ - spotify-tui # Spotify TUI player - ]; -} diff --git a/programs/ssh/default.nix b/programs/ssh/default.nix deleted file mode 100644 index 4e0f26f..0000000 --- a/programs/ssh/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ config, pkgs, ... }: - -{ - programs.ssh.enable = true; - home.packages = with pkgs; [ - sshfs # SSH File system - ]; -} diff --git a/programs/wal/default.nix b/programs/wal/default.nix deleted file mode 100644 index 5d63ae9..0000000 --- a/programs/wal/default.nix +++ /dev/null @@ -1,28 +0,0 @@ -{ config, pkgs, ... }: -let rootPath = ./.; in -{ - home.packages = with pkgs; [ - wallust # A better pywal - pywalfox-native # Update librewolf's colorscheme based on wal - ]; - xdg.configFile."wallust-config" = { - target = "wallust/wallust.toml"; - text = '' - backend = "wal" - color_space = "lab" - threshold = 20 - filter = "dark16" - - # [[entry]] - # # a relative path to a file where wallust.toml is (~/.config/wallust/) - # template = "dunstrc" - # - # # absolute path to the file to write the template (after templating) - # target = "~/.config/dunst/dunstrc" - ''; - }; - #xdg.configFile."wallust-templates" = { - # source = rootPath + "/templates"; - # target = "wallust/"; - #}; -} diff --git a/programs/xdg/default.nix b/programs/xdg/default.nix deleted file mode 100644 index 81a7a84..0000000 --- a/programs/xdg/default.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ config, pkgs, ... }: - -{ - xdg.enable = true; - xdg.userDirs.enable = true; - xdg.userDirs = { - desktop = "${config.home.homeDirectory}/dwn"; - download = "${config.home.homeDirectory}/dwn"; - documents = "${config.home.homeDirectory}/dox"; - publicShare = "${config.home.homeDirectory}/dox/public"; - templates = "${config.home.homeDirectory}/dox/templates"; - music = "${config.home.homeDirectory}/med/mus"; - pictures = "${config.home.homeDirectory}/med/pix"; - videos = "${config.home.homeDirectory}/med/vid"; - }; - - xdg.mimeApps.enable = true; -} diff --git a/programs/xonsh/default.nix b/programs/xonsh/default.nix deleted file mode 100644 index 9700e76..0000000 --- a/programs/xonsh/default.nix +++ /dev/null @@ -1,17 +0,0 @@ -{ config, pkgs, ... }: -let rootPath = ./.; in -{ - home.packages = with pkgs; [ - xonsh - ]; - home.sessionVariables = { - PROMPT = "τ "; - RIGHT_PROMPT = "{YELLOW}{gitstatus: {} }{BLUE}{short_cwd}{DEFAULT}"; - VI_MODE = 1; - }; - xdg.configFile."xonshrc" = { - source = rootPath + "/rc.xsh"; - target = "xonsh/rc.xsh"; - }; - -} diff --git a/programs/zsh/default.nix b/programs/zsh/default.nix deleted file mode 100644 index 694b981..0000000 --- a/programs/zsh/default.nix +++ /dev/null @@ -1,31 +0,0 @@ -{ config, pkgs, ... }: -{ - programs.zsh = { - enable = true; - enableCompletion = true; - autosuggestion.enable = true; - syntaxHighlighting.enable = true; - dotDir = ".config/zsh"; - - history.save = 10000; - history.size = 10000; - history.path = "${config.xdg.dataHome}/zsh/history"; - initExtra = '' - # Nix-shell - ${pkgs.nix-your-shell}/bin/nix-your-shell zsh | source /dev/stdin - - # Prompt - autoload -U colors && colors - autoload -Uz vcs_info - precmd_vcs_info() { vcs_info } - precmd_functions+=( precmd_vcs_info ) - setopt prompt_subst - zstyle ':vcs_info:*' check-for-changes true - zstyle ':vcs_info:*' unstagedstr '·*' - zstyle ':vcs_info:*' stagedstr '·+' - zstyle ':vcs_info:git:*' formats '%b%u%c' - export PROMPT="%(0?.%F{white}.%? %F{red})τ%f " - export RPROMPT="%F{yellow}\$vcs_info_msg_0_%f %F{blue}%~%f" - ''; - }; -} diff --git a/services/scripts/default.nix b/services/scripts/default.nix deleted file mode 100644 index aa31a14..0000000 --- a/services/scripts/default.nix +++ /dev/null @@ -1,10 +0,0 @@ -{ config, pkgs, ... }: - -let - select = import ./select.nix { inherit pkgs; }; -in -{ - home.packages = [ - select - ]; -} diff --git a/services/scripts/select.nix b/services/scripts/select.nix deleted file mode 100644 index c9462ab..0000000 --- a/services/scripts/select.nix +++ /dev/null @@ -1,15 +0,0 @@ -{ pkgs }: - -pkgs.writeShellApplication { - name = "select"; - - runtimeInputs = [ fzf rofi ]; - - text = '' - if [ ${PPID} -ne 1 ]; then - echo -e $1 | fzf - else - echo -e $1 | rofi -dmenu -p $2 - fi - ''; -} diff --git a/services/timers/default.nix b/services/timers/default.nix deleted file mode 100644 index 8eb16b7..0000000 --- a/services/timers/default.nix +++ /dev/null @@ -1,52 +0,0 @@ -{ config, pkgs, ... }: -let rootPath = ./.; in -{ - systemd.user.timers = { - hourly-time = { - Timer = { - OnCalendar = "hourly"; - }; - Install = { - WantedBy = [ - "timers.target" - ]; - }; - }; - quarterly-time = { - Timer = { - OnCalendar = "*-*-* *:15,30,45:00"; - }; - Install = { - WantedBy = [ - "timers.target" - ]; - }; - }; - }; - systemd.user.services = { - hourly-time = { - Unit = { - Description = "Notify the user every hour of time passing"; - }; - Service = { - Type="simple"; - ExecStart="/home/pan/.config/timer_scripts/notify-time.sh 60000 1"; - }; - }; - quarterly-time = { - Unit = { - Description = "Notify the user every 15 minutes of time passing, \ - skips hours"; - }; - Service = { - Type="simple"; - ExecStart="/home/pan/.config/timer_scripts/notify-time.sh 10000 0"; - }; - }; - }; - xdg.configFile."timer-scripts" = { - source = rootPath + "/scripts"; - target = "timer_scripts/"; - executable = true; - }; -} diff --git a/systems/pan/default.nix b/systems/pan/default.nix new file mode 100644 index 0000000..8947e74 --- /dev/null +++ b/systems/pan/default.nix @@ -0,0 +1,54 @@ +{ config, pkgs, ... }: + +{ + home.username = "pan"; + nixpkgs.config.allowUnfree = true; + home.stateVersion = "23.05"; + + hypr.enable = true; + ags.enable = true; + rofi.enable = true; + + timer.enableHourly = true; + timer.enableQuarterly = true; + colors.enable = true; + manpages.enable = true; + + zsh.enable = true; + kitty.enable = true; + kitty.font = "Cascadia Code"; + git.enable = true; + git.username = "Julia Lange"; + git.email = "public@julialange.org"; + ssh.enable = true; + + mpv.enable = true; + zathura.enable = true; + feh.enable = true; + + neovim.enable = true; + lf.enable = true; + lf.hiddenfiles = [ + "${config.home.homeDirectory}/.librewolf" + "${config.home.homeDirectory}/.nix-defexpr" + "${config.home.homeDirectory}/.nix-profile" + "${config.home.homeDirectory}/.nv" + "${config.home.homeDirectory}/.pki" + "${config.home.homeDirectory}/.steam*" + "${config.home.homeDirectory}/.zshenv" + ]; + + gimp.enable = true; + + beeper.enable = true; + discord.enable = true; + + lutris.enable = true; + + extraPkgs = with pkgs; [ + # Applications + ani-cli # Easy anime player + lutgen # LUT generator + prismlauncher # Minecraft launcher + ]; +} From 02fe68372c73cc7fbab315b974278fdc08afcd7f Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sun, 14 Apr 2024 05:40:02 -0700 Subject: [PATCH 132/412] Refactor codebase to use nix modules --- flake.lock | 46 +++++----- flake.nix | 13 +-- hmModules/apps/chat/beeper/default.nix | 13 +++ hmModules/apps/chat/default.nix | 8 ++ hmModules/apps/chat/discord/default.nix | 12 +++ hmModules/apps/default.nix | 18 ++++ hmModules/apps/file-browsers/default.nix | 8 ++ hmModules/apps/file-browsers/lf/default.nix | 82 +++++++++++++++++ .../apps/file-browsers}/lf/icons | 0 hmModules/apps/file-browsers/nnn/default.nix | 17 ++++ hmModules/apps/gimp/default.nix | 13 +++ hmModules/apps/git/default.nix | 19 ++++ hmModules/apps/hypr/default.nix | 50 ++++++++++ .../apps}/hypr/keybinds.conf | 0 .../apps}/hypr/league_rules.conf | 0 {programs => hmModules/apps}/hypr/nvidia.conf | 0 .../apps}/hypr/scripts/changeprimary.xsh | 0 .../apps}/hypr/scripts/changesecondary.xsh | 0 .../apps}/hypr/scripts/initdb.xsh | 0 .../apps}/hypr/settings.conf | 0 .../apps}/hypr/window_rules.conf | 0 .../apps}/hypr/xwaylandvideobridge.conf | 0 hmModules/apps/librewolf/default.nix | 16 ++++ hmModules/apps/lutris/default.nix | 22 +++++ hmModules/apps/media-viewers/default.nix | 9 ++ hmModules/apps/media-viewers/feh/default.nix | 13 +++ hmModules/apps/media-viewers/mpv/default.nix | 22 +++++ .../apps/media-viewers/zathura/default.nix | 13 +++ hmModules/apps/neovim/default.nix | 86 ++++++++++++++++++ .../nvim => hmModules/apps/neovim}/init.vim | 3 +- hmModules/apps/obs/default.nix | 17 ++++ hmModules/apps/rofi/default.nix | 14 +++ hmModules/apps/shells/default.nix | 9 ++ hmModules/apps/shells/fish/default.nix | 45 +++++++++ .../shells}/fish/functions/fish_prompt.fish | 0 .../fish/functions/fish_right_prompt.fish | 0 .../fish/functions/git_branch_name.fish | 0 .../shells}/fish/functions/git_is_dirty.fish | 0 .../shells}/fish/functions/git_is_repo.fish | 0 .../shells}/fish/functions/git_is_staged.fish | 0 .../fish/functions/git_is_touched.fish | 0 .../fish/functions/git_is_worktree.fish | 0 .../apps/shells}/fish/functions/n.fish | 0 .../apps/shells}/fish/functions/ssh.fish | 0 hmModules/apps/shells/xonsh/default.nix | 22 +++++ .../apps/shells}/xonsh/rc.xsh | 0 hmModules/apps/shells/zsh/default.nix | 47 ++++++++++ .../terminal-emulators/alacritty/default.nix | 39 ++++++++ hmModules/apps/terminal-emulators/default.nix | 8 ++ .../apps/terminal-emulators/kitty/default.nix | 20 ++++ hmModules/default.nix | 8 ++ hmModules/services/default.nix | 14 +++ hmModules/services/dunst/default.nix | 49 ++++++++++ hmModules/services/home/default.nix | 38 ++++++++ hmModules/services/manpages/default.nix | 15 +++ hmModules/services/ssh/default.nix | 14 +++ hmModules/services/timers/default.nix | 60 ++++++++++++ .../services}/timers/scripts/chimes.ogg | Bin .../services}/timers/scripts/notify-time.sh | 0 hmModules/services/trash/default.nix | 13 +++ hmModules/services/wal/default.nix | 34 +++++++ .../services/widgets}/ags/config/config.js | 0 .../widgets}/ags/config/modules/clock.js | 0 .../notifications/notificationPopup.ts | 0 .../config/modules/notifications/style.css | 0 .../ags/config/modules/workspace-switch.js | 0 hmModules/services/widgets/ags/default.nix | 25 +++++ hmModules/services/widgets/default.nix | 8 ++ .../services/widgets}/eww/config/eww.scss | 0 .../services/widgets}/eww/config/eww.yuck | 0 .../widgets}/eww/config/modules/bar.yuck | 0 .../config/modules/components/hyprwindow.yuck | 0 .../modules/components/hyprworkspaces.yuck | 0 .../config/modules/components/internet.yuck | 0 .../modules/components/japaneseaudio.yuck | 0 .../modules/components/japanesebattery.yuck | 0 .../modules/components/japanesedate.yuck | 0 .../widgets}/eww/config/modules/powerbar.yuck | 0 .../widgets}/eww/config/modules/switch.yuck | 0 .../config/scripts/change-active-workspace | 0 .../eww/config/scripts/get-active-workspace | 0 .../eww/config/scripts/get-window-title | 0 .../eww/config/scripts/get-workspaces | 0 .../widgets}/eww/config/scripts/japanesedate | 0 .../widgets}/eww/config/scripts/medpreview | 0 .../widgets}/eww/config/variables.yuck | 0 hmModules/services/widgets/eww/default.nix | 13 +++ home.nix | 77 ---------------- programs/ags/default.nix | 23 ----- programs/alacritty/default.nix | 32 ------- programs/discord/default.nix | 6 -- programs/dunst/default.nix | 41 --------- programs/eww/default.nix | 7 -- programs/fish/default.nix | 43 --------- programs/git/default.nix | 12 --- programs/hypr/default.nix | 43 --------- programs/kitty/default.nix | 12 --- programs/lf/default.nix | 85 ----------------- programs/lutris/default.nix | 16 ---- programs/mpv/default.nix | 14 --- programs/nnn/default.nix | 14 --- programs/nvim/default.nix | 74 --------------- programs/obs/default.nix | 11 --- programs/rofi/default.nix | 6 -- programs/spotify/default.nix | 18 ---- programs/ssh/default.nix | 8 -- programs/wal/default.nix | 28 ------ programs/xdg/default.nix | 18 ---- programs/xonsh/default.nix | 17 ---- programs/zsh/default.nix | 31 ------- services/scripts/default.nix | 10 -- services/scripts/select.nix | 15 --- services/timers/default.nix | 52 ----------- systems/pan/default.nix | 54 +++++++++++ 114 files changed, 1018 insertions(+), 744 deletions(-) create mode 100644 hmModules/apps/chat/beeper/default.nix create mode 100644 hmModules/apps/chat/default.nix create mode 100644 hmModules/apps/chat/discord/default.nix create mode 100644 hmModules/apps/default.nix create mode 100644 hmModules/apps/file-browsers/default.nix create mode 100644 hmModules/apps/file-browsers/lf/default.nix rename {programs => hmModules/apps/file-browsers}/lf/icons (100%) create mode 100644 hmModules/apps/file-browsers/nnn/default.nix create mode 100644 hmModules/apps/gimp/default.nix create mode 100644 hmModules/apps/git/default.nix create mode 100644 hmModules/apps/hypr/default.nix rename {programs => hmModules/apps}/hypr/keybinds.conf (100%) rename {programs => hmModules/apps}/hypr/league_rules.conf (100%) rename {programs => hmModules/apps}/hypr/nvidia.conf (100%) rename {programs => hmModules/apps}/hypr/scripts/changeprimary.xsh (100%) rename {programs => hmModules/apps}/hypr/scripts/changesecondary.xsh (100%) rename {programs => hmModules/apps}/hypr/scripts/initdb.xsh (100%) rename {programs => hmModules/apps}/hypr/settings.conf (100%) rename {programs => hmModules/apps}/hypr/window_rules.conf (100%) rename {programs => hmModules/apps}/hypr/xwaylandvideobridge.conf (100%) create mode 100644 hmModules/apps/librewolf/default.nix create mode 100644 hmModules/apps/lutris/default.nix create mode 100644 hmModules/apps/media-viewers/default.nix create mode 100644 hmModules/apps/media-viewers/feh/default.nix create mode 100644 hmModules/apps/media-viewers/mpv/default.nix create mode 100644 hmModules/apps/media-viewers/zathura/default.nix create mode 100644 hmModules/apps/neovim/default.nix rename {programs/nvim => hmModules/apps/neovim}/init.vim (93%) create mode 100644 hmModules/apps/obs/default.nix create mode 100644 hmModules/apps/rofi/default.nix create mode 100644 hmModules/apps/shells/default.nix create mode 100644 hmModules/apps/shells/fish/default.nix rename {programs => hmModules/apps/shells}/fish/functions/fish_prompt.fish (100%) rename {programs => hmModules/apps/shells}/fish/functions/fish_right_prompt.fish (100%) rename {programs => hmModules/apps/shells}/fish/functions/git_branch_name.fish (100%) rename {programs => hmModules/apps/shells}/fish/functions/git_is_dirty.fish (100%) rename {programs => hmModules/apps/shells}/fish/functions/git_is_repo.fish (100%) rename {programs => hmModules/apps/shells}/fish/functions/git_is_staged.fish (100%) rename {programs => hmModules/apps/shells}/fish/functions/git_is_touched.fish (100%) rename {programs => hmModules/apps/shells}/fish/functions/git_is_worktree.fish (100%) rename {programs => hmModules/apps/shells}/fish/functions/n.fish (100%) rename {programs => hmModules/apps/shells}/fish/functions/ssh.fish (100%) create mode 100644 hmModules/apps/shells/xonsh/default.nix rename {programs => hmModules/apps/shells}/xonsh/rc.xsh (100%) create mode 100644 hmModules/apps/shells/zsh/default.nix create mode 100644 hmModules/apps/terminal-emulators/alacritty/default.nix create mode 100644 hmModules/apps/terminal-emulators/default.nix create mode 100644 hmModules/apps/terminal-emulators/kitty/default.nix create mode 100644 hmModules/default.nix create mode 100644 hmModules/services/default.nix create mode 100644 hmModules/services/dunst/default.nix create mode 100644 hmModules/services/home/default.nix create mode 100644 hmModules/services/manpages/default.nix create mode 100644 hmModules/services/ssh/default.nix create mode 100644 hmModules/services/timers/default.nix rename {services => hmModules/services}/timers/scripts/chimes.ogg (100%) rename {services => hmModules/services}/timers/scripts/notify-time.sh (100%) create mode 100644 hmModules/services/trash/default.nix create mode 100644 hmModules/services/wal/default.nix rename {programs => hmModules/services/widgets}/ags/config/config.js (100%) rename {programs => hmModules/services/widgets}/ags/config/modules/clock.js (100%) rename {programs => hmModules/services/widgets}/ags/config/modules/notifications/notificationPopup.ts (100%) rename {programs => hmModules/services/widgets}/ags/config/modules/notifications/style.css (100%) rename {programs => hmModules/services/widgets}/ags/config/modules/workspace-switch.js (100%) create mode 100644 hmModules/services/widgets/ags/default.nix create mode 100644 hmModules/services/widgets/default.nix rename {programs => hmModules/services/widgets}/eww/config/eww.scss (100%) rename {programs => hmModules/services/widgets}/eww/config/eww.yuck (100%) rename {programs => hmModules/services/widgets}/eww/config/modules/bar.yuck (100%) rename {programs => hmModules/services/widgets}/eww/config/modules/components/hyprwindow.yuck (100%) rename {programs => hmModules/services/widgets}/eww/config/modules/components/hyprworkspaces.yuck (100%) rename {programs => hmModules/services/widgets}/eww/config/modules/components/internet.yuck (100%) rename {programs => hmModules/services/widgets}/eww/config/modules/components/japaneseaudio.yuck (100%) rename {programs => hmModules/services/widgets}/eww/config/modules/components/japanesebattery.yuck (100%) rename {programs => hmModules/services/widgets}/eww/config/modules/components/japanesedate.yuck (100%) rename {programs => hmModules/services/widgets}/eww/config/modules/powerbar.yuck (100%) rename {programs => hmModules/services/widgets}/eww/config/modules/switch.yuck (100%) rename {programs => hmModules/services/widgets}/eww/config/scripts/change-active-workspace (100%) rename {programs => hmModules/services/widgets}/eww/config/scripts/get-active-workspace (100%) rename {programs => hmModules/services/widgets}/eww/config/scripts/get-window-title (100%) rename {programs => hmModules/services/widgets}/eww/config/scripts/get-workspaces (100%) rename {programs => hmModules/services/widgets}/eww/config/scripts/japanesedate (100%) rename {programs => hmModules/services/widgets}/eww/config/scripts/medpreview (100%) rename {programs => hmModules/services/widgets}/eww/config/variables.yuck (100%) create mode 100644 hmModules/services/widgets/eww/default.nix delete mode 100644 home.nix delete mode 100644 programs/ags/default.nix delete mode 100644 programs/alacritty/default.nix delete mode 100644 programs/discord/default.nix delete mode 100644 programs/dunst/default.nix delete mode 100644 programs/eww/default.nix delete mode 100644 programs/fish/default.nix delete mode 100644 programs/git/default.nix delete mode 100644 programs/hypr/default.nix delete mode 100644 programs/kitty/default.nix delete mode 100644 programs/lf/default.nix delete mode 100644 programs/lutris/default.nix delete mode 100644 programs/mpv/default.nix delete mode 100644 programs/nnn/default.nix delete mode 100644 programs/nvim/default.nix delete mode 100644 programs/obs/default.nix delete mode 100644 programs/rofi/default.nix delete mode 100644 programs/spotify/default.nix delete mode 100644 programs/ssh/default.nix delete mode 100644 programs/wal/default.nix delete mode 100644 programs/xdg/default.nix delete mode 100644 programs/xonsh/default.nix delete mode 100644 programs/zsh/default.nix delete mode 100644 services/scripts/default.nix delete mode 100644 services/scripts/select.nix delete mode 100644 services/timers/default.nix create mode 100644 systems/pan/default.nix diff --git a/flake.lock b/flake.lock index 7c3d189..3a7bcc5 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1712250145, - "narHash": "sha256-8WTGn7It2kZfAmN97Epi3g/Su/w3Hbw/T4dWxE7OrBw=", + "lastModified": 1712834339, + "narHash": "sha256-gRYAbyxx4Z2s4hMoXHSu3wv2+VSiiR2Nk+AZmCZ6kc4=", "owner": "Aylur", "repo": "ags", - "rev": "d589077199ec8a055ef936bf8a1f051b7a0c7e34", + "rev": "c13bcba224f9ecaaa2f22b1d2895bb62e8face19", "type": "github" }, "original": { @@ -27,11 +27,11 @@ ] }, "locked": { - "lastModified": 1712462372, - "narHash": "sha256-WA3bbBWhd3o1wAgyHZNypjb/LG4oq+IWxFq8ey8yNPU=", + "lastModified": 1713077896, + "narHash": "sha256-Noot8H0EZEAFRQWyGxh9ryvhK96xpIqKbh78X447JWs=", "owner": "nix-community", "repo": "home-manager", - "rev": "a561ad6ab38578c812cc9af3b04f2cc60ebf48c9", + "rev": "630a0992b3627c64e34f179fab68e3d48c6991c0", "type": "github" }, "original": { @@ -82,11 +82,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1712528342, - "narHash": "sha256-5tRzlHnhk28M2ClRshRAEANGE/GF9A1Cl36OXAmi+Ig=", + "lastModified": 1713050186, + "narHash": "sha256-AKdzVa0Zz5PQ1ptQgD0jj8J+UZUW9OeKGZ0mNVnkyI4=", "owner": "hyprwm", "repo": "Hyprland", - "rev": "43b96f03b5af60586a864ea64e8c71b11ea6eb85", + "rev": "0634aaeac6cca12e4f72174c431c2db9da9c0072", "type": "github" }, "original": { @@ -167,11 +167,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1712439257, - "narHash": "sha256-aSpiNepFOMk9932HOax0XwNxbA38GOUVOiXfUVPOrck=", + "lastModified": 1712791164, + "narHash": "sha256-3sbWO1mbpWsLepZGbWaMovSO7ndZeFqDSdX0hZ9nVyw=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "ff0dbd94265ac470dda06a657d5fe49de93b4599", + "rev": "1042fd8b148a9105f3c0aca3a6177fd1d9360ba5", "type": "github" }, "original": { @@ -207,20 +207,18 @@ "wlroots": { "flake": false, "locked": { - "host": "gitlab.freedesktop.org", - "lastModified": 1709983277, - "narHash": "sha256-wXWIJLd4F2JZeMaihWVDW/yYXCLEC8OpeNJZg9a9ly8=", - "owner": "wlroots", - "repo": "wlroots", - "rev": "50eae512d9cecbf0b3b1898bb1f0b40fa05fe19b", - "type": "gitlab" + "lastModified": 1712935342, + "narHash": "sha256-zzIbTFNFd/as42jyGx23fil2uBDYYv+8GA5JmRq5y9c=", + "owner": "hyprwm", + "repo": "wlroots-hyprland", + "rev": "62eeffbe233d199f520a5755c344e85f8eab7940", + "type": "github" }, "original": { - "host": "gitlab.freedesktop.org", - "owner": "wlroots", - "repo": "wlroots", - "rev": "50eae512d9cecbf0b3b1898bb1f0b40fa05fe19b", - "type": "gitlab" + "owner": "hyprwm", + "repo": "wlroots-hyprland", + "rev": "62eeffbe233d199f520a5755c344e85f8eab7940", + "type": "github" } }, "xdph": { diff --git a/flake.nix b/flake.nix index d3ec4c7..af16e17 100644 --- a/flake.nix +++ b/flake.nix @@ -17,17 +17,18 @@ ags.inputs.nixpkgs.follows = "nixpkgs"; }; - outputs = { nixpkgs, home-manager, hyprland, ... }@inputs: let + outputs = { nixpkgs, home-manager, ... }@inputs: + let system = "x86_64-linux"; pkgs = nixpkgs.legacyPackages.${system}; - in { - homeConfigurations."pan" = home-manager.lib.homeManagerConfiguration { + defaultConfig = extraModules: home-manager.lib.homeManagerConfiguration { inherit pkgs; extraSpecialArgs = { inherit inputs; }; modules = [ - hyprland.homeManagerModules.default - ./home.nix - ]; + ./hmModules + ] ++ extraModules; }; + in { + homeConfigurations.pan = defaultConfig [ ./systems/pan ]; }; } diff --git a/hmModules/apps/chat/beeper/default.nix b/hmModules/apps/chat/beeper/default.nix new file mode 100644 index 0000000..9f43a70 --- /dev/null +++ b/hmModules/apps/chat/beeper/default.nix @@ -0,0 +1,13 @@ +{ config, pkgs, lib, ... }: + +{ + options.beeper = { + enable = lib.mkEnableOption "Enables beeper"; + }; + + config = lib.mkIf config.beeper.enable { + home.packages = with pkgs; [ + beeper + ]; + }; +} diff --git a/hmModules/apps/chat/default.nix b/hmModules/apps/chat/default.nix new file mode 100644 index 0000000..84ad4e5 --- /dev/null +++ b/hmModules/apps/chat/default.nix @@ -0,0 +1,8 @@ +{ config, pkgs, ... }: + +{ + imports = [ + ./discord + ./beeper + ]; +} diff --git a/hmModules/apps/chat/discord/default.nix b/hmModules/apps/chat/discord/default.nix new file mode 100644 index 0000000..474b6ac --- /dev/null +++ b/hmModules/apps/chat/discord/default.nix @@ -0,0 +1,12 @@ +{ config, pkgs, lib, ... }: +{ + options.discord = { + enable = lib.mkEnableOption "Enables discord"; + }; + + config = lib.mkIf config.discord.enable { + home.packages = with pkgs; [ + vesktop # Base app + ]; + }; +} diff --git a/hmModules/apps/default.nix b/hmModules/apps/default.nix new file mode 100644 index 0000000..4d496dc --- /dev/null +++ b/hmModules/apps/default.nix @@ -0,0 +1,18 @@ +{ config, pkgs, ... }: + +{ + imports = [ + ./chat + ./file-browsers + ./gimp + ./git + ./hypr + ./lutris + ./media-viewers + ./neovim + ./obs + ./rofi + ./shells + ./terminal-emulators + ]; +} diff --git a/hmModules/apps/file-browsers/default.nix b/hmModules/apps/file-browsers/default.nix new file mode 100644 index 0000000..118e357 --- /dev/null +++ b/hmModules/apps/file-browsers/default.nix @@ -0,0 +1,8 @@ +{ config, pkgs, lib, ... }: + +{ + imports = [ + ./lf + ./nnn + ]; +} diff --git a/hmModules/apps/file-browsers/lf/default.nix b/hmModules/apps/file-browsers/lf/default.nix new file mode 100644 index 0000000..c37b608 --- /dev/null +++ b/hmModules/apps/file-browsers/lf/default.nix @@ -0,0 +1,82 @@ +{ config, pkgs, lib, ... }: + +{ + options.lf = { + enable = lib.mkEnableOption "Enables lf"; + hiddenfiles = lib.mkOption { default = [ ".*" ]; }; + leader = lib.mkOption { default = ""; }; + }; + + config = lib.mkIf config.lf.enable { + xdg.configFile."lf/icons".source = ./icons; + + programs.lf = { + enable = true; + settings = { + # Hide specific files rather than "hidden" files + hiddenfiles = config.lf.hiddenfiles; + ratios = [ + 2 + 3 + ]; + preview = true; + ignorecase = true; + icons = true; + number = true; + relativenumber = true; + }; + commands = { + dragon-out = ''%${pkgs.xdragon}/bin/xdragon -a -x "$fx"''; + mkdir = '' + ''${{ + printf "Directory Name: " + read DIR + mkdir $DIR + }} + ''; + mkfile = '' + ''${{ + printf "File Name: " + read FILE + mkdir $FILE + }} + ''; + }; + keybindings = let + leader = config.lf.leader; + in { + "${leader}" = ""; + "v" = ":toggle; down"; + "." = "set hidden!"; + "${leader}d" = "mkdir"; + "${leader}f" = "mkfile"; + "${leader}m" = "dragon-out"; + }; + extraConfig = + let + previewer = + pkgs.writeShellScriptBin "pv.sh" '' + file=$1 + w=$2 + h=$3 + x=$4 + y=$5 + + if [[ "$( ${pkgs.file}/bin/file -Lb --mime-type "$file")" =~ ^image ]]; then + ${pkgs.kitty}/bin/kitty +kitten icat --silent --stdin no --transfer-mode file --place "''${w}x''${h}@''${x}x''${y}" "$file" < /dev/null > /dev/tty + exit 1 + fi + + ${pkgs.pistol}/bin/pistol "$file" + ''; + cleaner = pkgs.writeShellScriptBin "clean.sh" '' + ${pkgs.kitty}/bin/kitty +kitten icat --clear --stdin no --silent --transfer-mode file < /dev/null > /dev/tty + ''; + in + '' + set cleaner ${cleaner}/bin/clean.sh + set previewer ${previewer}/bin/pv.sh + ''; + }; + }; +} diff --git a/programs/lf/icons b/hmModules/apps/file-browsers/lf/icons similarity index 100% rename from programs/lf/icons rename to hmModules/apps/file-browsers/lf/icons diff --git a/hmModules/apps/file-browsers/nnn/default.nix b/hmModules/apps/file-browsers/nnn/default.nix new file mode 100644 index 0000000..f68cec2 --- /dev/null +++ b/hmModules/apps/file-browsers/nnn/default.nix @@ -0,0 +1,17 @@ +{ config, pkgs, lib, ... }: + +{ + options.nnn = { + enable = lib.mkEnableOption "Enables nnn"; + }; + + config = lib.mkIf config.nnn.enable { + programs.nnn.enable = true; + home.sessionVariables = { + NNN_FCOLORS = "0000E6310000000000000000"; + NNN_OPTS = "eH"; + NNN_FIFO = "/tmp/nnn.fifo"; + NNN_TRASH = lib.mkIf config.trash.enable "1"; + }; + }; +} diff --git a/hmModules/apps/gimp/default.nix b/hmModules/apps/gimp/default.nix new file mode 100644 index 0000000..0998e28 --- /dev/null +++ b/hmModules/apps/gimp/default.nix @@ -0,0 +1,13 @@ +{ config, pkgs, lib, ... }: + +{ + options.gimp = { + enable = lib.mkEnableOption "Enables gimp"; + }; + + config = lib.mkIf config.gimp.enable { + home.packages = with pkgs; [ + gimp + ]; + }; +} diff --git a/hmModules/apps/git/default.nix b/hmModules/apps/git/default.nix new file mode 100644 index 0000000..0a87ff0 --- /dev/null +++ b/hmModules/apps/git/default.nix @@ -0,0 +1,19 @@ +{ config, pkgs, lib, ... }: + +{ + options.git = { + enable = lib.mkEnableOption "Enables git"; + username = lib.mkOption { default = config.home.username; }; + email = lib.mkOption { + default = "git@" + config.home.username + ".com"; + }; + }; + + config = lib.mkIf config.git.enable { + programs.git = { + enable = true; + userName = config.git.username; + userEmail = config.git.email; + }; + }; +} diff --git a/hmModules/apps/hypr/default.nix b/hmModules/apps/hypr/default.nix new file mode 100644 index 0000000..0c83ffd --- /dev/null +++ b/hmModules/apps/hypr/default.nix @@ -0,0 +1,50 @@ +{ config, inputs, pkgs, lib, ... }: +let rootPath = ./.; in +{ + options.hypr = { + enable = lib.mkEnableOption "Enables hyprland"; + }; + + imports = [ inputs.hyprland.homeManagerModules.default ]; + + config = lib.mkIf config.hypr.enable { + wayland.windowManager.hyprland = { + enable = true; + extraConfig = '' + ${builtins.readFile ./window_rules.conf} + ${builtins.readFile ./league_rules.conf} + ${builtins.readFile ./settings.conf} + ${builtins.readFile ./nvidia.conf} + ${builtins.readFile ./keybinds.conf} + ${builtins.readFile ./xwaylandvideobridge.conf} + exec-once=${pkgs.polkit-kde-agent}/libexec/polkit-kde-authentication-agent-1 + + env = HYPRCURSOR_THEME,miku + env = HYPRCURSOR_SIZE,64 + ''; + }; + home.packages = with pkgs; [ + socat # For hyprland scripts + swww # Wallpaper engine + wlr-randr # Xrandr for wayland + wl-clipboard # Clipboard manager for wayland + xdg-desktop-portal-hyprland # XDP for hyprland + hyprpicker # Colorpicker, needed for screenshot tool + hyprcursor # Hyprland cursor + inputs.hyprland-contrib.packages.${pkgs.system}.grimblast # Screenshot tool + polkit-kde-agent # Polkit handler + ]; + # Hyprland screenshot tool + xdg.configFile."hypr-scripts" = { + source = rootPath + "/scripts"; + target = "hypr/scripts"; + executable = true; + }; + + xdg.dataFile."hypr-icons" = { + source = rootPath + "/icons"; + target = "icons/"; + recursive = true; + }; + }; +} diff --git a/programs/hypr/keybinds.conf b/hmModules/apps/hypr/keybinds.conf similarity index 100% rename from programs/hypr/keybinds.conf rename to hmModules/apps/hypr/keybinds.conf diff --git a/programs/hypr/league_rules.conf b/hmModules/apps/hypr/league_rules.conf similarity index 100% rename from programs/hypr/league_rules.conf rename to hmModules/apps/hypr/league_rules.conf diff --git a/programs/hypr/nvidia.conf b/hmModules/apps/hypr/nvidia.conf similarity index 100% rename from programs/hypr/nvidia.conf rename to hmModules/apps/hypr/nvidia.conf diff --git a/programs/hypr/scripts/changeprimary.xsh b/hmModules/apps/hypr/scripts/changeprimary.xsh similarity index 100% rename from programs/hypr/scripts/changeprimary.xsh rename to hmModules/apps/hypr/scripts/changeprimary.xsh diff --git a/programs/hypr/scripts/changesecondary.xsh b/hmModules/apps/hypr/scripts/changesecondary.xsh similarity index 100% rename from programs/hypr/scripts/changesecondary.xsh rename to hmModules/apps/hypr/scripts/changesecondary.xsh diff --git a/programs/hypr/scripts/initdb.xsh b/hmModules/apps/hypr/scripts/initdb.xsh similarity index 100% rename from programs/hypr/scripts/initdb.xsh rename to hmModules/apps/hypr/scripts/initdb.xsh diff --git a/programs/hypr/settings.conf b/hmModules/apps/hypr/settings.conf similarity index 100% rename from programs/hypr/settings.conf rename to hmModules/apps/hypr/settings.conf diff --git a/programs/hypr/window_rules.conf b/hmModules/apps/hypr/window_rules.conf similarity index 100% rename from programs/hypr/window_rules.conf rename to hmModules/apps/hypr/window_rules.conf diff --git a/programs/hypr/xwaylandvideobridge.conf b/hmModules/apps/hypr/xwaylandvideobridge.conf similarity index 100% rename from programs/hypr/xwaylandvideobridge.conf rename to hmModules/apps/hypr/xwaylandvideobridge.conf diff --git a/hmModules/apps/librewolf/default.nix b/hmModules/apps/librewolf/default.nix new file mode 100644 index 0000000..7995cbb --- /dev/null +++ b/hmModules/apps/librewolf/default.nix @@ -0,0 +1,16 @@ +{ config, pkgs, lib, ... }: + +{ + options.librewolf = { + enable = lib.mkEnableOption "Enables librewolf"; + }; + + config = lib.mkIf config.librewolf.enable { + home.packages = with pkgs; [ + librewolf + ]; + home.sessionVariables = { + BROWSER = "librewolf"; + }; + }; +} diff --git a/hmModules/apps/lutris/default.nix b/hmModules/apps/lutris/default.nix new file mode 100644 index 0000000..aa78d39 --- /dev/null +++ b/hmModules/apps/lutris/default.nix @@ -0,0 +1,22 @@ +{ config, pkgs, lib, ... }: + +{ + options.lutris = { + enable = lib.mkEnableOption "Enables lutris"; + }; + + config = lib.mkIf config.lutris.enable { + home.packages = with pkgs; [ + lutris + wineWowPackages.stable + # (lutris.override { + # extraLibraries = pkgs: [ + # # List library dependencies here + # ]; + # extraPkgs = pkgs: [ + # # List package dependencies here + # ]; + # }) + ]; + }; +} diff --git a/hmModules/apps/media-viewers/default.nix b/hmModules/apps/media-viewers/default.nix new file mode 100644 index 0000000..5b26119 --- /dev/null +++ b/hmModules/apps/media-viewers/default.nix @@ -0,0 +1,9 @@ +{ config, pkgs, ... }: + +{ + imports = [ + ./feh + ./mpv + ./zathura + ]; +} diff --git a/hmModules/apps/media-viewers/feh/default.nix b/hmModules/apps/media-viewers/feh/default.nix new file mode 100644 index 0000000..c1c4462 --- /dev/null +++ b/hmModules/apps/media-viewers/feh/default.nix @@ -0,0 +1,13 @@ +{ config, pkgs, lib, ... }: + +{ + options.feh = { + enable = lib.mkEnableOption "Enables feh"; + }; + + config = lib.mkIf config.feh.enable { + programs.feh = { + enable = true; + }; + }; +} diff --git a/hmModules/apps/media-viewers/mpv/default.nix b/hmModules/apps/media-viewers/mpv/default.nix new file mode 100644 index 0000000..e64e5ce --- /dev/null +++ b/hmModules/apps/media-viewers/mpv/default.nix @@ -0,0 +1,22 @@ +{ config, pkgs, lib, ... }: + +{ + options.mpv = { + enable = lib.mkEnableOption "Enables mpv"; + }; + + config = lib.mkIf config.mpv.enable { + home.packages = with pkgs; [ + yt-dlp + ]; + programs.mpv = { + enable = true; + config = { + volume-max = 150; + force-window = "yes"; + script-opts = "ytdl_hook-ytdl_path=yt-dlp"; + ytdl-format = "bestvideo[height<=?1080][vcodec!=vp9]+bestaudio/best"; + }; + }; + }; +} diff --git a/hmModules/apps/media-viewers/zathura/default.nix b/hmModules/apps/media-viewers/zathura/default.nix new file mode 100644 index 0000000..005c2b6 --- /dev/null +++ b/hmModules/apps/media-viewers/zathura/default.nix @@ -0,0 +1,13 @@ +{ config, pkgs, lib, ... }: + +{ + options.zathura = { + enable = lib.mkEnableOption "Enables zathura"; + }; + + config = lib.mkIf config.zathura.enable { + programs.zathura = { + enable = true; + }; + }; +} diff --git a/hmModules/apps/neovim/default.nix b/hmModules/apps/neovim/default.nix new file mode 100644 index 0000000..e8a805e --- /dev/null +++ b/hmModules/apps/neovim/default.nix @@ -0,0 +1,86 @@ +{ config, pkgs, lib, ... }: + +{ + options.neovim = { + enable = lib.mkEnableOption "Enables neovim"; + }; + + config = lib.mkIf config.neovim.enable { + home.sessionVariables = { + EDITOR = "nvim"; + VISUAL = "nvim"; + }; + programs.neovim = { + enable = true; + extraConfig = '' + ${builtins.readFile ./init.vim} + ''; + plugins = with pkgs.vimPlugins; [ + { # Personal Wiki + plugin = vimwiki; + config = '' + let g:vimwiki_list = [{'path': '~/dox/wiki', 'links_space_char': '_', + \ 'ext': '.md', 'syntax': 'markdown'}] + ''; + } + { # NNN in vim + plugin = nnn-vim; + config = '' + let g:nnn#layout = { 'window': { + \ 'width': 0.35, + \ 'height': 0.5, + \ 'xoffset': 1.0, + \ 'highlight': 'Debug' } } " hover window + let g:nnn#action = { + \ '': 'tab split', + \ '': 'split', + \ '': 'vsplit' } + let g:nnn#command = 'nnn -HoeT v' + let g:nnn#replace_netrw = 1 + ''; + } + { # Fuzzy searches + plugin = fzf-vim; + config = '' + map :Files + map :Ag + ''; + } + { # Auto completions + plugin = coc-nvim; + config = '' + function! s:check_back_space() abort + let col = col('.') - 1 + return !col || getline('.')[col - 1] =~# '\s' + endfunction + + inoremap + \ pumvisible() ? "\" : + \ check_back_space() ? "\" : + \ coc#refresh() + inoremap pumvisible() ? "\" : "\" + ''; + } + vim-commentary # multi-line comments + vim-fugitive # Git Plugin + vimtex # Latex support + tagbar # File tagging + + # === LOOK AND FEEL === + { # Status Bar + plugin = vim-airline; + config = '' + let g:airline#extensions#tagbar#flags = 'fs' + ''; + } + { # Rainbow Parenthesis + plugin = rainbow; + config = '' + let g:rainbow_actve = 1 + ''; + } + vim-polyglot # Syntax Highlighting + ]; + }; + }; +} diff --git a/programs/nvim/init.vim b/hmModules/apps/neovim/init.vim similarity index 93% rename from programs/nvim/init.vim rename to hmModules/apps/neovim/init.vim index a40649a..d8b95c9 100644 --- a/programs/nvim/init.vim +++ b/hmModules/apps/neovim/init.vim @@ -14,7 +14,8 @@ nnoremap nnoremap " Indentation -set tabstop=2 softtabstop=0 shiftwidth=2 smarttab expandtab +" set tabstop=2 softtabstop=0 shiftwidth=2 smarttab expandtab +set tabstop=8 softtabstop=0 shiftwidth=8 " Searching set smartcase diff --git a/hmModules/apps/obs/default.nix b/hmModules/apps/obs/default.nix new file mode 100644 index 0000000..a42a495 --- /dev/null +++ b/hmModules/apps/obs/default.nix @@ -0,0 +1,17 @@ +{ config, pkgs, lib, ... }: +{ + options.obs = { + enable = lib.mkEnableOption "Enables obs"; + }; + + config = lib.mkIf config.obs.enable { + programs.obs-studio = { + enable = true; + plugins = with pkgs.obs-studio-plugins; [ + wlrobs + obs-backgroundremoval + obs-pipewire-audio-capture + ]; + }; + }; +} diff --git a/hmModules/apps/rofi/default.nix b/hmModules/apps/rofi/default.nix new file mode 100644 index 0000000..c98e81f --- /dev/null +++ b/hmModules/apps/rofi/default.nix @@ -0,0 +1,14 @@ +{ config, pkgs, lib, ... }: + +{ + options.rofi = { + enable = lib.mkEnableOption "Enables rofi"; + }; + + config = lib.mkIf config.rofi.enable { + programs.rofi = { + enable = true; + package = pkgs.rofi-wayland; + }; + }; +} diff --git a/hmModules/apps/shells/default.nix b/hmModules/apps/shells/default.nix new file mode 100644 index 0000000..03ae484 --- /dev/null +++ b/hmModules/apps/shells/default.nix @@ -0,0 +1,9 @@ +{ config, pkgs, lib, ... }: + +{ + imports = [ + ./fish + ./xonsh + ./zsh + ]; +} diff --git a/hmModules/apps/shells/fish/default.nix b/hmModules/apps/shells/fish/default.nix new file mode 100644 index 0000000..46e6de1 --- /dev/null +++ b/hmModules/apps/shells/fish/default.nix @@ -0,0 +1,45 @@ +{ config, pkgs, lib, ... }: + +{ + options.fish = { + enable = lib.mkEnableOption "Enables fish"; + }; + + config = lib.mkIf config.fish.enable { + programs.fish.enable = true; + + programs.fish.functions = { + fish_greeting = ""; + fish_prompt = '' + ${builtins.readFile ./functions/fish_prompt.fish} + ''; + fish_right_prompt = '' + ${builtins.readFile ./functions/fish_right_prompt.fish} + ''; + git_branch_name = '' + ${builtins.readFile ./functions/git_branch_name.fish} + ''; + git_is_dirty = '' + ${builtins.readFile ./functions/git_is_dirty.fish} + ''; + git_is_repo = '' + ${builtins.readFile ./functions/git_is_repo.fish} + ''; + git_is_staged = '' + ${builtins.readFile ./functions/git_is_staged.fish} + ''; + git_is_touched = '' + ${builtins.readFile ./functions/git_is_touched.fish} + ''; + git_is_worktree = '' + ${builtins.readFile ./functions/git_is_worktree.fish} + ''; + ssh = '' + ${builtins.readFile ./functions/ssh.fish} + ''; + n = lib.mkIf config.nnn.enable '' + ${builtins.readFile ./functions/n.fish} + ''; + }; + }; +} diff --git a/programs/fish/functions/fish_prompt.fish b/hmModules/apps/shells/fish/functions/fish_prompt.fish similarity index 100% rename from programs/fish/functions/fish_prompt.fish rename to hmModules/apps/shells/fish/functions/fish_prompt.fish diff --git a/programs/fish/functions/fish_right_prompt.fish b/hmModules/apps/shells/fish/functions/fish_right_prompt.fish similarity index 100% rename from programs/fish/functions/fish_right_prompt.fish rename to hmModules/apps/shells/fish/functions/fish_right_prompt.fish diff --git a/programs/fish/functions/git_branch_name.fish b/hmModules/apps/shells/fish/functions/git_branch_name.fish similarity index 100% rename from programs/fish/functions/git_branch_name.fish rename to hmModules/apps/shells/fish/functions/git_branch_name.fish diff --git a/programs/fish/functions/git_is_dirty.fish b/hmModules/apps/shells/fish/functions/git_is_dirty.fish similarity index 100% rename from programs/fish/functions/git_is_dirty.fish rename to hmModules/apps/shells/fish/functions/git_is_dirty.fish diff --git a/programs/fish/functions/git_is_repo.fish b/hmModules/apps/shells/fish/functions/git_is_repo.fish similarity index 100% rename from programs/fish/functions/git_is_repo.fish rename to hmModules/apps/shells/fish/functions/git_is_repo.fish diff --git a/programs/fish/functions/git_is_staged.fish b/hmModules/apps/shells/fish/functions/git_is_staged.fish similarity index 100% rename from programs/fish/functions/git_is_staged.fish rename to hmModules/apps/shells/fish/functions/git_is_staged.fish diff --git a/programs/fish/functions/git_is_touched.fish b/hmModules/apps/shells/fish/functions/git_is_touched.fish similarity index 100% rename from programs/fish/functions/git_is_touched.fish rename to hmModules/apps/shells/fish/functions/git_is_touched.fish diff --git a/programs/fish/functions/git_is_worktree.fish b/hmModules/apps/shells/fish/functions/git_is_worktree.fish similarity index 100% rename from programs/fish/functions/git_is_worktree.fish rename to hmModules/apps/shells/fish/functions/git_is_worktree.fish diff --git a/programs/fish/functions/n.fish b/hmModules/apps/shells/fish/functions/n.fish similarity index 100% rename from programs/fish/functions/n.fish rename to hmModules/apps/shells/fish/functions/n.fish diff --git a/programs/fish/functions/ssh.fish b/hmModules/apps/shells/fish/functions/ssh.fish similarity index 100% rename from programs/fish/functions/ssh.fish rename to hmModules/apps/shells/fish/functions/ssh.fish diff --git a/hmModules/apps/shells/xonsh/default.nix b/hmModules/apps/shells/xonsh/default.nix new file mode 100644 index 0000000..34a7a70 --- /dev/null +++ b/hmModules/apps/shells/xonsh/default.nix @@ -0,0 +1,22 @@ +{ config, pkgs, lib, ... }: +let rootPath = ./.; in +{ + options.xonsh = { + enable = lib.mkEnableOption "Enables xonsh"; + }; + + config = lib.mkIf config.xonsh.enable { + home.packages = with pkgs; [ + xonsh + ]; + home.sessionVariables = { + PROMPT = "τ "; + RIGHT_PROMPT = "{YELLOW}{gitstatus: {} }{BLUE}{short_cwd}{DEFAULT}"; + VI_MODE = 1; + }; + xdg.configFile."xonshrc" = { + source = rootPath + "/rc.xsh"; + target = "xonsh/rc.xsh"; + }; + }; +} diff --git a/programs/xonsh/rc.xsh b/hmModules/apps/shells/xonsh/rc.xsh similarity index 100% rename from programs/xonsh/rc.xsh rename to hmModules/apps/shells/xonsh/rc.xsh diff --git a/hmModules/apps/shells/zsh/default.nix b/hmModules/apps/shells/zsh/default.nix new file mode 100644 index 0000000..713a527 --- /dev/null +++ b/hmModules/apps/shells/zsh/default.nix @@ -0,0 +1,47 @@ +{ config, pkgs, lib, ... }: + +{ + options.zsh = { + enable = lib.mkEnableOption "Enable zsh"; + }; + + config = lib.mkIf config.zsh.enable { + programs.zsh = { + enable = true; + enableCompletion = true; + autosuggestion.enable = true; + syntaxHighlighting.enable = true; + dotDir = ".config/zsh"; + + history.save = 10000; + history.size = 10000; + history.path = "${config.xdg.dataHome}/zsh/history"; + initExtra = let + lf = lib.optionalString config.lf.enable '' + # Lf change directory command + lfcd () { + cd "$(command lf -print-last-dir "$@")" + } + bindkey -s '^o' 'lfcd\n' + ''; + + in lf + '' + # Nix-shell + ${pkgs.nix-your-shell}/bin/nix-your-shell zsh | source /dev/stdin + + # Prompt + autoload -U colors && colors + autoload -Uz vcs_info + precmd_vcs_info() { vcs_info } + precmd_functions+=( precmd_vcs_info ) + setopt prompt_subst + zstyle ':vcs_info:*' check-for-changes true + zstyle ':vcs_info:*' unstagedstr '·*' + zstyle ':vcs_info:*' stagedstr '·+' + zstyle ':vcs_info:git:*' formats '%b%u%c' + export PROMPT="%(0?.%F{white}.%? %F{red})τ%f " + export RPROMPT="%F{yellow}\$vcs_info_msg_0_%f %F{blue}%~%f" + ''; + }; + }; +} diff --git a/hmModules/apps/terminal-emulators/alacritty/default.nix b/hmModules/apps/terminal-emulators/alacritty/default.nix new file mode 100644 index 0000000..c172d63 --- /dev/null +++ b/hmModules/apps/terminal-emulators/alacritty/default.nix @@ -0,0 +1,39 @@ +{ config, pkgs, lib, ... }: + +{ + options.alacritty = { + enable = lib.mkEnableOption "Enables alacritty"; + font = lib.mkOption { default = ""; }; + font_size = lib.mkOption { default = 18; }; + }; + + config = lib.mkIf config.alacritty.enable { + programs.alacritty.enable = true; + + programs.alacritty.settings = { + font = let fam = config.alacritty.font; in { + normal = { + family = fam; + style = "Regular"; + }; + bold = { + family = fam; + style = "Bold"; + }; + italic = { + family = fam; + style = "Italic"; + }; + bold_italic = { + family = fam; + style = "Bold Italic"; + }; + offset = { + x = 0; + y = 0; + }; + size = config.alacritty.font_size; + }; + }; + }; +} diff --git a/hmModules/apps/terminal-emulators/default.nix b/hmModules/apps/terminal-emulators/default.nix new file mode 100644 index 0000000..ceb550b --- /dev/null +++ b/hmModules/apps/terminal-emulators/default.nix @@ -0,0 +1,8 @@ +{ config, pkgs, lib, ... }: + +{ + imports = [ + ./kitty + ./alacritty + ]; +} diff --git a/hmModules/apps/terminal-emulators/kitty/default.nix b/hmModules/apps/terminal-emulators/kitty/default.nix new file mode 100644 index 0000000..6195726 --- /dev/null +++ b/hmModules/apps/terminal-emulators/kitty/default.nix @@ -0,0 +1,20 @@ +{ config, pkgs, lib, ... }: + +{ + options.kitty = { + enable = lib.mkEnableOption "Enables kitty"; + font = lib.mkOption { default = ""; }; + font_size = lib.mkOption { default = 18; }; + }; + + config = lib.mkIf config.kitty.enable { + programs.kitty = { + enable = true; + settings = { + font_family = config.kitty.font; + font_size = config.kitty.font_size; + enable_audio_bell = "no"; + }; + }; + }; +} diff --git a/hmModules/default.nix b/hmModules/default.nix new file mode 100644 index 0000000..3401811 --- /dev/null +++ b/hmModules/default.nix @@ -0,0 +1,8 @@ +{ config, pkgs, ... }: + +{ + imports = [ + ./apps + ./services + ]; +} diff --git a/hmModules/services/default.nix b/hmModules/services/default.nix new file mode 100644 index 0000000..75bc088 --- /dev/null +++ b/hmModules/services/default.nix @@ -0,0 +1,14 @@ +{ config, pkgs, ... }: + +{ + imports = [ + ./dunst + ./home + ./manpages + ./ssh + ./timers + ./trash + ./wal + ./widgets + ]; +} diff --git a/hmModules/services/dunst/default.nix b/hmModules/services/dunst/default.nix new file mode 100644 index 0000000..84e4bcb --- /dev/null +++ b/hmModules/services/dunst/default.nix @@ -0,0 +1,49 @@ +{ config, pkgs, lib, ... }: + +{ + options.dunst = { + enable = lib.mkEnableOption "Enables dunst"; + }; + + config = lib.mkIf config.dunst.enable { + home.packages = with pkgs; [ + libnotify + ]; + services.dunst = { + enable = true; + settings = { + global = { + width = 280; + height = 240; + origin = "bottom-right"; + offset = "0x300"; + + notification_limit = 3; + + progress_bar_max_width = 280; + + gap_size = 4; + corner_radius = 20; + }; + + urgency_low = { + background = "#FFFFFFCC"; + foreground = "#000000"; + frame_color = "#0000"; + }; + + urgency_normal = { + background = "#FFFFFFCC"; + foreground = "#000000"; + frame_color = "#0000"; + }; + + urgency_critical = { + background = "#FFFFFFCC"; + foreground = "#000000"; + frame_color = "#0000"; + }; + }; + }; + }; +} diff --git a/hmModules/services/home/default.nix b/hmModules/services/home/default.nix new file mode 100644 index 0000000..bbb4cf2 --- /dev/null +++ b/hmModules/services/home/default.nix @@ -0,0 +1,38 @@ +{ config, pkgs, lib, ... }: + +{ + options = { + extraPkgs = lib.mkOption { default = []; }; + }; + + config = { + # Let Home Manager install and manage itself. + programs.home-manager.enable = true; + + home.sessionVariables = { + GRADLE_USER_HOME = "${config.xdg.dataHome}/gradle"; + CUDA_CACHE_PATH = "${config.xdg.cacheHome}/nv"; + }; + + xdg = { + enable = true; + mimeApps.enable = true; + userDirs = let + home = config.home.homeDirectory; + in { + enable = true; + documents = "${home}/dox"; + publicShare = "${home}/dox/public"; + templates = "${home}/dox/templates"; + music = "${home}/med/mus"; + pictures = "${home}/med/pix"; + videos = "${home}/med/vid"; + desktop = "${home}/dwn"; + download = "${home}/dwn"; + }; + }; + + home.homeDirectory = "/home/" + config.home.username; + home.packages = config.extraPkgs; + }; +} diff --git a/hmModules/services/manpages/default.nix b/hmModules/services/manpages/default.nix new file mode 100644 index 0000000..678d734 --- /dev/null +++ b/hmModules/services/manpages/default.nix @@ -0,0 +1,15 @@ +{ config, pkgs, lib, ... }: + +{ + options.manpages = { + enable = lib.mkEnableOption "Enables manpager"; + }; + + config = lib.mkIf config.manpages.enable { + programs.man.enable = true; + home.packages = with pkgs; [ + man-pages + man-pages-posix + ]; + }; +} diff --git a/hmModules/services/ssh/default.nix b/hmModules/services/ssh/default.nix new file mode 100644 index 0000000..418ae9c --- /dev/null +++ b/hmModules/services/ssh/default.nix @@ -0,0 +1,14 @@ +{ config, pkgs, lib, ... }: + +{ + options.ssh = { + enable = lib.mkEnableOption "Enables ssh"; + }; + + config = lib.mkIf config.ssh.enable { + programs.ssh.enable = true; + home.packages = with pkgs; [ + sshfs # SSH File system + ]; + }; +} diff --git a/hmModules/services/timers/default.nix b/hmModules/services/timers/default.nix new file mode 100644 index 0000000..548ab30 --- /dev/null +++ b/hmModules/services/timers/default.nix @@ -0,0 +1,60 @@ +{ config, pkgs, lib, ... }: +let rootPath = ./.; in +{ + options.timer = { + enableHourly = lib.mkEnableOption "Enables an hourly notification"; + enableQuarterly = lib.mkEnableOption "Enables a quarterly notification"; + }; + + config = { + systemd.user.timers = { + hourly-time = lib.mkIf config.timer.enableHourly { + Timer = { + OnCalendar = "hourly"; + }; + Install = { + WantedBy = [ + "timers.target" + ]; + }; + }; + quarterly-time = lib.mkIf config.timer.enableQuarterly { + Timer = { + OnCalendar = "*-*-* *:15,30,45:00"; + }; + Install = { + WantedBy = [ + "timers.target" + ]; + }; + }; + }; + + systemd.user.services = { + hourly-time = lib.mkIf config.timer.enableHourly { + Unit = { + Description = "Notify the user every hour of time passing"; + }; + Service = { + Type="simple"; + ExecStart="/home/pan/.config/timer_scripts/notify-time.sh 60000 1"; + }; + }; + quarterly-time = lib.mkIf config.timer.enableQuarterly { + Unit = { + Description = "Notify the user every 15 minutes of time passing, \ + skips hours"; + }; + Service = { + Type="simple"; + ExecStart="/home/pan/.config/timer_scripts/notify-time.sh 10000 0"; + }; + }; + }; + xdg.configFile."timer-scripts" = { + source = rootPath + "/scripts"; + target = "timer_scripts/"; + executable = true; + }; + }; +} diff --git a/services/timers/scripts/chimes.ogg b/hmModules/services/timers/scripts/chimes.ogg similarity index 100% rename from services/timers/scripts/chimes.ogg rename to hmModules/services/timers/scripts/chimes.ogg diff --git a/services/timers/scripts/notify-time.sh b/hmModules/services/timers/scripts/notify-time.sh similarity index 100% rename from services/timers/scripts/notify-time.sh rename to hmModules/services/timers/scripts/notify-time.sh diff --git a/hmModules/services/trash/default.nix b/hmModules/services/trash/default.nix new file mode 100644 index 0000000..cf54f67 --- /dev/null +++ b/hmModules/services/trash/default.nix @@ -0,0 +1,13 @@ +{ config, pkgs, lib, ... }: + +{ + options.trash = { + enable = lib.mkEnableOption "Enables trash"; + }; + + config = { + home.packages = [ + pkgs.trash-cli + ]; + }; +} diff --git a/hmModules/services/wal/default.nix b/hmModules/services/wal/default.nix new file mode 100644 index 0000000..41930fe --- /dev/null +++ b/hmModules/services/wal/default.nix @@ -0,0 +1,34 @@ +{ config, pkgs, lib, ... }: +let rootPath = ./.; in +{ + options.colors = { + enable = lib.mkEnableOption "Enables setting colors using wallust"; + }; + + config = lib.mkIf config.colors.enable { + home.packages = with pkgs; [ + wallust # A better pywal + pywalfox-native # Update librewolf's colorscheme based on wal + ]; + xdg.configFile."wallust-config" = { + target = "wallust/wallust.toml"; + text = '' + backend = "wal" + color_space = "lab" + threshold = 20 + filter = "dark16" + + # [[entry]] + # # a relative path to a file where wallust.toml is (~/.config/wallust/) + # template = "dunstrc" + # + # # absolute path to the file to write the template (after templating) + # target = "~/.config/dunst/dunstrc" + ''; + }; + #xdg.configFile."wallust-templates" = { + # source = rootPath + "/templates"; + # target = "wallust/"; + #}; + }; +} diff --git a/programs/ags/config/config.js b/hmModules/services/widgets/ags/config/config.js similarity index 100% rename from programs/ags/config/config.js rename to hmModules/services/widgets/ags/config/config.js diff --git a/programs/ags/config/modules/clock.js b/hmModules/services/widgets/ags/config/modules/clock.js similarity index 100% rename from programs/ags/config/modules/clock.js rename to hmModules/services/widgets/ags/config/modules/clock.js diff --git a/programs/ags/config/modules/notifications/notificationPopup.ts b/hmModules/services/widgets/ags/config/modules/notifications/notificationPopup.ts similarity index 100% rename from programs/ags/config/modules/notifications/notificationPopup.ts rename to hmModules/services/widgets/ags/config/modules/notifications/notificationPopup.ts diff --git a/programs/ags/config/modules/notifications/style.css b/hmModules/services/widgets/ags/config/modules/notifications/style.css similarity index 100% rename from programs/ags/config/modules/notifications/style.css rename to hmModules/services/widgets/ags/config/modules/notifications/style.css diff --git a/programs/ags/config/modules/workspace-switch.js b/hmModules/services/widgets/ags/config/modules/workspace-switch.js similarity index 100% rename from programs/ags/config/modules/workspace-switch.js rename to hmModules/services/widgets/ags/config/modules/workspace-switch.js diff --git a/hmModules/services/widgets/ags/default.nix b/hmModules/services/widgets/ags/default.nix new file mode 100644 index 0000000..5d248d1 --- /dev/null +++ b/hmModules/services/widgets/ags/default.nix @@ -0,0 +1,25 @@ +{ config, inputs, pkgs, lib, ... }: +{ + + options.ags = { + enable = lib.mkEnableOption "Enable ags"; + }; + + imports = [ inputs.ags.homeManagerModules.default ]; + + config = lib.mkIf config.ags.enable { + home.packages = with pkgs; [ + libnotify # Notifications through ags + ]; + programs.ags = { + enable = true; + configDir = ./config; + + extraPackages = with pkgs; [ + gtksourceview + webkitgtk + accountsservice + ]; + }; + }; +} diff --git a/hmModules/services/widgets/default.nix b/hmModules/services/widgets/default.nix new file mode 100644 index 0000000..caebead --- /dev/null +++ b/hmModules/services/widgets/default.nix @@ -0,0 +1,8 @@ +{ config, pkgs, lib, ... }: + +{ + imports = [ + ./ags + ./eww + ]; +} diff --git a/programs/eww/config/eww.scss b/hmModules/services/widgets/eww/config/eww.scss similarity index 100% rename from programs/eww/config/eww.scss rename to hmModules/services/widgets/eww/config/eww.scss diff --git a/programs/eww/config/eww.yuck b/hmModules/services/widgets/eww/config/eww.yuck similarity index 100% rename from programs/eww/config/eww.yuck rename to hmModules/services/widgets/eww/config/eww.yuck diff --git a/programs/eww/config/modules/bar.yuck b/hmModules/services/widgets/eww/config/modules/bar.yuck similarity index 100% rename from programs/eww/config/modules/bar.yuck rename to hmModules/services/widgets/eww/config/modules/bar.yuck diff --git a/programs/eww/config/modules/components/hyprwindow.yuck b/hmModules/services/widgets/eww/config/modules/components/hyprwindow.yuck similarity index 100% rename from programs/eww/config/modules/components/hyprwindow.yuck rename to hmModules/services/widgets/eww/config/modules/components/hyprwindow.yuck diff --git a/programs/eww/config/modules/components/hyprworkspaces.yuck b/hmModules/services/widgets/eww/config/modules/components/hyprworkspaces.yuck similarity index 100% rename from programs/eww/config/modules/components/hyprworkspaces.yuck rename to hmModules/services/widgets/eww/config/modules/components/hyprworkspaces.yuck diff --git a/programs/eww/config/modules/components/internet.yuck b/hmModules/services/widgets/eww/config/modules/components/internet.yuck similarity index 100% rename from programs/eww/config/modules/components/internet.yuck rename to hmModules/services/widgets/eww/config/modules/components/internet.yuck diff --git a/programs/eww/config/modules/components/japaneseaudio.yuck b/hmModules/services/widgets/eww/config/modules/components/japaneseaudio.yuck similarity index 100% rename from programs/eww/config/modules/components/japaneseaudio.yuck rename to hmModules/services/widgets/eww/config/modules/components/japaneseaudio.yuck diff --git a/programs/eww/config/modules/components/japanesebattery.yuck b/hmModules/services/widgets/eww/config/modules/components/japanesebattery.yuck similarity index 100% rename from programs/eww/config/modules/components/japanesebattery.yuck rename to hmModules/services/widgets/eww/config/modules/components/japanesebattery.yuck diff --git a/programs/eww/config/modules/components/japanesedate.yuck b/hmModules/services/widgets/eww/config/modules/components/japanesedate.yuck similarity index 100% rename from programs/eww/config/modules/components/japanesedate.yuck rename to hmModules/services/widgets/eww/config/modules/components/japanesedate.yuck diff --git a/programs/eww/config/modules/powerbar.yuck b/hmModules/services/widgets/eww/config/modules/powerbar.yuck similarity index 100% rename from programs/eww/config/modules/powerbar.yuck rename to hmModules/services/widgets/eww/config/modules/powerbar.yuck diff --git a/programs/eww/config/modules/switch.yuck b/hmModules/services/widgets/eww/config/modules/switch.yuck similarity index 100% rename from programs/eww/config/modules/switch.yuck rename to hmModules/services/widgets/eww/config/modules/switch.yuck diff --git a/programs/eww/config/scripts/change-active-workspace b/hmModules/services/widgets/eww/config/scripts/change-active-workspace similarity index 100% rename from programs/eww/config/scripts/change-active-workspace rename to hmModules/services/widgets/eww/config/scripts/change-active-workspace diff --git a/programs/eww/config/scripts/get-active-workspace b/hmModules/services/widgets/eww/config/scripts/get-active-workspace similarity index 100% rename from programs/eww/config/scripts/get-active-workspace rename to hmModules/services/widgets/eww/config/scripts/get-active-workspace diff --git a/programs/eww/config/scripts/get-window-title b/hmModules/services/widgets/eww/config/scripts/get-window-title similarity index 100% rename from programs/eww/config/scripts/get-window-title rename to hmModules/services/widgets/eww/config/scripts/get-window-title diff --git a/programs/eww/config/scripts/get-workspaces b/hmModules/services/widgets/eww/config/scripts/get-workspaces similarity index 100% rename from programs/eww/config/scripts/get-workspaces rename to hmModules/services/widgets/eww/config/scripts/get-workspaces diff --git a/programs/eww/config/scripts/japanesedate b/hmModules/services/widgets/eww/config/scripts/japanesedate similarity index 100% rename from programs/eww/config/scripts/japanesedate rename to hmModules/services/widgets/eww/config/scripts/japanesedate diff --git a/programs/eww/config/scripts/medpreview b/hmModules/services/widgets/eww/config/scripts/medpreview similarity index 100% rename from programs/eww/config/scripts/medpreview rename to hmModules/services/widgets/eww/config/scripts/medpreview diff --git a/programs/eww/config/variables.yuck b/hmModules/services/widgets/eww/config/variables.yuck similarity index 100% rename from programs/eww/config/variables.yuck rename to hmModules/services/widgets/eww/config/variables.yuck diff --git a/hmModules/services/widgets/eww/default.nix b/hmModules/services/widgets/eww/default.nix new file mode 100644 index 0000000..7417cdf --- /dev/null +++ b/hmModules/services/widgets/eww/default.nix @@ -0,0 +1,13 @@ +{ config, pkgs, lib, ... }: + +{ + options.eww = { + enable = lib.mkEnableOption "Enables eww"; + }; + + config = lib.mkIf config.eww.enable { + programs.eww.enable = true; + programs.eww.package = pkgs.eww-wayland; + programs.eww.configDir = ./config; + }; +} diff --git a/home.nix b/home.nix deleted file mode 100644 index 34a4693..0000000 --- a/home.nix +++ /dev/null @@ -1,77 +0,0 @@ -{ config, pkgs, ... }: - -{ - nixpkgs.config.allowUnfree = true; - home.username = "pan"; - home.homeDirectory = "/home/pan"; - - imports = [ - # ./programs/dunst - # ./programs/eww - # ./programs/spotify - ./programs/ags - ./programs/alacritty - ./programs/discord - ./programs/fish - ./programs/git - ./programs/hypr - ./programs/lutris - ./programs/mpv - ./programs/nnn - ./programs/nvim - ./programs/rofi - ./programs/ssh - ./programs/wal - ./programs/xdg - ./programs/xonsh - ./programs/obs - ./programs/kitty - ./programs/zsh - ./programs/lf - - # ./services/scripts - ./services/timers - ]; - - home.packages = with pkgs; [ - # Applications - beeper # Better Chat App - gimp # Photo editting - pamixer # Volume control - playerctl # Control media - wget # Download web stuff - feh # Image viewer - appimage-run # Lets you run app images - zathura # PDF viewer - ani-cli # Easy anime player - lutgen # LUT generator - prismlauncher # Minecraft launcher - unzip # Unzip utility - - texlive.combined.scheme-full # Latex - - # Development stuff - nodejs # For compiling JS stuff - jq # May be critical for scripts? - ]; - # home.file = {}; - - home.sessionVariables = { - EDITOR = "nvim"; - VISUAL = "nvim"; - BROWSER = "librewolf"; - GRADLE_USER_HOME = "/home/pan/.local/share" + "/gradle"; - CUDA_CACHE_PATH = "/home/pan/.cache" + "/nv"; - }; - - home.sessionPath = [ - "$HOME/prog/scripts" - ]; - - # Enable man pages, but ensure ~/.manpage isn't created - programs.man.enable = true; - programs.man.generateCaches = false; - # Let Home Manager install and manage itself. - programs.home-manager.enable = true; - home.stateVersion = "23.05"; -} diff --git a/programs/ags/default.nix b/programs/ags/default.nix deleted file mode 100644 index 74eae58..0000000 --- a/programs/ags/default.nix +++ /dev/null @@ -1,23 +0,0 @@ -{ inputs, pkgs, ... }: -{ - # add the home manager module - imports = [ inputs.ags.homeManagerModules.default ]; - - home.packages = with pkgs; [ - libnotify # Notifications through ags - ]; - - programs.ags = { - enable = true; - - # null or path, leave as null if you don't want hm to manage the config - configDir = ./config; - - # additional packages to add to ags's runtime - extraPackages = with pkgs; [ - gtksourceview - webkitgtk - accountsservice - ]; - }; -} diff --git a/programs/alacritty/default.nix b/programs/alacritty/default.nix deleted file mode 100644 index d3a0378..0000000 --- a/programs/alacritty/default.nix +++ /dev/null @@ -1,32 +0,0 @@ -{ config, pkgs, ... }: - -{ - programs.alacritty.enable = true; - - - programs.alacritty.settings = { - font = let fam = "Cascadia Code"; in { - normal = { - family = fam; - style = "Regular"; - }; - bold = { - family = fam; - style = "Bold"; - }; - italic = { - family = fam; - style = "Italic"; - }; - bold_italic = { - family = fam; - style = "Bold Italic"; - }; - offset = { - x = 0; - y = 0; - }; - size = 18.0; - }; - }; -} diff --git a/programs/discord/default.nix b/programs/discord/default.nix deleted file mode 100644 index 8344f47..0000000 --- a/programs/discord/default.nix +++ /dev/null @@ -1,6 +0,0 @@ -{ config, pkgs, ... }: -{ - home.packages = with pkgs; [ - vesktop # Base app - ]; -} diff --git a/programs/dunst/default.nix b/programs/dunst/default.nix deleted file mode 100644 index 3f1e60e..0000000 --- a/programs/dunst/default.nix +++ /dev/null @@ -1,41 +0,0 @@ -{ config, pkgs, ... }: - -{ - home.packages = with pkgs; [ - libnotify - ]; - services.dunst.enable = true; - services.dunst.settings = { - global = { - width = 280; - height = 240; - origin = "bottom-right"; - offset = "0x300"; - - notification_limit = 3; - - progress_bar_max_width = 280; - - gap_size = 4; - corner_radius = 20; - }; - - urgency_low = { - background = "#FFFFFFCC"; - foreground = "#000000"; - frame_color = "#0000"; - }; - - urgency_normal = { - background = "#FFFFFFCC"; - foreground = "#000000"; - frame_color = "#0000"; - }; - - urgency_critical = { - background = "#FFFFFFCC"; - foreground = "#000000"; - frame_color = "#0000"; - }; - }; -} diff --git a/programs/eww/default.nix b/programs/eww/default.nix deleted file mode 100644 index 135aed8..0000000 --- a/programs/eww/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ config, pkgs, ... }: - -{ - programs.eww.enable = true; - programs.eww.package = pkgs.eww-wayland; - programs.eww.configDir = ./config; -} diff --git a/programs/fish/default.nix b/programs/fish/default.nix deleted file mode 100644 index 93c6018..0000000 --- a/programs/fish/default.nix +++ /dev/null @@ -1,43 +0,0 @@ -{ config, pkgs, ... }: - -{ - programs.fish.enable = true; - - programs.fish.interactiveShellInit = '' - cat ~/.cache/wal/sequences - ''; - - programs.fish.functions = { - fish_greeting = ""; - fish_prompt = '' - ${builtins.readFile ./functions/fish_prompt.fish} - ''; - fish_right_prompt = '' - ${builtins.readFile ./functions/fish_right_prompt.fish} - ''; - git_branch_name = '' - ${builtins.readFile ./functions/git_branch_name.fish} - ''; - git_is_dirty = '' - ${builtins.readFile ./functions/git_is_dirty.fish} - ''; - git_is_repo = '' - ${builtins.readFile ./functions/git_is_repo.fish} - ''; - git_is_staged = '' - ${builtins.readFile ./functions/git_is_staged.fish} - ''; - git_is_touched = '' - ${builtins.readFile ./functions/git_is_touched.fish} - ''; - git_is_worktree = '' - ${builtins.readFile ./functions/git_is_worktree.fish} - ''; - n = '' - ${builtins.readFile ./functions/n.fish} - ''; - ssh = '' - ${builtins.readFile ./functions/ssh.fish} - ''; - }; -} diff --git a/programs/git/default.nix b/programs/git/default.nix deleted file mode 100644 index 9f134ee..0000000 --- a/programs/git/default.nix +++ /dev/null @@ -1,12 +0,0 @@ -{ config, pkgs, ... }: - -{ - programs.git.enable = true; - programs.git.userName = "JuliaLange"; - programs.git.userEmail = "git@julialange.com"; - programs.git.extraConfig = { - safe = { - directory = "/etc/nixos"; - }; - }; -} diff --git a/programs/hypr/default.nix b/programs/hypr/default.nix deleted file mode 100644 index f390790..0000000 --- a/programs/hypr/default.nix +++ /dev/null @@ -1,43 +0,0 @@ -{ inputs, pkgs, ... }: -let rootPath = ./.; in -{ - wayland.windowManager.hyprland.enable = true; - wayland.windowManager.hyprland.extraConfig = '' - ${builtins.readFile ./window_rules.conf} - ${builtins.readFile ./league_rules.conf} - ${builtins.readFile ./settings.conf} - ${builtins.readFile ./nvidia.conf} - ${builtins.readFile ./keybinds.conf} - ${builtins.readFile ./xwaylandvideobridge.conf} - exec-once=${pkgs.polkit-kde-agent}/libexec/polkit-kde-authentication-agent-1 - - env = HYPRCURSOR_THEME,miku - env = HYPRCURSOR_SIZE,64 - ''; - # wayland.windowManager.hyprland.enableNvidiaPatches = true; - home.packages = with pkgs; [ - socat # For hyprland scripts - swww # Wallpaper engine - wlr-randr # Xrandr for wayland - wl-clipboard # Clipboard manager for wayland - xdg-desktop-portal-hyprland # XDP for hyprland - hyprpicker # Colorpicker, needed for screenshot tool - hyprcursor # Hyprland cursor - inputs.hyprland-contrib.packages.${pkgs.system}.grimblast # Screenshot tool - xwaylandvideobridge # Allows screensharing with xwayland apps - polkit-kde-agent # Polkit handler - ]; - - # Hyprland screenshot tool - xdg.configFile."hypr-scripts" = { - source = rootPath + "/scripts"; - target = "hypr/scripts"; - executable = true; - }; - - xdg.dataFile."hypr-icons" = { - source = rootPath + "/icons"; - target = "icons/"; - recursive = true; - }; -} diff --git a/programs/kitty/default.nix b/programs/kitty/default.nix deleted file mode 100644 index 2bff14d..0000000 --- a/programs/kitty/default.nix +++ /dev/null @@ -1,12 +0,0 @@ -{ config, pkgs, ... }: - -{ - programs.kitty = { - enable = true; - settings = { - font_family = "Cascadia Code"; - font_size = 18; - enable_audio_bell = "no"; - }; - }; -} diff --git a/programs/lf/default.nix b/programs/lf/default.nix deleted file mode 100644 index 1eb8c30..0000000 --- a/programs/lf/default.nix +++ /dev/null @@ -1,85 +0,0 @@ -{ config, pkgs, ... }: - -{ - xdg.configFile."lf/icons".source = ./icons; - - home.packages = with pkgs; [ - trash-cli # Trash program for lf - ]; - - programs.lf = { - enable = true; - settings = { - # Hide specific files rather than "hidden" files - hiddenfiles = [ - "${config.home.homeDirectory}/.librewolf" - "${config.home.homeDirectory}/.nix-defexpr" - "${config.home.homeDirectory}/.nix-profile" - "${config.home.homeDirectory}/.nv" - "${config.home.homeDirectory}/.pki" - "${config.home.homeDirectory}/.steam*" - "${config.home.homeDirectory}/.zshenv" - ]; - ratios = [ - 2 - 3 - ]; - preview = true; - ignorecase = true; - icons = true; - number = true; - relativenumber = true; - }; - commands = { - dragon-out = ''%${pkgs.xdragon}/bin/xdragon -a -x "$fx"''; - mkdir = '' - ''${{ - printf "Directory Name: " - read DIR - mkdir $DIR - }} - ''; - mkfile = '' - ''${{ - printf "File Name: " - read FILE - mkdir $FILE - }} - ''; - trash = ''trash "$fx"''; - }; - keybindings = { - ";" = ""; - x = "trash"; - "." = "set hidden!"; - ";d" = "mkdir"; - ";f" = "mkfile"; - ";m" = "dragon-out"; - }; - extraConfig = - let - previewer = - pkgs.writeShellScriptBin "pv.sh" '' - file=$1 - w=$2 - h=$3 - x=$4 - y=$5 - - if [[ "$( ${pkgs.file}/bin/file -Lb --mime-type "$file")" =~ ^image ]]; then - ${pkgs.kitty}/bin/kitty +kitten icat --silent --stdin no --transfer-mode file --place "''${w}x''${h}@''${x}x''${y}" "$file" < /dev/null > /dev/tty - exit 1 - fi - - ${pkgs.pistol}/bin/pistol "$file" - ''; - cleaner = pkgs.writeShellScriptBin "clean.sh" '' - ${pkgs.kitty}/bin/kitty +kitten icat --clear --stdin no --silent --transfer-mode file < /dev/null > /dev/tty - ''; - in - '' - set cleaner ${cleaner}/bin/clean.sh - set previewer ${previewer}/bin/pv.sh - ''; - }; -} diff --git a/programs/lutris/default.nix b/programs/lutris/default.nix deleted file mode 100644 index 05993cd..0000000 --- a/programs/lutris/default.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ config, pkgs, ... }: - -{ - home.packages = with pkgs; [ - lutris - wineWowPackages.stable - # (lutris.override { - # extraLibraries = pkgs: [ - # # List library dependencies here - # ]; - # extraPkgs = pkgs: [ - # # List package dependencies here - # ]; - # }) - ]; -} diff --git a/programs/mpv/default.nix b/programs/mpv/default.nix deleted file mode 100644 index bc41ad5..0000000 --- a/programs/mpv/default.nix +++ /dev/null @@ -1,14 +0,0 @@ -{ config, pkgs, ... }: - -{ - programs.mpv.enable = true; - programs.mpv.config = { - volume-max = 150; - force-window = "yes"; - script-opts = "ytdl_hook-ytdl_path=yt-dlp"; - ytdl-format = "bestvideo[height<=?1080][vcodec!=vp9]+bestaudio/best"; - }; - home.packages = with pkgs; [ - yt-dlp - ]; -} diff --git a/programs/nnn/default.nix b/programs/nnn/default.nix deleted file mode 100644 index 583a7b2..0000000 --- a/programs/nnn/default.nix +++ /dev/null @@ -1,14 +0,0 @@ -{ config, pkgs, ... }: - -{ - programs.nnn.enable = true; - home.sessionVariables = { - NNN_FCOLORS = "0000E6310000000000000000"; - NNN_OPTS = "eH"; - NNN_FIFO = "/tmp/nnn.fifo"; - NNN_TRASH = "1"; - }; - home.packages = with pkgs; [ - trash-cli # Trash program for nnn - ]; -} diff --git a/programs/nvim/default.nix b/programs/nvim/default.nix deleted file mode 100644 index bd19ffd..0000000 --- a/programs/nvim/default.nix +++ /dev/null @@ -1,74 +0,0 @@ -{ config, pkgs, ... }: - -{ - programs.neovim.enable = true; - programs.neovim.extraConfig = '' - ${builtins.readFile ./init.vim} - ''; - programs.neovim.plugins = with pkgs.vimPlugins; [ - { # Personal Wiki - plugin = vimwiki; - config = '' - let g:vimwiki_list = [{'path': '~/dox/wiki', 'links_space_char': '_', - \ 'ext': '.md', 'syntax': 'markdown'}] - ''; - } - { # NNN in vim - plugin = nnn-vim; - config = '' - let g:nnn#layout = { 'window': { - \ 'width': 0.35, - \ 'height': 0.5, - \ 'xoffset': 1.0, - \ 'highlight': 'Debug' } } " hover window - let g:nnn#action = { - \ '': 'tab split', - \ '': 'split', - \ '': 'vsplit' } - let g:nnn#command = 'nnn -HoeT v' - let g:nnn#replace_netrw = 1 - ''; - } - { # Fuzzy searches - plugin = fzf-vim; - config = '' - map :Files - map :Ag - ''; - } - { # Auto completions - plugin = coc-nvim; - config = '' - function! s:check_back_space() abort - let col = col('.') - 1 - return !col || getline('.')[col - 1] =~# '\s' - endfunction - - inoremap - \ pumvisible() ? "\" : - \ check_back_space() ? "\" : - \ coc#refresh() - inoremap pumvisible() ? "\" : "\" - ''; - } - vim-commentary # multi-line comments - vim-fugitive # Git Plugin - vimtex # Latex support - tagbar # File tagging - - # === LOOK AND FEEL === - { # Status Bar - plugin = vim-airline; - config = '' - let g:airline#extensions#tagbar#flags = 'fs' - ''; - } - { # Rainbow Parenthesis - plugin = rainbow; - config = '' - let g:rainbow_actve = 1 - ''; - } - vim-polyglot # Syntax Highlighting - ]; -} diff --git a/programs/obs/default.nix b/programs/obs/default.nix deleted file mode 100644 index edd2865..0000000 --- a/programs/obs/default.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ config, pkgs, ... }: -{ - programs.obs-studio = { - enable = true; - plugins = with pkgs.obs-studio-plugins; [ - wlrobs - obs-backgroundremoval - obs-pipewire-audio-capture - ]; - }; -} diff --git a/programs/rofi/default.nix b/programs/rofi/default.nix deleted file mode 100644 index 1db30ee..0000000 --- a/programs/rofi/default.nix +++ /dev/null @@ -1,6 +0,0 @@ -{ config, pkgs, ... }: - -{ - programs.rofi.enable = true; - programs.rofi.package = pkgs.rofi-wayland; -} diff --git a/programs/spotify/default.nix b/programs/spotify/default.nix deleted file mode 100644 index 7510db3..0000000 --- a/programs/spotify/default.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ config, pkgs, ... }: - -{ - services.spotifyd.enable = true; - services.spotifyd.settings = { - global = { - username = "me@daltonlange.com"; - password = "5ThM^G3!FTfH6rH#cJEx"; - backend = "pulseaudio"; - device_name = "onizuka"; - bitrate = 320; - }; - }; - - home.packages = with pkgs; [ - spotify-tui # Spotify TUI player - ]; -} diff --git a/programs/ssh/default.nix b/programs/ssh/default.nix deleted file mode 100644 index 4e0f26f..0000000 --- a/programs/ssh/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ config, pkgs, ... }: - -{ - programs.ssh.enable = true; - home.packages = with pkgs; [ - sshfs # SSH File system - ]; -} diff --git a/programs/wal/default.nix b/programs/wal/default.nix deleted file mode 100644 index 5d63ae9..0000000 --- a/programs/wal/default.nix +++ /dev/null @@ -1,28 +0,0 @@ -{ config, pkgs, ... }: -let rootPath = ./.; in -{ - home.packages = with pkgs; [ - wallust # A better pywal - pywalfox-native # Update librewolf's colorscheme based on wal - ]; - xdg.configFile."wallust-config" = { - target = "wallust/wallust.toml"; - text = '' - backend = "wal" - color_space = "lab" - threshold = 20 - filter = "dark16" - - # [[entry]] - # # a relative path to a file where wallust.toml is (~/.config/wallust/) - # template = "dunstrc" - # - # # absolute path to the file to write the template (after templating) - # target = "~/.config/dunst/dunstrc" - ''; - }; - #xdg.configFile."wallust-templates" = { - # source = rootPath + "/templates"; - # target = "wallust/"; - #}; -} diff --git a/programs/xdg/default.nix b/programs/xdg/default.nix deleted file mode 100644 index 81a7a84..0000000 --- a/programs/xdg/default.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ config, pkgs, ... }: - -{ - xdg.enable = true; - xdg.userDirs.enable = true; - xdg.userDirs = { - desktop = "${config.home.homeDirectory}/dwn"; - download = "${config.home.homeDirectory}/dwn"; - documents = "${config.home.homeDirectory}/dox"; - publicShare = "${config.home.homeDirectory}/dox/public"; - templates = "${config.home.homeDirectory}/dox/templates"; - music = "${config.home.homeDirectory}/med/mus"; - pictures = "${config.home.homeDirectory}/med/pix"; - videos = "${config.home.homeDirectory}/med/vid"; - }; - - xdg.mimeApps.enable = true; -} diff --git a/programs/xonsh/default.nix b/programs/xonsh/default.nix deleted file mode 100644 index 9700e76..0000000 --- a/programs/xonsh/default.nix +++ /dev/null @@ -1,17 +0,0 @@ -{ config, pkgs, ... }: -let rootPath = ./.; in -{ - home.packages = with pkgs; [ - xonsh - ]; - home.sessionVariables = { - PROMPT = "τ "; - RIGHT_PROMPT = "{YELLOW}{gitstatus: {} }{BLUE}{short_cwd}{DEFAULT}"; - VI_MODE = 1; - }; - xdg.configFile."xonshrc" = { - source = rootPath + "/rc.xsh"; - target = "xonsh/rc.xsh"; - }; - -} diff --git a/programs/zsh/default.nix b/programs/zsh/default.nix deleted file mode 100644 index 694b981..0000000 --- a/programs/zsh/default.nix +++ /dev/null @@ -1,31 +0,0 @@ -{ config, pkgs, ... }: -{ - programs.zsh = { - enable = true; - enableCompletion = true; - autosuggestion.enable = true; - syntaxHighlighting.enable = true; - dotDir = ".config/zsh"; - - history.save = 10000; - history.size = 10000; - history.path = "${config.xdg.dataHome}/zsh/history"; - initExtra = '' - # Nix-shell - ${pkgs.nix-your-shell}/bin/nix-your-shell zsh | source /dev/stdin - - # Prompt - autoload -U colors && colors - autoload -Uz vcs_info - precmd_vcs_info() { vcs_info } - precmd_functions+=( precmd_vcs_info ) - setopt prompt_subst - zstyle ':vcs_info:*' check-for-changes true - zstyle ':vcs_info:*' unstagedstr '·*' - zstyle ':vcs_info:*' stagedstr '·+' - zstyle ':vcs_info:git:*' formats '%b%u%c' - export PROMPT="%(0?.%F{white}.%? %F{red})τ%f " - export RPROMPT="%F{yellow}\$vcs_info_msg_0_%f %F{blue}%~%f" - ''; - }; -} diff --git a/services/scripts/default.nix b/services/scripts/default.nix deleted file mode 100644 index aa31a14..0000000 --- a/services/scripts/default.nix +++ /dev/null @@ -1,10 +0,0 @@ -{ config, pkgs, ... }: - -let - select = import ./select.nix { inherit pkgs; }; -in -{ - home.packages = [ - select - ]; -} diff --git a/services/scripts/select.nix b/services/scripts/select.nix deleted file mode 100644 index c9462ab..0000000 --- a/services/scripts/select.nix +++ /dev/null @@ -1,15 +0,0 @@ -{ pkgs }: - -pkgs.writeShellApplication { - name = "select"; - - runtimeInputs = [ fzf rofi ]; - - text = '' - if [ ${PPID} -ne 1 ]; then - echo -e $1 | fzf - else - echo -e $1 | rofi -dmenu -p $2 - fi - ''; -} diff --git a/services/timers/default.nix b/services/timers/default.nix deleted file mode 100644 index 8eb16b7..0000000 --- a/services/timers/default.nix +++ /dev/null @@ -1,52 +0,0 @@ -{ config, pkgs, ... }: -let rootPath = ./.; in -{ - systemd.user.timers = { - hourly-time = { - Timer = { - OnCalendar = "hourly"; - }; - Install = { - WantedBy = [ - "timers.target" - ]; - }; - }; - quarterly-time = { - Timer = { - OnCalendar = "*-*-* *:15,30,45:00"; - }; - Install = { - WantedBy = [ - "timers.target" - ]; - }; - }; - }; - systemd.user.services = { - hourly-time = { - Unit = { - Description = "Notify the user every hour of time passing"; - }; - Service = { - Type="simple"; - ExecStart="/home/pan/.config/timer_scripts/notify-time.sh 60000 1"; - }; - }; - quarterly-time = { - Unit = { - Description = "Notify the user every 15 minutes of time passing, \ - skips hours"; - }; - Service = { - Type="simple"; - ExecStart="/home/pan/.config/timer_scripts/notify-time.sh 10000 0"; - }; - }; - }; - xdg.configFile."timer-scripts" = { - source = rootPath + "/scripts"; - target = "timer_scripts/"; - executable = true; - }; -} diff --git a/systems/pan/default.nix b/systems/pan/default.nix new file mode 100644 index 0000000..8947e74 --- /dev/null +++ b/systems/pan/default.nix @@ -0,0 +1,54 @@ +{ config, pkgs, ... }: + +{ + home.username = "pan"; + nixpkgs.config.allowUnfree = true; + home.stateVersion = "23.05"; + + hypr.enable = true; + ags.enable = true; + rofi.enable = true; + + timer.enableHourly = true; + timer.enableQuarterly = true; + colors.enable = true; + manpages.enable = true; + + zsh.enable = true; + kitty.enable = true; + kitty.font = "Cascadia Code"; + git.enable = true; + git.username = "Julia Lange"; + git.email = "public@julialange.org"; + ssh.enable = true; + + mpv.enable = true; + zathura.enable = true; + feh.enable = true; + + neovim.enable = true; + lf.enable = true; + lf.hiddenfiles = [ + "${config.home.homeDirectory}/.librewolf" + "${config.home.homeDirectory}/.nix-defexpr" + "${config.home.homeDirectory}/.nix-profile" + "${config.home.homeDirectory}/.nv" + "${config.home.homeDirectory}/.pki" + "${config.home.homeDirectory}/.steam*" + "${config.home.homeDirectory}/.zshenv" + ]; + + gimp.enable = true; + + beeper.enable = true; + discord.enable = true; + + lutris.enable = true; + + extraPkgs = with pkgs; [ + # Applications + ani-cli # Easy anime player + lutgen # LUT generator + prismlauncher # Minecraft launcher + ]; +} From 0352e8e4d33f4ef7f96b19c49b97d0f78bf36024 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 16 Apr 2024 04:36:26 -0700 Subject: [PATCH 133/412] Neovim, refactor to use modules, lua, and LSP Refactors the neovim config to use nix modules, and changes the plugins to favor the builtin neovim LSP over COC. Changes all code to use lua code instead of vimscript. --- hmModules/apps/neovim/default.nix | 139 ++++++++++---------- hmModules/apps/neovim/init.vim | 68 ---------- hmModules/apps/neovim/options.lua | 57 ++++++++ hmModules/apps/neovim/plugin/lsp.nix | 49 +++++++ hmModules/apps/neovim/plugin/nvimcmp.nix | 72 ++++++++++ hmModules/apps/neovim/plugin/telescope.nix | 40 ++++++ hmModules/apps/neovim/plugin/treesitter.nix | 30 +++++ systems/pan/default.nix | 16 +++ 8 files changed, 337 insertions(+), 134 deletions(-) delete mode 100644 hmModules/apps/neovim/init.vim create mode 100644 hmModules/apps/neovim/options.lua create mode 100644 hmModules/apps/neovim/plugin/lsp.nix create mode 100644 hmModules/apps/neovim/plugin/nvimcmp.nix create mode 100644 hmModules/apps/neovim/plugin/telescope.nix create mode 100644 hmModules/apps/neovim/plugin/treesitter.nix diff --git a/hmModules/apps/neovim/default.nix b/hmModules/apps/neovim/default.nix index e8a805e..91b38c6 100644 --- a/hmModules/apps/neovim/default.nix +++ b/hmModules/apps/neovim/default.nix @@ -3,84 +3,91 @@ { options.neovim = { enable = lib.mkEnableOption "Enables neovim"; + languages = { + nix.enable = lib.mkEnableOption "Enables nix support"; + }; + plugins = { + comments.enable = lib.mkEnableOption "Enables nvim-comment"; + fugitive.enable = lib.mkEnableOption "Enables git-fugitive"; + lualine.enable = lib.mkEnableOption "Enables lualine"; + luasnip.enable = lib.mkEnableOption "Enables luasnip snippets"; + nvimcmp.enable = lib.mkEnableOption "Enables nvim completion"; + telescope = { + enable = lib.mkEnableOption "Enables telescope"; + fzf.enable = lib.mkEnableOption "Enables telescope-fzf"; + }; + treesitter.enable = lib.mkEnableOption "Enables treesitter"; + }; }; + imports = [ + ./plugin/lsp.nix + ./plugin/nvimcmp.nix + ./plugin/telescope.nix + ./plugin/treesitter.nix + ]; + config = lib.mkIf config.neovim.enable { home.sessionVariables = { EDITOR = "nvim"; VISUAL = "nvim"; }; + programs.neovim = { enable = true; - extraConfig = '' - ${builtins.readFile ./init.vim} + viAlias = true; + vimAlias = true; + vimdiffAlias = true; + + extraLuaConfig = '' + ${builtins.readFile ./options.lua} ''; - plugins = with pkgs.vimPlugins; [ - { # Personal Wiki - plugin = vimwiki; - config = '' - let g:vimwiki_list = [{'path': '~/dox/wiki', 'links_space_char': '_', - \ 'ext': '.md', 'syntax': 'markdown'}] - ''; - } - { # NNN in vim - plugin = nnn-vim; - config = '' - let g:nnn#layout = { 'window': { - \ 'width': 0.35, - \ 'height': 0.5, - \ 'xoffset': 1.0, - \ 'highlight': 'Debug' } } " hover window - let g:nnn#action = { - \ '': 'tab split', - \ '': 'split', - \ '': 'vsplit' } - let g:nnn#command = 'nnn -HoeT v' - let g:nnn#replace_netrw = 1 - ''; - } - { # Fuzzy searches - plugin = fzf-vim; - config = '' - map :Files - map :Ag - ''; - } - { # Auto completions - plugin = coc-nvim; - config = '' - function! s:check_back_space() abort - let col = col('.') - 1 - return !col || getline('.')[col - 1] =~# '\s' - endfunction - inoremap - \ pumvisible() ? "\" : - \ check_back_space() ? "\" : - \ coc#refresh() - inoremap pumvisible() ? "\" : "\" - ''; - } - vim-commentary # multi-line comments - vim-fugitive # Git Plugin - vimtex # Latex support - tagbar # File tagging - - # === LOOK AND FEEL === - { # Status Bar - plugin = vim-airline; - config = '' - let g:airline#extensions#tagbar#flags = 'fs' - ''; - } - { # Rainbow Parenthesis - plugin = rainbow; - config = '' - let g:rainbow_actve = 1 - ''; - } - vim-polyglot # Syntax Highlighting + extraPackages = with pkgs; [ + (lib.mkIf config.neovim.languages.nix.enable nil) ]; + + # Additional packages are added through imports + plugins = let + lopts = lib.lists.optionals; + cfgp = config.neovim.plugins; + cfgl = config.neovim.languages; + + comments = lopts cfgp.comments.enable (with pkgs.vimPlugins; [ + { + plugin = comment-nvim; + type = "lua"; + config = "require(\"Comment\").setup()"; + } + ]); + + fugitive = lopts cfgp.fugitive.enable (with pkgs.vimPlugins; [ + vim-fugitive + ]); + + luasnip-pkg = lopts cfgp.luasnip.enable (with pkgs.vimPlugins; [ + luasnip + friendly-snippets + (lib.mkIf cfgp.nvimcmp.enable cmp_luasnip) + ]); + + lualine = lopts cfgp.lualine.enable (with pkgs.vimPlugins; [ + { + plugin = lualine-nvim; + type = "lua"; + config = '' + require("lualine").setup({ + icons_enabled = true, + }) + ''; + } + nvim-web-devicons + ]); + + nix-pkg = lopts cfgl.nix.enable (with pkgs.vimPlugins; [ + vim-nix + ]); + in comments ++ fugitive ++ luasnip-pkg ++ lualine ++ nix-pkg; }; }; } diff --git a/hmModules/apps/neovim/init.vim b/hmModules/apps/neovim/init.vim deleted file mode 100644 index d8b95c9..0000000 --- a/hmModules/apps/neovim/init.vim +++ /dev/null @@ -1,68 +0,0 @@ -syntax on -let mapleader =" " -set encoding=utf-8 -set nocompatible -filetype plugin on -set list - -set updatetime=300 - -" Easy Split Navigation -nnoremap -nnoremap -nnoremap -nnoremap - -" Indentation -" set tabstop=2 softtabstop=0 shiftwidth=2 smarttab expandtab -set tabstop=8 softtabstop=0 shiftwidth=8 - -" Searching -set smartcase - -" Backups -set noswapfile -set nobackup -set undodir=~/.config/nvim/undodir -set undofile - -" Right column at 80 lines for good coding practice. -set colorcolumn=80 -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -" QoL -set showmatch " Show matching Brackets -set number relativenumber " Side numbers - -" Fuzzy finding by allowing searching into subfolders -set path+=** -set wildmenu -" use :find to find, and * to make it fuzzy. -" Also make use of :b. - -" Delete trailing white space and newlines at end of file on save. -autocmd BufWritePre * %s/\s\+$//e -autocmd BufWritePre * %s/\n\+\%$//e - -" Easy copy and pasting to external programs -map "+yy -map "+P - -autocmd BufRead,BufNewFile *.md call WritingMode() -autocmd BufRead,BufNewFile *.tex call WritingMode() -autocmd BufRead,BufNewFile *.svx call WritingMode() - -autocmd BufRead,BufNewFile *.py call PythonMode() - -function! WritingMode() - setlocal textwidth=80 - setlocal wrap linebreak nolist - setlocal whichwrap+=<,>,h,l - nnoremap j gj - nnoremap k gk - setlocal spell spelllang=en_us -endfunction -function! PythonMode() - setlocal foldmethod=indent - setlocal foldlevel=99 -endfunction diff --git a/hmModules/apps/neovim/options.lua b/hmModules/apps/neovim/options.lua new file mode 100644 index 0000000..9043756 --- /dev/null +++ b/hmModules/apps/neovim/options.lua @@ -0,0 +1,57 @@ +-- Globals +vim.g.mapleader = ' ' +vim.g.maplocalleader = ' ' +vim.opt.list = true +vim.bo.filetype = true +vim.opt.updatetime = 300 + +-- Indentations +vim.opt.tabstop = 2 +vim.opt.softtabstop = 0 +vim.opt.shiftwidth = 2 +vim.opt.smarttab = true +vim.opt.expandtab = true + +-- Style +vim.opt.colorcolumn = "80" +vim.opt.showmatch = true +vim.opt.number = true +vim.opt.relativenumber = true + +-- Easy Split Navigation +-- nnoremap +-- nnoremap +-- nnoremap +-- nnoremap + +-- Searching +vim.opt.smartcase = true + +-- Backups +vim.opt.swapfile = false +vim.opt.backup = false +vim.opt.undofile = true +vim.opt.undodir = '/home/pan/.config/nvim/undodir' + +-- Easy copy and pasting to external programs +-- map "+yy +-- map "+P + +-- autocmd BufRead,BufNewFile *.md call WritingMode() +-- autocmd BufRead,BufNewFile *.tex call WritingMode() +-- autocmd BufRead,BufNewFile *.svx call WritingMode() + +-- autocmd BufRead,BufNewFile *.py call PythonMode() + +-- function! WritingMode() + -- setlocal textwidth=80 + -- setlocal wrap linebreak nolist + -- setlocal whichwrap+=<,>,h,l + -- nnoremap j gj + -- nnoremap k gk + -- setlocal spell spelllang=en_us +-- endfunction +-- function! PythonMode() + -- setlocal foldmethod=indent + -- setlocal foldlevel=99 +-- endfunction diff --git a/hmModules/apps/neovim/plugin/lsp.nix b/hmModules/apps/neovim/plugin/lsp.nix new file mode 100644 index 0000000..ae3806a --- /dev/null +++ b/hmModules/apps/neovim/plugin/lsp.nix @@ -0,0 +1,49 @@ +{ config, pkgs, lib, ... }: + +{ + config = lib.mkIf config.neovim.enable { + programs.neovim.plugins = let + cfgp = config.neovim.plugins; + cfgl = config.neovim.languages; + + configText = '' + local on_attach = function(_, bufnr) + + local bufmap = function(keys, func) + vim.keymap.set('n', keys, func, { buffer = bufnr }) + end + + bufmap('r', vim.lsp.buf.rename) + bufmap('a', vim.lsp.buf.code_action) + + bufmap('gd', vim.lsp.buf.definition) + bufmap('gD', vim.lsp.buf.declaration) + bufmap('gI', vim.lsp.buf.implementation) + bufmap('D', vim.lsp.buf.type_definition) + + '' + lib.strings.optionalString cfgp.telescope.enable '' + bufmap('gr', require('telescope.builtin').lsp_references) + bufmap('s', require('telescope.builtin').lsp_document_symbols) + bufmap('S', require('telescope.builtin').lsp_dynamic_workspace_symbols) + '' + '' + + bufmap('K', vim.lsp.buf.hover) + + vim.api.nvim_buf_create_user_command(bufnr, 'Format', function(_) + vim.lsp.buf.format() + end, {}) + end + + local capabilities = vim.lsp.protocol.make_client_capabilities() + '' + lib.strings.optionalString cfgl.nix.enable '' + require('lspconfig').nil_ls.setup {} + ''; + in with pkgs.vimPlugins; [ + { + plugin = nvim-lspconfig; + type = "lua"; + config = configText; + } + ]; + }; +} diff --git a/hmModules/apps/neovim/plugin/nvimcmp.nix b/hmModules/apps/neovim/plugin/nvimcmp.nix new file mode 100644 index 0000000..82098ef --- /dev/null +++ b/hmModules/apps/neovim/plugin/nvimcmp.nix @@ -0,0 +1,72 @@ +{ config, pkgs, lib, ... }: + +let + cfgp = config.neovim.plugins; +in { + config = lib.mkIf (config.neovim.enable && cfgp.nvimcmp.enable) { + programs.neovim.plugins = let + + configText = '' + local cmp = require('cmp') + '' + lib.strings.optionalString cfgp.luasnip.enable '' + local luasnip = require('luasnip') + + require('luasnip.loaders.from_vscode').lazy_load() + luasnip.config.setup {} + '' + '' + + cmp.setup { + mapping = cmp.mapping.preset.insert { + [''] = cmp.mapping.select_next_item(), + [''] = cmp.mapping.select_prev_item(), + [''] = cmp.mapping.scroll_docs(-4), + [''] = cmp.mapping.scroll_docs(4), + [''] = cmp.mapping.complete {}, + [''] = cmp.mapping.confirm { + behavior = cmp.ConfirmBehavior.Replace, + select = true, + }, + [''] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_next_item() + '' + lib.strings.optionalString cfgp.luasnip.enable '' + elseif luasnip.expand_or_locally_jumpable() then + luasnip.expand_or_jump() + '' + '' + else + fallback() + end + end, { 'i', 's' }), + [''] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_prev_item() + '' + lib.strings.optionalString cfgp.luasnip.enable '' + elseif luasnip.locally_jumpable(-1) then + luasnip.jump(-1) + '' + '' + else + fallback() + end + end, { 'i', 's' }), + }, + '' + lib.strings.optionalString cfgp.luasnip.enable '' + snippet = { + expand = function(args) + luasnip.lsp_expand(args.body) + end, + }, + sources = { + { name = 'luasnip' }, + }, + '' + '' + } + ''; + in with pkgs.vimPlugins; [ + { + plugin = nvim-cmp; + type = "lua"; + config = configText; + } + ]; + }; +} diff --git a/hmModules/apps/neovim/plugin/telescope.nix b/hmModules/apps/neovim/plugin/telescope.nix new file mode 100644 index 0000000..26178ef --- /dev/null +++ b/hmModules/apps/neovim/plugin/telescope.nix @@ -0,0 +1,40 @@ +{ config, pkgs, lib, ... }: + +let + cfgp = config.neovim.plugins; +in { + config = lib.mkIf (config.neovim.enable && cfgp.telescope.enable) { + programs.neovim.plugins = let + configText = '' + require('telescope').setup({ + extensions = { + '' + lib.strings.optionalString cfgp.telescope.fzf.enable '' + fzf = { + fuzzy = true, -- false will only do exact matching + override_generic_sorter = true, -- override the generic sorter + override_file_sorter = true, -- override the file sorter + case_mode = "smart_case", -- or "ignore_case" or "respect_case" + -- the default case_mode is "smart_case" + } + '' + '' + } + }) + + '' + lib.strings.optionalString cfgp.telescope.fzf.enable '' + require('telescope').load_extension('fzf') + ''; + in with pkgs.vimPlugins; [ + { + plugin = telescope-nvim; + type = "lua"; + config = configText; + } + (lib.mkIf cfgp.nvimcmp.enable telescope-fzf-native-nvim) + ]; + + home.packages = with pkgs; [ + (lib.mkIf cfgp.telescope.fzf.enable fzf) + ]; + + }; +} diff --git a/hmModules/apps/neovim/plugin/treesitter.nix b/hmModules/apps/neovim/plugin/treesitter.nix new file mode 100644 index 0000000..bf828b8 --- /dev/null +++ b/hmModules/apps/neovim/plugin/treesitter.nix @@ -0,0 +1,30 @@ +{ config, pkgs, lib, ... }: + +let + cfgp = config.neovim.plugins; + cfgl = config.neovim.languages; +in { + config = lib.mkIf (config.neovim.enable && cfgp.treesitter.enable) { + programs.neovim.plugins = let + configText = '' + require('nvim-treesitter.configs').setup { + ensure_installed = {}, + + auto_install = false, + + highlight = { enable = true }, + + indent = { enable = true }, + } + ''; + + treeplugs = p: lib.lists.optional cfgl.nix.enable p.tree-sitter-nix; + in with pkgs.vimPlugins; [ + { + plugin = (nvim-treesitter.withPlugins treeplugs); + type = "lua"; + config = configText; + } + ]; + }; +} diff --git a/systems/pan/default.nix b/systems/pan/default.nix index 8947e74..fa85073 100644 --- a/systems/pan/default.nix +++ b/systems/pan/default.nix @@ -27,6 +27,22 @@ feh.enable = true; neovim.enable = true; + neovim.languages = { + nix.enable = true; + }; + neovim.plugins = { + comments.enable = true; + fugitive.enable = true; + lualine.enable = true; + luasnip.enable = true; + nvimcmp.enable = true; + telescope = { + enable = true; + fzf.enable = true; + }; + treesitter.enable = true; + }; + lf.enable = true; lf.hiddenfiles = [ "${config.home.homeDirectory}/.librewolf" From 2b24d4e454c2c5a673f228b05787d0e669186109 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 16 Apr 2024 04:36:26 -0700 Subject: [PATCH 134/412] Neovim, refactor to use modules, lua, and LSP Refactors the neovim config to use nix modules, and changes the plugins to favor the builtin neovim LSP over COC. Changes all code to use lua code instead of vimscript. --- hmModules/apps/neovim/default.nix | 139 ++++++++++---------- hmModules/apps/neovim/init.vim | 68 ---------- hmModules/apps/neovim/options.lua | 57 ++++++++ hmModules/apps/neovim/plugin/lsp.nix | 49 +++++++ hmModules/apps/neovim/plugin/nvimcmp.nix | 72 ++++++++++ hmModules/apps/neovim/plugin/telescope.nix | 40 ++++++ hmModules/apps/neovim/plugin/treesitter.nix | 30 +++++ systems/pan/default.nix | 16 +++ 8 files changed, 337 insertions(+), 134 deletions(-) delete mode 100644 hmModules/apps/neovim/init.vim create mode 100644 hmModules/apps/neovim/options.lua create mode 100644 hmModules/apps/neovim/plugin/lsp.nix create mode 100644 hmModules/apps/neovim/plugin/nvimcmp.nix create mode 100644 hmModules/apps/neovim/plugin/telescope.nix create mode 100644 hmModules/apps/neovim/plugin/treesitter.nix diff --git a/hmModules/apps/neovim/default.nix b/hmModules/apps/neovim/default.nix index e8a805e..91b38c6 100644 --- a/hmModules/apps/neovim/default.nix +++ b/hmModules/apps/neovim/default.nix @@ -3,84 +3,91 @@ { options.neovim = { enable = lib.mkEnableOption "Enables neovim"; + languages = { + nix.enable = lib.mkEnableOption "Enables nix support"; + }; + plugins = { + comments.enable = lib.mkEnableOption "Enables nvim-comment"; + fugitive.enable = lib.mkEnableOption "Enables git-fugitive"; + lualine.enable = lib.mkEnableOption "Enables lualine"; + luasnip.enable = lib.mkEnableOption "Enables luasnip snippets"; + nvimcmp.enable = lib.mkEnableOption "Enables nvim completion"; + telescope = { + enable = lib.mkEnableOption "Enables telescope"; + fzf.enable = lib.mkEnableOption "Enables telescope-fzf"; + }; + treesitter.enable = lib.mkEnableOption "Enables treesitter"; + }; }; + imports = [ + ./plugin/lsp.nix + ./plugin/nvimcmp.nix + ./plugin/telescope.nix + ./plugin/treesitter.nix + ]; + config = lib.mkIf config.neovim.enable { home.sessionVariables = { EDITOR = "nvim"; VISUAL = "nvim"; }; + programs.neovim = { enable = true; - extraConfig = '' - ${builtins.readFile ./init.vim} + viAlias = true; + vimAlias = true; + vimdiffAlias = true; + + extraLuaConfig = '' + ${builtins.readFile ./options.lua} ''; - plugins = with pkgs.vimPlugins; [ - { # Personal Wiki - plugin = vimwiki; - config = '' - let g:vimwiki_list = [{'path': '~/dox/wiki', 'links_space_char': '_', - \ 'ext': '.md', 'syntax': 'markdown'}] - ''; - } - { # NNN in vim - plugin = nnn-vim; - config = '' - let g:nnn#layout = { 'window': { - \ 'width': 0.35, - \ 'height': 0.5, - \ 'xoffset': 1.0, - \ 'highlight': 'Debug' } } " hover window - let g:nnn#action = { - \ '': 'tab split', - \ '': 'split', - \ '': 'vsplit' } - let g:nnn#command = 'nnn -HoeT v' - let g:nnn#replace_netrw = 1 - ''; - } - { # Fuzzy searches - plugin = fzf-vim; - config = '' - map :Files - map :Ag - ''; - } - { # Auto completions - plugin = coc-nvim; - config = '' - function! s:check_back_space() abort - let col = col('.') - 1 - return !col || getline('.')[col - 1] =~# '\s' - endfunction - inoremap - \ pumvisible() ? "\" : - \ check_back_space() ? "\" : - \ coc#refresh() - inoremap pumvisible() ? "\" : "\" - ''; - } - vim-commentary # multi-line comments - vim-fugitive # Git Plugin - vimtex # Latex support - tagbar # File tagging - - # === LOOK AND FEEL === - { # Status Bar - plugin = vim-airline; - config = '' - let g:airline#extensions#tagbar#flags = 'fs' - ''; - } - { # Rainbow Parenthesis - plugin = rainbow; - config = '' - let g:rainbow_actve = 1 - ''; - } - vim-polyglot # Syntax Highlighting + extraPackages = with pkgs; [ + (lib.mkIf config.neovim.languages.nix.enable nil) ]; + + # Additional packages are added through imports + plugins = let + lopts = lib.lists.optionals; + cfgp = config.neovim.plugins; + cfgl = config.neovim.languages; + + comments = lopts cfgp.comments.enable (with pkgs.vimPlugins; [ + { + plugin = comment-nvim; + type = "lua"; + config = "require(\"Comment\").setup()"; + } + ]); + + fugitive = lopts cfgp.fugitive.enable (with pkgs.vimPlugins; [ + vim-fugitive + ]); + + luasnip-pkg = lopts cfgp.luasnip.enable (with pkgs.vimPlugins; [ + luasnip + friendly-snippets + (lib.mkIf cfgp.nvimcmp.enable cmp_luasnip) + ]); + + lualine = lopts cfgp.lualine.enable (with pkgs.vimPlugins; [ + { + plugin = lualine-nvim; + type = "lua"; + config = '' + require("lualine").setup({ + icons_enabled = true, + }) + ''; + } + nvim-web-devicons + ]); + + nix-pkg = lopts cfgl.nix.enable (with pkgs.vimPlugins; [ + vim-nix + ]); + in comments ++ fugitive ++ luasnip-pkg ++ lualine ++ nix-pkg; }; }; } diff --git a/hmModules/apps/neovim/init.vim b/hmModules/apps/neovim/init.vim deleted file mode 100644 index d8b95c9..0000000 --- a/hmModules/apps/neovim/init.vim +++ /dev/null @@ -1,68 +0,0 @@ -syntax on -let mapleader =" " -set encoding=utf-8 -set nocompatible -filetype plugin on -set list - -set updatetime=300 - -" Easy Split Navigation -nnoremap -nnoremap -nnoremap -nnoremap - -" Indentation -" set tabstop=2 softtabstop=0 shiftwidth=2 smarttab expandtab -set tabstop=8 softtabstop=0 shiftwidth=8 - -" Searching -set smartcase - -" Backups -set noswapfile -set nobackup -set undodir=~/.config/nvim/undodir -set undofile - -" Right column at 80 lines for good coding practice. -set colorcolumn=80 -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -" QoL -set showmatch " Show matching Brackets -set number relativenumber " Side numbers - -" Fuzzy finding by allowing searching into subfolders -set path+=** -set wildmenu -" use :find to find, and * to make it fuzzy. -" Also make use of :b. - -" Delete trailing white space and newlines at end of file on save. -autocmd BufWritePre * %s/\s\+$//e -autocmd BufWritePre * %s/\n\+\%$//e - -" Easy copy and pasting to external programs -map "+yy -map "+P - -autocmd BufRead,BufNewFile *.md call WritingMode() -autocmd BufRead,BufNewFile *.tex call WritingMode() -autocmd BufRead,BufNewFile *.svx call WritingMode() - -autocmd BufRead,BufNewFile *.py call PythonMode() - -function! WritingMode() - setlocal textwidth=80 - setlocal wrap linebreak nolist - setlocal whichwrap+=<,>,h,l - nnoremap j gj - nnoremap k gk - setlocal spell spelllang=en_us -endfunction -function! PythonMode() - setlocal foldmethod=indent - setlocal foldlevel=99 -endfunction diff --git a/hmModules/apps/neovim/options.lua b/hmModules/apps/neovim/options.lua new file mode 100644 index 0000000..9043756 --- /dev/null +++ b/hmModules/apps/neovim/options.lua @@ -0,0 +1,57 @@ +-- Globals +vim.g.mapleader = ' ' +vim.g.maplocalleader = ' ' +vim.opt.list = true +vim.bo.filetype = true +vim.opt.updatetime = 300 + +-- Indentations +vim.opt.tabstop = 2 +vim.opt.softtabstop = 0 +vim.opt.shiftwidth = 2 +vim.opt.smarttab = true +vim.opt.expandtab = true + +-- Style +vim.opt.colorcolumn = "80" +vim.opt.showmatch = true +vim.opt.number = true +vim.opt.relativenumber = true + +-- Easy Split Navigation +-- nnoremap +-- nnoremap +-- nnoremap +-- nnoremap + +-- Searching +vim.opt.smartcase = true + +-- Backups +vim.opt.swapfile = false +vim.opt.backup = false +vim.opt.undofile = true +vim.opt.undodir = '/home/pan/.config/nvim/undodir' + +-- Easy copy and pasting to external programs +-- map "+yy +-- map "+P + +-- autocmd BufRead,BufNewFile *.md call WritingMode() +-- autocmd BufRead,BufNewFile *.tex call WritingMode() +-- autocmd BufRead,BufNewFile *.svx call WritingMode() + +-- autocmd BufRead,BufNewFile *.py call PythonMode() + +-- function! WritingMode() + -- setlocal textwidth=80 + -- setlocal wrap linebreak nolist + -- setlocal whichwrap+=<,>,h,l + -- nnoremap j gj + -- nnoremap k gk + -- setlocal spell spelllang=en_us +-- endfunction +-- function! PythonMode() + -- setlocal foldmethod=indent + -- setlocal foldlevel=99 +-- endfunction diff --git a/hmModules/apps/neovim/plugin/lsp.nix b/hmModules/apps/neovim/plugin/lsp.nix new file mode 100644 index 0000000..ae3806a --- /dev/null +++ b/hmModules/apps/neovim/plugin/lsp.nix @@ -0,0 +1,49 @@ +{ config, pkgs, lib, ... }: + +{ + config = lib.mkIf config.neovim.enable { + programs.neovim.plugins = let + cfgp = config.neovim.plugins; + cfgl = config.neovim.languages; + + configText = '' + local on_attach = function(_, bufnr) + + local bufmap = function(keys, func) + vim.keymap.set('n', keys, func, { buffer = bufnr }) + end + + bufmap('r', vim.lsp.buf.rename) + bufmap('a', vim.lsp.buf.code_action) + + bufmap('gd', vim.lsp.buf.definition) + bufmap('gD', vim.lsp.buf.declaration) + bufmap('gI', vim.lsp.buf.implementation) + bufmap('D', vim.lsp.buf.type_definition) + + '' + lib.strings.optionalString cfgp.telescope.enable '' + bufmap('gr', require('telescope.builtin').lsp_references) + bufmap('s', require('telescope.builtin').lsp_document_symbols) + bufmap('S', require('telescope.builtin').lsp_dynamic_workspace_symbols) + '' + '' + + bufmap('K', vim.lsp.buf.hover) + + vim.api.nvim_buf_create_user_command(bufnr, 'Format', function(_) + vim.lsp.buf.format() + end, {}) + end + + local capabilities = vim.lsp.protocol.make_client_capabilities() + '' + lib.strings.optionalString cfgl.nix.enable '' + require('lspconfig').nil_ls.setup {} + ''; + in with pkgs.vimPlugins; [ + { + plugin = nvim-lspconfig; + type = "lua"; + config = configText; + } + ]; + }; +} diff --git a/hmModules/apps/neovim/plugin/nvimcmp.nix b/hmModules/apps/neovim/plugin/nvimcmp.nix new file mode 100644 index 0000000..82098ef --- /dev/null +++ b/hmModules/apps/neovim/plugin/nvimcmp.nix @@ -0,0 +1,72 @@ +{ config, pkgs, lib, ... }: + +let + cfgp = config.neovim.plugins; +in { + config = lib.mkIf (config.neovim.enable && cfgp.nvimcmp.enable) { + programs.neovim.plugins = let + + configText = '' + local cmp = require('cmp') + '' + lib.strings.optionalString cfgp.luasnip.enable '' + local luasnip = require('luasnip') + + require('luasnip.loaders.from_vscode').lazy_load() + luasnip.config.setup {} + '' + '' + + cmp.setup { + mapping = cmp.mapping.preset.insert { + [''] = cmp.mapping.select_next_item(), + [''] = cmp.mapping.select_prev_item(), + [''] = cmp.mapping.scroll_docs(-4), + [''] = cmp.mapping.scroll_docs(4), + [''] = cmp.mapping.complete {}, + [''] = cmp.mapping.confirm { + behavior = cmp.ConfirmBehavior.Replace, + select = true, + }, + [''] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_next_item() + '' + lib.strings.optionalString cfgp.luasnip.enable '' + elseif luasnip.expand_or_locally_jumpable() then + luasnip.expand_or_jump() + '' + '' + else + fallback() + end + end, { 'i', 's' }), + [''] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_prev_item() + '' + lib.strings.optionalString cfgp.luasnip.enable '' + elseif luasnip.locally_jumpable(-1) then + luasnip.jump(-1) + '' + '' + else + fallback() + end + end, { 'i', 's' }), + }, + '' + lib.strings.optionalString cfgp.luasnip.enable '' + snippet = { + expand = function(args) + luasnip.lsp_expand(args.body) + end, + }, + sources = { + { name = 'luasnip' }, + }, + '' + '' + } + ''; + in with pkgs.vimPlugins; [ + { + plugin = nvim-cmp; + type = "lua"; + config = configText; + } + ]; + }; +} diff --git a/hmModules/apps/neovim/plugin/telescope.nix b/hmModules/apps/neovim/plugin/telescope.nix new file mode 100644 index 0000000..26178ef --- /dev/null +++ b/hmModules/apps/neovim/plugin/telescope.nix @@ -0,0 +1,40 @@ +{ config, pkgs, lib, ... }: + +let + cfgp = config.neovim.plugins; +in { + config = lib.mkIf (config.neovim.enable && cfgp.telescope.enable) { + programs.neovim.plugins = let + configText = '' + require('telescope').setup({ + extensions = { + '' + lib.strings.optionalString cfgp.telescope.fzf.enable '' + fzf = { + fuzzy = true, -- false will only do exact matching + override_generic_sorter = true, -- override the generic sorter + override_file_sorter = true, -- override the file sorter + case_mode = "smart_case", -- or "ignore_case" or "respect_case" + -- the default case_mode is "smart_case" + } + '' + '' + } + }) + + '' + lib.strings.optionalString cfgp.telescope.fzf.enable '' + require('telescope').load_extension('fzf') + ''; + in with pkgs.vimPlugins; [ + { + plugin = telescope-nvim; + type = "lua"; + config = configText; + } + (lib.mkIf cfgp.nvimcmp.enable telescope-fzf-native-nvim) + ]; + + home.packages = with pkgs; [ + (lib.mkIf cfgp.telescope.fzf.enable fzf) + ]; + + }; +} diff --git a/hmModules/apps/neovim/plugin/treesitter.nix b/hmModules/apps/neovim/plugin/treesitter.nix new file mode 100644 index 0000000..bf828b8 --- /dev/null +++ b/hmModules/apps/neovim/plugin/treesitter.nix @@ -0,0 +1,30 @@ +{ config, pkgs, lib, ... }: + +let + cfgp = config.neovim.plugins; + cfgl = config.neovim.languages; +in { + config = lib.mkIf (config.neovim.enable && cfgp.treesitter.enable) { + programs.neovim.plugins = let + configText = '' + require('nvim-treesitter.configs').setup { + ensure_installed = {}, + + auto_install = false, + + highlight = { enable = true }, + + indent = { enable = true }, + } + ''; + + treeplugs = p: lib.lists.optional cfgl.nix.enable p.tree-sitter-nix; + in with pkgs.vimPlugins; [ + { + plugin = (nvim-treesitter.withPlugins treeplugs); + type = "lua"; + config = configText; + } + ]; + }; +} diff --git a/systems/pan/default.nix b/systems/pan/default.nix index 8947e74..fa85073 100644 --- a/systems/pan/default.nix +++ b/systems/pan/default.nix @@ -27,6 +27,22 @@ feh.enable = true; neovim.enable = true; + neovim.languages = { + nix.enable = true; + }; + neovim.plugins = { + comments.enable = true; + fugitive.enable = true; + lualine.enable = true; + luasnip.enable = true; + nvimcmp.enable = true; + telescope = { + enable = true; + fzf.enable = true; + }; + treesitter.enable = true; + }; + lf.enable = true; lf.hiddenfiles = [ "${config.home.homeDirectory}/.librewolf" From 92211cc1beca87d18d22f51f3b4c3dad3c9a6d74 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 16 Apr 2024 04:39:03 -0700 Subject: [PATCH 135/412] Hypr, fix workspace bug, add xonsh for scripts --- hmModules/apps/hypr/default.nix | 1 + hmModules/apps/hypr/keybinds.conf | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/hmModules/apps/hypr/default.nix b/hmModules/apps/hypr/default.nix index 0c83ffd..b8372d6 100644 --- a/hmModules/apps/hypr/default.nix +++ b/hmModules/apps/hypr/default.nix @@ -32,6 +32,7 @@ let rootPath = ./.; in hyprpicker # Colorpicker, needed for screenshot tool hyprcursor # Hyprland cursor inputs.hyprland-contrib.packages.${pkgs.system}.grimblast # Screenshot tool + xonsh polkit-kde-agent # Polkit handler ]; # Hyprland screenshot tool diff --git a/hmModules/apps/hypr/keybinds.conf b/hmModules/apps/hypr/keybinds.conf index 26e89e0..06d307a 100644 --- a/hmModules/apps/hypr/keybinds.conf +++ b/hmModules/apps/hypr/keybinds.conf @@ -39,7 +39,7 @@ bind = $mainMod SHIFT, F, fullscreen, bind = $mainMod SHIFT, 1, movetoworkspacesilent, name:home bind = $mainMod SHIFT, 2, movetoworkspacesilent, name:web bind = $mainMod SHIFT, 3, movetoworkspacesilent, name:med -bind = $mainMod SHIFT, 4, movetoworkspacesilent, name:misc +bind = $mainMod SHIFT, 4, movetoworkspacesilent, name:game bind = $mainMod SHIFT, _, movetoworkspacesilent, name:hell bind = $mainMod SHIFT, TAB, movetoworkspacesilent, r-1 From 8ab7d15d35ad1ac43616f4d65427d7703ef629eb Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 16 Apr 2024 04:39:03 -0700 Subject: [PATCH 136/412] Hypr, fix workspace bug, add xonsh for scripts --- hmModules/apps/hypr/default.nix | 1 + hmModules/apps/hypr/keybinds.conf | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/hmModules/apps/hypr/default.nix b/hmModules/apps/hypr/default.nix index 0c83ffd..b8372d6 100644 --- a/hmModules/apps/hypr/default.nix +++ b/hmModules/apps/hypr/default.nix @@ -32,6 +32,7 @@ let rootPath = ./.; in hyprpicker # Colorpicker, needed for screenshot tool hyprcursor # Hyprland cursor inputs.hyprland-contrib.packages.${pkgs.system}.grimblast # Screenshot tool + xonsh polkit-kde-agent # Polkit handler ]; # Hyprland screenshot tool diff --git a/hmModules/apps/hypr/keybinds.conf b/hmModules/apps/hypr/keybinds.conf index 26e89e0..06d307a 100644 --- a/hmModules/apps/hypr/keybinds.conf +++ b/hmModules/apps/hypr/keybinds.conf @@ -39,7 +39,7 @@ bind = $mainMod SHIFT, F, fullscreen, bind = $mainMod SHIFT, 1, movetoworkspacesilent, name:home bind = $mainMod SHIFT, 2, movetoworkspacesilent, name:web bind = $mainMod SHIFT, 3, movetoworkspacesilent, name:med -bind = $mainMod SHIFT, 4, movetoworkspacesilent, name:misc +bind = $mainMod SHIFT, 4, movetoworkspacesilent, name:game bind = $mainMod SHIFT, _, movetoworkspacesilent, name:hell bind = $mainMod SHIFT, TAB, movetoworkspacesilent, r-1 From 14b3dab47666fa53ff7aaa4a25354ce9096840f6 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 17 Apr 2024 20:59:21 -0700 Subject: [PATCH 137/412] Neovim, Add c language support --- hmModules/apps/neovim/default.nix | 2 ++ hmModules/apps/neovim/plugin/lsp.nix | 2 ++ hmModules/apps/neovim/plugin/treesitter.nix | 7 ++++++- systems/pan/default.nix | 1 + 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/hmModules/apps/neovim/default.nix b/hmModules/apps/neovim/default.nix index 91b38c6..4407176 100644 --- a/hmModules/apps/neovim/default.nix +++ b/hmModules/apps/neovim/default.nix @@ -5,6 +5,7 @@ enable = lib.mkEnableOption "Enables neovim"; languages = { nix.enable = lib.mkEnableOption "Enables nix support"; + c.enable = lib.mkEnableOption "Enables c support"; }; plugins = { comments.enable = lib.mkEnableOption "Enables nvim-comment"; @@ -45,6 +46,7 @@ extraPackages = with pkgs; [ (lib.mkIf config.neovim.languages.nix.enable nil) + (lib.mkIf config.neovim.languages.c.enable libclang) ]; # Additional packages are added through imports diff --git a/hmModules/apps/neovim/plugin/lsp.nix b/hmModules/apps/neovim/plugin/lsp.nix index ae3806a..849c9cc 100644 --- a/hmModules/apps/neovim/plugin/lsp.nix +++ b/hmModules/apps/neovim/plugin/lsp.nix @@ -37,6 +37,8 @@ local capabilities = vim.lsp.protocol.make_client_capabilities() '' + lib.strings.optionalString cfgl.nix.enable '' require('lspconfig').nil_ls.setup {} + '' + lib.strings.optionalString cfgl.c.enable '' + require('lspconfig').clangd.setup {} ''; in with pkgs.vimPlugins; [ { diff --git a/hmModules/apps/neovim/plugin/treesitter.nix b/hmModules/apps/neovim/plugin/treesitter.nix index bf828b8..667fb3d 100644 --- a/hmModules/apps/neovim/plugin/treesitter.nix +++ b/hmModules/apps/neovim/plugin/treesitter.nix @@ -18,7 +18,12 @@ in { } ''; - treeplugs = p: lib.lists.optional cfgl.nix.enable p.tree-sitter-nix; + # I've tried many things, and can't get treesitter plugins changing + # dynamically. For not just have them always loaded regardless of config + treeplugs = p: [ + p.tree-sitter-nix + p.tree-sitter-c + ]; in with pkgs.vimPlugins; [ { plugin = (nvim-treesitter.withPlugins treeplugs); diff --git a/systems/pan/default.nix b/systems/pan/default.nix index fa85073..48daee2 100644 --- a/systems/pan/default.nix +++ b/systems/pan/default.nix @@ -29,6 +29,7 @@ neovim.enable = true; neovim.languages = { nix.enable = true; + c.enable = true; }; neovim.plugins = { comments.enable = true; From 7de2d4f3684894fe26974935f50e045a63d73e09 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 17 Apr 2024 20:59:21 -0700 Subject: [PATCH 138/412] Neovim, Add c language support --- hmModules/apps/neovim/default.nix | 2 ++ hmModules/apps/neovim/plugin/lsp.nix | 2 ++ hmModules/apps/neovim/plugin/treesitter.nix | 7 ++++++- systems/pan/default.nix | 1 + 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/hmModules/apps/neovim/default.nix b/hmModules/apps/neovim/default.nix index 91b38c6..4407176 100644 --- a/hmModules/apps/neovim/default.nix +++ b/hmModules/apps/neovim/default.nix @@ -5,6 +5,7 @@ enable = lib.mkEnableOption "Enables neovim"; languages = { nix.enable = lib.mkEnableOption "Enables nix support"; + c.enable = lib.mkEnableOption "Enables c support"; }; plugins = { comments.enable = lib.mkEnableOption "Enables nvim-comment"; @@ -45,6 +46,7 @@ extraPackages = with pkgs; [ (lib.mkIf config.neovim.languages.nix.enable nil) + (lib.mkIf config.neovim.languages.c.enable libclang) ]; # Additional packages are added through imports diff --git a/hmModules/apps/neovim/plugin/lsp.nix b/hmModules/apps/neovim/plugin/lsp.nix index ae3806a..849c9cc 100644 --- a/hmModules/apps/neovim/plugin/lsp.nix +++ b/hmModules/apps/neovim/plugin/lsp.nix @@ -37,6 +37,8 @@ local capabilities = vim.lsp.protocol.make_client_capabilities() '' + lib.strings.optionalString cfgl.nix.enable '' require('lspconfig').nil_ls.setup {} + '' + lib.strings.optionalString cfgl.c.enable '' + require('lspconfig').clangd.setup {} ''; in with pkgs.vimPlugins; [ { diff --git a/hmModules/apps/neovim/plugin/treesitter.nix b/hmModules/apps/neovim/plugin/treesitter.nix index bf828b8..667fb3d 100644 --- a/hmModules/apps/neovim/plugin/treesitter.nix +++ b/hmModules/apps/neovim/plugin/treesitter.nix @@ -18,7 +18,12 @@ in { } ''; - treeplugs = p: lib.lists.optional cfgl.nix.enable p.tree-sitter-nix; + # I've tried many things, and can't get treesitter plugins changing + # dynamically. For not just have them always loaded regardless of config + treeplugs = p: [ + p.tree-sitter-nix + p.tree-sitter-c + ]; in with pkgs.vimPlugins; [ { plugin = (nvim-treesitter.withPlugins treeplugs); diff --git a/systems/pan/default.nix b/systems/pan/default.nix index fa85073..48daee2 100644 --- a/systems/pan/default.nix +++ b/systems/pan/default.nix @@ -29,6 +29,7 @@ neovim.enable = true; neovim.languages = { nix.enable = true; + c.enable = true; }; neovim.plugins = { comments.enable = true; From 42a54984175f8aa1c38dd67d36b98aedc46abd8d Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 17 Apr 2024 21:03:24 -0700 Subject: [PATCH 139/412] Lf, add trash-cli support --- flake.lock | 50 ++++++++++----------- hmModules/apps/file-browsers/lf/default.nix | 7 ++- systems/pan/default.nix | 1 + 3 files changed, 32 insertions(+), 26 deletions(-) diff --git a/flake.lock b/flake.lock index 3a7bcc5..a6c7c56 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1712834339, - "narHash": "sha256-gRYAbyxx4Z2s4hMoXHSu3wv2+VSiiR2Nk+AZmCZ6kc4=", + "lastModified": 1713301451, + "narHash": "sha256-LzYVqEukjOJjm4HGFe6rtHBiuJxAyPqd2MY1k5ci9QU=", "owner": "Aylur", "repo": "ags", - "rev": "c13bcba224f9ecaaa2f22b1d2895bb62e8face19", + "rev": "33bcaf34d5277031ecb97047fb8ddd44abd8d80e", "type": "github" }, "original": { @@ -27,11 +27,11 @@ ] }, "locked": { - "lastModified": 1713077896, - "narHash": "sha256-Noot8H0EZEAFRQWyGxh9ryvhK96xpIqKbh78X447JWs=", + "lastModified": 1713391096, + "narHash": "sha256-5xkzsy+ILgQlmvDDipL5xqAehnjWBenAQXV4/NLg2dE=", "owner": "nix-community", "repo": "home-manager", - "rev": "630a0992b3627c64e34f179fab68e3d48c6991c0", + "rev": "f46814ec7cbef9c2aef18ca1cbe89f2bb1e8c394", "type": "github" }, "original": { @@ -56,11 +56,11 @@ ] }, "locked": { - "lastModified": 1712434681, - "narHash": "sha256-qwmR2p1oc48Bj7gUDvb1oGL19Rjs2PmEmk4ChV01A5o=", + "lastModified": 1713214463, + "narHash": "sha256-zAOOjqHAbccCRgJSuvTCA0FNLqKswN63LgVo43R7pxw=", "owner": "hyprwm", "repo": "hyprcursor", - "rev": "818d8c4b69e0997483d60b75f701fe14b561a7a3", + "rev": "0a53b9957f0b17f1a0036b25198f569969ad43a0", "type": "github" }, "original": { @@ -82,11 +82,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1713050186, - "narHash": "sha256-AKdzVa0Zz5PQ1ptQgD0jj8J+UZUW9OeKGZ0mNVnkyI4=", + "lastModified": 1713376910, + "narHash": "sha256-6cvw+CxacXe+l8/mZ1+ih21vLHvhIC+Erc7LQF0dyrQ=", "owner": "hyprwm", "repo": "Hyprland", - "rev": "0634aaeac6cca12e4f72174c431c2db9da9c0072", + "rev": "82222342f10a7eff0ec9be972153e740d0f95213", "type": "github" }, "original": { @@ -152,11 +152,11 @@ ] }, "locked": { - "lastModified": 1711671891, - "narHash": "sha256-C/Wwsy/RLxHP1axFFl+AnwJRWfd8gxDKKoa8nt8Qk3c=", + "lastModified": 1713121246, + "narHash": "sha256-502X0Q0fhN6tJK7iEUA8CghONKSatW/Mqj4Wappd++0=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "c1402612146ba06606ebf64963a02bc1efe11e74", + "rev": "78fcaa27ae9e1d782faa3ff06c8ea55ddce63706", "type": "github" }, "original": { @@ -167,11 +167,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1712791164, - "narHash": "sha256-3sbWO1mbpWsLepZGbWaMovSO7ndZeFqDSdX0hZ9nVyw=", + "lastModified": 1713248628, + "narHash": "sha256-NLznXB5AOnniUtZsyy/aPWOk8ussTuePp2acb9U+ISA=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "1042fd8b148a9105f3c0aca3a6177fd1d9360ba5", + "rev": "5672bc9dbf9d88246ddab5ac454e82318d094bb8", "type": "github" }, "original": { @@ -207,17 +207,17 @@ "wlroots": { "flake": false, "locked": { - "lastModified": 1712935342, - "narHash": "sha256-zzIbTFNFd/as42jyGx23fil2uBDYYv+8GA5JmRq5y9c=", + "lastModified": 1713124002, + "narHash": "sha256-vPeZCY+sdiGsz4fl3AVVujfyZyQBz6+vZdkUE4hQ+HI=", "owner": "hyprwm", "repo": "wlroots-hyprland", - "rev": "62eeffbe233d199f520a5755c344e85f8eab7940", + "rev": "611a4f24cd2384378f6e500253983107c6656c64", "type": "github" }, "original": { "owner": "hyprwm", "repo": "wlroots-hyprland", - "rev": "62eeffbe233d199f520a5755c344e85f8eab7940", + "rev": "611a4f24cd2384378f6e500253983107c6656c64", "type": "github" } }, @@ -241,11 +241,11 @@ ] }, "locked": { - "lastModified": 1709299639, - "narHash": "sha256-jYqJM5khksLIbqSxCLUUcqEgI+O2LdlSlcMEBs39CAU=", + "lastModified": 1713214484, + "narHash": "sha256-h1bSIsDuPk1FGgvTuSHJyiU2Glu7oAyoPMJutKZmLQ8=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "2d2fb547178ec025da643db57d40a971507b82fe", + "rev": "bb44921534a9cee9635304fdb876c1b3ec3a8f61", "type": "github" }, "original": { diff --git a/hmModules/apps/file-browsers/lf/default.nix b/hmModules/apps/file-browsers/lf/default.nix index c37b608..9e1372c 100644 --- a/hmModules/apps/file-browsers/lf/default.nix +++ b/hmModules/apps/file-browsers/lf/default.nix @@ -10,6 +10,8 @@ config = lib.mkIf config.lf.enable { xdg.configFile."lf/icons".source = ./icons; + + programs.lf = { enable = true; settings = { @@ -27,6 +29,8 @@ }; commands = { dragon-out = ''%${pkgs.xdragon}/bin/xdragon -a -x "$fx"''; + trash = lib.mkIf config.trash.enable + ''%${pkgs.trash-cli}/bin/trash "$fx"''; mkdir = '' ''${{ printf "Directory Name: " @@ -38,7 +42,7 @@ ''${{ printf "File Name: " read FILE - mkdir $FILE + touch $FILE }} ''; }; @@ -48,6 +52,7 @@ "${leader}" = ""; "v" = ":toggle; down"; "." = "set hidden!"; + "x" = lib.mkIf config.trash.enable "trash"; "${leader}d" = "mkdir"; "${leader}f" = "mkfile"; "${leader}m" = "dragon-out"; diff --git a/systems/pan/default.nix b/systems/pan/default.nix index 48daee2..3d8fcc4 100644 --- a/systems/pan/default.nix +++ b/systems/pan/default.nix @@ -13,6 +13,7 @@ timer.enableQuarterly = true; colors.enable = true; manpages.enable = true; + trash.enable = true; zsh.enable = true; kitty.enable = true; From ea22a354cbad475e7c3c479647c25f60825d2337 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 17 Apr 2024 21:03:24 -0700 Subject: [PATCH 140/412] Lf, add trash-cli support --- flake.lock | 50 ++++++++++----------- hmModules/apps/file-browsers/lf/default.nix | 7 ++- systems/pan/default.nix | 1 + 3 files changed, 32 insertions(+), 26 deletions(-) diff --git a/flake.lock b/flake.lock index 3a7bcc5..a6c7c56 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1712834339, - "narHash": "sha256-gRYAbyxx4Z2s4hMoXHSu3wv2+VSiiR2Nk+AZmCZ6kc4=", + "lastModified": 1713301451, + "narHash": "sha256-LzYVqEukjOJjm4HGFe6rtHBiuJxAyPqd2MY1k5ci9QU=", "owner": "Aylur", "repo": "ags", - "rev": "c13bcba224f9ecaaa2f22b1d2895bb62e8face19", + "rev": "33bcaf34d5277031ecb97047fb8ddd44abd8d80e", "type": "github" }, "original": { @@ -27,11 +27,11 @@ ] }, "locked": { - "lastModified": 1713077896, - "narHash": "sha256-Noot8H0EZEAFRQWyGxh9ryvhK96xpIqKbh78X447JWs=", + "lastModified": 1713391096, + "narHash": "sha256-5xkzsy+ILgQlmvDDipL5xqAehnjWBenAQXV4/NLg2dE=", "owner": "nix-community", "repo": "home-manager", - "rev": "630a0992b3627c64e34f179fab68e3d48c6991c0", + "rev": "f46814ec7cbef9c2aef18ca1cbe89f2bb1e8c394", "type": "github" }, "original": { @@ -56,11 +56,11 @@ ] }, "locked": { - "lastModified": 1712434681, - "narHash": "sha256-qwmR2p1oc48Bj7gUDvb1oGL19Rjs2PmEmk4ChV01A5o=", + "lastModified": 1713214463, + "narHash": "sha256-zAOOjqHAbccCRgJSuvTCA0FNLqKswN63LgVo43R7pxw=", "owner": "hyprwm", "repo": "hyprcursor", - "rev": "818d8c4b69e0997483d60b75f701fe14b561a7a3", + "rev": "0a53b9957f0b17f1a0036b25198f569969ad43a0", "type": "github" }, "original": { @@ -82,11 +82,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1713050186, - "narHash": "sha256-AKdzVa0Zz5PQ1ptQgD0jj8J+UZUW9OeKGZ0mNVnkyI4=", + "lastModified": 1713376910, + "narHash": "sha256-6cvw+CxacXe+l8/mZ1+ih21vLHvhIC+Erc7LQF0dyrQ=", "owner": "hyprwm", "repo": "Hyprland", - "rev": "0634aaeac6cca12e4f72174c431c2db9da9c0072", + "rev": "82222342f10a7eff0ec9be972153e740d0f95213", "type": "github" }, "original": { @@ -152,11 +152,11 @@ ] }, "locked": { - "lastModified": 1711671891, - "narHash": "sha256-C/Wwsy/RLxHP1axFFl+AnwJRWfd8gxDKKoa8nt8Qk3c=", + "lastModified": 1713121246, + "narHash": "sha256-502X0Q0fhN6tJK7iEUA8CghONKSatW/Mqj4Wappd++0=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "c1402612146ba06606ebf64963a02bc1efe11e74", + "rev": "78fcaa27ae9e1d782faa3ff06c8ea55ddce63706", "type": "github" }, "original": { @@ -167,11 +167,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1712791164, - "narHash": "sha256-3sbWO1mbpWsLepZGbWaMovSO7ndZeFqDSdX0hZ9nVyw=", + "lastModified": 1713248628, + "narHash": "sha256-NLznXB5AOnniUtZsyy/aPWOk8ussTuePp2acb9U+ISA=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "1042fd8b148a9105f3c0aca3a6177fd1d9360ba5", + "rev": "5672bc9dbf9d88246ddab5ac454e82318d094bb8", "type": "github" }, "original": { @@ -207,17 +207,17 @@ "wlroots": { "flake": false, "locked": { - "lastModified": 1712935342, - "narHash": "sha256-zzIbTFNFd/as42jyGx23fil2uBDYYv+8GA5JmRq5y9c=", + "lastModified": 1713124002, + "narHash": "sha256-vPeZCY+sdiGsz4fl3AVVujfyZyQBz6+vZdkUE4hQ+HI=", "owner": "hyprwm", "repo": "wlroots-hyprland", - "rev": "62eeffbe233d199f520a5755c344e85f8eab7940", + "rev": "611a4f24cd2384378f6e500253983107c6656c64", "type": "github" }, "original": { "owner": "hyprwm", "repo": "wlroots-hyprland", - "rev": "62eeffbe233d199f520a5755c344e85f8eab7940", + "rev": "611a4f24cd2384378f6e500253983107c6656c64", "type": "github" } }, @@ -241,11 +241,11 @@ ] }, "locked": { - "lastModified": 1709299639, - "narHash": "sha256-jYqJM5khksLIbqSxCLUUcqEgI+O2LdlSlcMEBs39CAU=", + "lastModified": 1713214484, + "narHash": "sha256-h1bSIsDuPk1FGgvTuSHJyiU2Glu7oAyoPMJutKZmLQ8=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "2d2fb547178ec025da643db57d40a971507b82fe", + "rev": "bb44921534a9cee9635304fdb876c1b3ec3a8f61", "type": "github" }, "original": { diff --git a/hmModules/apps/file-browsers/lf/default.nix b/hmModules/apps/file-browsers/lf/default.nix index c37b608..9e1372c 100644 --- a/hmModules/apps/file-browsers/lf/default.nix +++ b/hmModules/apps/file-browsers/lf/default.nix @@ -10,6 +10,8 @@ config = lib.mkIf config.lf.enable { xdg.configFile."lf/icons".source = ./icons; + + programs.lf = { enable = true; settings = { @@ -27,6 +29,8 @@ }; commands = { dragon-out = ''%${pkgs.xdragon}/bin/xdragon -a -x "$fx"''; + trash = lib.mkIf config.trash.enable + ''%${pkgs.trash-cli}/bin/trash "$fx"''; mkdir = '' ''${{ printf "Directory Name: " @@ -38,7 +42,7 @@ ''${{ printf "File Name: " read FILE - mkdir $FILE + touch $FILE }} ''; }; @@ -48,6 +52,7 @@ "${leader}" = ""; "v" = ":toggle; down"; "." = "set hidden!"; + "x" = lib.mkIf config.trash.enable "trash"; "${leader}d" = "mkdir"; "${leader}f" = "mkfile"; "${leader}m" = "dragon-out"; diff --git a/systems/pan/default.nix b/systems/pan/default.nix index 48daee2..3d8fcc4 100644 --- a/systems/pan/default.nix +++ b/systems/pan/default.nix @@ -13,6 +13,7 @@ timer.enableQuarterly = true; colors.enable = true; manpages.enable = true; + trash.enable = true; zsh.enable = true; kitty.enable = true; From 6d463dc0c5ea4bf2167f014e3ab267f59f8abd0b Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 18 Apr 2024 00:53:41 -0700 Subject: [PATCH 141/412] Add zoxide and add zoxide support in lf --- hmModules/apps/default.nix | 1 + hmModules/apps/file-browsers/lf/default.nix | 19 +++++++++++++++---- hmModules/apps/zoxide/default.nix | 16 ++++++++++++++++ systems/pan/default.nix | 1 + 4 files changed, 33 insertions(+), 4 deletions(-) create mode 100644 hmModules/apps/zoxide/default.nix diff --git a/hmModules/apps/default.nix b/hmModules/apps/default.nix index 4d496dc..735a533 100644 --- a/hmModules/apps/default.nix +++ b/hmModules/apps/default.nix @@ -14,5 +14,6 @@ ./rofi ./shells ./terminal-emulators + ./zoxide ]; } diff --git a/hmModules/apps/file-browsers/lf/default.nix b/hmModules/apps/file-browsers/lf/default.nix index 9e1372c..0ad6060 100644 --- a/hmModules/apps/file-browsers/lf/default.nix +++ b/hmModules/apps/file-browsers/lf/default.nix @@ -10,8 +10,6 @@ config = lib.mkIf config.lf.enable { xdg.configFile."lf/icons".source = ./icons; - - programs.lf = { enable = true; settings = { @@ -29,8 +27,15 @@ }; commands = { dragon-out = ''%${pkgs.xdragon}/bin/xdragon -a -x "$fx"''; - trash = lib.mkIf config.trash.enable - ''%${pkgs.trash-cli}/bin/trash "$fx"''; + trash = lib.mkIf config.trash.enable '' + %${pkgs.trash-cli}/bin/trash "$fx" + ''; + zoxide-cd = lib.mkIf config.zoxide.enable '' + ''${{ + result="$(${pkgs.zoxide}/bin/zoxide query -i | sed 's/\\/\\\\/g;s/"/\\"/g')" + ${pkgs.lf}/bin/lf -remote "send $id cd \"$result\"" + }} + ''; mkdir = '' ''${{ printf "Directory Name: " @@ -45,6 +50,11 @@ touch $FILE }} ''; + on-cd = lib.mkIf config.zoxide.enable '' + &{{ + ${pkgs.zoxide}/bin/zoxide add "$PWD" + }} + ''; }; keybindings = let leader = config.lf.leader; @@ -56,6 +66,7 @@ "${leader}d" = "mkdir"; "${leader}f" = "mkfile"; "${leader}m" = "dragon-out"; + "${leader}z" = lib.mkIf config.zoxide.enable "zoxide-cd"; }; extraConfig = let diff --git a/hmModules/apps/zoxide/default.nix b/hmModules/apps/zoxide/default.nix new file mode 100644 index 0000000..859c69b --- /dev/null +++ b/hmModules/apps/zoxide/default.nix @@ -0,0 +1,16 @@ +{ config, pkgs, lib, ... }: + +{ + options.zoxide = { + enable = lib.mkEnableOption "Enables Zoxide"; + }; + + config = lib.mkIf config.zoxide.enable { + programs.zoxide = { + enable = true; + options = [ + "--cmd cd" + ]; + }; + }; +} diff --git a/systems/pan/default.nix b/systems/pan/default.nix index 3d8fcc4..7025f6d 100644 --- a/systems/pan/default.nix +++ b/systems/pan/default.nix @@ -55,6 +55,7 @@ "${config.home.homeDirectory}/.steam*" "${config.home.homeDirectory}/.zshenv" ]; + zoxide.enable = true; gimp.enable = true; From bac13eadf775111e41ea520107674a74dabf2eb2 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 18 Apr 2024 00:53:41 -0700 Subject: [PATCH 142/412] Add zoxide and add zoxide support in lf --- hmModules/apps/default.nix | 1 + hmModules/apps/file-browsers/lf/default.nix | 19 +++++++++++++++---- hmModules/apps/zoxide/default.nix | 16 ++++++++++++++++ systems/pan/default.nix | 1 + 4 files changed, 33 insertions(+), 4 deletions(-) create mode 100644 hmModules/apps/zoxide/default.nix diff --git a/hmModules/apps/default.nix b/hmModules/apps/default.nix index 4d496dc..735a533 100644 --- a/hmModules/apps/default.nix +++ b/hmModules/apps/default.nix @@ -14,5 +14,6 @@ ./rofi ./shells ./terminal-emulators + ./zoxide ]; } diff --git a/hmModules/apps/file-browsers/lf/default.nix b/hmModules/apps/file-browsers/lf/default.nix index 9e1372c..0ad6060 100644 --- a/hmModules/apps/file-browsers/lf/default.nix +++ b/hmModules/apps/file-browsers/lf/default.nix @@ -10,8 +10,6 @@ config = lib.mkIf config.lf.enable { xdg.configFile."lf/icons".source = ./icons; - - programs.lf = { enable = true; settings = { @@ -29,8 +27,15 @@ }; commands = { dragon-out = ''%${pkgs.xdragon}/bin/xdragon -a -x "$fx"''; - trash = lib.mkIf config.trash.enable - ''%${pkgs.trash-cli}/bin/trash "$fx"''; + trash = lib.mkIf config.trash.enable '' + %${pkgs.trash-cli}/bin/trash "$fx" + ''; + zoxide-cd = lib.mkIf config.zoxide.enable '' + ''${{ + result="$(${pkgs.zoxide}/bin/zoxide query -i | sed 's/\\/\\\\/g;s/"/\\"/g')" + ${pkgs.lf}/bin/lf -remote "send $id cd \"$result\"" + }} + ''; mkdir = '' ''${{ printf "Directory Name: " @@ -45,6 +50,11 @@ touch $FILE }} ''; + on-cd = lib.mkIf config.zoxide.enable '' + &{{ + ${pkgs.zoxide}/bin/zoxide add "$PWD" + }} + ''; }; keybindings = let leader = config.lf.leader; @@ -56,6 +66,7 @@ "${leader}d" = "mkdir"; "${leader}f" = "mkfile"; "${leader}m" = "dragon-out"; + "${leader}z" = lib.mkIf config.zoxide.enable "zoxide-cd"; }; extraConfig = let diff --git a/hmModules/apps/zoxide/default.nix b/hmModules/apps/zoxide/default.nix new file mode 100644 index 0000000..859c69b --- /dev/null +++ b/hmModules/apps/zoxide/default.nix @@ -0,0 +1,16 @@ +{ config, pkgs, lib, ... }: + +{ + options.zoxide = { + enable = lib.mkEnableOption "Enables Zoxide"; + }; + + config = lib.mkIf config.zoxide.enable { + programs.zoxide = { + enable = true; + options = [ + "--cmd cd" + ]; + }; + }; +} diff --git a/systems/pan/default.nix b/systems/pan/default.nix index 3d8fcc4..7025f6d 100644 --- a/systems/pan/default.nix +++ b/systems/pan/default.nix @@ -55,6 +55,7 @@ "${config.home.homeDirectory}/.steam*" "${config.home.homeDirectory}/.zshenv" ]; + zoxide.enable = true; gimp.enable = true; From 263b6a2a08be5c9f94103c10836a301a72d4f522 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 18 Apr 2024 00:57:36 -0700 Subject: [PATCH 143/412] Neovim, add vimwiki extension --- hmModules/apps/neovim/default.nix | 20 +++++++++++++++++++- systems/pan/default.nix | 1 + 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/hmModules/apps/neovim/default.nix b/hmModules/apps/neovim/default.nix index 4407176..ecfb29b 100644 --- a/hmModules/apps/neovim/default.nix +++ b/hmModules/apps/neovim/default.nix @@ -18,6 +18,7 @@ fzf.enable = lib.mkEnableOption "Enables telescope-fzf"; }; treesitter.enable = lib.mkEnableOption "Enables treesitter"; + wiki.enable = lib.mkEnableOption "Enables a wiki"; }; }; @@ -89,7 +90,24 @@ nix-pkg = lopts cfgl.nix.enable (with pkgs.vimPlugins; [ vim-nix ]); - in comments ++ fugitive ++ luasnip-pkg ++ lualine ++ nix-pkg; + + wiki = lopts cfgp.wiki.enable (with pkgs.vimPlugins; [ + { + plugin = vimwiki; + type = "lua"; + config = '' + vim.g.vimwiki_list = { + { + path = '${config.xdg.userDirs.documents}/wiki', + links_space_char = '_', + ext = '.md', + syntax = 'markdown', + } + } + ''; + } + ]); + in comments ++ fugitive ++ luasnip-pkg ++ lualine ++ nix-pkg ++ wiki; }; }; } diff --git a/systems/pan/default.nix b/systems/pan/default.nix index 7025f6d..7910e57 100644 --- a/systems/pan/default.nix +++ b/systems/pan/default.nix @@ -43,6 +43,7 @@ fzf.enable = true; }; treesitter.enable = true; + wiki.enable = true; }; lf.enable = true; From 919e787bc96290e74fa8573bb0574ad139f4c0a9 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 18 Apr 2024 00:57:36 -0700 Subject: [PATCH 144/412] Neovim, add vimwiki extension --- hmModules/apps/neovim/default.nix | 20 +++++++++++++++++++- systems/pan/default.nix | 1 + 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/hmModules/apps/neovim/default.nix b/hmModules/apps/neovim/default.nix index 4407176..ecfb29b 100644 --- a/hmModules/apps/neovim/default.nix +++ b/hmModules/apps/neovim/default.nix @@ -18,6 +18,7 @@ fzf.enable = lib.mkEnableOption "Enables telescope-fzf"; }; treesitter.enable = lib.mkEnableOption "Enables treesitter"; + wiki.enable = lib.mkEnableOption "Enables a wiki"; }; }; @@ -89,7 +90,24 @@ nix-pkg = lopts cfgl.nix.enable (with pkgs.vimPlugins; [ vim-nix ]); - in comments ++ fugitive ++ luasnip-pkg ++ lualine ++ nix-pkg; + + wiki = lopts cfgp.wiki.enable (with pkgs.vimPlugins; [ + { + plugin = vimwiki; + type = "lua"; + config = '' + vim.g.vimwiki_list = { + { + path = '${config.xdg.userDirs.documents}/wiki', + links_space_char = '_', + ext = '.md', + syntax = 'markdown', + } + } + ''; + } + ]); + in comments ++ fugitive ++ luasnip-pkg ++ lualine ++ nix-pkg ++ wiki; }; }; } diff --git a/systems/pan/default.nix b/systems/pan/default.nix index 7025f6d..7910e57 100644 --- a/systems/pan/default.nix +++ b/systems/pan/default.nix @@ -43,6 +43,7 @@ fzf.enable = true; }; treesitter.enable = true; + wiki.enable = true; }; lf.enable = true; From 0508cddeb0209063889fdad2000e04b5a82afa52 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 18 Apr 2024 01:16:38 -0700 Subject: [PATCH 145/412] neovim: Add file and git finding to telescope --- hmModules/apps/neovim/plugin/telescope.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/hmModules/apps/neovim/plugin/telescope.nix b/hmModules/apps/neovim/plugin/telescope.nix index 26178ef..48a96e9 100644 --- a/hmModules/apps/neovim/plugin/telescope.nix +++ b/hmModules/apps/neovim/plugin/telescope.nix @@ -19,6 +19,9 @@ in { '' + '' } }) + local builtin = require('telescope.builtin') + vim.keymap.set('n', 'ff', builtin.find_files, {}) + vim.keymap.set('n', 'fg', builtin.git_files, {}) '' + lib.strings.optionalString cfgp.telescope.fzf.enable '' require('telescope').load_extension('fzf') From e48fffffb97020e9020437eee3077360896d69b6 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 18 Apr 2024 01:16:38 -0700 Subject: [PATCH 146/412] neovim: Add file and git finding to telescope --- hmModules/apps/neovim/plugin/telescope.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/hmModules/apps/neovim/plugin/telescope.nix b/hmModules/apps/neovim/plugin/telescope.nix index 26178ef..48a96e9 100644 --- a/hmModules/apps/neovim/plugin/telescope.nix +++ b/hmModules/apps/neovim/plugin/telescope.nix @@ -19,6 +19,9 @@ in { '' + '' } }) + local builtin = require('telescope.builtin') + vim.keymap.set('n', 'ff', builtin.find_files, {}) + vim.keymap.set('n', 'fg', builtin.git_files, {}) '' + lib.strings.optionalString cfgp.telescope.fzf.enable '' require('telescope').load_extension('fzf') From 0336466d648262c4b3ab5fe28d47ebd3bfb966f9 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 18 Apr 2024 15:38:03 -0700 Subject: [PATCH 147/412] lf, change lfcd to lf in zshrc --- hmModules/apps/shells/zsh/default.nix | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/hmModules/apps/shells/zsh/default.nix b/hmModules/apps/shells/zsh/default.nix index 713a527..9e5ee6b 100644 --- a/hmModules/apps/shells/zsh/default.nix +++ b/hmModules/apps/shells/zsh/default.nix @@ -18,11 +18,11 @@ history.path = "${config.xdg.dataHome}/zsh/history"; initExtra = let lf = lib.optionalString config.lf.enable '' - # Lf change directory command - lfcd () { - cd "$(command lf -print-last-dir "$@")" + # Lf changes directory + lf () { + cd "$(command ${pkgs.lf}/bin/lf -print-last-dir "$@")" } - bindkey -s '^o' 'lfcd\n' + bindkey -s '^o' 'lf\n' ''; in lf + '' From baa9ce07205b893dbf48f8be027e64a896906a8f Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 18 Apr 2024 15:38:03 -0700 Subject: [PATCH 148/412] lf, change lfcd to lf in zshrc --- hmModules/apps/shells/zsh/default.nix | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/hmModules/apps/shells/zsh/default.nix b/hmModules/apps/shells/zsh/default.nix index 713a527..9e5ee6b 100644 --- a/hmModules/apps/shells/zsh/default.nix +++ b/hmModules/apps/shells/zsh/default.nix @@ -18,11 +18,11 @@ history.path = "${config.xdg.dataHome}/zsh/history"; initExtra = let lf = lib.optionalString config.lf.enable '' - # Lf change directory command - lfcd () { - cd "$(command lf -print-last-dir "$@")" + # Lf changes directory + lf () { + cd "$(command ${pkgs.lf}/bin/lf -print-last-dir "$@")" } - bindkey -s '^o' 'lfcd\n' + bindkey -s '^o' 'lf\n' ''; in lf + '' From 29928610bfdb4f02edbe81e438be859b19667694 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 18 Apr 2024 15:41:58 -0700 Subject: [PATCH 149/412] Nvidia, add opencl icd and runtime --- nixosModules/services/graphics/nvidia/default.nix | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/nixosModules/services/graphics/nvidia/default.nix b/nixosModules/services/graphics/nvidia/default.nix index ca25c5a..ecfa100 100644 --- a/nixosModules/services/graphics/nvidia/default.nix +++ b/nixosModules/services/graphics/nvidia/default.nix @@ -12,6 +12,10 @@ enable = true; driSupport = true; driSupport32Bit = true; + extraPackages = with pkgs; [ + rocm-opencl-icd + rocm-opencl-runtime + ]; }; services.xserver.videoDrivers = ["nvidia"]; From 2465081d0c1545df3823b7afe625f75784973627 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 18 Apr 2024 15:41:58 -0700 Subject: [PATCH 150/412] Nvidia, add opencl icd and runtime --- nixosModules/services/graphics/nvidia/default.nix | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/nixosModules/services/graphics/nvidia/default.nix b/nixosModules/services/graphics/nvidia/default.nix index ca25c5a..ecfa100 100644 --- a/nixosModules/services/graphics/nvidia/default.nix +++ b/nixosModules/services/graphics/nvidia/default.nix @@ -12,6 +12,10 @@ enable = true; driSupport = true; driSupport32Bit = true; + extraPackages = with pkgs; [ + rocm-opencl-icd + rocm-opencl-runtime + ]; }; services.xserver.videoDrivers = ["nvidia"]; From 1193c72b93e7630ed379408a216ff5f858406024 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 18 Apr 2024 15:42:25 -0700 Subject: [PATCH 151/412] Nvidia, add kernel module, exclude nouvaeu module --- systems/onizuka/hardware.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/systems/onizuka/hardware.nix b/systems/onizuka/hardware.nix index ea1c10d..39ae6a0 100644 --- a/systems/onizuka/hardware.nix +++ b/systems/onizuka/hardware.nix @@ -9,7 +9,8 @@ ]; boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "ahci" "usbhid" "sd_mod" ]; - boot.initrd.kernelModules = [ ]; + boot.initrd.kernelModules = [ "nvidia" ]; + boot.blacklistedKernelModules = [ "nouveau" ]; boot.kernelModules = [ "kvm-amd" ]; boot.extraModulePackages = [ ]; From c9d441c965545e3dc656184d524f2d0ad559f9b6 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 18 Apr 2024 15:42:25 -0700 Subject: [PATCH 152/412] Nvidia, add kernel module, exclude nouvaeu module --- systems/onizuka/hardware.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/systems/onizuka/hardware.nix b/systems/onizuka/hardware.nix index ea1c10d..39ae6a0 100644 --- a/systems/onizuka/hardware.nix +++ b/systems/onizuka/hardware.nix @@ -9,7 +9,8 @@ ]; boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "ahci" "usbhid" "sd_mod" ]; - boot.initrd.kernelModules = [ ]; + boot.initrd.kernelModules = [ "nvidia" ]; + boot.blacklistedKernelModules = [ "nouveau" ]; boot.kernelModules = [ "kvm-amd" ]; boot.extraModulePackages = [ ]; From 47771131e88e1fc78d9890db292a09599f568079 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 18 Apr 2024 15:43:29 -0700 Subject: [PATCH 153/412] Steam, add gamemode and gamemode option --- nixosModules/apps/games/steam/default.nix | 6 ++++-- systems/onizuka/default.nix | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/nixosModules/apps/games/steam/default.nix b/nixosModules/apps/games/steam/default.nix index 9ae522a..b45dcb0 100644 --- a/nixosModules/apps/games/steam/default.nix +++ b/nixosModules/apps/games/steam/default.nix @@ -1,8 +1,9 @@ { config, pkgs, lib, ... }: { - options = { - steam.enable = lib.mkEnableOption "Enables steam"; + options.steam = { + enable = lib.mkEnableOption "Enables steam"; + gamemode = lib.mkEnableOption "Enables gamemode"; }; config = lib.mkIf config.steam.enable { @@ -11,5 +12,6 @@ remotePlay.openFirewall = true; dedicatedServer.openFirewall = true; }; + programs.gamemode.enable = true; }; } diff --git a/systems/onizuka/default.nix b/systems/onizuka/default.nix index 1a7191d..e7db9f4 100644 --- a/systems/onizuka/default.nix +++ b/systems/onizuka/default.nix @@ -27,6 +27,7 @@ virtualbox.enable = true; steam.enable = true; + steam.gamemode.enable = true; aagl.enable = true; aagl.honkai-rail = true; input-remapper.enable = true; From 29194dc530a24435990bb3fe7211947d64914f8d Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 18 Apr 2024 15:43:29 -0700 Subject: [PATCH 154/412] Steam, add gamemode and gamemode option --- nixosModules/apps/games/steam/default.nix | 6 ++++-- systems/onizuka/default.nix | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/nixosModules/apps/games/steam/default.nix b/nixosModules/apps/games/steam/default.nix index 9ae522a..b45dcb0 100644 --- a/nixosModules/apps/games/steam/default.nix +++ b/nixosModules/apps/games/steam/default.nix @@ -1,8 +1,9 @@ { config, pkgs, lib, ... }: { - options = { - steam.enable = lib.mkEnableOption "Enables steam"; + options.steam = { + enable = lib.mkEnableOption "Enables steam"; + gamemode = lib.mkEnableOption "Enables gamemode"; }; config = lib.mkIf config.steam.enable { @@ -11,5 +12,6 @@ remotePlay.openFirewall = true; dedicatedServer.openFirewall = true; }; + programs.gamemode.enable = true; }; } diff --git a/systems/onizuka/default.nix b/systems/onizuka/default.nix index 1a7191d..e7db9f4 100644 --- a/systems/onizuka/default.nix +++ b/systems/onizuka/default.nix @@ -27,6 +27,7 @@ virtualbox.enable = true; steam.enable = true; + steam.gamemode.enable = true; aagl.enable = true; aagl.honkai-rail = true; input-remapper.enable = true; From 9978fb792162fa3fe0af089b7ed03702d1a913b0 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sun, 21 Apr 2024 01:19:38 -0700 Subject: [PATCH 155/412] Fish, simplify functions, move n alias call Simplifies the git_ family of functions to make fish_right_prompt more readable. git_prompt function is added, which prints the relevant git prompt information. The git_ family of functions is moved into the git_prompt function, and fish_right_prompt calls git_prompt Going forward I'm trying to have modules in charge of the data for other modules, so I moved the nnn alias call from fish to n, and added a handy "extraFunctions" config option to fish. Maintaining the fish module's control of the functions, but allowing others to add stuff in --- hmModules/apps/file-browsers/nnn/default.nix | 3 + .../nnn/nnn_fish_function.fish} | 0 hmModules/apps/shells/fish/default.nix | 57 +++++++-------- .../shells/fish/functions/fish_prompt.fish | 13 ---- .../fish/functions/fish_right_prompt.fish | 61 ---------------- .../fish/functions/git_branch_name.fish | 4 -- .../shells/fish/functions/git_is_dirty.fish | 1 - .../shells/fish/functions/git_is_repo.fish | 5 -- .../shells/fish/functions/git_is_staged.fish | 3 - .../shells/fish/functions/git_is_touched.fish | 6 -- .../fish/functions/git_is_worktree.fish | 2 - .../shells/fish/functions/git_prompt.fish | 69 +++++++++++++++++++ systems/pan/default.nix | 2 +- 13 files changed, 96 insertions(+), 130 deletions(-) rename hmModules/apps/{shells/fish/functions/n.fish => file-browsers/nnn/nnn_fish_function.fish} (100%) delete mode 100644 hmModules/apps/shells/fish/functions/fish_prompt.fish delete mode 100644 hmModules/apps/shells/fish/functions/fish_right_prompt.fish delete mode 100644 hmModules/apps/shells/fish/functions/git_branch_name.fish delete mode 100644 hmModules/apps/shells/fish/functions/git_is_dirty.fish delete mode 100644 hmModules/apps/shells/fish/functions/git_is_repo.fish delete mode 100644 hmModules/apps/shells/fish/functions/git_is_staged.fish delete mode 100644 hmModules/apps/shells/fish/functions/git_is_touched.fish delete mode 100644 hmModules/apps/shells/fish/functions/git_is_worktree.fish create mode 100644 hmModules/apps/shells/fish/functions/git_prompt.fish diff --git a/hmModules/apps/file-browsers/nnn/default.nix b/hmModules/apps/file-browsers/nnn/default.nix index f68cec2..8900ee7 100644 --- a/hmModules/apps/file-browsers/nnn/default.nix +++ b/hmModules/apps/file-browsers/nnn/default.nix @@ -13,5 +13,8 @@ NNN_FIFO = "/tmp/nnn.fifo"; NNN_TRASH = lib.mkIf config.trash.enable "1"; }; + fish.extraFunctions = lib.mkIf config.fish.enable { + n = ''${builtins.readFile ./nnn_fish_function.fish}''; + }; }; } diff --git a/hmModules/apps/shells/fish/functions/n.fish b/hmModules/apps/file-browsers/nnn/nnn_fish_function.fish similarity index 100% rename from hmModules/apps/shells/fish/functions/n.fish rename to hmModules/apps/file-browsers/nnn/nnn_fish_function.fish diff --git a/hmModules/apps/shells/fish/default.nix b/hmModules/apps/shells/fish/default.nix index 46e6de1..0390a09 100644 --- a/hmModules/apps/shells/fish/default.nix +++ b/hmModules/apps/shells/fish/default.nix @@ -3,43 +3,32 @@ { options.fish = { enable = lib.mkEnableOption "Enables fish"; + extraFunctions = lib.mkOption { + type = with lib.types; attrsOf lines; + default = {}; + }; }; config = lib.mkIf config.fish.enable { - programs.fish.enable = true; - - programs.fish.functions = { - fish_greeting = ""; - fish_prompt = '' - ${builtins.readFile ./functions/fish_prompt.fish} - ''; - fish_right_prompt = '' - ${builtins.readFile ./functions/fish_right_prompt.fish} - ''; - git_branch_name = '' - ${builtins.readFile ./functions/git_branch_name.fish} - ''; - git_is_dirty = '' - ${builtins.readFile ./functions/git_is_dirty.fish} - ''; - git_is_repo = '' - ${builtins.readFile ./functions/git_is_repo.fish} - ''; - git_is_staged = '' - ${builtins.readFile ./functions/git_is_staged.fish} - ''; - git_is_touched = '' - ${builtins.readFile ./functions/git_is_touched.fish} - ''; - git_is_worktree = '' - ${builtins.readFile ./functions/git_is_worktree.fish} - ''; - ssh = '' - ${builtins.readFile ./functions/ssh.fish} - ''; - n = lib.mkIf config.nnn.enable '' - ${builtins.readFile ./functions/n.fish} - ''; + programs.fish = { + enable = true; + functions = { + fish_greeting = ""; + fish_prompt = '' + if test $status -eq 0 + echo -n -s (set_color blue -o) τ " " (set_color normal) + else + echo -n -s (set_color red -o) τ " " (set_color normal) + end + ''; + fish_right_prompt = '' + git_prompt + echo -n -s (set_color blue) (prompt_pwd) " " + echo -n -s (set_color yellow) $CMD_DURATION ms + echo -n -s (set_color normal) + ''; + git_prompt = ''${builtins.readFile ./functions/git_prompt.fish}''; + } // config.fish.extraFunctions; }; }; } diff --git a/hmModules/apps/shells/fish/functions/fish_prompt.fish b/hmModules/apps/shells/fish/functions/fish_prompt.fish deleted file mode 100644 index 1740f57..0000000 --- a/hmModules/apps/shells/fish/functions/fish_prompt.fish +++ /dev/null @@ -1,13 +0,0 @@ -set -l last_command_status $status - -set -l symbol 'τ' - -set -l normal_color (set_color normal) -set -l symbol_color (set_color blue -o) -set -l error_color (set_color red -o) - -if test $last_command_status -eq 0 - echo -n -s $symbol_color $symbol " " $normal_color -else - echo -n -s $error_color $symbol " " $normal_color -end diff --git a/hmModules/apps/shells/fish/functions/fish_right_prompt.fish b/hmModules/apps/shells/fish/functions/fish_right_prompt.fish deleted file mode 100644 index f46799d..0000000 --- a/hmModules/apps/shells/fish/functions/fish_right_prompt.fish +++ /dev/null @@ -1,61 +0,0 @@ -set -l cwd -set -l cwd_color (set_color blue) -set -l normal_color (set_color normal) -set -l branch_color (set_color yellow) -set -l meta_color (set_color red) - -if git_is_repo - echo -n -s $branch_color (git_branch_name) $normal_color - set -l git_meta "" - if test (command git ls-files --others --exclude-standard | wc -w 2> /dev/null) -gt 0 - set git_meta "$git_meta?" - end - if test (command git rev-list --walk-reflogs --count refs/stash 2> /dev/null) - set git_meta "$git_meta\$" - end - if git_is_touched - git_is_dirty && set git_meta "$git_meta⨯" - git_is_staged && set git_meta "$git_meta●" - end - set -l commit_count (command git rev-list --count --left-right (git remote)/(git_branch_name)"...HEAD" 2> /dev/null) - if test $commit_count - set -l behind (echo $commit_count | cut -f 1) - set -l ahead (echo $commit_count | cut -f 2) - if test $behind -gt 0 - set git_meta "$git_meta🠋" - end - if test $ahead -gt 0 - set git_meta "$git_meta🠉" - end - end - if test $git_meta - echo -n -s $meta_color " " $git_meta " " $normal_color - else - echo -n -s " " - end - - - set root_folder (command git rev-parse --show-toplevel 2> /dev/null) - set parent_root_folder (dirname $root_folder) - set cwd (echo $PWD | sed -e "s|$parent_root_folder/||") -else - set cwd (prompt_pwd) -end - - -echo -n -s $cwd_color "$cwd" -set_color --dim - -set -l S (math $CMD_DURATION/1000) -set -l M (math $S/60) - - -echo -n -s " " -if test $M -gt 1 - echo -n -s $M m -else if test $S -gt 1 - echo -n -s $S s -else - echo -n -s $CMD_DURATION ms -end -set_color normal diff --git a/hmModules/apps/shells/fish/functions/git_branch_name.fish b/hmModules/apps/shells/fish/functions/git_branch_name.fish deleted file mode 100644 index 20b4149..0000000 --- a/hmModules/apps/shells/fish/functions/git_branch_name.fish +++ /dev/null @@ -1,4 +0,0 @@ -git_is_repo; and begin - command git symbolic-ref --short HEAD 2> /dev/null; - or command git show-ref --head -s --abbrev | head -n1 2> /dev/null -end diff --git a/hmModules/apps/shells/fish/functions/git_is_dirty.fish b/hmModules/apps/shells/fish/functions/git_is_dirty.fish deleted file mode 100644 index f92e54d..0000000 --- a/hmModules/apps/shells/fish/functions/git_is_dirty.fish +++ /dev/null @@ -1 +0,0 @@ -git_is_worktree; and not command git diff --no-ext-diff --quiet --exit-code diff --git a/hmModules/apps/shells/fish/functions/git_is_repo.fish b/hmModules/apps/shells/fish/functions/git_is_repo.fish deleted file mode 100644 index 00a2cfc..0000000 --- a/hmModules/apps/shells/fish/functions/git_is_repo.fish +++ /dev/null @@ -1,5 +0,0 @@ -test -d .git -or begin - set -l info (command git rev-parse --git-dir --is-bare-repository 2>/dev/null) - and test $info[2] = false -end diff --git a/hmModules/apps/shells/fish/functions/git_is_staged.fish b/hmModules/apps/shells/fish/functions/git_is_staged.fish deleted file mode 100644 index ef6b7ac..0000000 --- a/hmModules/apps/shells/fish/functions/git_is_staged.fish +++ /dev/null @@ -1,3 +0,0 @@ -git_is_repo; and begin - not command git diff --cached --no-ext-diff --quiet --exit-code -end diff --git a/hmModules/apps/shells/fish/functions/git_is_touched.fish b/hmModules/apps/shells/fish/functions/git_is_touched.fish deleted file mode 100644 index 5605630..0000000 --- a/hmModules/apps/shells/fish/functions/git_is_touched.fish +++ /dev/null @@ -1,6 +0,0 @@ -git_is_worktree; and begin - # The first checks for staged changes, the second for unstaged ones. - # We put them in this order because checking staged changes is *fast*. - not command git diff-index --cached --quiet HEAD -- >/dev/null 2>&1 - or not command git diff --no-ext-diff --quiet --exit-code >/dev/null 2>&1 -end diff --git a/hmModules/apps/shells/fish/functions/git_is_worktree.fish b/hmModules/apps/shells/fish/functions/git_is_worktree.fish deleted file mode 100644 index 8b2c700..0000000 --- a/hmModules/apps/shells/fish/functions/git_is_worktree.fish +++ /dev/null @@ -1,2 +0,0 @@ -git_is_repo -and test (command git rev-parse --is-inside-git-dir) = false diff --git a/hmModules/apps/shells/fish/functions/git_prompt.fish b/hmModules/apps/shells/fish/functions/git_prompt.fish new file mode 100644 index 0000000..a0bb65b --- /dev/null +++ b/hmModules/apps/shells/fish/functions/git_prompt.fish @@ -0,0 +1,69 @@ +function git_is_repo + test -d .git + or begin + set -l info (command git rev-parse --git-dir --is-bare-repository 2>/dev/null) + and test $info[2] = false + end +end + +function git_is_worktree + git_is_repo + and test (command git rev-parse --is-inside-git-dir) = false +end + +function git_is_dirty + git_is_worktree; and not command git diff --no-ext-diff --quiet --exit-code +end + +function git_is_staged + git_is_repo; and begin + not command git diff --cached --no-ext-diff --quiet --exit-code + end +end + +function git_branch_name + git_is_repo; and begin + command git symbolic-ref --short HEAD 2> /dev/null; + or command git show-ref --head -s --abbrev | head -n1 2> /dev/null + end +end + +function git_is_touched + git_is_worktree; and begin + # The first checks for staged changes, the second for unstaged ones. + # We put them in this order because checking staged changes is *fast*. + not command git diff-index --cached --quiet HEAD -- >/dev/null 2>&1 + or not command git diff --no-ext-diff --quiet --exit-code >/dev/null 2>&1 + end +end + +if git_is_repo + echo -n -s (set_color yellow) (git_branch_name) (set_color normal) + set -l git_meta "" + if test (command git ls-files --others --exclude-standard | wc -w 2> /dev/null) -gt 0 + set git_meta "$git_meta?" + end + if test (command git rev-list --walk-reflogs --count refs/stash 2> /dev/null) + set git_meta "$git_meta\$" + end + if git_is_touched + git_is_dirty && set git_meta "$git_meta⨯" + git_is_staged && set git_meta "$git_meta●" + end + set -l commit_count (command git rev-list --count --left-right (git remote)/(git_branch_name)"...HEAD" 2> /dev/null) + if test $commit_count + set -l behind (echo $commit_count | cut -f 1) + set -l ahead (echo $commit_count | cut -f 2) + if test $behind -gt 0 + set git_meta "$git_meta🠋" + end + if test $ahead -gt 0 + set git_meta "$git_meta🠉" + end + end + if test $git_meta + echo -n -s (set_color red) " " $git_meta " " (set_color normal) + else + echo -n -s " " + end +end diff --git a/systems/pan/default.nix b/systems/pan/default.nix index 7910e57..d05f21e 100644 --- a/systems/pan/default.nix +++ b/systems/pan/default.nix @@ -15,7 +15,7 @@ manpages.enable = true; trash.enable = true; - zsh.enable = true; + fish.enable = true; kitty.enable = true; kitty.font = "Cascadia Code"; git.enable = true; From e2935c18f6f308c462c7f3265f50c1f83d74eb2e Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sun, 21 Apr 2024 01:19:38 -0700 Subject: [PATCH 156/412] Fish, simplify functions, move n alias call Simplifies the git_ family of functions to make fish_right_prompt more readable. git_prompt function is added, which prints the relevant git prompt information. The git_ family of functions is moved into the git_prompt function, and fish_right_prompt calls git_prompt Going forward I'm trying to have modules in charge of the data for other modules, so I moved the nnn alias call from fish to n, and added a handy "extraFunctions" config option to fish. Maintaining the fish module's control of the functions, but allowing others to add stuff in --- hmModules/apps/file-browsers/nnn/default.nix | 3 + .../nnn/nnn_fish_function.fish} | 0 hmModules/apps/shells/fish/default.nix | 57 +++++++-------- .../shells/fish/functions/fish_prompt.fish | 13 ---- .../fish/functions/fish_right_prompt.fish | 61 ---------------- .../fish/functions/git_branch_name.fish | 4 -- .../shells/fish/functions/git_is_dirty.fish | 1 - .../shells/fish/functions/git_is_repo.fish | 5 -- .../shells/fish/functions/git_is_staged.fish | 3 - .../shells/fish/functions/git_is_touched.fish | 6 -- .../fish/functions/git_is_worktree.fish | 2 - .../shells/fish/functions/git_prompt.fish | 69 +++++++++++++++++++ systems/pan/default.nix | 2 +- 13 files changed, 96 insertions(+), 130 deletions(-) rename hmModules/apps/{shells/fish/functions/n.fish => file-browsers/nnn/nnn_fish_function.fish} (100%) delete mode 100644 hmModules/apps/shells/fish/functions/fish_prompt.fish delete mode 100644 hmModules/apps/shells/fish/functions/fish_right_prompt.fish delete mode 100644 hmModules/apps/shells/fish/functions/git_branch_name.fish delete mode 100644 hmModules/apps/shells/fish/functions/git_is_dirty.fish delete mode 100644 hmModules/apps/shells/fish/functions/git_is_repo.fish delete mode 100644 hmModules/apps/shells/fish/functions/git_is_staged.fish delete mode 100644 hmModules/apps/shells/fish/functions/git_is_touched.fish delete mode 100644 hmModules/apps/shells/fish/functions/git_is_worktree.fish create mode 100644 hmModules/apps/shells/fish/functions/git_prompt.fish diff --git a/hmModules/apps/file-browsers/nnn/default.nix b/hmModules/apps/file-browsers/nnn/default.nix index f68cec2..8900ee7 100644 --- a/hmModules/apps/file-browsers/nnn/default.nix +++ b/hmModules/apps/file-browsers/nnn/default.nix @@ -13,5 +13,8 @@ NNN_FIFO = "/tmp/nnn.fifo"; NNN_TRASH = lib.mkIf config.trash.enable "1"; }; + fish.extraFunctions = lib.mkIf config.fish.enable { + n = ''${builtins.readFile ./nnn_fish_function.fish}''; + }; }; } diff --git a/hmModules/apps/shells/fish/functions/n.fish b/hmModules/apps/file-browsers/nnn/nnn_fish_function.fish similarity index 100% rename from hmModules/apps/shells/fish/functions/n.fish rename to hmModules/apps/file-browsers/nnn/nnn_fish_function.fish diff --git a/hmModules/apps/shells/fish/default.nix b/hmModules/apps/shells/fish/default.nix index 46e6de1..0390a09 100644 --- a/hmModules/apps/shells/fish/default.nix +++ b/hmModules/apps/shells/fish/default.nix @@ -3,43 +3,32 @@ { options.fish = { enable = lib.mkEnableOption "Enables fish"; + extraFunctions = lib.mkOption { + type = with lib.types; attrsOf lines; + default = {}; + }; }; config = lib.mkIf config.fish.enable { - programs.fish.enable = true; - - programs.fish.functions = { - fish_greeting = ""; - fish_prompt = '' - ${builtins.readFile ./functions/fish_prompt.fish} - ''; - fish_right_prompt = '' - ${builtins.readFile ./functions/fish_right_prompt.fish} - ''; - git_branch_name = '' - ${builtins.readFile ./functions/git_branch_name.fish} - ''; - git_is_dirty = '' - ${builtins.readFile ./functions/git_is_dirty.fish} - ''; - git_is_repo = '' - ${builtins.readFile ./functions/git_is_repo.fish} - ''; - git_is_staged = '' - ${builtins.readFile ./functions/git_is_staged.fish} - ''; - git_is_touched = '' - ${builtins.readFile ./functions/git_is_touched.fish} - ''; - git_is_worktree = '' - ${builtins.readFile ./functions/git_is_worktree.fish} - ''; - ssh = '' - ${builtins.readFile ./functions/ssh.fish} - ''; - n = lib.mkIf config.nnn.enable '' - ${builtins.readFile ./functions/n.fish} - ''; + programs.fish = { + enable = true; + functions = { + fish_greeting = ""; + fish_prompt = '' + if test $status -eq 0 + echo -n -s (set_color blue -o) τ " " (set_color normal) + else + echo -n -s (set_color red -o) τ " " (set_color normal) + end + ''; + fish_right_prompt = '' + git_prompt + echo -n -s (set_color blue) (prompt_pwd) " " + echo -n -s (set_color yellow) $CMD_DURATION ms + echo -n -s (set_color normal) + ''; + git_prompt = ''${builtins.readFile ./functions/git_prompt.fish}''; + } // config.fish.extraFunctions; }; }; } diff --git a/hmModules/apps/shells/fish/functions/fish_prompt.fish b/hmModules/apps/shells/fish/functions/fish_prompt.fish deleted file mode 100644 index 1740f57..0000000 --- a/hmModules/apps/shells/fish/functions/fish_prompt.fish +++ /dev/null @@ -1,13 +0,0 @@ -set -l last_command_status $status - -set -l symbol 'τ' - -set -l normal_color (set_color normal) -set -l symbol_color (set_color blue -o) -set -l error_color (set_color red -o) - -if test $last_command_status -eq 0 - echo -n -s $symbol_color $symbol " " $normal_color -else - echo -n -s $error_color $symbol " " $normal_color -end diff --git a/hmModules/apps/shells/fish/functions/fish_right_prompt.fish b/hmModules/apps/shells/fish/functions/fish_right_prompt.fish deleted file mode 100644 index f46799d..0000000 --- a/hmModules/apps/shells/fish/functions/fish_right_prompt.fish +++ /dev/null @@ -1,61 +0,0 @@ -set -l cwd -set -l cwd_color (set_color blue) -set -l normal_color (set_color normal) -set -l branch_color (set_color yellow) -set -l meta_color (set_color red) - -if git_is_repo - echo -n -s $branch_color (git_branch_name) $normal_color - set -l git_meta "" - if test (command git ls-files --others --exclude-standard | wc -w 2> /dev/null) -gt 0 - set git_meta "$git_meta?" - end - if test (command git rev-list --walk-reflogs --count refs/stash 2> /dev/null) - set git_meta "$git_meta\$" - end - if git_is_touched - git_is_dirty && set git_meta "$git_meta⨯" - git_is_staged && set git_meta "$git_meta●" - end - set -l commit_count (command git rev-list --count --left-right (git remote)/(git_branch_name)"...HEAD" 2> /dev/null) - if test $commit_count - set -l behind (echo $commit_count | cut -f 1) - set -l ahead (echo $commit_count | cut -f 2) - if test $behind -gt 0 - set git_meta "$git_meta🠋" - end - if test $ahead -gt 0 - set git_meta "$git_meta🠉" - end - end - if test $git_meta - echo -n -s $meta_color " " $git_meta " " $normal_color - else - echo -n -s " " - end - - - set root_folder (command git rev-parse --show-toplevel 2> /dev/null) - set parent_root_folder (dirname $root_folder) - set cwd (echo $PWD | sed -e "s|$parent_root_folder/||") -else - set cwd (prompt_pwd) -end - - -echo -n -s $cwd_color "$cwd" -set_color --dim - -set -l S (math $CMD_DURATION/1000) -set -l M (math $S/60) - - -echo -n -s " " -if test $M -gt 1 - echo -n -s $M m -else if test $S -gt 1 - echo -n -s $S s -else - echo -n -s $CMD_DURATION ms -end -set_color normal diff --git a/hmModules/apps/shells/fish/functions/git_branch_name.fish b/hmModules/apps/shells/fish/functions/git_branch_name.fish deleted file mode 100644 index 20b4149..0000000 --- a/hmModules/apps/shells/fish/functions/git_branch_name.fish +++ /dev/null @@ -1,4 +0,0 @@ -git_is_repo; and begin - command git symbolic-ref --short HEAD 2> /dev/null; - or command git show-ref --head -s --abbrev | head -n1 2> /dev/null -end diff --git a/hmModules/apps/shells/fish/functions/git_is_dirty.fish b/hmModules/apps/shells/fish/functions/git_is_dirty.fish deleted file mode 100644 index f92e54d..0000000 --- a/hmModules/apps/shells/fish/functions/git_is_dirty.fish +++ /dev/null @@ -1 +0,0 @@ -git_is_worktree; and not command git diff --no-ext-diff --quiet --exit-code diff --git a/hmModules/apps/shells/fish/functions/git_is_repo.fish b/hmModules/apps/shells/fish/functions/git_is_repo.fish deleted file mode 100644 index 00a2cfc..0000000 --- a/hmModules/apps/shells/fish/functions/git_is_repo.fish +++ /dev/null @@ -1,5 +0,0 @@ -test -d .git -or begin - set -l info (command git rev-parse --git-dir --is-bare-repository 2>/dev/null) - and test $info[2] = false -end diff --git a/hmModules/apps/shells/fish/functions/git_is_staged.fish b/hmModules/apps/shells/fish/functions/git_is_staged.fish deleted file mode 100644 index ef6b7ac..0000000 --- a/hmModules/apps/shells/fish/functions/git_is_staged.fish +++ /dev/null @@ -1,3 +0,0 @@ -git_is_repo; and begin - not command git diff --cached --no-ext-diff --quiet --exit-code -end diff --git a/hmModules/apps/shells/fish/functions/git_is_touched.fish b/hmModules/apps/shells/fish/functions/git_is_touched.fish deleted file mode 100644 index 5605630..0000000 --- a/hmModules/apps/shells/fish/functions/git_is_touched.fish +++ /dev/null @@ -1,6 +0,0 @@ -git_is_worktree; and begin - # The first checks for staged changes, the second for unstaged ones. - # We put them in this order because checking staged changes is *fast*. - not command git diff-index --cached --quiet HEAD -- >/dev/null 2>&1 - or not command git diff --no-ext-diff --quiet --exit-code >/dev/null 2>&1 -end diff --git a/hmModules/apps/shells/fish/functions/git_is_worktree.fish b/hmModules/apps/shells/fish/functions/git_is_worktree.fish deleted file mode 100644 index 8b2c700..0000000 --- a/hmModules/apps/shells/fish/functions/git_is_worktree.fish +++ /dev/null @@ -1,2 +0,0 @@ -git_is_repo -and test (command git rev-parse --is-inside-git-dir) = false diff --git a/hmModules/apps/shells/fish/functions/git_prompt.fish b/hmModules/apps/shells/fish/functions/git_prompt.fish new file mode 100644 index 0000000..a0bb65b --- /dev/null +++ b/hmModules/apps/shells/fish/functions/git_prompt.fish @@ -0,0 +1,69 @@ +function git_is_repo + test -d .git + or begin + set -l info (command git rev-parse --git-dir --is-bare-repository 2>/dev/null) + and test $info[2] = false + end +end + +function git_is_worktree + git_is_repo + and test (command git rev-parse --is-inside-git-dir) = false +end + +function git_is_dirty + git_is_worktree; and not command git diff --no-ext-diff --quiet --exit-code +end + +function git_is_staged + git_is_repo; and begin + not command git diff --cached --no-ext-diff --quiet --exit-code + end +end + +function git_branch_name + git_is_repo; and begin + command git symbolic-ref --short HEAD 2> /dev/null; + or command git show-ref --head -s --abbrev | head -n1 2> /dev/null + end +end + +function git_is_touched + git_is_worktree; and begin + # The first checks for staged changes, the second for unstaged ones. + # We put them in this order because checking staged changes is *fast*. + not command git diff-index --cached --quiet HEAD -- >/dev/null 2>&1 + or not command git diff --no-ext-diff --quiet --exit-code >/dev/null 2>&1 + end +end + +if git_is_repo + echo -n -s (set_color yellow) (git_branch_name) (set_color normal) + set -l git_meta "" + if test (command git ls-files --others --exclude-standard | wc -w 2> /dev/null) -gt 0 + set git_meta "$git_meta?" + end + if test (command git rev-list --walk-reflogs --count refs/stash 2> /dev/null) + set git_meta "$git_meta\$" + end + if git_is_touched + git_is_dirty && set git_meta "$git_meta⨯" + git_is_staged && set git_meta "$git_meta●" + end + set -l commit_count (command git rev-list --count --left-right (git remote)/(git_branch_name)"...HEAD" 2> /dev/null) + if test $commit_count + set -l behind (echo $commit_count | cut -f 1) + set -l ahead (echo $commit_count | cut -f 2) + if test $behind -gt 0 + set git_meta "$git_meta🠋" + end + if test $ahead -gt 0 + set git_meta "$git_meta🠉" + end + end + if test $git_meta + echo -n -s (set_color red) " " $git_meta " " (set_color normal) + else + echo -n -s " " + end +end diff --git a/systems/pan/default.nix b/systems/pan/default.nix index 7910e57..d05f21e 100644 --- a/systems/pan/default.nix +++ b/systems/pan/default.nix @@ -15,7 +15,7 @@ manpages.enable = true; trash.enable = true; - zsh.enable = true; + fish.enable = true; kitty.enable = true; kitty.font = "Cascadia Code"; git.enable = true; From b16fb477190a873d030bdf828c25d9b6cf95b82e Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sun, 21 Apr 2024 01:43:11 -0700 Subject: [PATCH 157/412] lf, add fish cd-alias --- hmModules/apps/file-browsers/lf/default.nix | 7 +++++++ hmModules/apps/shells/fish/default.nix | 15 ++++++++++++--- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/hmModules/apps/file-browsers/lf/default.nix b/hmModules/apps/file-browsers/lf/default.nix index 0ad6060..f4ff3da 100644 --- a/hmModules/apps/file-browsers/lf/default.nix +++ b/hmModules/apps/file-browsers/lf/default.nix @@ -10,6 +10,13 @@ config = lib.mkIf config.lf.enable { xdg.configFile."lf/icons".source = ./icons; + fish.extraFunctions = lib.mkIf config.fish.enable { + lf = { + body = ''cd "$(command ${pkgs.lf}/bin/lf -print-last-dir "$argv")"''; + wraps = "${pkgs.lf}/bin/lf"; + }; + }; + programs.lf = { enable = true; settings = { diff --git a/hmModules/apps/shells/fish/default.nix b/hmModules/apps/shells/fish/default.nix index 0390a09..0fc1e53 100644 --- a/hmModules/apps/shells/fish/default.nix +++ b/hmModules/apps/shells/fish/default.nix @@ -1,10 +1,19 @@ { config, pkgs, lib, ... }: - -{ +let + functionModule = with lib.types; submodule { + options = { + body = lib.mkOption { type = lines; }; + wraps = lib.mkOption { + type = nullOr str; + default = null; + }; + }; + }; +in { options.fish = { enable = lib.mkEnableOption "Enables fish"; extraFunctions = lib.mkOption { - type = with lib.types; attrsOf lines; + type = with lib.types; attrsOf (either lines functionModule); default = {}; }; }; From 36d13dffcf6c54c03f074189acdcad0f2ebf1ea5 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sun, 21 Apr 2024 01:43:11 -0700 Subject: [PATCH 158/412] lf, add fish cd-alias --- hmModules/apps/file-browsers/lf/default.nix | 7 +++++++ hmModules/apps/shells/fish/default.nix | 15 ++++++++++++--- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/hmModules/apps/file-browsers/lf/default.nix b/hmModules/apps/file-browsers/lf/default.nix index 0ad6060..f4ff3da 100644 --- a/hmModules/apps/file-browsers/lf/default.nix +++ b/hmModules/apps/file-browsers/lf/default.nix @@ -10,6 +10,13 @@ config = lib.mkIf config.lf.enable { xdg.configFile."lf/icons".source = ./icons; + fish.extraFunctions = lib.mkIf config.fish.enable { + lf = { + body = ''cd "$(command ${pkgs.lf}/bin/lf -print-last-dir "$argv")"''; + wraps = "${pkgs.lf}/bin/lf"; + }; + }; + programs.lf = { enable = true; settings = { diff --git a/hmModules/apps/shells/fish/default.nix b/hmModules/apps/shells/fish/default.nix index 0390a09..0fc1e53 100644 --- a/hmModules/apps/shells/fish/default.nix +++ b/hmModules/apps/shells/fish/default.nix @@ -1,10 +1,19 @@ { config, pkgs, lib, ... }: - -{ +let + functionModule = with lib.types; submodule { + options = { + body = lib.mkOption { type = lines; }; + wraps = lib.mkOption { + type = nullOr str; + default = null; + }; + }; + }; +in { options.fish = { enable = lib.mkEnableOption "Enables fish"; extraFunctions = lib.mkOption { - type = with lib.types; attrsOf lines; + type = with lib.types; attrsOf (either lines functionModule); default = {}; }; }; From 1b6627bcbe7f91f09b6d8f136b4328ea793592eb Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 23 Apr 2024 23:17:10 -0700 Subject: [PATCH 159/412] neovim, add rust language support --- hmModules/apps/neovim/default.nix | 13 ++++++++++--- hmModules/apps/neovim/plugin/lsp.nix | 2 ++ hmModules/apps/neovim/plugin/treesitter.nix | 3 ++- systems/pan/default.nix | 3 ++- 4 files changed, 16 insertions(+), 5 deletions(-) diff --git a/hmModules/apps/neovim/default.nix b/hmModules/apps/neovim/default.nix index ecfb29b..3557f90 100644 --- a/hmModules/apps/neovim/default.nix +++ b/hmModules/apps/neovim/default.nix @@ -4,8 +4,9 @@ options.neovim = { enable = lib.mkEnableOption "Enables neovim"; languages = { - nix.enable = lib.mkEnableOption "Enables nix support"; c.enable = lib.mkEnableOption "Enables c support"; + nix.enable = lib.mkEnableOption "Enables nix support"; + rust.enable = lib.mkEnableOption "Enables rust support"; }; plugins = { comments.enable = lib.mkEnableOption "Enables nvim-comment"; @@ -46,8 +47,9 @@ ''; extraPackages = with pkgs; [ - (lib.mkIf config.neovim.languages.nix.enable nil) (lib.mkIf config.neovim.languages.c.enable libclang) + (lib.mkIf config.neovim.languages.nix.enable nil) + (lib.mkIf config.neovim.languages.rust.enable rust-analyzer) ]; # Additional packages are added through imports @@ -91,6 +93,10 @@ vim-nix ]); + rust-pkg = lopts cfgl.rust.enable (with pkgs.vimPlugins; [ + rustaceanvim + ]); + wiki = lopts cfgp.wiki.enable (with pkgs.vimPlugins; [ { plugin = vimwiki; @@ -107,7 +113,8 @@ ''; } ]); - in comments ++ fugitive ++ luasnip-pkg ++ lualine ++ nix-pkg ++ wiki; + in comments ++ fugitive ++ luasnip-pkg ++ lualine ++ + nix-pkg ++ rust-pkg ++ wiki; }; }; } diff --git a/hmModules/apps/neovim/plugin/lsp.nix b/hmModules/apps/neovim/plugin/lsp.nix index 849c9cc..bd06204 100644 --- a/hmModules/apps/neovim/plugin/lsp.nix +++ b/hmModules/apps/neovim/plugin/lsp.nix @@ -39,6 +39,8 @@ require('lspconfig').nil_ls.setup {} '' + lib.strings.optionalString cfgl.c.enable '' require('lspconfig').clangd.setup {} + '' + lib.strings.optionalString cfgl.rust.enable '' + require('lspconfig').rustaceanvim.setup {} ''; in with pkgs.vimPlugins; [ { diff --git a/hmModules/apps/neovim/plugin/treesitter.nix b/hmModules/apps/neovim/plugin/treesitter.nix index 667fb3d..43b2d28 100644 --- a/hmModules/apps/neovim/plugin/treesitter.nix +++ b/hmModules/apps/neovim/plugin/treesitter.nix @@ -21,8 +21,9 @@ in { # I've tried many things, and can't get treesitter plugins changing # dynamically. For not just have them always loaded regardless of config treeplugs = p: [ - p.tree-sitter-nix p.tree-sitter-c + p.tree-sitter-nix + p.tree-sitter-rust ]; in with pkgs.vimPlugins; [ { diff --git a/systems/pan/default.nix b/systems/pan/default.nix index d05f21e..ebe826b 100644 --- a/systems/pan/default.nix +++ b/systems/pan/default.nix @@ -29,8 +29,9 @@ neovim.enable = true; neovim.languages = { - nix.enable = true; c.enable = true; + nix.enable = true; + rust.enable = true; }; neovim.plugins = { comments.enable = true; From 4ac46cee92c32a61098f2eaa3afdb9a6d9bbe580 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 23 Apr 2024 23:17:10 -0700 Subject: [PATCH 160/412] neovim, add rust language support --- hmModules/apps/neovim/default.nix | 13 ++++++++++--- hmModules/apps/neovim/plugin/lsp.nix | 2 ++ hmModules/apps/neovim/plugin/treesitter.nix | 3 ++- systems/pan/default.nix | 3 ++- 4 files changed, 16 insertions(+), 5 deletions(-) diff --git a/hmModules/apps/neovim/default.nix b/hmModules/apps/neovim/default.nix index ecfb29b..3557f90 100644 --- a/hmModules/apps/neovim/default.nix +++ b/hmModules/apps/neovim/default.nix @@ -4,8 +4,9 @@ options.neovim = { enable = lib.mkEnableOption "Enables neovim"; languages = { - nix.enable = lib.mkEnableOption "Enables nix support"; c.enable = lib.mkEnableOption "Enables c support"; + nix.enable = lib.mkEnableOption "Enables nix support"; + rust.enable = lib.mkEnableOption "Enables rust support"; }; plugins = { comments.enable = lib.mkEnableOption "Enables nvim-comment"; @@ -46,8 +47,9 @@ ''; extraPackages = with pkgs; [ - (lib.mkIf config.neovim.languages.nix.enable nil) (lib.mkIf config.neovim.languages.c.enable libclang) + (lib.mkIf config.neovim.languages.nix.enable nil) + (lib.mkIf config.neovim.languages.rust.enable rust-analyzer) ]; # Additional packages are added through imports @@ -91,6 +93,10 @@ vim-nix ]); + rust-pkg = lopts cfgl.rust.enable (with pkgs.vimPlugins; [ + rustaceanvim + ]); + wiki = lopts cfgp.wiki.enable (with pkgs.vimPlugins; [ { plugin = vimwiki; @@ -107,7 +113,8 @@ ''; } ]); - in comments ++ fugitive ++ luasnip-pkg ++ lualine ++ nix-pkg ++ wiki; + in comments ++ fugitive ++ luasnip-pkg ++ lualine ++ + nix-pkg ++ rust-pkg ++ wiki; }; }; } diff --git a/hmModules/apps/neovim/plugin/lsp.nix b/hmModules/apps/neovim/plugin/lsp.nix index 849c9cc..bd06204 100644 --- a/hmModules/apps/neovim/plugin/lsp.nix +++ b/hmModules/apps/neovim/plugin/lsp.nix @@ -39,6 +39,8 @@ require('lspconfig').nil_ls.setup {} '' + lib.strings.optionalString cfgl.c.enable '' require('lspconfig').clangd.setup {} + '' + lib.strings.optionalString cfgl.rust.enable '' + require('lspconfig').rustaceanvim.setup {} ''; in with pkgs.vimPlugins; [ { diff --git a/hmModules/apps/neovim/plugin/treesitter.nix b/hmModules/apps/neovim/plugin/treesitter.nix index 667fb3d..43b2d28 100644 --- a/hmModules/apps/neovim/plugin/treesitter.nix +++ b/hmModules/apps/neovim/plugin/treesitter.nix @@ -21,8 +21,9 @@ in { # I've tried many things, and can't get treesitter plugins changing # dynamically. For not just have them always loaded regardless of config treeplugs = p: [ - p.tree-sitter-nix p.tree-sitter-c + p.tree-sitter-nix + p.tree-sitter-rust ]; in with pkgs.vimPlugins; [ { diff --git a/systems/pan/default.nix b/systems/pan/default.nix index d05f21e..ebe826b 100644 --- a/systems/pan/default.nix +++ b/systems/pan/default.nix @@ -29,8 +29,9 @@ neovim.enable = true; neovim.languages = { - nix.enable = true; c.enable = true; + nix.enable = true; + rust.enable = true; }; neovim.plugins = { comments.enable = true; From d5d7b5ce7cb413f9c17418bac15c649916ee4440 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sun, 26 May 2024 16:55:15 -0700 Subject: [PATCH 161/412] Bump flakes, use hyprland?submodules=1 --- flake.lock | 200 +++++++++++++++++++++++++++++++---------------------- flake.nix | 6 +- 2 files changed, 118 insertions(+), 88 deletions(-) diff --git a/flake.lock b/flake.lock index 4b58270..91b1ba0 100644 --- a/flake.lock +++ b/flake.lock @@ -3,16 +3,14 @@ "aagl": { "inputs": { "flake-compat": "flake-compat", - "nixpkgs": [ - "nixpkgs-stable" - ] + "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1712185015, - "narHash": "sha256-mL3VSJRkyDJbMh/QqUeOhGOsEOTS7Jw9Tqw4fM+VjB4=", + "lastModified": 1716664326, + "narHash": "sha256-L7MeDg9Q6Si2Rwxe++BoNdldX9Os/DzqoqGDJod0qyk=", "owner": "ezKEa", "repo": "aagl-gtk-on-nix", - "rev": "1dbb1c233a249e8cbc03907e965bd2a48d880262", + "rev": "347a50c615c45b3c89c41e774736861b7b41cf71", "type": "github" }, "original": { @@ -53,11 +51,11 @@ ] }, "locked": { - "lastModified": 1712434681, - "narHash": "sha256-qwmR2p1oc48Bj7gUDvb1oGL19Rjs2PmEmk4ChV01A5o=", + "lastModified": 1716576411, + "narHash": "sha256-FIN1wMoyePBTtibCbaeJaoKNLuAYIGwLCWAYC1DJanw=", "owner": "hyprwm", "repo": "hyprcursor", - "rev": "818d8c4b69e0997483d60b75f701fe14b561a7a3", + "rev": "57298fc4f13c807e50ada2c986a3114b7fc2e621", "type": "github" }, "original": { @@ -69,37 +67,38 @@ "hyprland": { "inputs": { "hyprcursor": "hyprcursor", - "hyprland-protocols": "hyprland-protocols", "hyprlang": "hyprlang", - "nixpkgs": [ - "nixpkgs" - ], + "hyprwayland-scanner": "hyprwayland-scanner", + "nixpkgs": "nixpkgs_2", "systems": "systems", - "wlroots": "wlroots", "xdph": "xdph" }, "locked": { - "lastModified": 1713050186, - "narHash": "sha256-AKdzVa0Zz5PQ1ptQgD0jj8J+UZUW9OeKGZ0mNVnkyI4=", - "owner": "hyprwm", - "repo": "Hyprland", - "rev": "0634aaeac6cca12e4f72174c431c2db9da9c0072", - "type": "github" + "lastModified": 1716669967, + "narHash": "sha256-wq91XpwR0tv7e7KwSp0qzvu31EMssznl8DzbNy4M4Hk=", + "ref": "refs/heads/main", + "rev": "553232a3e4c112c8511309e6b685cb614895e714", + "revCount": 4743, + "submodules": true, + "type": "git", + "url": "https://github.com/hyprwm/Hyprland" }, "original": { - "owner": "hyprwm", - "repo": "Hyprland", - "type": "github" + "submodules": true, + "type": "git", + "url": "https://github.com/hyprwm/Hyprland" } }, "hyprland-protocols": { "inputs": { "nixpkgs": [ "hyprland", + "xdph", "nixpkgs" ], "systems": [ "hyprland", + "xdph", "systems" ] }, @@ -129,11 +128,11 @@ ] }, "locked": { - "lastModified": 1711671891, - "narHash": "sha256-C/Wwsy/RLxHP1axFFl+AnwJRWfd8gxDKKoa8nt8Qk3c=", + "lastModified": 1716473782, + "narHash": "sha256-+qLn4lsHU6iL3+HTo1gTQ1tWzet8K9h+IfVemzEQZj8=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "c1402612146ba06606ebf64963a02bc1efe11e74", + "rev": "87d5d984109c839482b88b4795db073eb9ed446f", "type": "github" }, "original": { @@ -142,43 +141,54 @@ "type": "github" } }, + "hyprwayland-scanner": { + "inputs": { + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1716058375, + "narHash": "sha256-CwjWoVnBZE5SBpRx9dgSQGCr4Goxyfcyv3zZbOhVqzk=", + "owner": "hyprwm", + "repo": "hyprwayland-scanner", + "rev": "3afed4364790aebe0426077631af1e164a9650cc", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprwayland-scanner", + "type": "github" + } + }, "nixpkgs": { "locked": { - "lastModified": 1712791164, - "narHash": "sha256-3sbWO1mbpWsLepZGbWaMovSO7ndZeFqDSdX0hZ9nVyw=", - "owner": "NixOS", + "lastModified": 1716509168, + "narHash": "sha256-4zSIhSRRIoEBwjbPm3YiGtbd8HDWzFxJjw5DYSDy1n8=", + "owner": "nixos", "repo": "nixpkgs", - "rev": "1042fd8b148a9105f3c0aca3a6177fd1d9360ba5", + "rev": "bfb7a882678e518398ce9a31a881538679f6f092", "type": "github" }, "original": { - "id": "nixpkgs", + "owner": "nixos", "ref": "nixos-unstable", - "type": "indirect" + "repo": "nixpkgs", + "type": "github" } }, "nixpkgs-stable": { "locked": { - "lastModified": 1712867921, - "narHash": "sha256-edTFV4KldkCMdViC/rmpJa7oLIU8SE/S35lh/ukC7bg=", + "lastModified": 1716655032, + "narHash": "sha256-kQ25DAiCGigsNR/Quxm3v+JGXAEXZ8I7RAF4U94bGzE=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "51651a540816273b67bc4dedea2d37d116c5f7fe", - "type": "github" - }, - "original": { - "id": "nixpkgs", - "ref": "nixos-23.11", - "type": "indirect" - } - }, - "nixpkgs-stable_2": { - "locked": { - "lastModified": 1713042715, - "narHash": "sha256-RifMwYuKu5v6x6O65msKDTqKkQ9crGwOB7yr20qMEuE=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "c27f3b6d8e29346af16eecc0e9d54b1071eae27e", + "rev": "59a450646ec8ee0397f5fa54a08573e8240eb91f", "type": "github" }, "original": { @@ -188,28 +198,72 @@ "type": "github" } }, + "nixpkgs_2": { + "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_3": { + "locked": { + "lastModified": 1716509168, + "narHash": "sha256-4zSIhSRRIoEBwjbPm3YiGtbd8HDWzFxJjw5DYSDy1n8=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "bfb7a882678e518398ce9a31a881538679f6f092", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "nixos-unstable", + "type": "indirect" + } + }, + "nixpkgs_4": { + "locked": { + "lastModified": 1716651315, + "narHash": "sha256-iMgzIeedMqf30TXZ439zW3Yvng1Xm9QTGO+ZwG1IWSw=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c5187508b11177ef4278edf19616f44f21cc8c69", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, "root": { "inputs": { "aagl": "aagl", "hyprland": "hyprland", - "nixpkgs": "nixpkgs", - "nixpkgs-stable": "nixpkgs-stable", + "nixpkgs": "nixpkgs_3", "sops-nix": "sops-nix" } }, "sops-nix": { "inputs": { - "nixpkgs": [ - "nixpkgs" - ], - "nixpkgs-stable": "nixpkgs-stable_2" + "nixpkgs": "nixpkgs_4", + "nixpkgs-stable": "nixpkgs-stable" }, "locked": { - "lastModified": 1713066950, - "narHash": "sha256-ZaefFyvt5369XdjzSw43NhfbPM9MN5b9YXhzx4lFIRc=", + "lastModified": 1716692524, + "narHash": "sha256-sALodaA7Zkp/JD6ehgwc0UCBrSBfB4cX66uFGTsqeFU=", "owner": "Mic92", "repo": "sops-nix", - "rev": "226062b47fe0e2130ba3ee9f4f1c880dc815cf87", + "rev": "962797a8d7f15ed7033031731d0bb77244839960", "type": "github" }, "original": { @@ -233,29 +287,9 @@ "type": "github" } }, - "wlroots": { - "flake": false, - "locked": { - "lastModified": 1712935342, - "narHash": "sha256-zzIbTFNFd/as42jyGx23fil2uBDYYv+8GA5JmRq5y9c=", - "owner": "hyprwm", - "repo": "wlroots-hyprland", - "rev": "62eeffbe233d199f520a5755c344e85f8eab7940", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "wlroots-hyprland", - "rev": "62eeffbe233d199f520a5755c344e85f8eab7940", - "type": "github" - } - }, "xdph": { "inputs": { - "hyprland-protocols": [ - "hyprland", - "hyprland-protocols" - ], + "hyprland-protocols": "hyprland-protocols", "hyprlang": [ "hyprland", "hyprlang" @@ -270,11 +304,11 @@ ] }, "locked": { - "lastModified": 1709299639, - "narHash": "sha256-jYqJM5khksLIbqSxCLUUcqEgI+O2LdlSlcMEBs39CAU=", + "lastModified": 1716290197, + "narHash": "sha256-1u9Exrc7yx9qtES2brDh7/DDZ8w8ap1nboIOAtCgeuM=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "2d2fb547178ec025da643db57d40a971507b82fe", + "rev": "91e48d6acd8a5a611d26f925e51559ab743bc438", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 8fcf762..351047f 100644 --- a/flake.nix +++ b/flake.nix @@ -1,14 +1,10 @@ { inputs = { nixpkgs.url = "nixpkgs/nixos-unstable"; - nixpkgs-stable.url = "nixpkgs/nixos-23.11"; - hyprland.url = "github:hyprwm/Hyprland"; - hyprland.inputs.nixpkgs.follows = "nixpkgs"; + hyprland.url = "git+https://github.com/hyprwm/Hyprland?submodules=1"; sops-nix.url = "github:Mic92/sops-nix"; - sops-nix.inputs.nixpkgs.follows = "nixpkgs"; aagl.url = "github:ezKEa/aagl-gtk-on-nix"; - aagl.inputs.nixpkgs.follows = "nixpkgs-stable"; }; outputs = { self, nixpkgs, ... }@inputs: From f160b56597a89909a6db829ab21b4bcee184be7e Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sun, 26 May 2024 16:55:15 -0700 Subject: [PATCH 162/412] Bump flakes, use hyprland?submodules=1 --- flake.lock | 200 +++++++++++++++++++++++++++++++---------------------- flake.nix | 6 +- 2 files changed, 118 insertions(+), 88 deletions(-) diff --git a/flake.lock b/flake.lock index 4b58270..91b1ba0 100644 --- a/flake.lock +++ b/flake.lock @@ -3,16 +3,14 @@ "aagl": { "inputs": { "flake-compat": "flake-compat", - "nixpkgs": [ - "nixpkgs-stable" - ] + "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1712185015, - "narHash": "sha256-mL3VSJRkyDJbMh/QqUeOhGOsEOTS7Jw9Tqw4fM+VjB4=", + "lastModified": 1716664326, + "narHash": "sha256-L7MeDg9Q6Si2Rwxe++BoNdldX9Os/DzqoqGDJod0qyk=", "owner": "ezKEa", "repo": "aagl-gtk-on-nix", - "rev": "1dbb1c233a249e8cbc03907e965bd2a48d880262", + "rev": "347a50c615c45b3c89c41e774736861b7b41cf71", "type": "github" }, "original": { @@ -53,11 +51,11 @@ ] }, "locked": { - "lastModified": 1712434681, - "narHash": "sha256-qwmR2p1oc48Bj7gUDvb1oGL19Rjs2PmEmk4ChV01A5o=", + "lastModified": 1716576411, + "narHash": "sha256-FIN1wMoyePBTtibCbaeJaoKNLuAYIGwLCWAYC1DJanw=", "owner": "hyprwm", "repo": "hyprcursor", - "rev": "818d8c4b69e0997483d60b75f701fe14b561a7a3", + "rev": "57298fc4f13c807e50ada2c986a3114b7fc2e621", "type": "github" }, "original": { @@ -69,37 +67,38 @@ "hyprland": { "inputs": { "hyprcursor": "hyprcursor", - "hyprland-protocols": "hyprland-protocols", "hyprlang": "hyprlang", - "nixpkgs": [ - "nixpkgs" - ], + "hyprwayland-scanner": "hyprwayland-scanner", + "nixpkgs": "nixpkgs_2", "systems": "systems", - "wlroots": "wlroots", "xdph": "xdph" }, "locked": { - "lastModified": 1713050186, - "narHash": "sha256-AKdzVa0Zz5PQ1ptQgD0jj8J+UZUW9OeKGZ0mNVnkyI4=", - "owner": "hyprwm", - "repo": "Hyprland", - "rev": "0634aaeac6cca12e4f72174c431c2db9da9c0072", - "type": "github" + "lastModified": 1716669967, + "narHash": "sha256-wq91XpwR0tv7e7KwSp0qzvu31EMssznl8DzbNy4M4Hk=", + "ref": "refs/heads/main", + "rev": "553232a3e4c112c8511309e6b685cb614895e714", + "revCount": 4743, + "submodules": true, + "type": "git", + "url": "https://github.com/hyprwm/Hyprland" }, "original": { - "owner": "hyprwm", - "repo": "Hyprland", - "type": "github" + "submodules": true, + "type": "git", + "url": "https://github.com/hyprwm/Hyprland" } }, "hyprland-protocols": { "inputs": { "nixpkgs": [ "hyprland", + "xdph", "nixpkgs" ], "systems": [ "hyprland", + "xdph", "systems" ] }, @@ -129,11 +128,11 @@ ] }, "locked": { - "lastModified": 1711671891, - "narHash": "sha256-C/Wwsy/RLxHP1axFFl+AnwJRWfd8gxDKKoa8nt8Qk3c=", + "lastModified": 1716473782, + "narHash": "sha256-+qLn4lsHU6iL3+HTo1gTQ1tWzet8K9h+IfVemzEQZj8=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "c1402612146ba06606ebf64963a02bc1efe11e74", + "rev": "87d5d984109c839482b88b4795db073eb9ed446f", "type": "github" }, "original": { @@ -142,43 +141,54 @@ "type": "github" } }, + "hyprwayland-scanner": { + "inputs": { + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1716058375, + "narHash": "sha256-CwjWoVnBZE5SBpRx9dgSQGCr4Goxyfcyv3zZbOhVqzk=", + "owner": "hyprwm", + "repo": "hyprwayland-scanner", + "rev": "3afed4364790aebe0426077631af1e164a9650cc", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprwayland-scanner", + "type": "github" + } + }, "nixpkgs": { "locked": { - "lastModified": 1712791164, - "narHash": "sha256-3sbWO1mbpWsLepZGbWaMovSO7ndZeFqDSdX0hZ9nVyw=", - "owner": "NixOS", + "lastModified": 1716509168, + "narHash": "sha256-4zSIhSRRIoEBwjbPm3YiGtbd8HDWzFxJjw5DYSDy1n8=", + "owner": "nixos", "repo": "nixpkgs", - "rev": "1042fd8b148a9105f3c0aca3a6177fd1d9360ba5", + "rev": "bfb7a882678e518398ce9a31a881538679f6f092", "type": "github" }, "original": { - "id": "nixpkgs", + "owner": "nixos", "ref": "nixos-unstable", - "type": "indirect" + "repo": "nixpkgs", + "type": "github" } }, "nixpkgs-stable": { "locked": { - "lastModified": 1712867921, - "narHash": "sha256-edTFV4KldkCMdViC/rmpJa7oLIU8SE/S35lh/ukC7bg=", + "lastModified": 1716655032, + "narHash": "sha256-kQ25DAiCGigsNR/Quxm3v+JGXAEXZ8I7RAF4U94bGzE=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "51651a540816273b67bc4dedea2d37d116c5f7fe", - "type": "github" - }, - "original": { - "id": "nixpkgs", - "ref": "nixos-23.11", - "type": "indirect" - } - }, - "nixpkgs-stable_2": { - "locked": { - "lastModified": 1713042715, - "narHash": "sha256-RifMwYuKu5v6x6O65msKDTqKkQ9crGwOB7yr20qMEuE=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "c27f3b6d8e29346af16eecc0e9d54b1071eae27e", + "rev": "59a450646ec8ee0397f5fa54a08573e8240eb91f", "type": "github" }, "original": { @@ -188,28 +198,72 @@ "type": "github" } }, + "nixpkgs_2": { + "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_3": { + "locked": { + "lastModified": 1716509168, + "narHash": "sha256-4zSIhSRRIoEBwjbPm3YiGtbd8HDWzFxJjw5DYSDy1n8=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "bfb7a882678e518398ce9a31a881538679f6f092", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "nixos-unstable", + "type": "indirect" + } + }, + "nixpkgs_4": { + "locked": { + "lastModified": 1716651315, + "narHash": "sha256-iMgzIeedMqf30TXZ439zW3Yvng1Xm9QTGO+ZwG1IWSw=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c5187508b11177ef4278edf19616f44f21cc8c69", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, "root": { "inputs": { "aagl": "aagl", "hyprland": "hyprland", - "nixpkgs": "nixpkgs", - "nixpkgs-stable": "nixpkgs-stable", + "nixpkgs": "nixpkgs_3", "sops-nix": "sops-nix" } }, "sops-nix": { "inputs": { - "nixpkgs": [ - "nixpkgs" - ], - "nixpkgs-stable": "nixpkgs-stable_2" + "nixpkgs": "nixpkgs_4", + "nixpkgs-stable": "nixpkgs-stable" }, "locked": { - "lastModified": 1713066950, - "narHash": "sha256-ZaefFyvt5369XdjzSw43NhfbPM9MN5b9YXhzx4lFIRc=", + "lastModified": 1716692524, + "narHash": "sha256-sALodaA7Zkp/JD6ehgwc0UCBrSBfB4cX66uFGTsqeFU=", "owner": "Mic92", "repo": "sops-nix", - "rev": "226062b47fe0e2130ba3ee9f4f1c880dc815cf87", + "rev": "962797a8d7f15ed7033031731d0bb77244839960", "type": "github" }, "original": { @@ -233,29 +287,9 @@ "type": "github" } }, - "wlroots": { - "flake": false, - "locked": { - "lastModified": 1712935342, - "narHash": "sha256-zzIbTFNFd/as42jyGx23fil2uBDYYv+8GA5JmRq5y9c=", - "owner": "hyprwm", - "repo": "wlroots-hyprland", - "rev": "62eeffbe233d199f520a5755c344e85f8eab7940", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "wlroots-hyprland", - "rev": "62eeffbe233d199f520a5755c344e85f8eab7940", - "type": "github" - } - }, "xdph": { "inputs": { - "hyprland-protocols": [ - "hyprland", - "hyprland-protocols" - ], + "hyprland-protocols": "hyprland-protocols", "hyprlang": [ "hyprland", "hyprlang" @@ -270,11 +304,11 @@ ] }, "locked": { - "lastModified": 1709299639, - "narHash": "sha256-jYqJM5khksLIbqSxCLUUcqEgI+O2LdlSlcMEBs39CAU=", + "lastModified": 1716290197, + "narHash": "sha256-1u9Exrc7yx9qtES2brDh7/DDZ8w8ap1nboIOAtCgeuM=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "2d2fb547178ec025da643db57d40a971507b82fe", + "rev": "91e48d6acd8a5a611d26f925e51559ab743bc438", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 8fcf762..351047f 100644 --- a/flake.nix +++ b/flake.nix @@ -1,14 +1,10 @@ { inputs = { nixpkgs.url = "nixpkgs/nixos-unstable"; - nixpkgs-stable.url = "nixpkgs/nixos-23.11"; - hyprland.url = "github:hyprwm/Hyprland"; - hyprland.inputs.nixpkgs.follows = "nixpkgs"; + hyprland.url = "git+https://github.com/hyprwm/Hyprland?submodules=1"; sops-nix.url = "github:Mic92/sops-nix"; - sops-nix.inputs.nixpkgs.follows = "nixpkgs"; aagl.url = "github:ezKEa/aagl-gtk-on-nix"; - aagl.inputs.nixpkgs.follows = "nixpkgs-stable"; }; outputs = { self, nixpkgs, ... }@inputs: From d82bf1b22b54424732fcc8c28b9987d2cbb82b1d Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sun, 26 May 2024 17:00:36 -0700 Subject: [PATCH 163/412] Onizuka, switch to fish from zsh --- systems/onizuka/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/systems/onizuka/default.nix b/systems/onizuka/default.nix index e7db9f4..15a3956 100644 --- a/systems/onizuka/default.nix +++ b/systems/onizuka/default.nix @@ -21,8 +21,8 @@ hyprland.enable = true; librewolf.enable = true; - zsh.enable = true; - zsh.setDefault = true; + fish.enable = true; + fish.setDefault = true; syncthing.enable = true; virtualbox.enable = true; From 065aed42e3dbe784abf7896b8d9457664c36be36 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sun, 26 May 2024 17:00:36 -0700 Subject: [PATCH 164/412] Onizuka, switch to fish from zsh --- systems/onizuka/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/systems/onizuka/default.nix b/systems/onizuka/default.nix index e7db9f4..15a3956 100644 --- a/systems/onizuka/default.nix +++ b/systems/onizuka/default.nix @@ -21,8 +21,8 @@ hyprland.enable = true; librewolf.enable = true; - zsh.enable = true; - zsh.setDefault = true; + fish.enable = true; + fish.setDefault = true; syncthing.enable = true; virtualbox.enable = true; From 954f44b663c8801b6c844fb45d20b93f61a4b312 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sun, 26 May 2024 17:03:15 -0700 Subject: [PATCH 165/412] Systems, remove unstablePkgs reference --- systems/jibril/default.nix | 1 - systems/onizuka/default.nix | 1 - 2 files changed, 2 deletions(-) diff --git a/systems/jibril/default.nix b/systems/jibril/default.nix index 8024813..5a72991 100644 --- a/systems/jibril/default.nix +++ b/systems/jibril/default.nix @@ -5,7 +5,6 @@ ./hardware.nix ]; networking.hostName = "jibril"; - nix.package = pkgs.nixUnstable; nixpkgs.config.allowUnfree = true; system.stateVersion = "23.05"; diff --git a/systems/onizuka/default.nix b/systems/onizuka/default.nix index 15a3956..7741830 100644 --- a/systems/onizuka/default.nix +++ b/systems/onizuka/default.nix @@ -5,7 +5,6 @@ ./hardware.nix ]; networking.hostName = "onizuka"; - nix.package = pkgs.nixUnstable; nixpkgs.config.allowUnfree = true; system.stateVersion = "23.05"; From 2b8a16b91fe711d01503ebaf881a249c86973933 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sun, 26 May 2024 17:03:15 -0700 Subject: [PATCH 166/412] Systems, remove unstablePkgs reference --- systems/jibril/default.nix | 1 - systems/onizuka/default.nix | 1 - 2 files changed, 2 deletions(-) diff --git a/systems/jibril/default.nix b/systems/jibril/default.nix index 8024813..5a72991 100644 --- a/systems/jibril/default.nix +++ b/systems/jibril/default.nix @@ -5,7 +5,6 @@ ./hardware.nix ]; networking.hostName = "jibril"; - nix.package = pkgs.nixUnstable; nixpkgs.config.allowUnfree = true; system.stateVersion = "23.05"; diff --git a/systems/onizuka/default.nix b/systems/onizuka/default.nix index 15a3956..7741830 100644 --- a/systems/onizuka/default.nix +++ b/systems/onizuka/default.nix @@ -5,7 +5,6 @@ ./hardware.nix ]; networking.hostName = "onizuka"; - nix.package = pkgs.nixUnstable; nixpkgs.config.allowUnfree = true; system.stateVersion = "23.05"; From 172da40e6133c2df9ac499f411b4ffc6b9ef61b8 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sun, 26 May 2024 17:05:34 -0700 Subject: [PATCH 167/412] Tablet, add opentabletdrivers --- nixosModules/services/graphics/default.nix | 1 + .../services/graphics/tabletdrivers/default.nix | 15 +++++++++++++++ 2 files changed, 16 insertions(+) create mode 100644 nixosModules/services/graphics/tabletdrivers/default.nix diff --git a/nixosModules/services/graphics/default.nix b/nixosModules/services/graphics/default.nix index 76e68bf..ec5ce31 100644 --- a/nixosModules/services/graphics/default.nix +++ b/nixosModules/services/graphics/default.nix @@ -5,5 +5,6 @@ ./display_manager ./nvidia ./wayland_compositors + ./tabletdrivers ]; } diff --git a/nixosModules/services/graphics/tabletdrivers/default.nix b/nixosModules/services/graphics/tabletdrivers/default.nix new file mode 100644 index 0000000..6afecf7 --- /dev/null +++ b/nixosModules/services/graphics/tabletdrivers/default.nix @@ -0,0 +1,15 @@ +{ config, pkgs, lib, ... }: + +{ + options = { + tablet.enable = lib.mkEnableOption + "Enables tablet support"; + }; + + config = lib.mkIf config.tablet.enable { + hardware.opentabletdriver.enable = true; + environment.systemPackages = with pkgs; [ + opentabletdriver + ]; + }; +} From b68dbc1aa38bde535f50847140dba12cc91585e1 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sun, 26 May 2024 17:05:34 -0700 Subject: [PATCH 168/412] Tablet, add opentabletdrivers --- nixosModules/services/graphics/default.nix | 1 + .../services/graphics/tabletdrivers/default.nix | 15 +++++++++++++++ 2 files changed, 16 insertions(+) create mode 100644 nixosModules/services/graphics/tabletdrivers/default.nix diff --git a/nixosModules/services/graphics/default.nix b/nixosModules/services/graphics/default.nix index 76e68bf..ec5ce31 100644 --- a/nixosModules/services/graphics/default.nix +++ b/nixosModules/services/graphics/default.nix @@ -5,5 +5,6 @@ ./display_manager ./nvidia ./wayland_compositors + ./tabletdrivers ]; } diff --git a/nixosModules/services/graphics/tabletdrivers/default.nix b/nixosModules/services/graphics/tabletdrivers/default.nix new file mode 100644 index 0000000..6afecf7 --- /dev/null +++ b/nixosModules/services/graphics/tabletdrivers/default.nix @@ -0,0 +1,15 @@ +{ config, pkgs, lib, ... }: + +{ + options = { + tablet.enable = lib.mkEnableOption + "Enables tablet support"; + }; + + config = lib.mkIf config.tablet.enable { + hardware.opentabletdriver.enable = true; + environment.systemPackages = with pkgs; [ + opentabletdriver + ]; + }; +} From d8eec90dc1cec31a2d490caf4fc0b2055a59bf74 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sun, 26 May 2024 17:07:00 -0700 Subject: [PATCH 169/412] Onizuka, add tablet support --- systems/onizuka/default.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/systems/onizuka/default.nix b/systems/onizuka/default.nix index 7741830..e9e0589 100644 --- a/systems/onizuka/default.nix +++ b/systems/onizuka/default.nix @@ -11,6 +11,7 @@ nvidia.enable = true; pipewire.enable = true; polkit.enable = true; + tablet.enable = true; user.name = "pan"; user.timezone = "America/Los_Angeles"; From 83b6b5b887ed11bc2d4046285b5b5ca1cf8ad9fe Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sun, 26 May 2024 17:07:00 -0700 Subject: [PATCH 170/412] Onizuka, add tablet support --- systems/onizuka/default.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/systems/onizuka/default.nix b/systems/onizuka/default.nix index 7741830..e9e0589 100644 --- a/systems/onizuka/default.nix +++ b/systems/onizuka/default.nix @@ -11,6 +11,7 @@ nvidia.enable = true; pipewire.enable = true; polkit.enable = true; + tablet.enable = true; user.name = "pan"; user.timezone = "America/Los_Angeles"; From 8c02590a4bcb2aa3041a56fdbf5e57ee4fca7188 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sun, 26 May 2024 17:12:00 -0700 Subject: [PATCH 171/412] Onizuka, remove virtualbox --- systems/onizuka/default.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/systems/onizuka/default.nix b/systems/onizuka/default.nix index e9e0589..d844fa1 100644 --- a/systems/onizuka/default.nix +++ b/systems/onizuka/default.nix @@ -24,7 +24,6 @@ fish.enable = true; fish.setDefault = true; syncthing.enable = true; - virtualbox.enable = true; steam.enable = true; steam.gamemode.enable = true; From 3927fd8cfcb134ce1780c2067365a853e196fe09 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sun, 26 May 2024 17:12:00 -0700 Subject: [PATCH 172/412] Onizuka, remove virtualbox --- systems/onizuka/default.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/systems/onizuka/default.nix b/systems/onizuka/default.nix index e9e0589..d844fa1 100644 --- a/systems/onizuka/default.nix +++ b/systems/onizuka/default.nix @@ -24,7 +24,6 @@ fish.enable = true; fish.setDefault = true; syncthing.enable = true; - virtualbox.enable = true; steam.enable = true; steam.gamemode.enable = true; From e0121722982a932efdd96186da2fca7a712afd36 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sun, 26 May 2024 17:25:02 -0700 Subject: [PATCH 173/412] Nvidia, switch to beta, enable fbdev --- nixosModules/services/graphics/nvidia/default.nix | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/nixosModules/services/graphics/nvidia/default.nix b/nixosModules/services/graphics/nvidia/default.nix index ecfa100..6747bbc 100644 --- a/nixosModules/services/graphics/nvidia/default.nix +++ b/nixosModules/services/graphics/nvidia/default.nix @@ -22,9 +22,11 @@ hardware.nvidia = { modesetting.enable = true; - package = config.boot.kernelPackages.nvidiaPackages.stable; + package = config.boot.kernelPackages.nvidiaPackages.beta; }; + boot.kernelParams = [ "nvidia_drm.fbdev=1" ]; + environment.systemPackages = with pkgs; [ nvidia-vaapi-driver ]; From ee770c4db97f2eaa491af5a47afff871005da4aa Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sun, 26 May 2024 17:25:02 -0700 Subject: [PATCH 174/412] Nvidia, switch to beta, enable fbdev --- nixosModules/services/graphics/nvidia/default.nix | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/nixosModules/services/graphics/nvidia/default.nix b/nixosModules/services/graphics/nvidia/default.nix index ecfa100..6747bbc 100644 --- a/nixosModules/services/graphics/nvidia/default.nix +++ b/nixosModules/services/graphics/nvidia/default.nix @@ -22,9 +22,11 @@ hardware.nvidia = { modesetting.enable = true; - package = config.boot.kernelPackages.nvidiaPackages.stable; + package = config.boot.kernelPackages.nvidiaPackages.beta; }; + boot.kernelParams = [ "nvidia_drm.fbdev=1" ]; + environment.systemPackages = with pkgs; [ nvidia-vaapi-driver ]; From 1fdf2b9462fd99cde410fa983903a88cf2fea537 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sun, 26 May 2024 17:42:47 -0700 Subject: [PATCH 175/412] Bump flakes, use hyprland?submodules=1 --- flake.lock | 114 ++++++++++++++++++++++++++++------------------------- flake.nix | 2 +- 2 files changed, 62 insertions(+), 54 deletions(-) diff --git a/flake.lock b/flake.lock index a6c7c56..d23225b 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1713301451, - "narHash": "sha256-LzYVqEukjOJjm4HGFe6rtHBiuJxAyPqd2MY1k5ci9QU=", + "lastModified": 1715703984, + "narHash": "sha256-0BZkMui6aCqswMCouvp0G90tAxDOxVnxTvG6TDZsDaI=", "owner": "Aylur", "repo": "ags", - "rev": "33bcaf34d5277031ecb97047fb8ddd44abd8d80e", + "rev": "11150225e62462bcd431d1e55185e810190a730a", "type": "github" }, "original": { @@ -27,11 +27,11 @@ ] }, "locked": { - "lastModified": 1713391096, - "narHash": "sha256-5xkzsy+ILgQlmvDDipL5xqAehnjWBenAQXV4/NLg2dE=", + "lastModified": 1716736760, + "narHash": "sha256-h3RmnNknKYtVA+EvUSra6QAwfZjC2q1G8YA7W0gat8Y=", "owner": "nix-community", "repo": "home-manager", - "rev": "f46814ec7cbef9c2aef18ca1cbe89f2bb1e8c394", + "rev": "5d151429e1e79107acf6d06dcc5ace4e642ec239", "type": "github" }, "original": { @@ -56,11 +56,11 @@ ] }, "locked": { - "lastModified": 1713214463, - "narHash": "sha256-zAOOjqHAbccCRgJSuvTCA0FNLqKswN63LgVo43R7pxw=", + "lastModified": 1716576411, + "narHash": "sha256-FIN1wMoyePBTtibCbaeJaoKNLuAYIGwLCWAYC1DJanw=", "owner": "hyprwm", "repo": "hyprcursor", - "rev": "0a53b9957f0b17f1a0036b25198f569969ad43a0", + "rev": "57298fc4f13c807e50ada2c986a3114b7fc2e621", "type": "github" }, "original": { @@ -72,27 +72,28 @@ "hyprland": { "inputs": { "hyprcursor": "hyprcursor", - "hyprland-protocols": "hyprland-protocols", "hyprlang": "hyprlang", + "hyprwayland-scanner": "hyprwayland-scanner", "nixpkgs": [ "nixpkgs" ], "systems": "systems", - "wlroots": "wlroots", "xdph": "xdph" }, "locked": { - "lastModified": 1713376910, - "narHash": "sha256-6cvw+CxacXe+l8/mZ1+ih21vLHvhIC+Erc7LQF0dyrQ=", - "owner": "hyprwm", - "repo": "Hyprland", - "rev": "82222342f10a7eff0ec9be972153e740d0f95213", - "type": "github" + "lastModified": 1716669967, + "narHash": "sha256-wq91XpwR0tv7e7KwSp0qzvu31EMssznl8DzbNy4M4Hk=", + "ref": "refs/heads/main", + "rev": "553232a3e4c112c8511309e6b685cb614895e714", + "revCount": 4743, + "submodules": true, + "type": "git", + "url": "https://github.com/hyprwm/Hyprland" }, "original": { - "owner": "hyprwm", - "repo": "Hyprland", - "type": "github" + "submodules": true, + "type": "git", + "url": "https://github.com/hyprwm/Hyprland" } }, "hyprland-contrib": { @@ -102,11 +103,11 @@ ] }, "locked": { - "lastModified": 1712505318, - "narHash": "sha256-fzlBLhXUN6y7mzEtcGNRDXxFakBEfaj4Bmj5PuoCNaM=", + "lastModified": 1716228712, + "narHash": "sha256-y+LOXuSRMfkR2Vfwl5K2NVrszi1h5MJpML+msLnVS8U=", "owner": "hyprwm", "repo": "contrib", - "rev": "5870244b592c22558b658dbaf94f9e41afb0316f", + "rev": "33b38358559054d316eb605ccb733980dfa7dc63", "type": "github" }, "original": { @@ -119,10 +120,12 @@ "inputs": { "nixpkgs": [ "hyprland", + "xdph", "nixpkgs" ], "systems": [ "hyprland", + "xdph", "systems" ] }, @@ -152,11 +155,11 @@ ] }, "locked": { - "lastModified": 1713121246, - "narHash": "sha256-502X0Q0fhN6tJK7iEUA8CghONKSatW/Mqj4Wappd++0=", + "lastModified": 1716473782, + "narHash": "sha256-+qLn4lsHU6iL3+HTo1gTQ1tWzet8K9h+IfVemzEQZj8=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "78fcaa27ae9e1d782faa3ff06c8ea55ddce63706", + "rev": "87d5d984109c839482b88b4795db073eb9ed446f", "type": "github" }, "original": { @@ -165,13 +168,38 @@ "type": "github" } }, + "hyprwayland-scanner": { + "inputs": { + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1716058375, + "narHash": "sha256-CwjWoVnBZE5SBpRx9dgSQGCr4Goxyfcyv3zZbOhVqzk=", + "owner": "hyprwm", + "repo": "hyprwayland-scanner", + "rev": "3afed4364790aebe0426077631af1e164a9650cc", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprwayland-scanner", + "type": "github" + } + }, "nixpkgs": { "locked": { - "lastModified": 1713248628, - "narHash": "sha256-NLznXB5AOnniUtZsyy/aPWOk8ussTuePp2acb9U+ISA=", + "lastModified": 1716509168, + "narHash": "sha256-4zSIhSRRIoEBwjbPm3YiGtbd8HDWzFxJjw5DYSDy1n8=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "5672bc9dbf9d88246ddab5ac454e82318d094bb8", + "rev": "bfb7a882678e518398ce9a31a881538679f6f092", "type": "github" }, "original": { @@ -204,29 +232,9 @@ "type": "github" } }, - "wlroots": { - "flake": false, - "locked": { - "lastModified": 1713124002, - "narHash": "sha256-vPeZCY+sdiGsz4fl3AVVujfyZyQBz6+vZdkUE4hQ+HI=", - "owner": "hyprwm", - "repo": "wlroots-hyprland", - "rev": "611a4f24cd2384378f6e500253983107c6656c64", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "wlroots-hyprland", - "rev": "611a4f24cd2384378f6e500253983107c6656c64", - "type": "github" - } - }, "xdph": { "inputs": { - "hyprland-protocols": [ - "hyprland", - "hyprland-protocols" - ], + "hyprland-protocols": "hyprland-protocols", "hyprlang": [ "hyprland", "hyprlang" @@ -241,11 +249,11 @@ ] }, "locked": { - "lastModified": 1713214484, - "narHash": "sha256-h1bSIsDuPk1FGgvTuSHJyiU2Glu7oAyoPMJutKZmLQ8=", + "lastModified": 1716290197, + "narHash": "sha256-1u9Exrc7yx9qtES2brDh7/DDZ8w8ap1nboIOAtCgeuM=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "bb44921534a9cee9635304fdb876c1b3ec3a8f61", + "rev": "91e48d6acd8a5a611d26f925e51559ab743bc438", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index af16e17..b7142f0 100644 --- a/flake.nix +++ b/flake.nix @@ -7,7 +7,7 @@ home-manager.url = "github:nix-community/home-manager"; home-manager.inputs.nixpkgs.follows = "nixpkgs"; - hyprland.url = "github:hyprwm/Hyprland"; + hyprland.url = "git+https://github.com/hyprwm/Hyprland?submodules=1"; hyprland.inputs.nixpkgs.follows = "nixpkgs"; hyprland-contrib.url = "github:hyprwm/contrib"; From 1a325049ae5ec0bf91ff7ba914012865e8396a40 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sun, 26 May 2024 17:42:47 -0700 Subject: [PATCH 176/412] Bump flakes, use hyprland?submodules=1 --- flake.lock | 114 ++++++++++++++++++++++++++++------------------------- flake.nix | 2 +- 2 files changed, 62 insertions(+), 54 deletions(-) diff --git a/flake.lock b/flake.lock index a6c7c56..d23225b 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1713301451, - "narHash": "sha256-LzYVqEukjOJjm4HGFe6rtHBiuJxAyPqd2MY1k5ci9QU=", + "lastModified": 1715703984, + "narHash": "sha256-0BZkMui6aCqswMCouvp0G90tAxDOxVnxTvG6TDZsDaI=", "owner": "Aylur", "repo": "ags", - "rev": "33bcaf34d5277031ecb97047fb8ddd44abd8d80e", + "rev": "11150225e62462bcd431d1e55185e810190a730a", "type": "github" }, "original": { @@ -27,11 +27,11 @@ ] }, "locked": { - "lastModified": 1713391096, - "narHash": "sha256-5xkzsy+ILgQlmvDDipL5xqAehnjWBenAQXV4/NLg2dE=", + "lastModified": 1716736760, + "narHash": "sha256-h3RmnNknKYtVA+EvUSra6QAwfZjC2q1G8YA7W0gat8Y=", "owner": "nix-community", "repo": "home-manager", - "rev": "f46814ec7cbef9c2aef18ca1cbe89f2bb1e8c394", + "rev": "5d151429e1e79107acf6d06dcc5ace4e642ec239", "type": "github" }, "original": { @@ -56,11 +56,11 @@ ] }, "locked": { - "lastModified": 1713214463, - "narHash": "sha256-zAOOjqHAbccCRgJSuvTCA0FNLqKswN63LgVo43R7pxw=", + "lastModified": 1716576411, + "narHash": "sha256-FIN1wMoyePBTtibCbaeJaoKNLuAYIGwLCWAYC1DJanw=", "owner": "hyprwm", "repo": "hyprcursor", - "rev": "0a53b9957f0b17f1a0036b25198f569969ad43a0", + "rev": "57298fc4f13c807e50ada2c986a3114b7fc2e621", "type": "github" }, "original": { @@ -72,27 +72,28 @@ "hyprland": { "inputs": { "hyprcursor": "hyprcursor", - "hyprland-protocols": "hyprland-protocols", "hyprlang": "hyprlang", + "hyprwayland-scanner": "hyprwayland-scanner", "nixpkgs": [ "nixpkgs" ], "systems": "systems", - "wlroots": "wlroots", "xdph": "xdph" }, "locked": { - "lastModified": 1713376910, - "narHash": "sha256-6cvw+CxacXe+l8/mZ1+ih21vLHvhIC+Erc7LQF0dyrQ=", - "owner": "hyprwm", - "repo": "Hyprland", - "rev": "82222342f10a7eff0ec9be972153e740d0f95213", - "type": "github" + "lastModified": 1716669967, + "narHash": "sha256-wq91XpwR0tv7e7KwSp0qzvu31EMssznl8DzbNy4M4Hk=", + "ref": "refs/heads/main", + "rev": "553232a3e4c112c8511309e6b685cb614895e714", + "revCount": 4743, + "submodules": true, + "type": "git", + "url": "https://github.com/hyprwm/Hyprland" }, "original": { - "owner": "hyprwm", - "repo": "Hyprland", - "type": "github" + "submodules": true, + "type": "git", + "url": "https://github.com/hyprwm/Hyprland" } }, "hyprland-contrib": { @@ -102,11 +103,11 @@ ] }, "locked": { - "lastModified": 1712505318, - "narHash": "sha256-fzlBLhXUN6y7mzEtcGNRDXxFakBEfaj4Bmj5PuoCNaM=", + "lastModified": 1716228712, + "narHash": "sha256-y+LOXuSRMfkR2Vfwl5K2NVrszi1h5MJpML+msLnVS8U=", "owner": "hyprwm", "repo": "contrib", - "rev": "5870244b592c22558b658dbaf94f9e41afb0316f", + "rev": "33b38358559054d316eb605ccb733980dfa7dc63", "type": "github" }, "original": { @@ -119,10 +120,12 @@ "inputs": { "nixpkgs": [ "hyprland", + "xdph", "nixpkgs" ], "systems": [ "hyprland", + "xdph", "systems" ] }, @@ -152,11 +155,11 @@ ] }, "locked": { - "lastModified": 1713121246, - "narHash": "sha256-502X0Q0fhN6tJK7iEUA8CghONKSatW/Mqj4Wappd++0=", + "lastModified": 1716473782, + "narHash": "sha256-+qLn4lsHU6iL3+HTo1gTQ1tWzet8K9h+IfVemzEQZj8=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "78fcaa27ae9e1d782faa3ff06c8ea55ddce63706", + "rev": "87d5d984109c839482b88b4795db073eb9ed446f", "type": "github" }, "original": { @@ -165,13 +168,38 @@ "type": "github" } }, + "hyprwayland-scanner": { + "inputs": { + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1716058375, + "narHash": "sha256-CwjWoVnBZE5SBpRx9dgSQGCr4Goxyfcyv3zZbOhVqzk=", + "owner": "hyprwm", + "repo": "hyprwayland-scanner", + "rev": "3afed4364790aebe0426077631af1e164a9650cc", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprwayland-scanner", + "type": "github" + } + }, "nixpkgs": { "locked": { - "lastModified": 1713248628, - "narHash": "sha256-NLznXB5AOnniUtZsyy/aPWOk8ussTuePp2acb9U+ISA=", + "lastModified": 1716509168, + "narHash": "sha256-4zSIhSRRIoEBwjbPm3YiGtbd8HDWzFxJjw5DYSDy1n8=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "5672bc9dbf9d88246ddab5ac454e82318d094bb8", + "rev": "bfb7a882678e518398ce9a31a881538679f6f092", "type": "github" }, "original": { @@ -204,29 +232,9 @@ "type": "github" } }, - "wlroots": { - "flake": false, - "locked": { - "lastModified": 1713124002, - "narHash": "sha256-vPeZCY+sdiGsz4fl3AVVujfyZyQBz6+vZdkUE4hQ+HI=", - "owner": "hyprwm", - "repo": "wlroots-hyprland", - "rev": "611a4f24cd2384378f6e500253983107c6656c64", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "wlroots-hyprland", - "rev": "611a4f24cd2384378f6e500253983107c6656c64", - "type": "github" - } - }, "xdph": { "inputs": { - "hyprland-protocols": [ - "hyprland", - "hyprland-protocols" - ], + "hyprland-protocols": "hyprland-protocols", "hyprlang": [ "hyprland", "hyprlang" @@ -241,11 +249,11 @@ ] }, "locked": { - "lastModified": 1713214484, - "narHash": "sha256-h1bSIsDuPk1FGgvTuSHJyiU2Glu7oAyoPMJutKZmLQ8=", + "lastModified": 1716290197, + "narHash": "sha256-1u9Exrc7yx9qtES2brDh7/DDZ8w8ap1nboIOAtCgeuM=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "bb44921534a9cee9635304fdb876c1b3ec3a8f61", + "rev": "91e48d6acd8a5a611d26f925e51559ab743bc438", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index af16e17..b7142f0 100644 --- a/flake.nix +++ b/flake.nix @@ -7,7 +7,7 @@ home-manager.url = "github:nix-community/home-manager"; home-manager.inputs.nixpkgs.follows = "nixpkgs"; - hyprland.url = "github:hyprwm/Hyprland"; + hyprland.url = "git+https://github.com/hyprwm/Hyprland?submodules=1"; hyprland.inputs.nixpkgs.follows = "nixpkgs"; hyprland-contrib.url = "github:hyprwm/contrib"; From 68eb6fe3808ffff02186f0fdfb9d90903425a461 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 27 May 2024 01:55:38 -0700 Subject: [PATCH 177/412] Kitty, remove yes/no prompt on close --- hmModules/apps/terminal-emulators/kitty/default.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/hmModules/apps/terminal-emulators/kitty/default.nix b/hmModules/apps/terminal-emulators/kitty/default.nix index 6195726..b4ae35a 100644 --- a/hmModules/apps/terminal-emulators/kitty/default.nix +++ b/hmModules/apps/terminal-emulators/kitty/default.nix @@ -14,6 +14,7 @@ font_family = config.kitty.font; font_size = config.kitty.font_size; enable_audio_bell = "no"; + confirm_os_window_close = 0; }; }; }; From d5103a2cc90f93d1a16c5dc06c6edc20f5485cd8 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 27 May 2024 01:55:38 -0700 Subject: [PATCH 178/412] Kitty, remove yes/no prompt on close --- hmModules/apps/terminal-emulators/kitty/default.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/hmModules/apps/terminal-emulators/kitty/default.nix b/hmModules/apps/terminal-emulators/kitty/default.nix index 6195726..b4ae35a 100644 --- a/hmModules/apps/terminal-emulators/kitty/default.nix +++ b/hmModules/apps/terminal-emulators/kitty/default.nix @@ -14,6 +14,7 @@ font_family = config.kitty.font; font_size = config.kitty.font_size; enable_audio_bell = "no"; + confirm_os_window_close = 0; }; }; }; From eb5a9f8d1d7c21d83363930a436c902d4e2b6855 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 27 May 2024 01:55:38 -0700 Subject: [PATCH 179/412] Neovim, filetype to string from boolean --- hmModules/apps/neovim/options.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hmModules/apps/neovim/options.lua b/hmModules/apps/neovim/options.lua index 9043756..dfa4906 100644 --- a/hmModules/apps/neovim/options.lua +++ b/hmModules/apps/neovim/options.lua @@ -2,7 +2,7 @@ vim.g.mapleader = ' ' vim.g.maplocalleader = ' ' vim.opt.list = true -vim.bo.filetype = true +vim.bo.filetype = "on" vim.opt.updatetime = 300 -- Indentations From 3fc9d9fb0857bdbef6db800e4dc66d183a1e89c1 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 27 May 2024 01:55:38 -0700 Subject: [PATCH 180/412] Neovim, filetype to string from boolean --- hmModules/apps/neovim/options.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hmModules/apps/neovim/options.lua b/hmModules/apps/neovim/options.lua index 9043756..dfa4906 100644 --- a/hmModules/apps/neovim/options.lua +++ b/hmModules/apps/neovim/options.lua @@ -2,7 +2,7 @@ vim.g.mapleader = ' ' vim.g.maplocalleader = ' ' vim.opt.list = true -vim.bo.filetype = true +vim.bo.filetype = "on" vim.opt.updatetime = 300 -- Indentations From 3057ff1352b8b4f517b851ce385b486e30c7cace Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 27 May 2024 01:55:38 -0700 Subject: [PATCH 181/412] Hypr, Update settings for 0.40.0 Update refresh rate now that Nvidia Driver 555 is available Remove Cursor environment variable (no longer needed) Explicitly set which graphics card to use Add extra environment variable because everyone says to :))) --- hmModules/apps/hypr/nvidia.conf | 3 ++- hmModules/apps/hypr/settings.conf | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/hmModules/apps/hypr/nvidia.conf b/hmModules/apps/hypr/nvidia.conf index 1271144..0e00cc7 100644 --- a/hmModules/apps/hypr/nvidia.conf +++ b/hmModules/apps/hypr/nvidia.conf @@ -3,4 +3,5 @@ env = LIBVA_DRIVER_NAME,nvidia env = XDG_SESSION_TYPE,wayland env = GBM_BACKEND,nvidia-drm env = __GLX_VENDOR_LIBRARY_NAME,nvidia -env = WLR_NO_HARDWARE_CURSORS,1 +env = WLR_RENDERER_ALLOW_SOFTWARE,1 +env = WLR_DRM_DEVICES,/dev/dri/card1 diff --git a/hmModules/apps/hypr/settings.conf b/hmModules/apps/hypr/settings.conf index ca95da9..bc2848c 100644 --- a/hmModules/apps/hypr/settings.conf +++ b/hmModules/apps/hypr/settings.conf @@ -1,5 +1,5 @@ # Monitor Settings -monitor=DP-2,2560x1440@60,0x0,1 +monitor=DP-2,2560x1440@144,0x0,1 monitor=DP-1,2560x1440@144,-2560x0,1 monitor=HDMI-A-1,disable From d7854326b2e2ad1749ab9a43f50fb9be2499ddf3 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 27 May 2024 01:55:38 -0700 Subject: [PATCH 182/412] Hypr, Update settings for 0.40.0 Update refresh rate now that Nvidia Driver 555 is available Remove Cursor environment variable (no longer needed) Explicitly set which graphics card to use Add extra environment variable because everyone says to :))) --- hmModules/apps/hypr/nvidia.conf | 3 ++- hmModules/apps/hypr/settings.conf | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/hmModules/apps/hypr/nvidia.conf b/hmModules/apps/hypr/nvidia.conf index 1271144..0e00cc7 100644 --- a/hmModules/apps/hypr/nvidia.conf +++ b/hmModules/apps/hypr/nvidia.conf @@ -3,4 +3,5 @@ env = LIBVA_DRIVER_NAME,nvidia env = XDG_SESSION_TYPE,wayland env = GBM_BACKEND,nvidia-drm env = __GLX_VENDOR_LIBRARY_NAME,nvidia -env = WLR_NO_HARDWARE_CURSORS,1 +env = WLR_RENDERER_ALLOW_SOFTWARE,1 +env = WLR_DRM_DEVICES,/dev/dri/card1 diff --git a/hmModules/apps/hypr/settings.conf b/hmModules/apps/hypr/settings.conf index ca95da9..bc2848c 100644 --- a/hmModules/apps/hypr/settings.conf +++ b/hmModules/apps/hypr/settings.conf @@ -1,5 +1,5 @@ # Monitor Settings -monitor=DP-2,2560x1440@60,0x0,1 +monitor=DP-2,2560x1440@144,0x0,1 monitor=DP-1,2560x1440@144,-2560x0,1 monitor=HDMI-A-1,disable From 26a879aa3aa81c717805b2bc2e0c0e802c3e9ed0 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 27 May 2024 01:55:38 -0700 Subject: [PATCH 183/412] Pan, add gnucash for financial management --- systems/pan/default.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/systems/pan/default.nix b/systems/pan/default.nix index ebe826b..5b5fa8c 100644 --- a/systems/pan/default.nix +++ b/systems/pan/default.nix @@ -71,5 +71,6 @@ ani-cli # Easy anime player lutgen # LUT generator prismlauncher # Minecraft launcher + gnucash # Personal Finance Manager ]; } From 6ae7c1ff65d1740f37f69e3827f61a01deb94411 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 27 May 2024 01:55:38 -0700 Subject: [PATCH 184/412] Pan, add gnucash for financial management --- systems/pan/default.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/systems/pan/default.nix b/systems/pan/default.nix index ebe826b..5b5fa8c 100644 --- a/systems/pan/default.nix +++ b/systems/pan/default.nix @@ -71,5 +71,6 @@ ani-cli # Easy anime player lutgen # LUT generator prismlauncher # Minecraft launcher + gnucash # Personal Finance Manager ]; } From 3953f7f39b67d1fb517790485e544b2bf9640b57 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 27 May 2024 01:55:38 -0700 Subject: [PATCH 185/412] Git, add signing --- hmModules/apps/git/default.nix | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/hmModules/apps/git/default.nix b/hmModules/apps/git/default.nix index 0a87ff0..e164daa 100644 --- a/hmModules/apps/git/default.nix +++ b/hmModules/apps/git/default.nix @@ -14,6 +14,12 @@ enable = true; userName = config.git.username; userEmail = config.git.email; + extraConfig = { + user.signingkey = "${config.home.homeDirectory}/.ssh/id_ed25519.pub"; + gpg.format = "ssh"; + commit.gpgSign = "true"; + tag.gpgSign = "true"; + }; }; }; } From ed8bd0726f286ae7f53579616859b490e57d21aa Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 27 May 2024 01:55:38 -0700 Subject: [PATCH 186/412] Git, add signing --- hmModules/apps/git/default.nix | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/hmModules/apps/git/default.nix b/hmModules/apps/git/default.nix index 0a87ff0..e164daa 100644 --- a/hmModules/apps/git/default.nix +++ b/hmModules/apps/git/default.nix @@ -14,6 +14,12 @@ enable = true; userName = config.git.username; userEmail = config.git.email; + extraConfig = { + user.signingkey = "${config.home.homeDirectory}/.ssh/id_ed25519.pub"; + gpg.format = "ssh"; + commit.gpgSign = "true"; + tag.gpgSign = "true"; + }; }; }; } From c3db864c6f9e20d5e8f2274efaccec32f2a2531e Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 5 Jun 2024 00:37:17 -0700 Subject: [PATCH 187/412] Pan, add java8 to play beta minecraft --- systems/pan/default.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/systems/pan/default.nix b/systems/pan/default.nix index 5b5fa8c..6562521 100644 --- a/systems/pan/default.nix +++ b/systems/pan/default.nix @@ -71,6 +71,7 @@ ani-cli # Easy anime player lutgen # LUT generator prismlauncher # Minecraft launcher + jdk8 # For playing older minecraft gnucash # Personal Finance Manager ]; } From 6fa29aff73692f3b112debf0dd35413c1f31273c Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 5 Jun 2024 00:37:17 -0700 Subject: [PATCH 188/412] Pan, add java8 to play beta minecraft --- systems/pan/default.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/systems/pan/default.nix b/systems/pan/default.nix index 5b5fa8c..6562521 100644 --- a/systems/pan/default.nix +++ b/systems/pan/default.nix @@ -71,6 +71,7 @@ ani-cli # Easy anime player lutgen # LUT generator prismlauncher # Minecraft launcher + jdk8 # For playing older minecraft gnucash # Personal Finance Manager ]; } From dc662f82f010040ef234771a8f0a094408d37815 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 5 Jun 2024 00:43:23 -0700 Subject: [PATCH 189/412] Flake update 2024-06-05 --- flake.lock | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/flake.lock b/flake.lock index d23225b..362a7a9 100644 --- a/flake.lock +++ b/flake.lock @@ -27,11 +27,11 @@ ] }, "locked": { - "lastModified": 1716736760, - "narHash": "sha256-h3RmnNknKYtVA+EvUSra6QAwfZjC2q1G8YA7W0gat8Y=", + "lastModified": 1717525419, + "narHash": "sha256-5z2422pzWnPXHgq2ms8lcCfttM0dz+hg+x1pCcNkAws=", "owner": "nix-community", "repo": "home-manager", - "rev": "5d151429e1e79107acf6d06dcc5ace4e642ec239", + "rev": "a7117efb3725e6197dd95424136f79147aa35e5b", "type": "github" }, "original": { @@ -81,11 +81,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1716669967, - "narHash": "sha256-wq91XpwR0tv7e7KwSp0qzvu31EMssznl8DzbNy4M4Hk=", + "lastModified": 1717509465, + "narHash": "sha256-ObX7qHLYwCDrKVi6Log7Uh3powuyR4lL/4txOiENpgI=", "ref": "refs/heads/main", - "rev": "553232a3e4c112c8511309e6b685cb614895e714", - "revCount": 4743, + "rev": "098ac916a6314a2b731532e0c85f357e3cf90d2f", + "revCount": 4762, "submodules": true, "type": "git", "url": "https://github.com/hyprwm/Hyprland" @@ -195,11 +195,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1716509168, - "narHash": "sha256-4zSIhSRRIoEBwjbPm3YiGtbd8HDWzFxJjw5DYSDy1n8=", + "lastModified": 1717196966, + "narHash": "sha256-yZKhxVIKd2lsbOqYd5iDoUIwsRZFqE87smE2Vzf6Ck0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "bfb7a882678e518398ce9a31a881538679f6f092", + "rev": "57610d2f8f0937f39dbd72251e9614b1561942d8", "type": "github" }, "original": { From b0d8c4f6d15dda6fd03b96638fb7e264f9aea2a3 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 5 Jun 2024 00:43:23 -0700 Subject: [PATCH 190/412] Flake update 2024-06-05 --- flake.lock | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/flake.lock b/flake.lock index d23225b..362a7a9 100644 --- a/flake.lock +++ b/flake.lock @@ -27,11 +27,11 @@ ] }, "locked": { - "lastModified": 1716736760, - "narHash": "sha256-h3RmnNknKYtVA+EvUSra6QAwfZjC2q1G8YA7W0gat8Y=", + "lastModified": 1717525419, + "narHash": "sha256-5z2422pzWnPXHgq2ms8lcCfttM0dz+hg+x1pCcNkAws=", "owner": "nix-community", "repo": "home-manager", - "rev": "5d151429e1e79107acf6d06dcc5ace4e642ec239", + "rev": "a7117efb3725e6197dd95424136f79147aa35e5b", "type": "github" }, "original": { @@ -81,11 +81,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1716669967, - "narHash": "sha256-wq91XpwR0tv7e7KwSp0qzvu31EMssznl8DzbNy4M4Hk=", + "lastModified": 1717509465, + "narHash": "sha256-ObX7qHLYwCDrKVi6Log7Uh3powuyR4lL/4txOiENpgI=", "ref": "refs/heads/main", - "rev": "553232a3e4c112c8511309e6b685cb614895e714", - "revCount": 4743, + "rev": "098ac916a6314a2b731532e0c85f357e3cf90d2f", + "revCount": 4762, "submodules": true, "type": "git", "url": "https://github.com/hyprwm/Hyprland" @@ -195,11 +195,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1716509168, - "narHash": "sha256-4zSIhSRRIoEBwjbPm3YiGtbd8HDWzFxJjw5DYSDy1n8=", + "lastModified": 1717196966, + "narHash": "sha256-yZKhxVIKd2lsbOqYd5iDoUIwsRZFqE87smE2Vzf6Ck0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "bfb7a882678e518398ce9a31a881538679f6f092", + "rev": "57610d2f8f0937f39dbd72251e9614b1561942d8", "type": "github" }, "original": { From fafbb75859d852b6d267fef04723805436f2de6e Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 5 Jun 2024 00:49:59 -0700 Subject: [PATCH 191/412] Flake update 2024-06-05 --- flake.lock | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/flake.lock b/flake.lock index 91b1ba0..b5d30a2 100644 --- a/flake.lock +++ b/flake.lock @@ -74,11 +74,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1716669967, - "narHash": "sha256-wq91XpwR0tv7e7KwSp0qzvu31EMssznl8DzbNy4M4Hk=", + "lastModified": 1717509465, + "narHash": "sha256-ObX7qHLYwCDrKVi6Log7Uh3powuyR4lL/4txOiENpgI=", "ref": "refs/heads/main", - "rev": "553232a3e4c112c8511309e6b685cb614895e714", - "revCount": 4743, + "rev": "098ac916a6314a2b731532e0c85f357e3cf90d2f", + "revCount": 4762, "submodules": true, "type": "git", "url": "https://github.com/hyprwm/Hyprland" @@ -184,11 +184,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1716655032, - "narHash": "sha256-kQ25DAiCGigsNR/Quxm3v+JGXAEXZ8I7RAF4U94bGzE=", + "lastModified": 1717265169, + "narHash": "sha256-IITcGd6xpNoyq9SZBigCkv4+qMHSqot0RDPR4xsZ2CA=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "59a450646ec8ee0397f5fa54a08573e8240eb91f", + "rev": "3b1b4895b2c5f9f5544d02132896aeb9ceea77bc", "type": "github" }, "original": { @@ -216,11 +216,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1716509168, - "narHash": "sha256-4zSIhSRRIoEBwjbPm3YiGtbd8HDWzFxJjw5DYSDy1n8=", + "lastModified": 1717196966, + "narHash": "sha256-yZKhxVIKd2lsbOqYd5iDoUIwsRZFqE87smE2Vzf6Ck0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "bfb7a882678e518398ce9a31a881538679f6f092", + "rev": "57610d2f8f0937f39dbd72251e9614b1561942d8", "type": "github" }, "original": { @@ -231,11 +231,11 @@ }, "nixpkgs_4": { "locked": { - "lastModified": 1716651315, - "narHash": "sha256-iMgzIeedMqf30TXZ439zW3Yvng1Xm9QTGO+ZwG1IWSw=", + "lastModified": 1717112898, + "narHash": "sha256-7R2ZvOnvd9h8fDd65p0JnB7wXfUvreox3xFdYWd1BnY=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "c5187508b11177ef4278edf19616f44f21cc8c69", + "rev": "6132b0f6e344ce2fe34fc051b72fb46e34f668e0", "type": "github" }, "original": { @@ -259,11 +259,11 @@ "nixpkgs-stable": "nixpkgs-stable" }, "locked": { - "lastModified": 1716692524, - "narHash": "sha256-sALodaA7Zkp/JD6ehgwc0UCBrSBfB4cX66uFGTsqeFU=", + "lastModified": 1717455931, + "narHash": "sha256-8Q6mKSsto8gaGczXd4G0lvawdAYLa5Dlh3/g4hl5CaM=", "owner": "Mic92", "repo": "sops-nix", - "rev": "962797a8d7f15ed7033031731d0bb77244839960", + "rev": "d4555e80d80d2fa77f0a44201ca299f9602492a0", "type": "github" }, "original": { From 5a62376c57ac3e4c2ece230c59bcf81577cebfb1 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 5 Jun 2024 00:49:59 -0700 Subject: [PATCH 192/412] Flake update 2024-06-05 --- flake.lock | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/flake.lock b/flake.lock index 91b1ba0..b5d30a2 100644 --- a/flake.lock +++ b/flake.lock @@ -74,11 +74,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1716669967, - "narHash": "sha256-wq91XpwR0tv7e7KwSp0qzvu31EMssznl8DzbNy4M4Hk=", + "lastModified": 1717509465, + "narHash": "sha256-ObX7qHLYwCDrKVi6Log7Uh3powuyR4lL/4txOiENpgI=", "ref": "refs/heads/main", - "rev": "553232a3e4c112c8511309e6b685cb614895e714", - "revCount": 4743, + "rev": "098ac916a6314a2b731532e0c85f357e3cf90d2f", + "revCount": 4762, "submodules": true, "type": "git", "url": "https://github.com/hyprwm/Hyprland" @@ -184,11 +184,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1716655032, - "narHash": "sha256-kQ25DAiCGigsNR/Quxm3v+JGXAEXZ8I7RAF4U94bGzE=", + "lastModified": 1717265169, + "narHash": "sha256-IITcGd6xpNoyq9SZBigCkv4+qMHSqot0RDPR4xsZ2CA=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "59a450646ec8ee0397f5fa54a08573e8240eb91f", + "rev": "3b1b4895b2c5f9f5544d02132896aeb9ceea77bc", "type": "github" }, "original": { @@ -216,11 +216,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1716509168, - "narHash": "sha256-4zSIhSRRIoEBwjbPm3YiGtbd8HDWzFxJjw5DYSDy1n8=", + "lastModified": 1717196966, + "narHash": "sha256-yZKhxVIKd2lsbOqYd5iDoUIwsRZFqE87smE2Vzf6Ck0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "bfb7a882678e518398ce9a31a881538679f6f092", + "rev": "57610d2f8f0937f39dbd72251e9614b1561942d8", "type": "github" }, "original": { @@ -231,11 +231,11 @@ }, "nixpkgs_4": { "locked": { - "lastModified": 1716651315, - "narHash": "sha256-iMgzIeedMqf30TXZ439zW3Yvng1Xm9QTGO+ZwG1IWSw=", + "lastModified": 1717112898, + "narHash": "sha256-7R2ZvOnvd9h8fDd65p0JnB7wXfUvreox3xFdYWd1BnY=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "c5187508b11177ef4278edf19616f44f21cc8c69", + "rev": "6132b0f6e344ce2fe34fc051b72fb46e34f668e0", "type": "github" }, "original": { @@ -259,11 +259,11 @@ "nixpkgs-stable": "nixpkgs-stable" }, "locked": { - "lastModified": 1716692524, - "narHash": "sha256-sALodaA7Zkp/JD6ehgwc0UCBrSBfB4cX66uFGTsqeFU=", + "lastModified": 1717455931, + "narHash": "sha256-8Q6mKSsto8gaGczXd4G0lvawdAYLa5Dlh3/g4hl5CaM=", "owner": "Mic92", "repo": "sops-nix", - "rev": "962797a8d7f15ed7033031731d0bb77244839960", + "rev": "d4555e80d80d2fa77f0a44201ca299f9602492a0", "type": "github" }, "original": { From 07ce0cb9fee97439e25478bba8adf61a6e36805d Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 8 Jul 2024 01:11:04 -0700 Subject: [PATCH 193/412] Pan, add zoom for meetings ;-; --- systems/pan/default.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/systems/pan/default.nix b/systems/pan/default.nix index 6562521..c5473ff 100644 --- a/systems/pan/default.nix +++ b/systems/pan/default.nix @@ -73,5 +73,6 @@ prismlauncher # Minecraft launcher jdk8 # For playing older minecraft gnucash # Personal Finance Manager + zoom-us # Zoom ]; } From e395acbc2bc390b58392f310c3768ea42d215a8e Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 8 Jul 2024 01:11:04 -0700 Subject: [PATCH 194/412] Pan, add zoom for meetings ;-; --- systems/pan/default.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/systems/pan/default.nix b/systems/pan/default.nix index 6562521..c5473ff 100644 --- a/systems/pan/default.nix +++ b/systems/pan/default.nix @@ -73,5 +73,6 @@ prismlauncher # Minecraft launcher jdk8 # For playing older minecraft gnucash # Personal Finance Manager + zoom-us # Zoom ]; } From d524f7c0683ccb24de05baf40b20e8beb6779c29 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sun, 14 Jul 2024 04:04:58 -0700 Subject: [PATCH 195/412] Hypr, fix cachix support --- .../services/graphics/wayland_compositors/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nixosModules/services/graphics/wayland_compositors/default.nix b/nixosModules/services/graphics/wayland_compositors/default.nix index cb22931..977ebb2 100644 --- a/nixosModules/services/graphics/wayland_compositors/default.nix +++ b/nixosModules/services/graphics/wayland_compositors/default.nix @@ -10,12 +10,12 @@ inputs.hyprland.nixosModules.default ]; - config = lib.mkIf config.hyprland.enable { - programs.hyprland.enable = true; + config = { nix.settings = { substituters = [ "https://hyprland.cachix.org" ]; trusted-public-keys = [ "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" ]; experimental-features = [ "nix-command" "flakes" ]; }; + programs.hyprland.enable = lib.mkIf config.hyprland.enable true; }; } From c2c4cff183a31589367faaf6c663d58989e1f6a0 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sun, 14 Jul 2024 04:04:58 -0700 Subject: [PATCH 196/412] Hypr, fix cachix support --- .../services/graphics/wayland_compositors/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nixosModules/services/graphics/wayland_compositors/default.nix b/nixosModules/services/graphics/wayland_compositors/default.nix index cb22931..977ebb2 100644 --- a/nixosModules/services/graphics/wayland_compositors/default.nix +++ b/nixosModules/services/graphics/wayland_compositors/default.nix @@ -10,12 +10,12 @@ inputs.hyprland.nixosModules.default ]; - config = lib.mkIf config.hyprland.enable { - programs.hyprland.enable = true; + config = { nix.settings = { substituters = [ "https://hyprland.cachix.org" ]; trusted-public-keys = [ "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" ]; experimental-features = [ "nix-command" "flakes" ]; }; + programs.hyprland.enable = lib.mkIf config.hyprland.enable true; }; } From 5c256edcb3f5f225844f90d982385473c08ba1df Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sun, 14 Jul 2024 04:05:22 -0700 Subject: [PATCH 197/412] Flake update 2024-07-14 --- flake.lock | 116 +++++++++++------- .../services/graphics/nvidia/default.nix | 4 +- 2 files changed, 74 insertions(+), 46 deletions(-) diff --git a/flake.lock b/flake.lock index b5d30a2..8e96569 100644 --- a/flake.lock +++ b/flake.lock @@ -6,11 +6,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1716664326, - "narHash": "sha256-L7MeDg9Q6Si2Rwxe++BoNdldX9Os/DzqoqGDJod0qyk=", + "lastModified": 1720211568, + "narHash": "sha256-Uph6rcbiuOD6bGEySonDFozdO+mznTug08x27WG4BIg=", "owner": "ezKEa", "repo": "aagl-gtk-on-nix", - "rev": "347a50c615c45b3c89c41e774736861b7b41cf71", + "rev": "ce7e02b20fe45425bbdbebc6fe0fdcc018c9efc6", "type": "github" }, "original": { @@ -51,11 +51,11 @@ ] }, "locked": { - "lastModified": 1716576411, - "narHash": "sha256-FIN1wMoyePBTtibCbaeJaoKNLuAYIGwLCWAYC1DJanw=", + "lastModified": 1720108799, + "narHash": "sha256-AxRkTJlbB8r7aG6gvc7IaLhc2T9TO4/8uqanKRxukBQ=", "owner": "hyprwm", "repo": "hyprcursor", - "rev": "57298fc4f13c807e50ada2c986a3114b7fc2e621", + "rev": "a5c0d57325c5f0814c39110a70ca19c070ae9486", "type": "github" }, "original": { @@ -68,17 +68,18 @@ "inputs": { "hyprcursor": "hyprcursor", "hyprlang": "hyprlang", + "hyprutils": "hyprutils", "hyprwayland-scanner": "hyprwayland-scanner", "nixpkgs": "nixpkgs_2", "systems": "systems", "xdph": "xdph" }, "locked": { - "lastModified": 1717509465, - "narHash": "sha256-ObX7qHLYwCDrKVi6Log7Uh3powuyR4lL/4txOiENpgI=", + "lastModified": 1720896272, + "narHash": "sha256-zo1lDMsxjEyko/P+KfCLNYZrCAWQOrX90/J31nqzpy4=", "ref": "refs/heads/main", - "rev": "098ac916a6314a2b731532e0c85f357e3cf90d2f", - "revCount": 4762, + "rev": "bc6b0880dda2607a80f000c134f573c970452a0f", + "revCount": 4925, "submodules": true, "type": "git", "url": "https://github.com/hyprwm/Hyprland" @@ -103,11 +104,11 @@ ] }, "locked": { - "lastModified": 1691753796, - "narHash": "sha256-zOEwiWoXk3j3+EoF3ySUJmberFewWlagvewDRuWYAso=", + "lastModified": 1718746314, + "narHash": "sha256-HUklK5u86w2Yh9dOkk4FdsL8eehcOZ95jPhLixGDRQY=", "owner": "hyprwm", "repo": "hyprland-protocols", - "rev": "0c2ce70625cb30aef199cb388f99e19a61a6ce03", + "rev": "1b61f0093afff20ab44d88ad707aed8bf2215290", "type": "github" }, "original": { @@ -117,6 +118,35 @@ } }, "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", @@ -128,16 +158,16 @@ ] }, "locked": { - "lastModified": 1716473782, - "narHash": "sha256-+qLn4lsHU6iL3+HTo1gTQ1tWzet8K9h+IfVemzEQZj8=", + "lastModified": 1720545076, + "narHash": "sha256-Pxacc2uoxI00koXp5+CyNqHOTQlqNlK0rlRHDBHX4+g=", "owner": "hyprwm", - "repo": "hyprlang", - "rev": "87d5d984109c839482b88b4795db073eb9ed446f", + "repo": "hyprutils", + "rev": "6174a2a25f4e216c0f1d0c4278adc23c476b1d09", "type": "github" }, "original": { "owner": "hyprwm", - "repo": "hyprlang", + "repo": "hyprutils", "type": "github" } }, @@ -153,11 +183,11 @@ ] }, "locked": { - "lastModified": 1716058375, - "narHash": "sha256-CwjWoVnBZE5SBpRx9dgSQGCr4Goxyfcyv3zZbOhVqzk=", + "lastModified": 1720215857, + "narHash": "sha256-JPdL+Qul+jEueAn8CARfcWP83eJgwkhMejQYfDvrgvU=", "owner": "hyprwm", "repo": "hyprwayland-scanner", - "rev": "3afed4364790aebe0426077631af1e164a9650cc", + "rev": "d5fa094ca27e0039be5e94c0a80ae433145af8bb", "type": "github" }, "original": { @@ -168,11 +198,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1716509168, - "narHash": "sha256-4zSIhSRRIoEBwjbPm3YiGtbd8HDWzFxJjw5DYSDy1n8=", + "lastModified": 1719506693, + "narHash": "sha256-C8e9S7RzshSdHB7L+v9I51af1gDM5unhJ2xO1ywxNH8=", "owner": "nixos", "repo": "nixpkgs", - "rev": "bfb7a882678e518398ce9a31a881538679f6f092", + "rev": "b2852eb9365c6de48ffb0dc2c9562591f652242a", "type": "github" }, "original": { @@ -184,27 +214,27 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1717265169, - "narHash": "sha256-IITcGd6xpNoyq9SZBigCkv4+qMHSqot0RDPR4xsZ2CA=", + "lastModified": 1720915306, + "narHash": "sha256-6vuViC56+KSr+945bCV8akHK+7J5k6n/epYg/W3I5eQ=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "3b1b4895b2c5f9f5544d02132896aeb9ceea77bc", + "rev": "74348da2f3a312ee25cea09b98cdba4cb9fa5d5d", "type": "github" }, "original": { "owner": "NixOS", - "ref": "release-23.11", + "ref": "release-24.05", "repo": "nixpkgs", "type": "github" } }, "nixpkgs_2": { "locked": { - "lastModified": 1716330097, - "narHash": "sha256-8BO3B7e3BiyIDsaKA0tY8O88rClYRTjvAp66y+VBUeU=", + "lastModified": 1720542800, + "narHash": "sha256-ZgnNHuKV6h2+fQ5LuqnUaqZey1Lqqt5dTUAiAnqH0QQ=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "5710852ba686cc1fd0d3b8e22b3117d43ba374c2", + "rev": "feb2849fdeb70028c70d73b848214b00d324a497", "type": "github" }, "original": { @@ -216,11 +246,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1717196966, - "narHash": "sha256-yZKhxVIKd2lsbOqYd5iDoUIwsRZFqE87smE2Vzf6Ck0=", + "lastModified": 1720768451, + "narHash": "sha256-EYekUHJE2gxeo2pM/zM9Wlqw1Uw2XTJXOSAO79ksc4Y=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "57610d2f8f0937f39dbd72251e9614b1561942d8", + "rev": "7e7c39ea35c5cdd002cd4588b03a3fb9ece6fad9", "type": "github" }, "original": { @@ -231,11 +261,11 @@ }, "nixpkgs_4": { "locked": { - "lastModified": 1717112898, - "narHash": "sha256-7R2ZvOnvd9h8fDd65p0JnB7wXfUvreox3xFdYWd1BnY=", + "lastModified": 1720781449, + "narHash": "sha256-po3TZO9kcZwzvkyMJKb0WCzzDtiHWD34XeRaX1lWXp0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "6132b0f6e344ce2fe34fc051b72fb46e34f668e0", + "rev": "8b5a3d5a1d951344d683b442c0739010b80039db", "type": "github" }, "original": { @@ -259,11 +289,11 @@ "nixpkgs-stable": "nixpkgs-stable" }, "locked": { - "lastModified": 1717455931, - "narHash": "sha256-8Q6mKSsto8gaGczXd4G0lvawdAYLa5Dlh3/g4hl5CaM=", + "lastModified": 1720926522, + "narHash": "sha256-eTpnrT6yu1vp8C0B5fxHXhgKxHoYMoYTEikQx///jxY=", "owner": "Mic92", "repo": "sops-nix", - "rev": "d4555e80d80d2fa77f0a44201ca299f9602492a0", + "rev": "0703ba03fd9c1665f8ab68cc3487302475164617", "type": "github" }, "original": { @@ -304,11 +334,11 @@ ] }, "locked": { - "lastModified": 1716290197, - "narHash": "sha256-1u9Exrc7yx9qtES2brDh7/DDZ8w8ap1nboIOAtCgeuM=", + "lastModified": 1720194466, + "narHash": "sha256-Rizg9efi6ue95zOp0MeIV2ZedNo+5U9G2l6yirgBUnA=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "91e48d6acd8a5a611d26f925e51559ab743bc438", + "rev": "b9b97e5ba23fe7bd5fa4df54696102e8aa863cf6", "type": "github" }, "original": { diff --git a/nixosModules/services/graphics/nvidia/default.nix b/nixosModules/services/graphics/nvidia/default.nix index 6747bbc..bd11b84 100644 --- a/nixosModules/services/graphics/nvidia/default.nix +++ b/nixosModules/services/graphics/nvidia/default.nix @@ -7,10 +7,8 @@ }; config = lib.mkIf config.nvidia.enable { - # Enable OpenGL - hardware.opengl = { + hardware.graphics = { enable = true; - driSupport = true; driSupport32Bit = true; extraPackages = with pkgs; [ rocm-opencl-icd From 34f2abf5783db6dec9ae198589172ebd36490d5c Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sun, 14 Jul 2024 04:05:22 -0700 Subject: [PATCH 198/412] Flake update 2024-07-14 --- flake.lock | 116 +++++++++++------- .../services/graphics/nvidia/default.nix | 4 +- 2 files changed, 74 insertions(+), 46 deletions(-) diff --git a/flake.lock b/flake.lock index b5d30a2..8e96569 100644 --- a/flake.lock +++ b/flake.lock @@ -6,11 +6,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1716664326, - "narHash": "sha256-L7MeDg9Q6Si2Rwxe++BoNdldX9Os/DzqoqGDJod0qyk=", + "lastModified": 1720211568, + "narHash": "sha256-Uph6rcbiuOD6bGEySonDFozdO+mznTug08x27WG4BIg=", "owner": "ezKEa", "repo": "aagl-gtk-on-nix", - "rev": "347a50c615c45b3c89c41e774736861b7b41cf71", + "rev": "ce7e02b20fe45425bbdbebc6fe0fdcc018c9efc6", "type": "github" }, "original": { @@ -51,11 +51,11 @@ ] }, "locked": { - "lastModified": 1716576411, - "narHash": "sha256-FIN1wMoyePBTtibCbaeJaoKNLuAYIGwLCWAYC1DJanw=", + "lastModified": 1720108799, + "narHash": "sha256-AxRkTJlbB8r7aG6gvc7IaLhc2T9TO4/8uqanKRxukBQ=", "owner": "hyprwm", "repo": "hyprcursor", - "rev": "57298fc4f13c807e50ada2c986a3114b7fc2e621", + "rev": "a5c0d57325c5f0814c39110a70ca19c070ae9486", "type": "github" }, "original": { @@ -68,17 +68,18 @@ "inputs": { "hyprcursor": "hyprcursor", "hyprlang": "hyprlang", + "hyprutils": "hyprutils", "hyprwayland-scanner": "hyprwayland-scanner", "nixpkgs": "nixpkgs_2", "systems": "systems", "xdph": "xdph" }, "locked": { - "lastModified": 1717509465, - "narHash": "sha256-ObX7qHLYwCDrKVi6Log7Uh3powuyR4lL/4txOiENpgI=", + "lastModified": 1720896272, + "narHash": "sha256-zo1lDMsxjEyko/P+KfCLNYZrCAWQOrX90/J31nqzpy4=", "ref": "refs/heads/main", - "rev": "098ac916a6314a2b731532e0c85f357e3cf90d2f", - "revCount": 4762, + "rev": "bc6b0880dda2607a80f000c134f573c970452a0f", + "revCount": 4925, "submodules": true, "type": "git", "url": "https://github.com/hyprwm/Hyprland" @@ -103,11 +104,11 @@ ] }, "locked": { - "lastModified": 1691753796, - "narHash": "sha256-zOEwiWoXk3j3+EoF3ySUJmberFewWlagvewDRuWYAso=", + "lastModified": 1718746314, + "narHash": "sha256-HUklK5u86w2Yh9dOkk4FdsL8eehcOZ95jPhLixGDRQY=", "owner": "hyprwm", "repo": "hyprland-protocols", - "rev": "0c2ce70625cb30aef199cb388f99e19a61a6ce03", + "rev": "1b61f0093afff20ab44d88ad707aed8bf2215290", "type": "github" }, "original": { @@ -117,6 +118,35 @@ } }, "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", @@ -128,16 +158,16 @@ ] }, "locked": { - "lastModified": 1716473782, - "narHash": "sha256-+qLn4lsHU6iL3+HTo1gTQ1tWzet8K9h+IfVemzEQZj8=", + "lastModified": 1720545076, + "narHash": "sha256-Pxacc2uoxI00koXp5+CyNqHOTQlqNlK0rlRHDBHX4+g=", "owner": "hyprwm", - "repo": "hyprlang", - "rev": "87d5d984109c839482b88b4795db073eb9ed446f", + "repo": "hyprutils", + "rev": "6174a2a25f4e216c0f1d0c4278adc23c476b1d09", "type": "github" }, "original": { "owner": "hyprwm", - "repo": "hyprlang", + "repo": "hyprutils", "type": "github" } }, @@ -153,11 +183,11 @@ ] }, "locked": { - "lastModified": 1716058375, - "narHash": "sha256-CwjWoVnBZE5SBpRx9dgSQGCr4Goxyfcyv3zZbOhVqzk=", + "lastModified": 1720215857, + "narHash": "sha256-JPdL+Qul+jEueAn8CARfcWP83eJgwkhMejQYfDvrgvU=", "owner": "hyprwm", "repo": "hyprwayland-scanner", - "rev": "3afed4364790aebe0426077631af1e164a9650cc", + "rev": "d5fa094ca27e0039be5e94c0a80ae433145af8bb", "type": "github" }, "original": { @@ -168,11 +198,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1716509168, - "narHash": "sha256-4zSIhSRRIoEBwjbPm3YiGtbd8HDWzFxJjw5DYSDy1n8=", + "lastModified": 1719506693, + "narHash": "sha256-C8e9S7RzshSdHB7L+v9I51af1gDM5unhJ2xO1ywxNH8=", "owner": "nixos", "repo": "nixpkgs", - "rev": "bfb7a882678e518398ce9a31a881538679f6f092", + "rev": "b2852eb9365c6de48ffb0dc2c9562591f652242a", "type": "github" }, "original": { @@ -184,27 +214,27 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1717265169, - "narHash": "sha256-IITcGd6xpNoyq9SZBigCkv4+qMHSqot0RDPR4xsZ2CA=", + "lastModified": 1720915306, + "narHash": "sha256-6vuViC56+KSr+945bCV8akHK+7J5k6n/epYg/W3I5eQ=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "3b1b4895b2c5f9f5544d02132896aeb9ceea77bc", + "rev": "74348da2f3a312ee25cea09b98cdba4cb9fa5d5d", "type": "github" }, "original": { "owner": "NixOS", - "ref": "release-23.11", + "ref": "release-24.05", "repo": "nixpkgs", "type": "github" } }, "nixpkgs_2": { "locked": { - "lastModified": 1716330097, - "narHash": "sha256-8BO3B7e3BiyIDsaKA0tY8O88rClYRTjvAp66y+VBUeU=", + "lastModified": 1720542800, + "narHash": "sha256-ZgnNHuKV6h2+fQ5LuqnUaqZey1Lqqt5dTUAiAnqH0QQ=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "5710852ba686cc1fd0d3b8e22b3117d43ba374c2", + "rev": "feb2849fdeb70028c70d73b848214b00d324a497", "type": "github" }, "original": { @@ -216,11 +246,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1717196966, - "narHash": "sha256-yZKhxVIKd2lsbOqYd5iDoUIwsRZFqE87smE2Vzf6Ck0=", + "lastModified": 1720768451, + "narHash": "sha256-EYekUHJE2gxeo2pM/zM9Wlqw1Uw2XTJXOSAO79ksc4Y=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "57610d2f8f0937f39dbd72251e9614b1561942d8", + "rev": "7e7c39ea35c5cdd002cd4588b03a3fb9ece6fad9", "type": "github" }, "original": { @@ -231,11 +261,11 @@ }, "nixpkgs_4": { "locked": { - "lastModified": 1717112898, - "narHash": "sha256-7R2ZvOnvd9h8fDd65p0JnB7wXfUvreox3xFdYWd1BnY=", + "lastModified": 1720781449, + "narHash": "sha256-po3TZO9kcZwzvkyMJKb0WCzzDtiHWD34XeRaX1lWXp0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "6132b0f6e344ce2fe34fc051b72fb46e34f668e0", + "rev": "8b5a3d5a1d951344d683b442c0739010b80039db", "type": "github" }, "original": { @@ -259,11 +289,11 @@ "nixpkgs-stable": "nixpkgs-stable" }, "locked": { - "lastModified": 1717455931, - "narHash": "sha256-8Q6mKSsto8gaGczXd4G0lvawdAYLa5Dlh3/g4hl5CaM=", + "lastModified": 1720926522, + "narHash": "sha256-eTpnrT6yu1vp8C0B5fxHXhgKxHoYMoYTEikQx///jxY=", "owner": "Mic92", "repo": "sops-nix", - "rev": "d4555e80d80d2fa77f0a44201ca299f9602492a0", + "rev": "0703ba03fd9c1665f8ab68cc3487302475164617", "type": "github" }, "original": { @@ -304,11 +334,11 @@ ] }, "locked": { - "lastModified": 1716290197, - "narHash": "sha256-1u9Exrc7yx9qtES2brDh7/DDZ8w8ap1nboIOAtCgeuM=", + "lastModified": 1720194466, + "narHash": "sha256-Rizg9efi6ue95zOp0MeIV2ZedNo+5U9G2l6yirgBUnA=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "91e48d6acd8a5a611d26f925e51559ab743bc438", + "rev": "b9b97e5ba23fe7bd5fa4df54696102e8aa863cf6", "type": "github" }, "original": { diff --git a/nixosModules/services/graphics/nvidia/default.nix b/nixosModules/services/graphics/nvidia/default.nix index 6747bbc..bd11b84 100644 --- a/nixosModules/services/graphics/nvidia/default.nix +++ b/nixosModules/services/graphics/nvidia/default.nix @@ -7,10 +7,8 @@ }; config = lib.mkIf config.nvidia.enable { - # Enable OpenGL - hardware.opengl = { + hardware.graphics = { enable = true; - driSupport = true; driSupport32Bit = true; extraPackages = with pkgs; [ rocm-opencl-icd From f2e9bf0fc233f744dc851f5d2a4fd1fc3a8942f5 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 15 Jul 2024 18:37:14 -0700 Subject: [PATCH 199/412] Flake update 2024-07-15, and hypr cachix fix --- flake.lock | 178 +++++++++++++++++++++++--------- flake.nix | 7 -- hmModules/apps/hypr/default.nix | 7 +- 3 files changed, 138 insertions(+), 54 deletions(-) diff --git a/flake.lock b/flake.lock index 362a7a9..b35f8a9 100644 --- a/flake.lock +++ b/flake.lock @@ -2,16 +2,14 @@ "nodes": { "ags": { "inputs": { - "nixpkgs": [ - "nixpkgs" - ] + "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1715703984, - "narHash": "sha256-0BZkMui6aCqswMCouvp0G90tAxDOxVnxTvG6TDZsDaI=", + "lastModified": 1721074762, + "narHash": "sha256-RhqFBMLh6G5vAo7Jz9mdsworI50E4FAAg7rPho4CNfY=", "owner": "Aylur", "repo": "ags", - "rev": "11150225e62462bcd431d1e55185e810190a730a", + "rev": "8194f0c9546a150525a2022c17aed51df1464b80", "type": "github" }, "original": { @@ -22,16 +20,14 @@ }, "home-manager": { "inputs": { - "nixpkgs": [ - "nixpkgs" - ] + "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1717525419, - "narHash": "sha256-5z2422pzWnPXHgq2ms8lcCfttM0dz+hg+x1pCcNkAws=", + "lastModified": 1720734513, + "narHash": "sha256-neWQ8eNtLTd+YMesb7WjKl1SVCbDyCm46LUgP/g/hdo=", "owner": "nix-community", "repo": "home-manager", - "rev": "a7117efb3725e6197dd95424136f79147aa35e5b", + "rev": "90ae324e2c56af10f20549ab72014804a3064c7f", "type": "github" }, "original": { @@ -56,11 +52,11 @@ ] }, "locked": { - "lastModified": 1716576411, - "narHash": "sha256-FIN1wMoyePBTtibCbaeJaoKNLuAYIGwLCWAYC1DJanw=", + "lastModified": 1720108799, + "narHash": "sha256-AxRkTJlbB8r7aG6gvc7IaLhc2T9TO4/8uqanKRxukBQ=", "owner": "hyprwm", "repo": "hyprcursor", - "rev": "57298fc4f13c807e50ada2c986a3114b7fc2e621", + "rev": "a5c0d57325c5f0814c39110a70ca19c070ae9486", "type": "github" }, "original": { @@ -73,19 +69,18 @@ "inputs": { "hyprcursor": "hyprcursor", "hyprlang": "hyprlang", + "hyprutils": "hyprutils", "hyprwayland-scanner": "hyprwayland-scanner", - "nixpkgs": [ - "nixpkgs" - ], + "nixpkgs": "nixpkgs_3", "systems": "systems", "xdph": "xdph" }, "locked": { - "lastModified": 1717509465, - "narHash": "sha256-ObX7qHLYwCDrKVi6Log7Uh3powuyR4lL/4txOiENpgI=", + "lastModified": 1721044084, + "narHash": "sha256-vO6wBIaInnyIQqmsKc28AsFSWeCFgnFilNhv2zoN/tU=", "ref": "refs/heads/main", - "rev": "098ac916a6314a2b731532e0c85f357e3cf90d2f", - "revCount": 4762, + "rev": "bd526822deb9ed47c0b51b534817aa8541fff07b", + "revCount": 4927, "submodules": true, "type": "git", "url": "https://github.com/hyprwm/Hyprland" @@ -98,16 +93,14 @@ }, "hyprland-contrib": { "inputs": { - "nixpkgs": [ - "nixpkgs" - ] + "nixpkgs": "nixpkgs_4" }, "locked": { - "lastModified": 1716228712, - "narHash": "sha256-y+LOXuSRMfkR2Vfwl5K2NVrszi1h5MJpML+msLnVS8U=", + "lastModified": 1720709712, + "narHash": "sha256-78j/cY+AXoMIqqiNc1vWx237EPfpERAcYsb57ABUbwQ=", "owner": "hyprwm", "repo": "contrib", - "rev": "33b38358559054d316eb605ccb733980dfa7dc63", + "rev": "65d42dcbfde2229a75ccdb195c318dfe241f9ade", "type": "github" }, "original": { @@ -130,11 +123,11 @@ ] }, "locked": { - "lastModified": 1691753796, - "narHash": "sha256-zOEwiWoXk3j3+EoF3ySUJmberFewWlagvewDRuWYAso=", + "lastModified": 1718746314, + "narHash": "sha256-HUklK5u86w2Yh9dOkk4FdsL8eehcOZ95jPhLixGDRQY=", "owner": "hyprwm", "repo": "hyprland-protocols", - "rev": "0c2ce70625cb30aef199cb388f99e19a61a6ce03", + "rev": "1b61f0093afff20ab44d88ad707aed8bf2215290", "type": "github" }, "original": { @@ -144,6 +137,35 @@ } }, "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", @@ -155,16 +177,16 @@ ] }, "locked": { - "lastModified": 1716473782, - "narHash": "sha256-+qLn4lsHU6iL3+HTo1gTQ1tWzet8K9h+IfVemzEQZj8=", + "lastModified": 1720545076, + "narHash": "sha256-Pxacc2uoxI00koXp5+CyNqHOTQlqNlK0rlRHDBHX4+g=", "owner": "hyprwm", - "repo": "hyprlang", - "rev": "87d5d984109c839482b88b4795db073eb9ed446f", + "repo": "hyprutils", + "rev": "6174a2a25f4e216c0f1d0c4278adc23c476b1d09", "type": "github" }, "original": { "owner": "hyprwm", - "repo": "hyprlang", + "repo": "hyprutils", "type": "github" } }, @@ -180,11 +202,11 @@ ] }, "locked": { - "lastModified": 1716058375, - "narHash": "sha256-CwjWoVnBZE5SBpRx9dgSQGCr4Goxyfcyv3zZbOhVqzk=", + "lastModified": 1720215857, + "narHash": "sha256-JPdL+Qul+jEueAn8CARfcWP83eJgwkhMejQYfDvrgvU=", "owner": "hyprwm", "repo": "hyprwayland-scanner", - "rev": "3afed4364790aebe0426077631af1e164a9650cc", + "rev": "d5fa094ca27e0039be5e94c0a80ae433145af8bb", "type": "github" }, "original": { @@ -195,11 +217,75 @@ }, "nixpkgs": { "locked": { - "lastModified": 1717196966, - "narHash": "sha256-yZKhxVIKd2lsbOqYd5iDoUIwsRZFqE87smE2Vzf6Ck0=", + "lastModified": 1718714799, + "narHash": "sha256-FUZpz9rg3gL8NVPKbqU8ei1VkPLsTIfAJ2fdAf5qjak=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "57610d2f8f0937f39dbd72251e9614b1561942d8", + "rev": "c00d587b1a1afbf200b1d8f0b0e4ba9deb1c7f0e", + "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_3": { + "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_4": { + "locked": { + "lastModified": 1712163089, + "narHash": "sha256-Um+8kTIrC19vD4/lUCN9/cU9kcOsD1O1m+axJqQPyMM=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "fd281bd6b7d3e32ddfa399853946f782553163b5", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_5": { + "locked": { + "lastModified": 1720957393, + "narHash": "sha256-oedh2RwpjEa+TNxhg5Je9Ch6d3W1NKi7DbRO1ziHemA=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "693bc46d169f5af9c992095736e82c3488bf7dbb", "type": "github" }, "original": { @@ -214,7 +300,7 @@ "home-manager": "home-manager", "hyprland": "hyprland", "hyprland-contrib": "hyprland-contrib", - "nixpkgs": "nixpkgs" + "nixpkgs": "nixpkgs_5" } }, "systems": { @@ -249,11 +335,11 @@ ] }, "locked": { - "lastModified": 1716290197, - "narHash": "sha256-1u9Exrc7yx9qtES2brDh7/DDZ8w8ap1nboIOAtCgeuM=", + "lastModified": 1720194466, + "narHash": "sha256-Rizg9efi6ue95zOp0MeIV2ZedNo+5U9G2l6yirgBUnA=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "91e48d6acd8a5a611d26f925e51559ab743bc438", + "rev": "b9b97e5ba23fe7bd5fa4df54696102e8aa863cf6", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index b7142f0..aab3597 100644 --- a/flake.nix +++ b/flake.nix @@ -5,16 +5,9 @@ nixpkgs.url = "nixpkgs/nixos-unstable"; home-manager.url = "github:nix-community/home-manager"; - home-manager.inputs.nixpkgs.follows = "nixpkgs"; - hyprland.url = "git+https://github.com/hyprwm/Hyprland?submodules=1"; - hyprland.inputs.nixpkgs.follows = "nixpkgs"; - hyprland-contrib.url = "github:hyprwm/contrib"; - hyprland-contrib.inputs.nixpkgs.follows = "nixpkgs"; - ags.url = "github:Aylur/ags"; - ags.inputs.nixpkgs.follows = "nixpkgs"; }; outputs = { nixpkgs, home-manager, ... }@inputs: diff --git a/hmModules/apps/hypr/default.nix b/hmModules/apps/hypr/default.nix index b8372d6..45c67df 100644 --- a/hmModules/apps/hypr/default.nix +++ b/hmModules/apps/hypr/default.nix @@ -7,7 +7,12 @@ let rootPath = ./.; in imports = [ inputs.hyprland.homeManagerModules.default ]; - config = lib.mkIf config.hypr.enable { + config = { + nix.settings = { + substituters = ["https://hyprland.cachix.org"]; + trusted-public-keys = ["hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="]; + }; + } // lib.mkIf config.hypr.enable { wayland.windowManager.hyprland = { enable = true; extraConfig = '' From c1351567ccf12bab7d4cf579a3cda8c0f74f1044 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 15 Jul 2024 18:37:14 -0700 Subject: [PATCH 200/412] Flake update 2024-07-15, and hypr cachix fix --- flake.lock | 178 +++++++++++++++++++++++--------- flake.nix | 7 -- hmModules/apps/hypr/default.nix | 7 +- 3 files changed, 138 insertions(+), 54 deletions(-) diff --git a/flake.lock b/flake.lock index 362a7a9..b35f8a9 100644 --- a/flake.lock +++ b/flake.lock @@ -2,16 +2,14 @@ "nodes": { "ags": { "inputs": { - "nixpkgs": [ - "nixpkgs" - ] + "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1715703984, - "narHash": "sha256-0BZkMui6aCqswMCouvp0G90tAxDOxVnxTvG6TDZsDaI=", + "lastModified": 1721074762, + "narHash": "sha256-RhqFBMLh6G5vAo7Jz9mdsworI50E4FAAg7rPho4CNfY=", "owner": "Aylur", "repo": "ags", - "rev": "11150225e62462bcd431d1e55185e810190a730a", + "rev": "8194f0c9546a150525a2022c17aed51df1464b80", "type": "github" }, "original": { @@ -22,16 +20,14 @@ }, "home-manager": { "inputs": { - "nixpkgs": [ - "nixpkgs" - ] + "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1717525419, - "narHash": "sha256-5z2422pzWnPXHgq2ms8lcCfttM0dz+hg+x1pCcNkAws=", + "lastModified": 1720734513, + "narHash": "sha256-neWQ8eNtLTd+YMesb7WjKl1SVCbDyCm46LUgP/g/hdo=", "owner": "nix-community", "repo": "home-manager", - "rev": "a7117efb3725e6197dd95424136f79147aa35e5b", + "rev": "90ae324e2c56af10f20549ab72014804a3064c7f", "type": "github" }, "original": { @@ -56,11 +52,11 @@ ] }, "locked": { - "lastModified": 1716576411, - "narHash": "sha256-FIN1wMoyePBTtibCbaeJaoKNLuAYIGwLCWAYC1DJanw=", + "lastModified": 1720108799, + "narHash": "sha256-AxRkTJlbB8r7aG6gvc7IaLhc2T9TO4/8uqanKRxukBQ=", "owner": "hyprwm", "repo": "hyprcursor", - "rev": "57298fc4f13c807e50ada2c986a3114b7fc2e621", + "rev": "a5c0d57325c5f0814c39110a70ca19c070ae9486", "type": "github" }, "original": { @@ -73,19 +69,18 @@ "inputs": { "hyprcursor": "hyprcursor", "hyprlang": "hyprlang", + "hyprutils": "hyprutils", "hyprwayland-scanner": "hyprwayland-scanner", - "nixpkgs": [ - "nixpkgs" - ], + "nixpkgs": "nixpkgs_3", "systems": "systems", "xdph": "xdph" }, "locked": { - "lastModified": 1717509465, - "narHash": "sha256-ObX7qHLYwCDrKVi6Log7Uh3powuyR4lL/4txOiENpgI=", + "lastModified": 1721044084, + "narHash": "sha256-vO6wBIaInnyIQqmsKc28AsFSWeCFgnFilNhv2zoN/tU=", "ref": "refs/heads/main", - "rev": "098ac916a6314a2b731532e0c85f357e3cf90d2f", - "revCount": 4762, + "rev": "bd526822deb9ed47c0b51b534817aa8541fff07b", + "revCount": 4927, "submodules": true, "type": "git", "url": "https://github.com/hyprwm/Hyprland" @@ -98,16 +93,14 @@ }, "hyprland-contrib": { "inputs": { - "nixpkgs": [ - "nixpkgs" - ] + "nixpkgs": "nixpkgs_4" }, "locked": { - "lastModified": 1716228712, - "narHash": "sha256-y+LOXuSRMfkR2Vfwl5K2NVrszi1h5MJpML+msLnVS8U=", + "lastModified": 1720709712, + "narHash": "sha256-78j/cY+AXoMIqqiNc1vWx237EPfpERAcYsb57ABUbwQ=", "owner": "hyprwm", "repo": "contrib", - "rev": "33b38358559054d316eb605ccb733980dfa7dc63", + "rev": "65d42dcbfde2229a75ccdb195c318dfe241f9ade", "type": "github" }, "original": { @@ -130,11 +123,11 @@ ] }, "locked": { - "lastModified": 1691753796, - "narHash": "sha256-zOEwiWoXk3j3+EoF3ySUJmberFewWlagvewDRuWYAso=", + "lastModified": 1718746314, + "narHash": "sha256-HUklK5u86w2Yh9dOkk4FdsL8eehcOZ95jPhLixGDRQY=", "owner": "hyprwm", "repo": "hyprland-protocols", - "rev": "0c2ce70625cb30aef199cb388f99e19a61a6ce03", + "rev": "1b61f0093afff20ab44d88ad707aed8bf2215290", "type": "github" }, "original": { @@ -144,6 +137,35 @@ } }, "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", @@ -155,16 +177,16 @@ ] }, "locked": { - "lastModified": 1716473782, - "narHash": "sha256-+qLn4lsHU6iL3+HTo1gTQ1tWzet8K9h+IfVemzEQZj8=", + "lastModified": 1720545076, + "narHash": "sha256-Pxacc2uoxI00koXp5+CyNqHOTQlqNlK0rlRHDBHX4+g=", "owner": "hyprwm", - "repo": "hyprlang", - "rev": "87d5d984109c839482b88b4795db073eb9ed446f", + "repo": "hyprutils", + "rev": "6174a2a25f4e216c0f1d0c4278adc23c476b1d09", "type": "github" }, "original": { "owner": "hyprwm", - "repo": "hyprlang", + "repo": "hyprutils", "type": "github" } }, @@ -180,11 +202,11 @@ ] }, "locked": { - "lastModified": 1716058375, - "narHash": "sha256-CwjWoVnBZE5SBpRx9dgSQGCr4Goxyfcyv3zZbOhVqzk=", + "lastModified": 1720215857, + "narHash": "sha256-JPdL+Qul+jEueAn8CARfcWP83eJgwkhMejQYfDvrgvU=", "owner": "hyprwm", "repo": "hyprwayland-scanner", - "rev": "3afed4364790aebe0426077631af1e164a9650cc", + "rev": "d5fa094ca27e0039be5e94c0a80ae433145af8bb", "type": "github" }, "original": { @@ -195,11 +217,75 @@ }, "nixpkgs": { "locked": { - "lastModified": 1717196966, - "narHash": "sha256-yZKhxVIKd2lsbOqYd5iDoUIwsRZFqE87smE2Vzf6Ck0=", + "lastModified": 1718714799, + "narHash": "sha256-FUZpz9rg3gL8NVPKbqU8ei1VkPLsTIfAJ2fdAf5qjak=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "57610d2f8f0937f39dbd72251e9614b1561942d8", + "rev": "c00d587b1a1afbf200b1d8f0b0e4ba9deb1c7f0e", + "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_3": { + "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_4": { + "locked": { + "lastModified": 1712163089, + "narHash": "sha256-Um+8kTIrC19vD4/lUCN9/cU9kcOsD1O1m+axJqQPyMM=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "fd281bd6b7d3e32ddfa399853946f782553163b5", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_5": { + "locked": { + "lastModified": 1720957393, + "narHash": "sha256-oedh2RwpjEa+TNxhg5Je9Ch6d3W1NKi7DbRO1ziHemA=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "693bc46d169f5af9c992095736e82c3488bf7dbb", "type": "github" }, "original": { @@ -214,7 +300,7 @@ "home-manager": "home-manager", "hyprland": "hyprland", "hyprland-contrib": "hyprland-contrib", - "nixpkgs": "nixpkgs" + "nixpkgs": "nixpkgs_5" } }, "systems": { @@ -249,11 +335,11 @@ ] }, "locked": { - "lastModified": 1716290197, - "narHash": "sha256-1u9Exrc7yx9qtES2brDh7/DDZ8w8ap1nboIOAtCgeuM=", + "lastModified": 1720194466, + "narHash": "sha256-Rizg9efi6ue95zOp0MeIV2ZedNo+5U9G2l6yirgBUnA=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "91e48d6acd8a5a611d26f925e51559ab743bc438", + "rev": "b9b97e5ba23fe7bd5fa4df54696102e8aa863cf6", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index b7142f0..aab3597 100644 --- a/flake.nix +++ b/flake.nix @@ -5,16 +5,9 @@ nixpkgs.url = "nixpkgs/nixos-unstable"; home-manager.url = "github:nix-community/home-manager"; - home-manager.inputs.nixpkgs.follows = "nixpkgs"; - hyprland.url = "git+https://github.com/hyprwm/Hyprland?submodules=1"; - hyprland.inputs.nixpkgs.follows = "nixpkgs"; - hyprland-contrib.url = "github:hyprwm/contrib"; - hyprland-contrib.inputs.nixpkgs.follows = "nixpkgs"; - ags.url = "github:Aylur/ags"; - ags.inputs.nixpkgs.follows = "nixpkgs"; }; outputs = { nixpkgs, home-manager, ... }@inputs: diff --git a/hmModules/apps/hypr/default.nix b/hmModules/apps/hypr/default.nix index b8372d6..45c67df 100644 --- a/hmModules/apps/hypr/default.nix +++ b/hmModules/apps/hypr/default.nix @@ -7,7 +7,12 @@ let rootPath = ./.; in imports = [ inputs.hyprland.homeManagerModules.default ]; - config = lib.mkIf config.hypr.enable { + config = { + nix.settings = { + substituters = ["https://hyprland.cachix.org"]; + trusted-public-keys = ["hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="]; + }; + } // lib.mkIf config.hypr.enable { wayland.windowManager.hyprland = { enable = true; extraConfig = '' From 65282e05c952c7167fad90d6094c7b78e1d7d45d Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sat, 12 Oct 2024 21:19:23 -0700 Subject: [PATCH 201/412] Global, Hypr, Systems, Flake update 2024-10-21 Refactored systems to be dependant on host. So that jibril and onizuka can have separate profiles. Doing this split up the systems/ folder, and also forced a flake update to test. This was done midway through the hypr rework, and would have been difficult to decouple, so I just did a big commit instead <3 Refactored the entire hypr system to use settings and nix rather than its native config. This is working and tested on Jibril, but is missing the scripts used for switching workspaces on Onizuka. --- flake.lock | 239 ++++++++++++++---- flake.nix | 5 +- hmModules/apps/default.nix | 1 + hmModules/apps/hypr/default.nix | 228 +++++++++++++++-- hmModules/apps/hypr/keybinds.conf | 48 ---- hmModules/apps/hypr/league_rules.conf | 25 -- hmModules/apps/hypr/nvidia.conf | 7 - hmModules/apps/hypr/scripts/initdb.xsh | 13 - hmModules/apps/hypr/settings.conf | 62 ----- hmModules/apps/hypr/window_rules.conf | 40 --- hmModules/apps/hypr/xwaylandvideobridge.conf | 5 - hmModules/apps/librewolf/default.nix | 2 + .../apps/terminal-emulators/kitty/default.nix | 2 + hmModules/services/home/default.nix | 5 + systems/jibril/default.nix | 110 ++++++++ systems/{pan => onizuka}/default.nix | 54 ++++ 16 files changed, 572 insertions(+), 274 deletions(-) delete mode 100644 hmModules/apps/hypr/keybinds.conf delete mode 100644 hmModules/apps/hypr/league_rules.conf delete mode 100644 hmModules/apps/hypr/nvidia.conf delete mode 100755 hmModules/apps/hypr/scripts/initdb.xsh delete mode 100644 hmModules/apps/hypr/settings.conf delete mode 100644 hmModules/apps/hypr/window_rules.conf delete mode 100644 hmModules/apps/hypr/xwaylandvideobridge.conf create mode 100644 systems/jibril/default.nix rename systems/{pan => onizuka}/default.nix (59%) diff --git a/flake.lock b/flake.lock index b35f8a9..4e753bc 100644 --- a/flake.lock +++ b/flake.lock @@ -2,14 +2,15 @@ "nodes": { "ags": { "inputs": { - "nixpkgs": "nixpkgs" + "nixpkgs": "nixpkgs", + "systems": "systems" }, "locked": { - "lastModified": 1721074762, - "narHash": "sha256-RhqFBMLh6G5vAo7Jz9mdsworI50E4FAAg7rPho4CNfY=", + "lastModified": 1728326430, + "narHash": "sha256-tV1ABHuA1HItMdCTuNdA8fMB+qw7LpjvI945VwMSABI=", "owner": "Aylur", "repo": "ags", - "rev": "8194f0c9546a150525a2022c17aed51df1464b80", + "rev": "60180a184cfb32b61a1d871c058b31a3b9b0743d", "type": "github" }, "original": { @@ -18,16 +19,87 @@ "type": "github" } }, + "aquamarine": { + "inputs": { + "hyprutils": [ + "hyprland", + "hyprutils" + ], + "hyprwayland-scanner": [ + "hyprland", + "hyprwayland-scanner" + ], + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1729527199, + "narHash": "sha256-D5/YksfRga8Akd04ZtIkuYSIOjXVrAzQIQBSeplokzU=", + "owner": "hyprwm", + "repo": "aquamarine", + "rev": "8d732fa8aff8b12ef2b1e2f00fc8153e41312b72", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "aquamarine", + "type": "github" + } + }, + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "gitignore": { + "inputs": { + "nixpkgs": [ + "hyprland", + "pre-commit-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, "home-manager": { "inputs": { "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1720734513, - "narHash": "sha256-neWQ8eNtLTd+YMesb7WjKl1SVCbDyCm46LUgP/g/hdo=", + "lastModified": 1729551526, + "narHash": "sha256-7LAGY32Xl14OVQp3y6M43/0AtHYYvV6pdyBcp3eoz0s=", "owner": "nix-community", "repo": "home-manager", - "rev": "90ae324e2c56af10f20549ab72014804a3064c7f", + "rev": "5ec753a1fc4454df9285d8b3ec0809234defb975", "type": "github" }, "original": { @@ -52,11 +124,11 @@ ] }, "locked": { - "lastModified": 1720108799, - "narHash": "sha256-AxRkTJlbB8r7aG6gvc7IaLhc2T9TO4/8uqanKRxukBQ=", + "lastModified": 1728669738, + "narHash": "sha256-EDNAU9AYcx8OupUzbTbWE1d3HYdeG0wO6Msg3iL1muk=", "owner": "hyprwm", "repo": "hyprcursor", - "rev": "a5c0d57325c5f0814c39110a70ca19c070ae9486", + "rev": "0264e698149fcb857a66a53018157b41f8d97bb0", "type": "github" }, "original": { @@ -67,26 +139,27 @@ }, "hyprland": { "inputs": { + "aquamarine": "aquamarine", "hyprcursor": "hyprcursor", + "hyprland-protocols": "hyprland-protocols", "hyprlang": "hyprlang", "hyprutils": "hyprutils", "hyprwayland-scanner": "hyprwayland-scanner", "nixpkgs": "nixpkgs_3", - "systems": "systems", + "pre-commit-hooks": "pre-commit-hooks", + "systems": "systems_2", "xdph": "xdph" }, "locked": { - "lastModified": 1721044084, - "narHash": "sha256-vO6wBIaInnyIQqmsKc28AsFSWeCFgnFilNhv2zoN/tU=", + "lastModified": 1729715559, + "narHash": "sha256-DigThx4MJv4tWEimqYzxymIZFUcTgQ3D1vZyG8FD9VA=", "ref": "refs/heads/main", - "rev": "bd526822deb9ed47c0b51b534817aa8541fff07b", - "revCount": 4927, - "submodules": true, + "rev": "cdac64970e894c3211d94da8925fbf905b52a594", + "revCount": 5369, "type": "git", "url": "https://github.com/hyprwm/Hyprland" }, "original": { - "submodules": true, "type": "git", "url": "https://github.com/hyprwm/Hyprland" } @@ -96,11 +169,11 @@ "nixpkgs": "nixpkgs_4" }, "locked": { - "lastModified": 1720709712, - "narHash": "sha256-78j/cY+AXoMIqqiNc1vWx237EPfpERAcYsb57ABUbwQ=", + "lastModified": 1729224425, + "narHash": "sha256-w9dNUedNe2qnhHuhcRf7A1l29+/6DxdMfwN6g4U3c/w=", "owner": "hyprwm", "repo": "contrib", - "rev": "65d42dcbfde2229a75ccdb195c318dfe241f9ade", + "rev": "d72bc8b1cd30d448bd438e8328f8eeb4c0f2ddb6", "type": "github" }, "original": { @@ -113,21 +186,19 @@ "inputs": { "nixpkgs": [ "hyprland", - "xdph", "nixpkgs" ], "systems": [ "hyprland", - "xdph", "systems" ] }, "locked": { - "lastModified": 1718746314, - "narHash": "sha256-HUklK5u86w2Yh9dOkk4FdsL8eehcOZ95jPhLixGDRQY=", + "lastModified": 1728345020, + "narHash": "sha256-xGbkc7U/Roe0/Cv3iKlzijIaFBNguasI31ynL2IlEoM=", "owner": "hyprwm", "repo": "hyprland-protocols", - "rev": "1b61f0093afff20ab44d88ad707aed8bf2215290", + "rev": "a7c183800e74f337753de186522b9017a07a8cee", "type": "github" }, "original": { @@ -152,11 +223,11 @@ ] }, "locked": { - "lastModified": 1720381373, - "narHash": "sha256-lyC/EZdHULsaAKVryK11lgHY9u6pXr7qR4irnxNWC7k=", + "lastModified": 1728168612, + "narHash": "sha256-AnB1KfiXINmuiW7BALYrKqcjCnsLZPifhb/7BsfPbns=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "5df0174fd09de4ac5475233d65ffc703e89b82eb", + "rev": "f054f2e44d6a0b74607a6bc0f52dba337a3db38e", "type": "github" }, "original": { @@ -177,11 +248,11 @@ ] }, "locked": { - "lastModified": 1720545076, - "narHash": "sha256-Pxacc2uoxI00koXp5+CyNqHOTQlqNlK0rlRHDBHX4+g=", + "lastModified": 1728941256, + "narHash": "sha256-WRypmcZ2Bw94lLmcmxYokVOHPJSZ7T06V49QZ4tkZeQ=", "owner": "hyprwm", "repo": "hyprutils", - "rev": "6174a2a25f4e216c0f1d0c4278adc23c476b1d09", + "rev": "fd4be8b9ca932f7384e454bcd923c5451ef2aa85", "type": "github" }, "original": { @@ -202,11 +273,11 @@ ] }, "locked": { - "lastModified": 1720215857, - "narHash": "sha256-JPdL+Qul+jEueAn8CARfcWP83eJgwkhMejQYfDvrgvU=", + "lastModified": 1726874836, + "narHash": "sha256-VKR0sf0PSNCB0wPHVKSAn41mCNVCnegWmgkrneKDhHM=", "owner": "hyprwm", "repo": "hyprwayland-scanner", - "rev": "d5fa094ca27e0039be5e94c0a80ae433145af8bb", + "rev": "500c81a9e1a76760371049a8d99e008ea77aa59e", "type": "github" }, "original": { @@ -217,11 +288,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1718714799, - "narHash": "sha256-FUZpz9rg3gL8NVPKbqU8ei1VkPLsTIfAJ2fdAf5qjak=", + "lastModified": 1725634671, + "narHash": "sha256-v3rIhsJBOMLR8e/RNWxr828tB+WywYIoajrZKFM+0Gg=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "c00d587b1a1afbf200b1d8f0b0e4ba9deb1c7f0e", + "rev": "574d1eac1c200690e27b8eb4e24887f8df7ac27c", "type": "github" }, "original": { @@ -231,13 +302,29 @@ "type": "github" } }, - "nixpkgs_2": { + "nixpkgs-stable": { "locked": { - "lastModified": 1719848872, - "narHash": "sha256-H3+EC5cYuq+gQW8y0lSrrDZfH71LB4DAf+TDFyvwCNA=", + "lastModified": 1720386169, + "narHash": "sha256-NGKVY4PjzwAa4upkGtAMz1npHGoRzWotlSnVlqI40mo=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "00d80d13810dbfea8ab4ed1009b09100cca86ba8", + "rev": "194846768975b7ad2c4988bdb82572c00222c0d7", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-24.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1729256560, + "narHash": "sha256-/uilDXvCIEs3C9l73JTACm4quuHUsIHcns1c+cHUJwA=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "4c2fcb090b1f3e5b47eaa7bd33913b574a11e0a0", "type": "github" }, "original": { @@ -249,11 +336,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1720542800, - "narHash": "sha256-ZgnNHuKV6h2+fQ5LuqnUaqZey1Lqqt5dTUAiAnqH0QQ=", + "lastModified": 1729413321, + "narHash": "sha256-I4tuhRpZFa6Fu6dcH9Dlo5LlH17peT79vx1y1SpeKt0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "feb2849fdeb70028c70d73b848214b00d324a497", + "rev": "1997e4aa514312c1af7e2bda7fad1644e778ff26", "type": "github" }, "original": { @@ -281,11 +368,11 @@ }, "nixpkgs_5": { "locked": { - "lastModified": 1720957393, - "narHash": "sha256-oedh2RwpjEa+TNxhg5Je9Ch6d3W1NKi7DbRO1ziHemA=", + "lastModified": 1729413321, + "narHash": "sha256-I4tuhRpZFa6Fu6dcH9Dlo5LlH17peT79vx1y1SpeKt0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "693bc46d169f5af9c992095736e82c3488bf7dbb", + "rev": "1997e4aa514312c1af7e2bda7fad1644e778ff26", "type": "github" }, "original": { @@ -294,6 +381,30 @@ "type": "indirect" } }, + "pre-commit-hooks": { + "inputs": { + "flake-compat": "flake-compat", + "gitignore": "gitignore", + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "nixpkgs-stable": "nixpkgs-stable" + }, + "locked": { + "lastModified": 1729104314, + "narHash": "sha256-pZRZsq5oCdJt3upZIU4aslS9XwFJ+/nVtALHIciX/BI=", + "owner": "cachix", + "repo": "git-hooks.nix", + "rev": "3c3e88f0f544d6bb54329832616af7eb971b6be6", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "git-hooks.nix", + "type": "github" + } + }, "root": { "inputs": { "ags": "ags", @@ -318,13 +429,39 @@ "type": "github" } }, + "systems_2": { + "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" + } + }, "xdph": { "inputs": { - "hyprland-protocols": "hyprland-protocols", + "hyprland-protocols": [ + "hyprland", + "hyprland-protocols" + ], "hyprlang": [ "hyprland", "hyprlang" ], + "hyprutils": [ + "hyprland", + "hyprutils" + ], + "hyprwayland-scanner": [ + "hyprland", + "hyprwayland-scanner" + ], "nixpkgs": [ "hyprland", "nixpkgs" @@ -335,11 +472,11 @@ ] }, "locked": { - "lastModified": 1720194466, - "narHash": "sha256-Rizg9efi6ue95zOp0MeIV2ZedNo+5U9G2l6yirgBUnA=", + "lastModified": 1728166987, + "narHash": "sha256-w6dVTguAn9zJ+7aPOhBQgDz8bn6YZ7b56cY8Kg5HJRI=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "b9b97e5ba23fe7bd5fa4df54696102e8aa863cf6", + "rev": "fb9c8d665af0588bb087f97d0f673ddf0d501787", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index aab3597..e1f211a 100644 --- a/flake.nix +++ b/flake.nix @@ -5,7 +5,7 @@ nixpkgs.url = "nixpkgs/nixos-unstable"; home-manager.url = "github:nix-community/home-manager"; - hyprland.url = "git+https://github.com/hyprwm/Hyprland?submodules=1"; + hyprland.url = "git+https://github.com/hyprwm/Hyprland"; hyprland-contrib.url = "github:hyprwm/contrib"; ags.url = "github:Aylur/ags"; }; @@ -22,6 +22,7 @@ ] ++ extraModules; }; in { - homeConfigurations.pan = defaultConfig [ ./systems/pan ]; + homeConfigurations."pan@onizuka" = defaultConfig [ ./systems/onizuka ]; + homeConfigurations."pan@jibril" = defaultConfig [ ./systems/jibril ]; }; } diff --git a/hmModules/apps/default.nix b/hmModules/apps/default.nix index 735a533..ef1c1b2 100644 --- a/hmModules/apps/default.nix +++ b/hmModules/apps/default.nix @@ -7,6 +7,7 @@ ./gimp ./git ./hypr + ./librewolf ./lutris ./media-viewers ./neovim diff --git a/hmModules/apps/hypr/default.nix b/hmModules/apps/hypr/default.nix index 45c67df..a28db98 100644 --- a/hmModules/apps/hypr/default.nix +++ b/hmModules/apps/hypr/default.nix @@ -3,51 +3,237 @@ let rootPath = ./.; in { options.hypr = { enable = lib.mkEnableOption "Enables hyprland"; + mod_key = lib.mkOption { default = "SUPER"; }; + monitor = { + details = lib.mkOption { default = []; }; + }; + workspace = { + workspaces = lib.mkOption { default = {}; }; + scratchpad.enable = lib.mkEnableOption "Enables a scratchpad"; + defaults = lib.mkOption { default = {}; }; + # primary-secondary = { + # enable = lib.mkEnableOption "Enables the primary-secondary navigation style"; + # primary = lib.mkOption { default = "DP-1"; }; + # secondary = lib.mkOption { default = "DP-2"; }; + # secondaries = lib.mkOption { default = []; }; + # }; + }; + windows.opaque = lib.mkOption { default = []; }; + background = { + enable = lib.mkEnableOption "Enables a wallpaper"; + path = lib.mkOption { default = ""; }; + }; + cursor = { + enable = lib.mkEnableOption "Enables custom cursor"; + theme = lib.mkOption { default = ""; }; + size = lib.mkOption { default = 64; }; + }; + xwayland.videobridge.enable = lib.mkEnableOption "Enable xwaylandvideobridge"; + mouse.sensitivity = lib.mkOption { default = 0; }; + master.mfact = lib.mkOption { default = 0.55; }; + polkit.enable = lib.mkEnableOption "Enables polkit agent"; + screenshot.enable = lib.mkEnableOption "Enables Screenshotting"; }; imports = [ inputs.hyprland.homeManagerModules.default ]; - config = { + config = let + lopts = lib.lists.optionals; + in { nix.settings = { substituters = ["https://hyprland.cachix.org"]; trusted-public-keys = ["hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="]; }; } // lib.mkIf config.hypr.enable { - wayland.windowManager.hyprland = { + wayland.windowManager.hyprland = let + mod = config.hypr.mod_key; + # p-s = let + # chw = config.hypr.workspace; + # findDefaultWs = id: if (builtins.hasAttr id chw.workspaces) + # then (builtins.head (builtins.getAttr id chw.workspaces)) + # else ""; + # in with config.hypr.workspace; lib.mkIf primary-secondary.enable { + # primaryWs = findDefaultWs primary-secondary.primary; + # secondaryWs = findDefaultWs primary-secondary.secondary; + # }; + in { enable = true; - extraConfig = '' - ${builtins.readFile ./window_rules.conf} - ${builtins.readFile ./league_rules.conf} - ${builtins.readFile ./settings.conf} - ${builtins.readFile ./nvidia.conf} - ${builtins.readFile ./keybinds.conf} - ${builtins.readFile ./xwaylandvideobridge.conf} - exec-once=${pkgs.polkit-kde-agent}/libexec/polkit-kde-authentication-agent-1 + settings = { + monitor = config.hypr.monitor.details; + workspace = let + wsMonitor = monitor: wrksps: map (ws: + if ws == (builtins.head wrksps) + then "name:"+ws+", monitor:"+monitor+", persistent:true, default:true" + else "name:"+ws+", monitor:"+monitor+", persistent:true" + ) wrksps; + makeRules = wsAttr: builtins.concatLists (builtins.attrValues ( + builtins.mapAttrs wsMonitor wsAttr + )); + in makeRules config.hypr.workspace.workspaces + ++ lopts config.hypr.workspace.scratchpad.enable [ + "special:scratch, on-created-empty: [float; size 50% 50%; center] ${config.defaultApps.terminal}" + ]; + input = { + accel_profile = "flat"; + sensitivity = config.hypr.mouse.sensitivity; + }; + general = { + gaps_in = 3; + gaps_out = 3; + border_size = 2; + "col.active_border" = "rgb(F5C2E7)"; + "col.inactive_border" = "rgb(1E1D2F)"; + layout = "master"; + }; + decoration = { + rounding = 2; + blur = { + enabled = true; + size = 12; + passes = 2; + special = true; + }; + }; + animation = [ + "windows, 1, 4, default, popin 50%" + "windowsOut, 1, 4, default, popin 50%" + "windowsMove, 1, 3, default" + "border, 1, 3, default" + "fade, 1, 3, default" + "workspaces, 1, 3, default" + ]; + master = { + no_gaps_when_only = 1; + mfact = config.hypr.master.mfact; + }; + misc = { + focus_on_activate = true; + }; - env = HYPRCURSOR_THEME,miku - env = HYPRCURSOR_SIZE,64 - ''; + exec-once = lopts config.hypr.polkit.enable [ + "${pkgs.polkit-kde-agent}/libexec/polkit-kde-authentication-agent-1" + ] ++ lopts config.hypr.background.enable [ + "${pkgs.swww}/swww init" + "${pkgs.swww}/swww img ${config.hypr.background.path}" + ] ++ lopts config.ags.enable [ + "ags" + ] ++ lopts config.beeper.enable [ + "[workspace name:chat silent] Beeper" + ]; + + env = with config.hypr; [ + # "HYPR_MON_PRIMARY, ${workspace.primary-secondary.primary}" + # "HYPR_MON_SECONDARY, ${workspace.primary-secondary.secondary}" + "HYPR_WORK_DB, ${config.xdg.cacheHome}/hypr/workspace.db" + ] ++ lopts cursor.enable [ + "HYPRCURSOR_THEME,${cursor.theme}" + "HYPRCURSOR_SIZE,${cursor.size}" + ] ++ lopts config.nvidia.enable [ + "LIBVA_DRIVER_NAME,nvidia" + "XDG_SESSION_TYPE,wayland" + "GBM_BACKEND,nvidia-drm" + "__GLX_VENDOR_LIBRARY_NAME,nvidia" + "WLR_RENDERER_ALLOW_SOFTWARE,1" + "WLR_DRM_DEVICES,/dev/dri/card1" + ]; + + windowrulev2 = let + workspaceDefaults = wsname: applist: map ( + app: "workspace " + wsname + ", " + app + ) applist; + allDefault = wsAttr: builtins.concatLists (builtins.attrValues ( + builtins.mapAttrs workspaceDefaults wsAttr + )); + in allDefault config.hypr.workspace.defaults + ++ lopts config.hypr.xwayland.videobridge.enable [ + "opacity 0.0 override 0.0 override,class:^(xwaylandvideobridge)$" + "noanim,class:^(xwaylandvideobridge)$" + "noinitialfocus,class:^(xwaylandvideobridge)$" + "maxsize 1 1,class:^(xwaylandvideobridge)$" + "noblur,class:^(xwaylandvideobridge)$" + ] ++ map (id: "opacity 1 override, " + id) config.hypr.windows.opaque + ++ [ + "opacity 0.94 fullscreen:0" + "opacity 0.79 override, class:^(${config.defaultApps.terminal})$" + ]; + + # 1, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh home + # 2, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh web + # 3, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh med + # 4, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh game + # 5, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh etc + # _, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh hell + # TAB, exec, $XDG_CONFIG_HOME/hypr/scripts/changesecondary.xsh + # + # SHIFT, 1, movetoworkspacesilent, name:home + # SHIFT, 2, movetoworkspacesilent, name:web + # SHIFT, 3, movetoworkspacesilent, name:med + # SHIFT, 4, movetoworkspacesilent, name:game + # SHIFT, TAB, movetoworkspacesilent, r-1 + + bind = let + modPrefix = kb: if (lib.strings.hasPrefix "&" kb) + then ("${mod}" + kb) + else ("${mod}, " + kb); + in map modPrefix ([ + "return, exec, ${config.defaultApps.terminal}" + "&SHIFT, Q, exit" + "h, focusmonitor, l" + "l, focusmonitor, r" + "j, cyclenext," + "k, cyclenext, prev" + "&SHIFT, h, movecurrentworkspacetomonitor, -1" + "&SHIFT, l, movecurrentworkspacetomonitor, +1" + "&SHIFT, j, swapnext," + "&SHIFT, k, swapnext, prev" + "c, killactive" + "f, togglefloating" + "&SHIFT, f, fullscreen" + ] ++ (let + workspaces = builtins.concatLists ( + builtins.attrValues config.hypr.workspace.workspaces); + wsBinds = with builtins; wrksps: depth: if depth > (length wrksps) + then [] + else let ws = builtins.elemAt wrksps (depth -1); in [ + "${toString depth}, workspace, name:${ws}" + "&SHIFT, ${toString depth}, movetoworkspacesilent, name:${ws}" + ] ++ wsBinds wrksps (depth + 1); + in wsBinds workspaces 1) ++ lopts config.rofi.enable [ + "&SHIFT, return, exec, ${pkgs.rofi}/rofi -show run" + ] ++ lopts config.hypr.screenshot.enable [ + "P, exec, ${pkgs.grimblast}/grimblast --freeze copy area" + "&SHIFT, P, exec, ${pkgs.grimblast}/grimblast --freeze copysave area" + ] ++ lopts config.hypr.workspace.scratchpad.enable [ + "i, togglespecialworkspace, scratch" + ]); + + bindm = map (kb: "${mod}, " + kb) [ + "mouse:272, movewindow" + "mouse:273, movewindow" + ]; + }; }; + home.packages = with pkgs; [ - socat # For hyprland scripts - swww # Wallpaper engine wlr-randr # Xrandr for wayland wl-clipboard # Clipboard manager for wayland xdg-desktop-portal-hyprland # XDP for hyprland + ] ++ lopts config.hypr.xwayland.videobridge.enable [ + xwaylandvideobridge + ] ++ lopts config.hypr.cursor.enable [ + hyprcursor + ] ++ lopts config.hypr.screenshot.enable [ hyprpicker # Colorpicker, needed for screenshot tool - hyprcursor # Hyprland cursor - inputs.hyprland-contrib.packages.${pkgs.system}.grimblast # Screenshot tool - xonsh - polkit-kde-agent # Polkit handler + inputs.hyprland-contrib.packages.${pkgs.system}.grimblast ]; - # Hyprland screenshot tool + xdg.configFile."hypr-scripts" = { source = rootPath + "/scripts"; target = "hypr/scripts"; executable = true; }; - xdg.dataFile."hypr-icons" = { + xdg.dataFile."hypr-icons" = lib.mkIf config.hypr.cursor.enable { source = rootPath + "/icons"; target = "icons/"; recursive = true; diff --git a/hmModules/apps/hypr/keybinds.conf b/hmModules/apps/hypr/keybinds.conf deleted file mode 100644 index 06d307a..0000000 --- a/hmModules/apps/hypr/keybinds.conf +++ /dev/null @@ -1,48 +0,0 @@ -$mainMod = SUPER - -# Exec programs -bind = $mainMod, return, exec, kitty -bind = $mainMod SHIFT, return, exec, rofi -show run -bind = $mainMod, P, exec, grimblast --freeze copy area -bind = $mainMod SHIFT, P, exec, grimblast --freeze copysave area - -# Hyprland Management -bind = $mainMod SHIFT, Q, exit, - -# Workspace / Monitor Management -bind = $mainMod, h, focusmonitor, l -bind = $mainMod, l, focusmonitor, r -bind = $mainMod, j, cyclenext, -bind = $mainMod, k, cyclenext, prev -bind = $mainMod SHIFT, j, swapnext, -bind = $mainMod SHIFT, k, swapnext, prev -bind = $mainMod SHIFT, h, movecurrentworkspacetomonitor, -1 -bind = $mainMod SHIFT, l, movecurrentworkspacetomonitor, +1 - -bind = $mainMod, 1, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh home -bind = $mainMod, 2, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh web -bind = $mainMod, 3, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh med -bind = $mainMod, 4, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh game -binde = $mainMod, 5, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh etc -binde = $mainMod, _, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh hell -binde = $mainMod, TAB, exec, $XDG_CONFIG_HOME/hypr/scripts/changesecondary.xsh - -bind = $mainMod, m, togglespecialworkspace, mus -bind = $mainMod, i, togglespecialworkspace, scratch - -# Window Management -bind = $mainMod, C, killactive, - -bind = $mainMod, F, togglefloating, -bind = $mainMod SHIFT, F, fullscreen, - -bind = $mainMod SHIFT, 1, movetoworkspacesilent, name:home -bind = $mainMod SHIFT, 2, movetoworkspacesilent, name:web -bind = $mainMod SHIFT, 3, movetoworkspacesilent, name:med -bind = $mainMod SHIFT, 4, movetoworkspacesilent, name:game -bind = $mainMod SHIFT, _, movetoworkspacesilent, name:hell -bind = $mainMod SHIFT, TAB, movetoworkspacesilent, r-1 - -# Move/resize windows with mainMod + LMB/RMB and dragging -bindm = $mainMod, mouse:272, movewindow -bindm = $mainMod, mouse:273, resizewindow diff --git a/hmModules/apps/hypr/league_rules.conf b/hmModules/apps/hypr/league_rules.conf deleted file mode 100644 index 5c573f0..0000000 --- a/hmModules/apps/hypr/league_rules.conf +++ /dev/null @@ -1,25 +0,0 @@ -# no opacity -windowrulev2 = opacity 1 1, class:^(league of legends.exe)$ # loading text -windowrulev2 = opacity 1 override, class:^(leagueclientux.exe)$ # client -windowrulev2 = opacity 1 override, class:^(leagueclient.exe)$ # game - -# nice loading text -windowrulev2 = noblur, class:^(leagueclient.exe)$ -windowrulev2 = noborder, class:^(leagueclient.exe)$ -windowrulev2 = nofocus, class:^(leagueclient.exe)$ -windowrulev2 = noshadow, class:^(leagueclient.exe)$ - -# windowrulev2 = immediate, class:^(league of legends.exe)$ -# windowrulev2 = immediate, class:^(overwatch.exe)$ -# windowrulev2 = immediate, class:^(steam_app_1384160)$ -windowrulev2 = fullscreen, class:^(overwatch.exe)$ -windowrulev2 = fullscreen, class:^(steam_app_1384160)$ -windowrulev2 = fullscreen, class:^(league of legends.exe)$ - -# workspaces -windowrule = workspace name:game, leagueclient.exe -windowrule = workspace name:game, leagueclientux.exe -windowrule = workspace name:game, league of legends.exe -windowrule = workspace name:game, overwatch.exe -windowrule = workspace name:game, 東方紅魔郷.exe -windowrule = workspace name:game, steam_app_1384160 diff --git a/hmModules/apps/hypr/nvidia.conf b/hmModules/apps/hypr/nvidia.conf deleted file mode 100644 index 0e00cc7..0000000 --- a/hmModules/apps/hypr/nvidia.conf +++ /dev/null @@ -1,7 +0,0 @@ -# Nivida Settings -env = LIBVA_DRIVER_NAME,nvidia -env = XDG_SESSION_TYPE,wayland -env = GBM_BACKEND,nvidia-drm -env = __GLX_VENDOR_LIBRARY_NAME,nvidia -env = WLR_RENDERER_ALLOW_SOFTWARE,1 -env = WLR_DRM_DEVICES,/dev/dri/card1 diff --git a/hmModules/apps/hypr/scripts/initdb.xsh b/hmModules/apps/hypr/scripts/initdb.xsh deleted file mode 100755 index 85bdad5..0000000 --- a/hmModules/apps/hypr/scripts/initdb.xsh +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env xonsh -import shelve - -# Usage: -# ./initdb.xsh -# initialize a db for use hypr workspace scripts - -with shelve.open($HYPR_WORK_DB) as db: - db["primary"] = "home" - db["secondary"] = "chat" - db["secondaries"] = ["chat", "web", "med"] - db["secondary_extras"] = 1 - db["primary_extras"] = 1 diff --git a/hmModules/apps/hypr/settings.conf b/hmModules/apps/hypr/settings.conf deleted file mode 100644 index bc2848c..0000000 --- a/hmModules/apps/hypr/settings.conf +++ /dev/null @@ -1,62 +0,0 @@ -# Monitor Settings -monitor=DP-2,2560x1440@144,0x0,1 -monitor=DP-1,2560x1440@144,-2560x0,1 -monitor=HDMI-A-1,disable - -# Inits -exec-once = swww init -exec-once = swww img $HOME/med/pix/bg.png -exec-once = ags - -# Settings -input { - kb_layout = us - follow_mouse = 1 - accel_profile = flat - sensitivity = -0.52 - #sensitivity = 0.2 # -1.0 - 1.0, 0 means no modification. -} - -general { - gaps_in = 3 - gaps_out = 3 - border_size = 2 - col.active_border = rgb(F5C2E7) - col.inactive_border = rgb(1E1D2F) - - layout = master -} - -decoration { - rounding = 2 - blur { - enabled = true - size = 12 - passes = 2 - special = true - } - dim_special = 0.2 -} - -animations { - enabled = yes - - animation = windows, 1, 4, default, popin 50% - animation = windowsOut, 1, 4, default, popin 50% - animation = windowsMove, 1, 3, default - animation = border, 1, 3, default - animation = fade, 1, 3, default - animation = workspaces, 1, 3, default -} - -master { - no_gaps_when_only = true - new_is_master = false - mfact = 0.53 -} - -misc { - focus_on_activate = true - enable_swallow = false - swallow_regex = ^(Alacritty)$ -} diff --git a/hmModules/apps/hypr/window_rules.conf b/hmModules/apps/hypr/window_rules.conf deleted file mode 100644 index 57be0c8..0000000 --- a/hmModules/apps/hypr/window_rules.conf +++ /dev/null @@ -1,40 +0,0 @@ -env = HYPR_MON_PRIMARY, DP-2 -env = HYPR_MON_SECONDARY, DP-1 - -# Primaries -workspace=name:home, monitor:DP-2, persistent:true, default:true -workspace=name:game, monitor:DP-2, persistent:true -workspace=name:etc0, monitor:DP-2, persistent:true -workspace=name:hell, monitor:DP-2, persistent:true -# Secondaries -workspace=name:chat, monitor:DP-1, persistent:true, default:true -workspace=name:misc0, monitor:DP-1, persistent:true -# Switches -workspace=name:web , monitor:DP-1, persistent:true -workspace=name:med , monitor:DP-1, persistent:true -# Pseudo -workspace=special:mus, persistent:true -workspace=special:scratch, on-created-empty: [float; size 50% 50%; center] kitty - -windowrule = workspace name:web, librewolf -windowrulev2 = workspace name:med, librewolf,title:Picture-in-Picture -windowrule = workspace name:chat, discord -windowrule = workspace name:chat, Beeper -windowrule = workspace name:game, lutris -windowrule = workspace name:game, explorer.exe - -windowrulev2 = opacity 0.94 fullscreen:0 - -windowrulev2 = opacity 0.79 override, class:^(Alacritty)$ -windowrulev2 = opacity 0.79 override, class:^(kitty)$ -windowrulev2 = opacity 1 override, initialTitle:^(Discord Popout)$ -windowrulev2 = opacity 1 override, class:^(firefox)$ -windowrulev2 = opacity 1 override, class:^(Gimp)$ -windowrulev2 = opacity 1 override, class:^(feh)$ -windowrulev2 = opacity 1 override, class:^(mpv)$ - -env = HYPR_WORK_DB,$XDG_CACHE_HOME/hypr/workspace.db - -# exec-once = [workspace special:mus silent;float;size 70% 70%;center] mus client -exec-once = [workspace name:chat silent] vesktop -exec-once = [workspace name:chat silent] beeper diff --git a/hmModules/apps/hypr/xwaylandvideobridge.conf b/hmModules/apps/hypr/xwaylandvideobridge.conf deleted file mode 100644 index 4b77ad2..0000000 --- a/hmModules/apps/hypr/xwaylandvideobridge.conf +++ /dev/null @@ -1,5 +0,0 @@ -windowrulev2 = opacity 0.0 override 0.0 override,class:^(xwaylandvideobridge)$ -windowrulev2 = noanim,class:^(xwaylandvideobridge)$ -windowrulev2 = noinitialfocus,class:^(xwaylandvideobridge)$ -windowrulev2 = maxsize 1 1,class:^(xwaylandvideobridge)$ -windowrulev2 = noblur,class:^(xwaylandvideobridge)$ diff --git a/hmModules/apps/librewolf/default.nix b/hmModules/apps/librewolf/default.nix index 7995cbb..f298127 100644 --- a/hmModules/apps/librewolf/default.nix +++ b/hmModules/apps/librewolf/default.nix @@ -3,6 +3,7 @@ { options.librewolf = { enable = lib.mkEnableOption "Enables librewolf"; + make_default = lib.mkEnableOption "Makes librewolf the default browser"; }; config = lib.mkIf config.librewolf.enable { @@ -12,5 +13,6 @@ home.sessionVariables = { BROWSER = "librewolf"; }; + defaultApps.browser = lib.mkIf config.librewolf.make_default "librewolf"; }; } diff --git a/hmModules/apps/terminal-emulators/kitty/default.nix b/hmModules/apps/terminal-emulators/kitty/default.nix index b4ae35a..23b8161 100644 --- a/hmModules/apps/terminal-emulators/kitty/default.nix +++ b/hmModules/apps/terminal-emulators/kitty/default.nix @@ -3,6 +3,7 @@ { options.kitty = { enable = lib.mkEnableOption "Enables kitty"; + make_default = lib.mkEnableOption "Makes kitty default terminal emulator"; font = lib.mkOption { default = ""; }; font_size = lib.mkOption { default = 18; }; }; @@ -17,5 +18,6 @@ confirm_os_window_close = 0; }; }; + defaultApps.terminal = lib.mkIf config.kitty.make_default "kitty"; }; } diff --git a/hmModules/services/home/default.nix b/hmModules/services/home/default.nix index bbb4cf2..7bf691a 100644 --- a/hmModules/services/home/default.nix +++ b/hmModules/services/home/default.nix @@ -3,6 +3,11 @@ { options = { extraPkgs = lib.mkOption { default = []; }; + nvidia.enable = lib.mkEnableOption "Enables nvidia requirements"; + defaultApps = { + terminal = lib.mkOption { default = ""; }; + browser = lib.mkOption { default = ""; }; + }; }; config = { diff --git a/systems/jibril/default.nix b/systems/jibril/default.nix new file mode 100644 index 0000000..109e666 --- /dev/null +++ b/systems/jibril/default.nix @@ -0,0 +1,110 @@ +{ config, ... }: + +{ + home.username = "pan"; + nixpkgs.config.allowUnfree = true; + home.stateVersion = "23.05"; + + hypr.enable = true; + hypr.monitor = { + details = [ + "eDP-2,2256x1504@60,0x0,1" + ]; + }; + hypr.workspace = { + workspaces = { + "eDP-1" = [ + "home" + "web" + "chat" + "med" + ]; + }; + scratchpad.enable = true; + defaults = { + "name:web" = [ "class:(librewolf)" ]; + "name:med" = [ "class:(librewolf),title:Picture-in-Picture" ]; + "name:chat" = [ "class:(Beeper)" ]; + }; + }; + hypr.windows.opaque = [ + "initialTitle:^(Discord Popout)$" + "class:^(firefox)$" + "class:^(Gimp)$" + "class:^(feh)$" + "class:^(mpv)$" + ]; + hypr.background = { + enable = true; + path = "${config.home.homeDirectory}/med/pix/bg.png"; + }; + # hypr.cursor = { + # enable = true; + # theme = "miku"; + # }; + hypr = { + screenshot.enable = true; + mouse.sensitivity = -0.52; + polkit.enable = true; + master.mfact = 0.53; + xwayland.videobridge.enable = true; + }; + # ags.enable = true; + rofi.enable = true; + + timer.enableHourly = true; + timer.enableQuarterly = true; + colors.enable = true; + manpages.enable = true; + trash.enable = true; + + fish.enable = true; + kitty.enable = true; + kitty.make_default = true; + kitty.font = "Cascadia Code"; + git.enable = true; + git.username = "Julia Lange"; + git.email = "public@julialange.org"; + ssh.enable = true; + librewolf.enable = true; + librewolf.make_default = true; + + mpv.enable = true; + zathura.enable = true; + feh.enable = true; + + neovim.enable = true; + neovim.languages = { + c.enable = true; + nix.enable = true; + rust.enable = true; + }; + neovim.plugins = { + comments.enable = true; + fugitive.enable = true; + lualine.enable = true; + luasnip.enable = true; + nvimcmp.enable = true; + telescope = { + enable = true; + fzf.enable = true; + }; + treesitter.enable = true; + wiki.enable = true; + }; + + lf.enable = true; + lf.hiddenfiles = [ + "${config.home.homeDirectory}/.librewolf" + "${config.home.homeDirectory}/.nix-defexpr" + "${config.home.homeDirectory}/.nix-profile" + "${config.home.homeDirectory}/.nv" + "${config.home.homeDirectory}/.pki" + ]; + zoxide.enable = true; + + gimp.enable = true; + + beeper.enable = true; + discord.enable = true; +} diff --git a/systems/pan/default.nix b/systems/onizuka/default.nix similarity index 59% rename from systems/pan/default.nix rename to systems/onizuka/default.nix index c5473ff..f59b05b 100644 --- a/systems/pan/default.nix +++ b/systems/onizuka/default.nix @@ -6,6 +6,57 @@ home.stateVersion = "23.05"; hypr.enable = true; + hypr.monitor = { + details = [ + "DP-2,2560x1440@144,0x0,1" + "DP-1,2560x1440@144,-2560x0,1" + "HDMI-A-1,disable" + ]; + primary = "DP-2"; + secondary = "DP-1"; + }; + hypr.workspace = { + workspaces = { + "DP-2" = [ + "home" + "web" + "med" + "game" + ]; + "DP-1" = [ + "chat" + ]; + }; + scratchpad.enable = true; + defaults = { + "name:web" = [ "librewolf" ]; + "name:med" = [ "librewolf,title:Picture-in-Picture" ]; + "name:chat" = [ "Beeper" ]; + "name:game" = [ "lutris" "explorer.exe" ]; + }; + }; + windows.opaque = [ + "initialTitle:^(Discord Popout)$" + "class:^(firefox)$" + "class:^(Gimp)$" + "class:^(feh)$" + "class:^(mpv)$" + ]; + hypr.background = { + enable = true; + path = "${config.home.homeDirectory}/med/pix/bg.png"; + }; + hypr.cursor = { + enable = true; + theme = "miku"; + }; + hypr = { + screenshot.enable = true; + mouse.sensitivity = -0.52; + polkit.enable = true; + master.mfact = 0.53; + xwayland.videobridge.enable = true; + }; ags.enable = true; rofi.enable = true; @@ -17,11 +68,14 @@ fish.enable = true; kitty.enable = true; + kitty.make_default = true; kitty.font = "Cascadia Code"; git.enable = true; git.username = "Julia Lange"; git.email = "public@julialange.org"; ssh.enable = true; + librewolf.enable = true; + librewolf.make_default = true; mpv.enable = true; zathura.enable = true; From bb2c29495c44f9e144622292a217fd5bd7b14a78 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sat, 12 Oct 2024 21:19:23 -0700 Subject: [PATCH 202/412] Global, Hypr, Systems, Flake update 2024-10-21 Refactored systems to be dependant on host. So that jibril and onizuka can have separate profiles. Doing this split up the systems/ folder, and also forced a flake update to test. This was done midway through the hypr rework, and would have been difficult to decouple, so I just did a big commit instead <3 Refactored the entire hypr system to use settings and nix rather than its native config. This is working and tested on Jibril, but is missing the scripts used for switching workspaces on Onizuka. --- flake.lock | 239 ++++++++++++++---- flake.nix | 5 +- hmModules/apps/default.nix | 1 + hmModules/apps/hypr/default.nix | 228 +++++++++++++++-- hmModules/apps/hypr/keybinds.conf | 48 ---- hmModules/apps/hypr/league_rules.conf | 25 -- hmModules/apps/hypr/nvidia.conf | 7 - hmModules/apps/hypr/scripts/initdb.xsh | 13 - hmModules/apps/hypr/settings.conf | 62 ----- hmModules/apps/hypr/window_rules.conf | 40 --- hmModules/apps/hypr/xwaylandvideobridge.conf | 5 - hmModules/apps/librewolf/default.nix | 2 + .../apps/terminal-emulators/kitty/default.nix | 2 + hmModules/services/home/default.nix | 5 + systems/jibril/default.nix | 110 ++++++++ systems/{pan => onizuka}/default.nix | 54 ++++ 16 files changed, 572 insertions(+), 274 deletions(-) delete mode 100644 hmModules/apps/hypr/keybinds.conf delete mode 100644 hmModules/apps/hypr/league_rules.conf delete mode 100644 hmModules/apps/hypr/nvidia.conf delete mode 100755 hmModules/apps/hypr/scripts/initdb.xsh delete mode 100644 hmModules/apps/hypr/settings.conf delete mode 100644 hmModules/apps/hypr/window_rules.conf delete mode 100644 hmModules/apps/hypr/xwaylandvideobridge.conf create mode 100644 systems/jibril/default.nix rename systems/{pan => onizuka}/default.nix (59%) diff --git a/flake.lock b/flake.lock index b35f8a9..4e753bc 100644 --- a/flake.lock +++ b/flake.lock @@ -2,14 +2,15 @@ "nodes": { "ags": { "inputs": { - "nixpkgs": "nixpkgs" + "nixpkgs": "nixpkgs", + "systems": "systems" }, "locked": { - "lastModified": 1721074762, - "narHash": "sha256-RhqFBMLh6G5vAo7Jz9mdsworI50E4FAAg7rPho4CNfY=", + "lastModified": 1728326430, + "narHash": "sha256-tV1ABHuA1HItMdCTuNdA8fMB+qw7LpjvI945VwMSABI=", "owner": "Aylur", "repo": "ags", - "rev": "8194f0c9546a150525a2022c17aed51df1464b80", + "rev": "60180a184cfb32b61a1d871c058b31a3b9b0743d", "type": "github" }, "original": { @@ -18,16 +19,87 @@ "type": "github" } }, + "aquamarine": { + "inputs": { + "hyprutils": [ + "hyprland", + "hyprutils" + ], + "hyprwayland-scanner": [ + "hyprland", + "hyprwayland-scanner" + ], + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1729527199, + "narHash": "sha256-D5/YksfRga8Akd04ZtIkuYSIOjXVrAzQIQBSeplokzU=", + "owner": "hyprwm", + "repo": "aquamarine", + "rev": "8d732fa8aff8b12ef2b1e2f00fc8153e41312b72", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "aquamarine", + "type": "github" + } + }, + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "gitignore": { + "inputs": { + "nixpkgs": [ + "hyprland", + "pre-commit-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, "home-manager": { "inputs": { "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1720734513, - "narHash": "sha256-neWQ8eNtLTd+YMesb7WjKl1SVCbDyCm46LUgP/g/hdo=", + "lastModified": 1729551526, + "narHash": "sha256-7LAGY32Xl14OVQp3y6M43/0AtHYYvV6pdyBcp3eoz0s=", "owner": "nix-community", "repo": "home-manager", - "rev": "90ae324e2c56af10f20549ab72014804a3064c7f", + "rev": "5ec753a1fc4454df9285d8b3ec0809234defb975", "type": "github" }, "original": { @@ -52,11 +124,11 @@ ] }, "locked": { - "lastModified": 1720108799, - "narHash": "sha256-AxRkTJlbB8r7aG6gvc7IaLhc2T9TO4/8uqanKRxukBQ=", + "lastModified": 1728669738, + "narHash": "sha256-EDNAU9AYcx8OupUzbTbWE1d3HYdeG0wO6Msg3iL1muk=", "owner": "hyprwm", "repo": "hyprcursor", - "rev": "a5c0d57325c5f0814c39110a70ca19c070ae9486", + "rev": "0264e698149fcb857a66a53018157b41f8d97bb0", "type": "github" }, "original": { @@ -67,26 +139,27 @@ }, "hyprland": { "inputs": { + "aquamarine": "aquamarine", "hyprcursor": "hyprcursor", + "hyprland-protocols": "hyprland-protocols", "hyprlang": "hyprlang", "hyprutils": "hyprutils", "hyprwayland-scanner": "hyprwayland-scanner", "nixpkgs": "nixpkgs_3", - "systems": "systems", + "pre-commit-hooks": "pre-commit-hooks", + "systems": "systems_2", "xdph": "xdph" }, "locked": { - "lastModified": 1721044084, - "narHash": "sha256-vO6wBIaInnyIQqmsKc28AsFSWeCFgnFilNhv2zoN/tU=", + "lastModified": 1729715559, + "narHash": "sha256-DigThx4MJv4tWEimqYzxymIZFUcTgQ3D1vZyG8FD9VA=", "ref": "refs/heads/main", - "rev": "bd526822deb9ed47c0b51b534817aa8541fff07b", - "revCount": 4927, - "submodules": true, + "rev": "cdac64970e894c3211d94da8925fbf905b52a594", + "revCount": 5369, "type": "git", "url": "https://github.com/hyprwm/Hyprland" }, "original": { - "submodules": true, "type": "git", "url": "https://github.com/hyprwm/Hyprland" } @@ -96,11 +169,11 @@ "nixpkgs": "nixpkgs_4" }, "locked": { - "lastModified": 1720709712, - "narHash": "sha256-78j/cY+AXoMIqqiNc1vWx237EPfpERAcYsb57ABUbwQ=", + "lastModified": 1729224425, + "narHash": "sha256-w9dNUedNe2qnhHuhcRf7A1l29+/6DxdMfwN6g4U3c/w=", "owner": "hyprwm", "repo": "contrib", - "rev": "65d42dcbfde2229a75ccdb195c318dfe241f9ade", + "rev": "d72bc8b1cd30d448bd438e8328f8eeb4c0f2ddb6", "type": "github" }, "original": { @@ -113,21 +186,19 @@ "inputs": { "nixpkgs": [ "hyprland", - "xdph", "nixpkgs" ], "systems": [ "hyprland", - "xdph", "systems" ] }, "locked": { - "lastModified": 1718746314, - "narHash": "sha256-HUklK5u86w2Yh9dOkk4FdsL8eehcOZ95jPhLixGDRQY=", + "lastModified": 1728345020, + "narHash": "sha256-xGbkc7U/Roe0/Cv3iKlzijIaFBNguasI31ynL2IlEoM=", "owner": "hyprwm", "repo": "hyprland-protocols", - "rev": "1b61f0093afff20ab44d88ad707aed8bf2215290", + "rev": "a7c183800e74f337753de186522b9017a07a8cee", "type": "github" }, "original": { @@ -152,11 +223,11 @@ ] }, "locked": { - "lastModified": 1720381373, - "narHash": "sha256-lyC/EZdHULsaAKVryK11lgHY9u6pXr7qR4irnxNWC7k=", + "lastModified": 1728168612, + "narHash": "sha256-AnB1KfiXINmuiW7BALYrKqcjCnsLZPifhb/7BsfPbns=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "5df0174fd09de4ac5475233d65ffc703e89b82eb", + "rev": "f054f2e44d6a0b74607a6bc0f52dba337a3db38e", "type": "github" }, "original": { @@ -177,11 +248,11 @@ ] }, "locked": { - "lastModified": 1720545076, - "narHash": "sha256-Pxacc2uoxI00koXp5+CyNqHOTQlqNlK0rlRHDBHX4+g=", + "lastModified": 1728941256, + "narHash": "sha256-WRypmcZ2Bw94lLmcmxYokVOHPJSZ7T06V49QZ4tkZeQ=", "owner": "hyprwm", "repo": "hyprutils", - "rev": "6174a2a25f4e216c0f1d0c4278adc23c476b1d09", + "rev": "fd4be8b9ca932f7384e454bcd923c5451ef2aa85", "type": "github" }, "original": { @@ -202,11 +273,11 @@ ] }, "locked": { - "lastModified": 1720215857, - "narHash": "sha256-JPdL+Qul+jEueAn8CARfcWP83eJgwkhMejQYfDvrgvU=", + "lastModified": 1726874836, + "narHash": "sha256-VKR0sf0PSNCB0wPHVKSAn41mCNVCnegWmgkrneKDhHM=", "owner": "hyprwm", "repo": "hyprwayland-scanner", - "rev": "d5fa094ca27e0039be5e94c0a80ae433145af8bb", + "rev": "500c81a9e1a76760371049a8d99e008ea77aa59e", "type": "github" }, "original": { @@ -217,11 +288,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1718714799, - "narHash": "sha256-FUZpz9rg3gL8NVPKbqU8ei1VkPLsTIfAJ2fdAf5qjak=", + "lastModified": 1725634671, + "narHash": "sha256-v3rIhsJBOMLR8e/RNWxr828tB+WywYIoajrZKFM+0Gg=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "c00d587b1a1afbf200b1d8f0b0e4ba9deb1c7f0e", + "rev": "574d1eac1c200690e27b8eb4e24887f8df7ac27c", "type": "github" }, "original": { @@ -231,13 +302,29 @@ "type": "github" } }, - "nixpkgs_2": { + "nixpkgs-stable": { "locked": { - "lastModified": 1719848872, - "narHash": "sha256-H3+EC5cYuq+gQW8y0lSrrDZfH71LB4DAf+TDFyvwCNA=", + "lastModified": 1720386169, + "narHash": "sha256-NGKVY4PjzwAa4upkGtAMz1npHGoRzWotlSnVlqI40mo=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "00d80d13810dbfea8ab4ed1009b09100cca86ba8", + "rev": "194846768975b7ad2c4988bdb82572c00222c0d7", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-24.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1729256560, + "narHash": "sha256-/uilDXvCIEs3C9l73JTACm4quuHUsIHcns1c+cHUJwA=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "4c2fcb090b1f3e5b47eaa7bd33913b574a11e0a0", "type": "github" }, "original": { @@ -249,11 +336,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1720542800, - "narHash": "sha256-ZgnNHuKV6h2+fQ5LuqnUaqZey1Lqqt5dTUAiAnqH0QQ=", + "lastModified": 1729413321, + "narHash": "sha256-I4tuhRpZFa6Fu6dcH9Dlo5LlH17peT79vx1y1SpeKt0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "feb2849fdeb70028c70d73b848214b00d324a497", + "rev": "1997e4aa514312c1af7e2bda7fad1644e778ff26", "type": "github" }, "original": { @@ -281,11 +368,11 @@ }, "nixpkgs_5": { "locked": { - "lastModified": 1720957393, - "narHash": "sha256-oedh2RwpjEa+TNxhg5Je9Ch6d3W1NKi7DbRO1ziHemA=", + "lastModified": 1729413321, + "narHash": "sha256-I4tuhRpZFa6Fu6dcH9Dlo5LlH17peT79vx1y1SpeKt0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "693bc46d169f5af9c992095736e82c3488bf7dbb", + "rev": "1997e4aa514312c1af7e2bda7fad1644e778ff26", "type": "github" }, "original": { @@ -294,6 +381,30 @@ "type": "indirect" } }, + "pre-commit-hooks": { + "inputs": { + "flake-compat": "flake-compat", + "gitignore": "gitignore", + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "nixpkgs-stable": "nixpkgs-stable" + }, + "locked": { + "lastModified": 1729104314, + "narHash": "sha256-pZRZsq5oCdJt3upZIU4aslS9XwFJ+/nVtALHIciX/BI=", + "owner": "cachix", + "repo": "git-hooks.nix", + "rev": "3c3e88f0f544d6bb54329832616af7eb971b6be6", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "git-hooks.nix", + "type": "github" + } + }, "root": { "inputs": { "ags": "ags", @@ -318,13 +429,39 @@ "type": "github" } }, + "systems_2": { + "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" + } + }, "xdph": { "inputs": { - "hyprland-protocols": "hyprland-protocols", + "hyprland-protocols": [ + "hyprland", + "hyprland-protocols" + ], "hyprlang": [ "hyprland", "hyprlang" ], + "hyprutils": [ + "hyprland", + "hyprutils" + ], + "hyprwayland-scanner": [ + "hyprland", + "hyprwayland-scanner" + ], "nixpkgs": [ "hyprland", "nixpkgs" @@ -335,11 +472,11 @@ ] }, "locked": { - "lastModified": 1720194466, - "narHash": "sha256-Rizg9efi6ue95zOp0MeIV2ZedNo+5U9G2l6yirgBUnA=", + "lastModified": 1728166987, + "narHash": "sha256-w6dVTguAn9zJ+7aPOhBQgDz8bn6YZ7b56cY8Kg5HJRI=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "b9b97e5ba23fe7bd5fa4df54696102e8aa863cf6", + "rev": "fb9c8d665af0588bb087f97d0f673ddf0d501787", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index aab3597..e1f211a 100644 --- a/flake.nix +++ b/flake.nix @@ -5,7 +5,7 @@ nixpkgs.url = "nixpkgs/nixos-unstable"; home-manager.url = "github:nix-community/home-manager"; - hyprland.url = "git+https://github.com/hyprwm/Hyprland?submodules=1"; + hyprland.url = "git+https://github.com/hyprwm/Hyprland"; hyprland-contrib.url = "github:hyprwm/contrib"; ags.url = "github:Aylur/ags"; }; @@ -22,6 +22,7 @@ ] ++ extraModules; }; in { - homeConfigurations.pan = defaultConfig [ ./systems/pan ]; + homeConfigurations."pan@onizuka" = defaultConfig [ ./systems/onizuka ]; + homeConfigurations."pan@jibril" = defaultConfig [ ./systems/jibril ]; }; } diff --git a/hmModules/apps/default.nix b/hmModules/apps/default.nix index 735a533..ef1c1b2 100644 --- a/hmModules/apps/default.nix +++ b/hmModules/apps/default.nix @@ -7,6 +7,7 @@ ./gimp ./git ./hypr + ./librewolf ./lutris ./media-viewers ./neovim diff --git a/hmModules/apps/hypr/default.nix b/hmModules/apps/hypr/default.nix index 45c67df..a28db98 100644 --- a/hmModules/apps/hypr/default.nix +++ b/hmModules/apps/hypr/default.nix @@ -3,51 +3,237 @@ let rootPath = ./.; in { options.hypr = { enable = lib.mkEnableOption "Enables hyprland"; + mod_key = lib.mkOption { default = "SUPER"; }; + monitor = { + details = lib.mkOption { default = []; }; + }; + workspace = { + workspaces = lib.mkOption { default = {}; }; + scratchpad.enable = lib.mkEnableOption "Enables a scratchpad"; + defaults = lib.mkOption { default = {}; }; + # primary-secondary = { + # enable = lib.mkEnableOption "Enables the primary-secondary navigation style"; + # primary = lib.mkOption { default = "DP-1"; }; + # secondary = lib.mkOption { default = "DP-2"; }; + # secondaries = lib.mkOption { default = []; }; + # }; + }; + windows.opaque = lib.mkOption { default = []; }; + background = { + enable = lib.mkEnableOption "Enables a wallpaper"; + path = lib.mkOption { default = ""; }; + }; + cursor = { + enable = lib.mkEnableOption "Enables custom cursor"; + theme = lib.mkOption { default = ""; }; + size = lib.mkOption { default = 64; }; + }; + xwayland.videobridge.enable = lib.mkEnableOption "Enable xwaylandvideobridge"; + mouse.sensitivity = lib.mkOption { default = 0; }; + master.mfact = lib.mkOption { default = 0.55; }; + polkit.enable = lib.mkEnableOption "Enables polkit agent"; + screenshot.enable = lib.mkEnableOption "Enables Screenshotting"; }; imports = [ inputs.hyprland.homeManagerModules.default ]; - config = { + config = let + lopts = lib.lists.optionals; + in { nix.settings = { substituters = ["https://hyprland.cachix.org"]; trusted-public-keys = ["hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="]; }; } // lib.mkIf config.hypr.enable { - wayland.windowManager.hyprland = { + wayland.windowManager.hyprland = let + mod = config.hypr.mod_key; + # p-s = let + # chw = config.hypr.workspace; + # findDefaultWs = id: if (builtins.hasAttr id chw.workspaces) + # then (builtins.head (builtins.getAttr id chw.workspaces)) + # else ""; + # in with config.hypr.workspace; lib.mkIf primary-secondary.enable { + # primaryWs = findDefaultWs primary-secondary.primary; + # secondaryWs = findDefaultWs primary-secondary.secondary; + # }; + in { enable = true; - extraConfig = '' - ${builtins.readFile ./window_rules.conf} - ${builtins.readFile ./league_rules.conf} - ${builtins.readFile ./settings.conf} - ${builtins.readFile ./nvidia.conf} - ${builtins.readFile ./keybinds.conf} - ${builtins.readFile ./xwaylandvideobridge.conf} - exec-once=${pkgs.polkit-kde-agent}/libexec/polkit-kde-authentication-agent-1 + settings = { + monitor = config.hypr.monitor.details; + workspace = let + wsMonitor = monitor: wrksps: map (ws: + if ws == (builtins.head wrksps) + then "name:"+ws+", monitor:"+monitor+", persistent:true, default:true" + else "name:"+ws+", monitor:"+monitor+", persistent:true" + ) wrksps; + makeRules = wsAttr: builtins.concatLists (builtins.attrValues ( + builtins.mapAttrs wsMonitor wsAttr + )); + in makeRules config.hypr.workspace.workspaces + ++ lopts config.hypr.workspace.scratchpad.enable [ + "special:scratch, on-created-empty: [float; size 50% 50%; center] ${config.defaultApps.terminal}" + ]; + input = { + accel_profile = "flat"; + sensitivity = config.hypr.mouse.sensitivity; + }; + general = { + gaps_in = 3; + gaps_out = 3; + border_size = 2; + "col.active_border" = "rgb(F5C2E7)"; + "col.inactive_border" = "rgb(1E1D2F)"; + layout = "master"; + }; + decoration = { + rounding = 2; + blur = { + enabled = true; + size = 12; + passes = 2; + special = true; + }; + }; + animation = [ + "windows, 1, 4, default, popin 50%" + "windowsOut, 1, 4, default, popin 50%" + "windowsMove, 1, 3, default" + "border, 1, 3, default" + "fade, 1, 3, default" + "workspaces, 1, 3, default" + ]; + master = { + no_gaps_when_only = 1; + mfact = config.hypr.master.mfact; + }; + misc = { + focus_on_activate = true; + }; - env = HYPRCURSOR_THEME,miku - env = HYPRCURSOR_SIZE,64 - ''; + exec-once = lopts config.hypr.polkit.enable [ + "${pkgs.polkit-kde-agent}/libexec/polkit-kde-authentication-agent-1" + ] ++ lopts config.hypr.background.enable [ + "${pkgs.swww}/swww init" + "${pkgs.swww}/swww img ${config.hypr.background.path}" + ] ++ lopts config.ags.enable [ + "ags" + ] ++ lopts config.beeper.enable [ + "[workspace name:chat silent] Beeper" + ]; + + env = with config.hypr; [ + # "HYPR_MON_PRIMARY, ${workspace.primary-secondary.primary}" + # "HYPR_MON_SECONDARY, ${workspace.primary-secondary.secondary}" + "HYPR_WORK_DB, ${config.xdg.cacheHome}/hypr/workspace.db" + ] ++ lopts cursor.enable [ + "HYPRCURSOR_THEME,${cursor.theme}" + "HYPRCURSOR_SIZE,${cursor.size}" + ] ++ lopts config.nvidia.enable [ + "LIBVA_DRIVER_NAME,nvidia" + "XDG_SESSION_TYPE,wayland" + "GBM_BACKEND,nvidia-drm" + "__GLX_VENDOR_LIBRARY_NAME,nvidia" + "WLR_RENDERER_ALLOW_SOFTWARE,1" + "WLR_DRM_DEVICES,/dev/dri/card1" + ]; + + windowrulev2 = let + workspaceDefaults = wsname: applist: map ( + app: "workspace " + wsname + ", " + app + ) applist; + allDefault = wsAttr: builtins.concatLists (builtins.attrValues ( + builtins.mapAttrs workspaceDefaults wsAttr + )); + in allDefault config.hypr.workspace.defaults + ++ lopts config.hypr.xwayland.videobridge.enable [ + "opacity 0.0 override 0.0 override,class:^(xwaylandvideobridge)$" + "noanim,class:^(xwaylandvideobridge)$" + "noinitialfocus,class:^(xwaylandvideobridge)$" + "maxsize 1 1,class:^(xwaylandvideobridge)$" + "noblur,class:^(xwaylandvideobridge)$" + ] ++ map (id: "opacity 1 override, " + id) config.hypr.windows.opaque + ++ [ + "opacity 0.94 fullscreen:0" + "opacity 0.79 override, class:^(${config.defaultApps.terminal})$" + ]; + + # 1, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh home + # 2, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh web + # 3, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh med + # 4, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh game + # 5, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh etc + # _, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh hell + # TAB, exec, $XDG_CONFIG_HOME/hypr/scripts/changesecondary.xsh + # + # SHIFT, 1, movetoworkspacesilent, name:home + # SHIFT, 2, movetoworkspacesilent, name:web + # SHIFT, 3, movetoworkspacesilent, name:med + # SHIFT, 4, movetoworkspacesilent, name:game + # SHIFT, TAB, movetoworkspacesilent, r-1 + + bind = let + modPrefix = kb: if (lib.strings.hasPrefix "&" kb) + then ("${mod}" + kb) + else ("${mod}, " + kb); + in map modPrefix ([ + "return, exec, ${config.defaultApps.terminal}" + "&SHIFT, Q, exit" + "h, focusmonitor, l" + "l, focusmonitor, r" + "j, cyclenext," + "k, cyclenext, prev" + "&SHIFT, h, movecurrentworkspacetomonitor, -1" + "&SHIFT, l, movecurrentworkspacetomonitor, +1" + "&SHIFT, j, swapnext," + "&SHIFT, k, swapnext, prev" + "c, killactive" + "f, togglefloating" + "&SHIFT, f, fullscreen" + ] ++ (let + workspaces = builtins.concatLists ( + builtins.attrValues config.hypr.workspace.workspaces); + wsBinds = with builtins; wrksps: depth: if depth > (length wrksps) + then [] + else let ws = builtins.elemAt wrksps (depth -1); in [ + "${toString depth}, workspace, name:${ws}" + "&SHIFT, ${toString depth}, movetoworkspacesilent, name:${ws}" + ] ++ wsBinds wrksps (depth + 1); + in wsBinds workspaces 1) ++ lopts config.rofi.enable [ + "&SHIFT, return, exec, ${pkgs.rofi}/rofi -show run" + ] ++ lopts config.hypr.screenshot.enable [ + "P, exec, ${pkgs.grimblast}/grimblast --freeze copy area" + "&SHIFT, P, exec, ${pkgs.grimblast}/grimblast --freeze copysave area" + ] ++ lopts config.hypr.workspace.scratchpad.enable [ + "i, togglespecialworkspace, scratch" + ]); + + bindm = map (kb: "${mod}, " + kb) [ + "mouse:272, movewindow" + "mouse:273, movewindow" + ]; + }; }; + home.packages = with pkgs; [ - socat # For hyprland scripts - swww # Wallpaper engine wlr-randr # Xrandr for wayland wl-clipboard # Clipboard manager for wayland xdg-desktop-portal-hyprland # XDP for hyprland + ] ++ lopts config.hypr.xwayland.videobridge.enable [ + xwaylandvideobridge + ] ++ lopts config.hypr.cursor.enable [ + hyprcursor + ] ++ lopts config.hypr.screenshot.enable [ hyprpicker # Colorpicker, needed for screenshot tool - hyprcursor # Hyprland cursor - inputs.hyprland-contrib.packages.${pkgs.system}.grimblast # Screenshot tool - xonsh - polkit-kde-agent # Polkit handler + inputs.hyprland-contrib.packages.${pkgs.system}.grimblast ]; - # Hyprland screenshot tool + xdg.configFile."hypr-scripts" = { source = rootPath + "/scripts"; target = "hypr/scripts"; executable = true; }; - xdg.dataFile."hypr-icons" = { + xdg.dataFile."hypr-icons" = lib.mkIf config.hypr.cursor.enable { source = rootPath + "/icons"; target = "icons/"; recursive = true; diff --git a/hmModules/apps/hypr/keybinds.conf b/hmModules/apps/hypr/keybinds.conf deleted file mode 100644 index 06d307a..0000000 --- a/hmModules/apps/hypr/keybinds.conf +++ /dev/null @@ -1,48 +0,0 @@ -$mainMod = SUPER - -# Exec programs -bind = $mainMod, return, exec, kitty -bind = $mainMod SHIFT, return, exec, rofi -show run -bind = $mainMod, P, exec, grimblast --freeze copy area -bind = $mainMod SHIFT, P, exec, grimblast --freeze copysave area - -# Hyprland Management -bind = $mainMod SHIFT, Q, exit, - -# Workspace / Monitor Management -bind = $mainMod, h, focusmonitor, l -bind = $mainMod, l, focusmonitor, r -bind = $mainMod, j, cyclenext, -bind = $mainMod, k, cyclenext, prev -bind = $mainMod SHIFT, j, swapnext, -bind = $mainMod SHIFT, k, swapnext, prev -bind = $mainMod SHIFT, h, movecurrentworkspacetomonitor, -1 -bind = $mainMod SHIFT, l, movecurrentworkspacetomonitor, +1 - -bind = $mainMod, 1, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh home -bind = $mainMod, 2, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh web -bind = $mainMod, 3, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh med -bind = $mainMod, 4, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh game -binde = $mainMod, 5, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh etc -binde = $mainMod, _, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh hell -binde = $mainMod, TAB, exec, $XDG_CONFIG_HOME/hypr/scripts/changesecondary.xsh - -bind = $mainMod, m, togglespecialworkspace, mus -bind = $mainMod, i, togglespecialworkspace, scratch - -# Window Management -bind = $mainMod, C, killactive, - -bind = $mainMod, F, togglefloating, -bind = $mainMod SHIFT, F, fullscreen, - -bind = $mainMod SHIFT, 1, movetoworkspacesilent, name:home -bind = $mainMod SHIFT, 2, movetoworkspacesilent, name:web -bind = $mainMod SHIFT, 3, movetoworkspacesilent, name:med -bind = $mainMod SHIFT, 4, movetoworkspacesilent, name:game -bind = $mainMod SHIFT, _, movetoworkspacesilent, name:hell -bind = $mainMod SHIFT, TAB, movetoworkspacesilent, r-1 - -# Move/resize windows with mainMod + LMB/RMB and dragging -bindm = $mainMod, mouse:272, movewindow -bindm = $mainMod, mouse:273, resizewindow diff --git a/hmModules/apps/hypr/league_rules.conf b/hmModules/apps/hypr/league_rules.conf deleted file mode 100644 index 5c573f0..0000000 --- a/hmModules/apps/hypr/league_rules.conf +++ /dev/null @@ -1,25 +0,0 @@ -# no opacity -windowrulev2 = opacity 1 1, class:^(league of legends.exe)$ # loading text -windowrulev2 = opacity 1 override, class:^(leagueclientux.exe)$ # client -windowrulev2 = opacity 1 override, class:^(leagueclient.exe)$ # game - -# nice loading text -windowrulev2 = noblur, class:^(leagueclient.exe)$ -windowrulev2 = noborder, class:^(leagueclient.exe)$ -windowrulev2 = nofocus, class:^(leagueclient.exe)$ -windowrulev2 = noshadow, class:^(leagueclient.exe)$ - -# windowrulev2 = immediate, class:^(league of legends.exe)$ -# windowrulev2 = immediate, class:^(overwatch.exe)$ -# windowrulev2 = immediate, class:^(steam_app_1384160)$ -windowrulev2 = fullscreen, class:^(overwatch.exe)$ -windowrulev2 = fullscreen, class:^(steam_app_1384160)$ -windowrulev2 = fullscreen, class:^(league of legends.exe)$ - -# workspaces -windowrule = workspace name:game, leagueclient.exe -windowrule = workspace name:game, leagueclientux.exe -windowrule = workspace name:game, league of legends.exe -windowrule = workspace name:game, overwatch.exe -windowrule = workspace name:game, 東方紅魔郷.exe -windowrule = workspace name:game, steam_app_1384160 diff --git a/hmModules/apps/hypr/nvidia.conf b/hmModules/apps/hypr/nvidia.conf deleted file mode 100644 index 0e00cc7..0000000 --- a/hmModules/apps/hypr/nvidia.conf +++ /dev/null @@ -1,7 +0,0 @@ -# Nivida Settings -env = LIBVA_DRIVER_NAME,nvidia -env = XDG_SESSION_TYPE,wayland -env = GBM_BACKEND,nvidia-drm -env = __GLX_VENDOR_LIBRARY_NAME,nvidia -env = WLR_RENDERER_ALLOW_SOFTWARE,1 -env = WLR_DRM_DEVICES,/dev/dri/card1 diff --git a/hmModules/apps/hypr/scripts/initdb.xsh b/hmModules/apps/hypr/scripts/initdb.xsh deleted file mode 100755 index 85bdad5..0000000 --- a/hmModules/apps/hypr/scripts/initdb.xsh +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env xonsh -import shelve - -# Usage: -# ./initdb.xsh -# initialize a db for use hypr workspace scripts - -with shelve.open($HYPR_WORK_DB) as db: - db["primary"] = "home" - db["secondary"] = "chat" - db["secondaries"] = ["chat", "web", "med"] - db["secondary_extras"] = 1 - db["primary_extras"] = 1 diff --git a/hmModules/apps/hypr/settings.conf b/hmModules/apps/hypr/settings.conf deleted file mode 100644 index bc2848c..0000000 --- a/hmModules/apps/hypr/settings.conf +++ /dev/null @@ -1,62 +0,0 @@ -# Monitor Settings -monitor=DP-2,2560x1440@144,0x0,1 -monitor=DP-1,2560x1440@144,-2560x0,1 -monitor=HDMI-A-1,disable - -# Inits -exec-once = swww init -exec-once = swww img $HOME/med/pix/bg.png -exec-once = ags - -# Settings -input { - kb_layout = us - follow_mouse = 1 - accel_profile = flat - sensitivity = -0.52 - #sensitivity = 0.2 # -1.0 - 1.0, 0 means no modification. -} - -general { - gaps_in = 3 - gaps_out = 3 - border_size = 2 - col.active_border = rgb(F5C2E7) - col.inactive_border = rgb(1E1D2F) - - layout = master -} - -decoration { - rounding = 2 - blur { - enabled = true - size = 12 - passes = 2 - special = true - } - dim_special = 0.2 -} - -animations { - enabled = yes - - animation = windows, 1, 4, default, popin 50% - animation = windowsOut, 1, 4, default, popin 50% - animation = windowsMove, 1, 3, default - animation = border, 1, 3, default - animation = fade, 1, 3, default - animation = workspaces, 1, 3, default -} - -master { - no_gaps_when_only = true - new_is_master = false - mfact = 0.53 -} - -misc { - focus_on_activate = true - enable_swallow = false - swallow_regex = ^(Alacritty)$ -} diff --git a/hmModules/apps/hypr/window_rules.conf b/hmModules/apps/hypr/window_rules.conf deleted file mode 100644 index 57be0c8..0000000 --- a/hmModules/apps/hypr/window_rules.conf +++ /dev/null @@ -1,40 +0,0 @@ -env = HYPR_MON_PRIMARY, DP-2 -env = HYPR_MON_SECONDARY, DP-1 - -# Primaries -workspace=name:home, monitor:DP-2, persistent:true, default:true -workspace=name:game, monitor:DP-2, persistent:true -workspace=name:etc0, monitor:DP-2, persistent:true -workspace=name:hell, monitor:DP-2, persistent:true -# Secondaries -workspace=name:chat, monitor:DP-1, persistent:true, default:true -workspace=name:misc0, monitor:DP-1, persistent:true -# Switches -workspace=name:web , monitor:DP-1, persistent:true -workspace=name:med , monitor:DP-1, persistent:true -# Pseudo -workspace=special:mus, persistent:true -workspace=special:scratch, on-created-empty: [float; size 50% 50%; center] kitty - -windowrule = workspace name:web, librewolf -windowrulev2 = workspace name:med, librewolf,title:Picture-in-Picture -windowrule = workspace name:chat, discord -windowrule = workspace name:chat, Beeper -windowrule = workspace name:game, lutris -windowrule = workspace name:game, explorer.exe - -windowrulev2 = opacity 0.94 fullscreen:0 - -windowrulev2 = opacity 0.79 override, class:^(Alacritty)$ -windowrulev2 = opacity 0.79 override, class:^(kitty)$ -windowrulev2 = opacity 1 override, initialTitle:^(Discord Popout)$ -windowrulev2 = opacity 1 override, class:^(firefox)$ -windowrulev2 = opacity 1 override, class:^(Gimp)$ -windowrulev2 = opacity 1 override, class:^(feh)$ -windowrulev2 = opacity 1 override, class:^(mpv)$ - -env = HYPR_WORK_DB,$XDG_CACHE_HOME/hypr/workspace.db - -# exec-once = [workspace special:mus silent;float;size 70% 70%;center] mus client -exec-once = [workspace name:chat silent] vesktop -exec-once = [workspace name:chat silent] beeper diff --git a/hmModules/apps/hypr/xwaylandvideobridge.conf b/hmModules/apps/hypr/xwaylandvideobridge.conf deleted file mode 100644 index 4b77ad2..0000000 --- a/hmModules/apps/hypr/xwaylandvideobridge.conf +++ /dev/null @@ -1,5 +0,0 @@ -windowrulev2 = opacity 0.0 override 0.0 override,class:^(xwaylandvideobridge)$ -windowrulev2 = noanim,class:^(xwaylandvideobridge)$ -windowrulev2 = noinitialfocus,class:^(xwaylandvideobridge)$ -windowrulev2 = maxsize 1 1,class:^(xwaylandvideobridge)$ -windowrulev2 = noblur,class:^(xwaylandvideobridge)$ diff --git a/hmModules/apps/librewolf/default.nix b/hmModules/apps/librewolf/default.nix index 7995cbb..f298127 100644 --- a/hmModules/apps/librewolf/default.nix +++ b/hmModules/apps/librewolf/default.nix @@ -3,6 +3,7 @@ { options.librewolf = { enable = lib.mkEnableOption "Enables librewolf"; + make_default = lib.mkEnableOption "Makes librewolf the default browser"; }; config = lib.mkIf config.librewolf.enable { @@ -12,5 +13,6 @@ home.sessionVariables = { BROWSER = "librewolf"; }; + defaultApps.browser = lib.mkIf config.librewolf.make_default "librewolf"; }; } diff --git a/hmModules/apps/terminal-emulators/kitty/default.nix b/hmModules/apps/terminal-emulators/kitty/default.nix index b4ae35a..23b8161 100644 --- a/hmModules/apps/terminal-emulators/kitty/default.nix +++ b/hmModules/apps/terminal-emulators/kitty/default.nix @@ -3,6 +3,7 @@ { options.kitty = { enable = lib.mkEnableOption "Enables kitty"; + make_default = lib.mkEnableOption "Makes kitty default terminal emulator"; font = lib.mkOption { default = ""; }; font_size = lib.mkOption { default = 18; }; }; @@ -17,5 +18,6 @@ confirm_os_window_close = 0; }; }; + defaultApps.terminal = lib.mkIf config.kitty.make_default "kitty"; }; } diff --git a/hmModules/services/home/default.nix b/hmModules/services/home/default.nix index bbb4cf2..7bf691a 100644 --- a/hmModules/services/home/default.nix +++ b/hmModules/services/home/default.nix @@ -3,6 +3,11 @@ { options = { extraPkgs = lib.mkOption { default = []; }; + nvidia.enable = lib.mkEnableOption "Enables nvidia requirements"; + defaultApps = { + terminal = lib.mkOption { default = ""; }; + browser = lib.mkOption { default = ""; }; + }; }; config = { diff --git a/systems/jibril/default.nix b/systems/jibril/default.nix new file mode 100644 index 0000000..109e666 --- /dev/null +++ b/systems/jibril/default.nix @@ -0,0 +1,110 @@ +{ config, ... }: + +{ + home.username = "pan"; + nixpkgs.config.allowUnfree = true; + home.stateVersion = "23.05"; + + hypr.enable = true; + hypr.monitor = { + details = [ + "eDP-2,2256x1504@60,0x0,1" + ]; + }; + hypr.workspace = { + workspaces = { + "eDP-1" = [ + "home" + "web" + "chat" + "med" + ]; + }; + scratchpad.enable = true; + defaults = { + "name:web" = [ "class:(librewolf)" ]; + "name:med" = [ "class:(librewolf),title:Picture-in-Picture" ]; + "name:chat" = [ "class:(Beeper)" ]; + }; + }; + hypr.windows.opaque = [ + "initialTitle:^(Discord Popout)$" + "class:^(firefox)$" + "class:^(Gimp)$" + "class:^(feh)$" + "class:^(mpv)$" + ]; + hypr.background = { + enable = true; + path = "${config.home.homeDirectory}/med/pix/bg.png"; + }; + # hypr.cursor = { + # enable = true; + # theme = "miku"; + # }; + hypr = { + screenshot.enable = true; + mouse.sensitivity = -0.52; + polkit.enable = true; + master.mfact = 0.53; + xwayland.videobridge.enable = true; + }; + # ags.enable = true; + rofi.enable = true; + + timer.enableHourly = true; + timer.enableQuarterly = true; + colors.enable = true; + manpages.enable = true; + trash.enable = true; + + fish.enable = true; + kitty.enable = true; + kitty.make_default = true; + kitty.font = "Cascadia Code"; + git.enable = true; + git.username = "Julia Lange"; + git.email = "public@julialange.org"; + ssh.enable = true; + librewolf.enable = true; + librewolf.make_default = true; + + mpv.enable = true; + zathura.enable = true; + feh.enable = true; + + neovim.enable = true; + neovim.languages = { + c.enable = true; + nix.enable = true; + rust.enable = true; + }; + neovim.plugins = { + comments.enable = true; + fugitive.enable = true; + lualine.enable = true; + luasnip.enable = true; + nvimcmp.enable = true; + telescope = { + enable = true; + fzf.enable = true; + }; + treesitter.enable = true; + wiki.enable = true; + }; + + lf.enable = true; + lf.hiddenfiles = [ + "${config.home.homeDirectory}/.librewolf" + "${config.home.homeDirectory}/.nix-defexpr" + "${config.home.homeDirectory}/.nix-profile" + "${config.home.homeDirectory}/.nv" + "${config.home.homeDirectory}/.pki" + ]; + zoxide.enable = true; + + gimp.enable = true; + + beeper.enable = true; + discord.enable = true; +} diff --git a/systems/pan/default.nix b/systems/onizuka/default.nix similarity index 59% rename from systems/pan/default.nix rename to systems/onizuka/default.nix index c5473ff..f59b05b 100644 --- a/systems/pan/default.nix +++ b/systems/onizuka/default.nix @@ -6,6 +6,57 @@ home.stateVersion = "23.05"; hypr.enable = true; + hypr.monitor = { + details = [ + "DP-2,2560x1440@144,0x0,1" + "DP-1,2560x1440@144,-2560x0,1" + "HDMI-A-1,disable" + ]; + primary = "DP-2"; + secondary = "DP-1"; + }; + hypr.workspace = { + workspaces = { + "DP-2" = [ + "home" + "web" + "med" + "game" + ]; + "DP-1" = [ + "chat" + ]; + }; + scratchpad.enable = true; + defaults = { + "name:web" = [ "librewolf" ]; + "name:med" = [ "librewolf,title:Picture-in-Picture" ]; + "name:chat" = [ "Beeper" ]; + "name:game" = [ "lutris" "explorer.exe" ]; + }; + }; + windows.opaque = [ + "initialTitle:^(Discord Popout)$" + "class:^(firefox)$" + "class:^(Gimp)$" + "class:^(feh)$" + "class:^(mpv)$" + ]; + hypr.background = { + enable = true; + path = "${config.home.homeDirectory}/med/pix/bg.png"; + }; + hypr.cursor = { + enable = true; + theme = "miku"; + }; + hypr = { + screenshot.enable = true; + mouse.sensitivity = -0.52; + polkit.enable = true; + master.mfact = 0.53; + xwayland.videobridge.enable = true; + }; ags.enable = true; rofi.enable = true; @@ -17,11 +68,14 @@ fish.enable = true; kitty.enable = true; + kitty.make_default = true; kitty.font = "Cascadia Code"; git.enable = true; git.username = "Julia Lange"; git.email = "public@julialange.org"; ssh.enable = true; + librewolf.enable = true; + librewolf.make_default = true; mpv.enable = true; zathura.enable = true; From 5186992f88b8d113707c23cfb4259c054c107984 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 7 Nov 2024 14:58:37 -0800 Subject: [PATCH 203/412] Sops, add user secret management --- .sops.yaml | 4 +++- nixosModules/services/sops-nix/default.nix | 28 ++++++++++++++++------ secrets.yaml | 24 ------------------- 3 files changed, 24 insertions(+), 32 deletions(-) delete mode 100644 secrets.yaml diff --git a/.sops.yaml b/.sops.yaml index 530c11f..56dcd1f 100644 --- a/.sops.yaml +++ b/.sops.yaml @@ -4,8 +4,10 @@ # for a more complex example. keys: - &onizuka age1ey3wr2wnkgny3dfgvnyrf0cptwzr7s5x464p2y9ya58lpay8lfrsds3y68 + - &jibril age1n8936ux6ushjyz3kuumdrz63jcwsvz7qkfj66rrkgk8d78wl2dssgev4tm creation_rules: - - path_regex: secrets.yaml$ + - path_regex: systems/[^/]+/secrets\.yaml$ key_groups: - age: - *onizuka + - *jibril diff --git a/nixosModules/services/sops-nix/default.nix b/nixosModules/services/sops-nix/default.nix index fae5829..b96cc76 100644 --- a/nixosModules/services/sops-nix/default.nix +++ b/nixosModules/services/sops-nix/default.nix @@ -1,18 +1,32 @@ { inputs, config, pkgs, lib, ... }: -let rootPath = ./.; in + { - options = { - sops-nix.enable = lib.mkEnableOption "Enables nix-sops for secret management"; + options.sops-nix = let + externalPath = lib.mkOptionType { + name = "externalPath"; + check = x: !lib.path.hasStorePathPrefix (/. + x); + merge = lib.mergeEqualOption; + }; + in { + enable = lib.mkEnableOption "Enables nix-sops for secret management"; + keyFile = lib.mkOption { + description = "A key file to unlock your secrets file"; + type = lib.types.nullOr externalPath; + }; + sopsFile = lib.mkOption { + description = "The path to your secrets file"; + type = lib.types.path; + }; + secrets = lib.mkOption { default = {}; }; }; imports = [ inputs.sops-nix.nixosModules.sops ]; config = lib.mkIf config.sops-nix.enable { - sops = { - defaultSopsFile = rootPath + "secrets.yaml"; - defaultSopsFormat = "yaml"; - age.keyFile = "/home/" + config.user.name + ".config/sops/age/keys.txt"; + defaultSopsFile = config.sops-nix.sopsFile; + age.keyFile = config.sops-nix.keyFile; + secrets = config.sops-nix.secrets; }; environment.systemPackages = with pkgs; [ sops diff --git a/secrets.yaml b/secrets.yaml deleted file mode 100644 index 0c3098f..0000000 --- a/secrets.yaml +++ /dev/null @@ -1,24 +0,0 @@ -services: - spotify: - username: ENC[AES256_GCM,data:xyhcpSN4v9k294Vtxd+6RIicsd/QbWBr3Qk=,iv:fhKAo9sti/CFRQijzvAoWAAfSETVYTjvRsdUeTVj5rU=,tag:jggBE9ZKHiDerI0Fm+n12w==,type:str] - password: ENC[AES256_GCM,data:fmx/1zTF/Xc32tpjnq1pp7jzpIM=,iv:kwAzuhAcw3+v9Ilfh1GrdqmINR0w0F6nkjJJXjABcmI=,tag:Yyutz0EmQQ6n/UYgHLpYWA==,type:str] -sops: - kms: [] - gcp_kms: [] - azure_kv: [] - hc_vault: [] - age: - - recipient: age1ey3wr2wnkgny3dfgvnyrf0cptwzr7s5x464p2y9ya58lpay8lfrsds3y68 - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBHM1REVU9wTVhxWHo3UW0x - WnNmanFmbXVCVGJwcmdZVzFJaTBxRnJzcEJZClFJdjB1QkpxS1QySVUzbGJySWY5 - QURScWI5UTFzN1NVdkVZeG9WUkdnWWcKLS0tIGgrNEFpWi9idTQrZWNrZXMzcFZI - RUljSSs5L1JCampTOXdmY1IzYjNzeFEK2WC5HivIt77z0+yopZnmlUWYJCwn/eI+ - V4UIgITsmTjN2c6df5Pc4nb7jWC7XsMq7VL1nG+uo39QQPRW/FaZYQ== - -----END AGE ENCRYPTED FILE----- - lastmodified: "2024-04-06T02:39:34Z" - mac: ENC[AES256_GCM,data:QAFXEXOm0Mi0GOJU4EG8JC9BizTGdbDjYfGlBAe6uhJAcMAO47vRwPADx7bWxSrAZ6kQRy+3OCBjin0YSADRHHmXOPXhqPzpFTeG3T19hLRG79W7R1UoRVm/PhajOimEj4urbZqdHC8mqtU0XngB/zlfRkfbT053J87TsvAlmwI=,iv:HMEhCmnXCEANA4s1L1nmnckHRIjWKxS3D9gbLcNTnmE=,tag:Chbl2JTKVqs8t91BTlX9QQ==,type:str] - pgp: [] - unencrypted_suffix: _unencrypted - version: 3.8.1 From f92e03a36df020cddd86db9ff82dca7261450f50 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 7 Nov 2024 14:58:37 -0800 Subject: [PATCH 204/412] Sops, add user secret management --- .sops.yaml | 4 +++- nixosModules/services/sops-nix/default.nix | 28 ++++++++++++++++------ secrets.yaml | 24 ------------------- 3 files changed, 24 insertions(+), 32 deletions(-) delete mode 100644 secrets.yaml diff --git a/.sops.yaml b/.sops.yaml index 530c11f..56dcd1f 100644 --- a/.sops.yaml +++ b/.sops.yaml @@ -4,8 +4,10 @@ # for a more complex example. keys: - &onizuka age1ey3wr2wnkgny3dfgvnyrf0cptwzr7s5x464p2y9ya58lpay8lfrsds3y68 + - &jibril age1n8936ux6ushjyz3kuumdrz63jcwsvz7qkfj66rrkgk8d78wl2dssgev4tm creation_rules: - - path_regex: secrets.yaml$ + - path_regex: systems/[^/]+/secrets\.yaml$ key_groups: - age: - *onizuka + - *jibril diff --git a/nixosModules/services/sops-nix/default.nix b/nixosModules/services/sops-nix/default.nix index fae5829..b96cc76 100644 --- a/nixosModules/services/sops-nix/default.nix +++ b/nixosModules/services/sops-nix/default.nix @@ -1,18 +1,32 @@ { inputs, config, pkgs, lib, ... }: -let rootPath = ./.; in + { - options = { - sops-nix.enable = lib.mkEnableOption "Enables nix-sops for secret management"; + options.sops-nix = let + externalPath = lib.mkOptionType { + name = "externalPath"; + check = x: !lib.path.hasStorePathPrefix (/. + x); + merge = lib.mergeEqualOption; + }; + in { + enable = lib.mkEnableOption "Enables nix-sops for secret management"; + keyFile = lib.mkOption { + description = "A key file to unlock your secrets file"; + type = lib.types.nullOr externalPath; + }; + sopsFile = lib.mkOption { + description = "The path to your secrets file"; + type = lib.types.path; + }; + secrets = lib.mkOption { default = {}; }; }; imports = [ inputs.sops-nix.nixosModules.sops ]; config = lib.mkIf config.sops-nix.enable { - sops = { - defaultSopsFile = rootPath + "secrets.yaml"; - defaultSopsFormat = "yaml"; - age.keyFile = "/home/" + config.user.name + ".config/sops/age/keys.txt"; + defaultSopsFile = config.sops-nix.sopsFile; + age.keyFile = config.sops-nix.keyFile; + secrets = config.sops-nix.secrets; }; environment.systemPackages = with pkgs; [ sops diff --git a/secrets.yaml b/secrets.yaml deleted file mode 100644 index 0c3098f..0000000 --- a/secrets.yaml +++ /dev/null @@ -1,24 +0,0 @@ -services: - spotify: - username: ENC[AES256_GCM,data:xyhcpSN4v9k294Vtxd+6RIicsd/QbWBr3Qk=,iv:fhKAo9sti/CFRQijzvAoWAAfSETVYTjvRsdUeTVj5rU=,tag:jggBE9ZKHiDerI0Fm+n12w==,type:str] - password: ENC[AES256_GCM,data:fmx/1zTF/Xc32tpjnq1pp7jzpIM=,iv:kwAzuhAcw3+v9Ilfh1GrdqmINR0w0F6nkjJJXjABcmI=,tag:Yyutz0EmQQ6n/UYgHLpYWA==,type:str] -sops: - kms: [] - gcp_kms: [] - azure_kv: [] - hc_vault: [] - age: - - recipient: age1ey3wr2wnkgny3dfgvnyrf0cptwzr7s5x464p2y9ya58lpay8lfrsds3y68 - enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBHM1REVU9wTVhxWHo3UW0x - WnNmanFmbXVCVGJwcmdZVzFJaTBxRnJzcEJZClFJdjB1QkpxS1QySVUzbGJySWY5 - QURScWI5UTFzN1NVdkVZeG9WUkdnWWcKLS0tIGgrNEFpWi9idTQrZWNrZXMzcFZI - RUljSSs5L1JCampTOXdmY1IzYjNzeFEK2WC5HivIt77z0+yopZnmlUWYJCwn/eI+ - V4UIgITsmTjN2c6df5Pc4nb7jWC7XsMq7VL1nG+uo39QQPRW/FaZYQ== - -----END AGE ENCRYPTED FILE----- - lastmodified: "2024-04-06T02:39:34Z" - mac: ENC[AES256_GCM,data:QAFXEXOm0Mi0GOJU4EG8JC9BizTGdbDjYfGlBAe6uhJAcMAO47vRwPADx7bWxSrAZ6kQRy+3OCBjin0YSADRHHmXOPXhqPzpFTeG3T19hLRG79W7R1UoRVm/PhajOimEj4urbZqdHC8mqtU0XngB/zlfRkfbT053J87TsvAlmwI=,iv:HMEhCmnXCEANA4s1L1nmnckHRIjWKxS3D9gbLcNTnmE=,tag:Chbl2JTKVqs8t91BTlX9QQ==,type:str] - pgp: [] - unencrypted_suffix: _unencrypted - version: 3.8.1 From 7de3d0c3c76b7ba2cc420118d22c721f75e5e516 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 7 Nov 2024 14:59:12 -0800 Subject: [PATCH 205/412] Wireless, host specified networks --- .../services/networking/wireless/default.nix | 28 +++++++++---------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/nixosModules/services/networking/wireless/default.nix b/nixosModules/services/networking/wireless/default.nix index a4259f7..a916a71 100644 --- a/nixosModules/services/networking/wireless/default.nix +++ b/nixosModules/services/networking/wireless/default.nix @@ -2,7 +2,11 @@ { options = { - wireless.enable = lib.mkEnableOption "Enables wireless"; + wireless = { + enable = lib.mkEnableOption "Enables wireless"; + networks = lib.mkOption { default = {}; }; + secretsFile = lib.mkOption {}; + }; }; config = lib.mkIf config.wireless.enable { @@ -12,20 +16,14 @@ enable = true; group = "network"; }; - networks = { - "foofoo2" = { - pskRaw = "1269f8db0aec9d9c30bff6de9951f0ab2d18d7cea4dacd8bd253ebc237e73e2d"; - priority = 1; - }; - "OrbiWanKenobe" = { - pskRaw = "0128447a146d359c1224e558b0f4e3fc0a53b0b4a178334075b50f8d07e179d2"; - priority = 1; - }; - "Homura" = { - pskRaw = "dd77456e1df3f2c17bccc917a0e609684fa6d2ccb6a2e0fb122d50d243e0c87e"; - priority = 0; - }; - }; + + secretsFile = config.wireless.secretsFile; + + networks = let + ensurePasswords = networks: lib.attrsets.mapAttrs ( + name: value: { pskRaw = "ext:psk_" + name; } // value + ) networks; + in ensurePasswords config.wireless.networks; }; networking.enableIPv6 = false; From 0d78a8932bc0f0b97bc4753bb3bc1f7175fa0f5e Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 7 Nov 2024 14:59:12 -0800 Subject: [PATCH 206/412] Wireless, host specified networks --- .../services/networking/wireless/default.nix | 28 +++++++++---------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/nixosModules/services/networking/wireless/default.nix b/nixosModules/services/networking/wireless/default.nix index a4259f7..a916a71 100644 --- a/nixosModules/services/networking/wireless/default.nix +++ b/nixosModules/services/networking/wireless/default.nix @@ -2,7 +2,11 @@ { options = { - wireless.enable = lib.mkEnableOption "Enables wireless"; + wireless = { + enable = lib.mkEnableOption "Enables wireless"; + networks = lib.mkOption { default = {}; }; + secretsFile = lib.mkOption {}; + }; }; config = lib.mkIf config.wireless.enable { @@ -12,20 +16,14 @@ enable = true; group = "network"; }; - networks = { - "foofoo2" = { - pskRaw = "1269f8db0aec9d9c30bff6de9951f0ab2d18d7cea4dacd8bd253ebc237e73e2d"; - priority = 1; - }; - "OrbiWanKenobe" = { - pskRaw = "0128447a146d359c1224e558b0f4e3fc0a53b0b4a178334075b50f8d07e179d2"; - priority = 1; - }; - "Homura" = { - pskRaw = "dd77456e1df3f2c17bccc917a0e609684fa6d2ccb6a2e0fb122d50d243e0c87e"; - priority = 0; - }; - }; + + secretsFile = config.wireless.secretsFile; + + networks = let + ensurePasswords = networks: lib.attrsets.mapAttrs ( + name: value: { pskRaw = "ext:psk_" + name; } // value + ) networks; + in ensurePasswords config.wireless.networks; }; networking.enableIPv6 = false; From a7425d21e3e300e7a4e021c5a3c391ec1b30da22 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 7 Nov 2024 15:00:00 -0800 Subject: [PATCH 207/412] Jibril, update secrets, wireless and shell --- systems/jibril/default.nix | 18 ++++++++++++++++-- systems/jibril/networks.toml | 8 ++++++++ systems/jibril/secrets.yaml | 30 ++++++++++++++++++++++++++++++ 3 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 systems/jibril/networks.toml create mode 100644 systems/jibril/secrets.yaml diff --git a/systems/jibril/default.nix b/systems/jibril/default.nix index 5a72991..f085bf3 100644 --- a/systems/jibril/default.nix +++ b/systems/jibril/default.nix @@ -8,10 +8,23 @@ nixpkgs.config.allowUnfree = true; system.stateVersion = "23.05"; + sops-nix = { + enable = true; + keyFile = "/etc/sops/age/keys.txt"; + sopsFile = ./secrets.yaml; + secrets = { + wireless = {}; + }; + }; + pipewire.enable = true; polkit.enable = true; bluetooth.enable = true; - wireless.enable = true; + wireless = { + enable = true; + networks = builtins.fromTOML (builtins.readFile ./networks.toml); + secretsFile = config.sops.secrets.wireless.path; + }; user.name = "pan"; user.timezone = "America/Los_Angeles"; @@ -20,6 +33,7 @@ hyprland.enable = true; librewolf.enable = true; - xonsh.enable = true; + fish.enable = true; + fish.setDefault = true; syncthing.enable = true; } diff --git a/systems/jibril/networks.toml b/systems/jibril/networks.toml new file mode 100644 index 0000000..860bdd1 --- /dev/null +++ b/systems/jibril/networks.toml @@ -0,0 +1,8 @@ +["TheKabal2.4"] + +["DropboxGuest3.0"] + +[foofoo2] + +[Homura] +priority = 0 diff --git a/systems/jibril/secrets.yaml b/systems/jibril/secrets.yaml new file mode 100644 index 0000000..fcde584 --- /dev/null +++ b/systems/jibril/secrets.yaml @@ -0,0 +1,30 @@ +wireless: ENC[AES256_GCM,data:pQv+gdAW8W9nSEJkbXWex47iuuqgJMEELldFsmgk2Y08MDZ1ytXqlphTK/jbewD3tpz4v29fSuWamv1uZpxM2+c2zCuMVTdrhAf0i/Sjqd9CWP8NQvTDI3v8ps9REFzR7n7hywnkfOkDNwRkmavSfCxK5k9SQLNC7De6P811/Fundb9r6oeIH2OEDBkZEHw8gYndjy6cLDUE2SY/cmxRsKWhATsCLcWKOpQa86zlT9dr9nMtYVF1AN5T4JR/7QKqJ8UT4mvhAA0OEfKv0Cf3euH24vtBrv5YxwDT6tQpOABOyOy9mWLc+bXDID/HX4akeU1O6+eBSpNeRgpAcMfD6b/eqKAvDvnixHubu9GemVspmeoA/91i5B70u3kjm0EKup7KLXCp5RutLnLRczDPdfbCB7bEipeRyF8P+UCuhQ==,iv:WN7mGyHpaMDdLRpFGyDUQ2D9a0t/rucfyKroJYqaHPs=,tag:7KTzBEt30nqCJclDgiWuKg==,type:str] +sops: + kms: [] + gcp_kms: [] + azure_kv: [] + hc_vault: [] + age: + - recipient: age1ey3wr2wnkgny3dfgvnyrf0cptwzr7s5x464p2y9ya58lpay8lfrsds3y68 + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBuaHFJcnp0YkN5ZmRYWStz + OFlFKzFWV1pSaGdYQ2tlWkhvMFRYczQvdWtnCkwwYk84bStIeUNOWUhhSktUSWYz + V3FUNkdLUHFBVmwrb0J6QldjSlVDQmsKLS0tIGZrR2txN2grWS9RbmdRRzU3Ui83 + SWl2NjQzWWtFY3dBdlhobi9rY0k0U1kKZm40e+gjMmNsQ/RmaY4rdlEr6gSLrTud + 5FShEZkAkFOkl0FYdHLKPDrmBocrGRJP7gLPYgo1eT5w8LaGYlNmAA== + -----END AGE ENCRYPTED FILE----- + - recipient: age1n8936ux6ushjyz3kuumdrz63jcwsvz7qkfj66rrkgk8d78wl2dssgev4tm + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBGVGJPYVVYd3RqbzkxNEg1 + Nm9DN2Y3OC9yUUZtcGN6bjJjWllOVGxINmxjClR4NUpZQVRFdWdObDYwd1NMOWpT + OHNsUXJ1NUJlOFhTYks5RDAxaHhVZ2MKLS0tIGFaV2JYcWVSMmdFWnlSZlBPTEJi + Ky83VFhiVE9wK01UMDlSbnIrd2d2SHcKp6mF8PaR0ItrvLHpEgMe6fwuboyrrs9y + 7Ct6qZ1SN/4f/xJpDP2qiaQ4KTZzY1BlC3isT3CWeajOQhL/y5JCOw== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2024-11-07T21:12:36Z" + mac: ENC[AES256_GCM,data:z0ePEvsEKvcMca2x2qjTsSBwk+qI3jd8h2uAnSsGtJL5UI1OdBL8oVIGKty0pGaCvtrF01UN1ncKBGe5y12Vij2yuyv7LK4ANArxQ4+O583NdYHYeD+T75yGu4SAYjcoM23RD1h+W0SLQpCen2J3WYmJaOjtqMBv/gaFYl/DV7I=,iv:VJjZTd1g4oJCDLEp8+jH15Y2svTNtQUE1vc3WQoJJZU=,tag:4U7uh6U5PwHJ2r6/WFUbnw==,type:str] + pgp: [] + unencrypted_suffix: _unencrypted + version: 3.9.1 From 30d6d63e75b0ec0b5fa44452eb36eeecfb970191 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 7 Nov 2024 15:00:00 -0800 Subject: [PATCH 208/412] Jibril, update secrets, wireless and shell --- systems/jibril/default.nix | 18 ++++++++++++++++-- systems/jibril/networks.toml | 8 ++++++++ systems/jibril/secrets.yaml | 30 ++++++++++++++++++++++++++++++ 3 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 systems/jibril/networks.toml create mode 100644 systems/jibril/secrets.yaml diff --git a/systems/jibril/default.nix b/systems/jibril/default.nix index 5a72991..f085bf3 100644 --- a/systems/jibril/default.nix +++ b/systems/jibril/default.nix @@ -8,10 +8,23 @@ nixpkgs.config.allowUnfree = true; system.stateVersion = "23.05"; + sops-nix = { + enable = true; + keyFile = "/etc/sops/age/keys.txt"; + sopsFile = ./secrets.yaml; + secrets = { + wireless = {}; + }; + }; + pipewire.enable = true; polkit.enable = true; bluetooth.enable = true; - wireless.enable = true; + wireless = { + enable = true; + networks = builtins.fromTOML (builtins.readFile ./networks.toml); + secretsFile = config.sops.secrets.wireless.path; + }; user.name = "pan"; user.timezone = "America/Los_Angeles"; @@ -20,6 +33,7 @@ hyprland.enable = true; librewolf.enable = true; - xonsh.enable = true; + fish.enable = true; + fish.setDefault = true; syncthing.enable = true; } diff --git a/systems/jibril/networks.toml b/systems/jibril/networks.toml new file mode 100644 index 0000000..860bdd1 --- /dev/null +++ b/systems/jibril/networks.toml @@ -0,0 +1,8 @@ +["TheKabal2.4"] + +["DropboxGuest3.0"] + +[foofoo2] + +[Homura] +priority = 0 diff --git a/systems/jibril/secrets.yaml b/systems/jibril/secrets.yaml new file mode 100644 index 0000000..fcde584 --- /dev/null +++ b/systems/jibril/secrets.yaml @@ -0,0 +1,30 @@ +wireless: ENC[AES256_GCM,data:pQv+gdAW8W9nSEJkbXWex47iuuqgJMEELldFsmgk2Y08MDZ1ytXqlphTK/jbewD3tpz4v29fSuWamv1uZpxM2+c2zCuMVTdrhAf0i/Sjqd9CWP8NQvTDI3v8ps9REFzR7n7hywnkfOkDNwRkmavSfCxK5k9SQLNC7De6P811/Fundb9r6oeIH2OEDBkZEHw8gYndjy6cLDUE2SY/cmxRsKWhATsCLcWKOpQa86zlT9dr9nMtYVF1AN5T4JR/7QKqJ8UT4mvhAA0OEfKv0Cf3euH24vtBrv5YxwDT6tQpOABOyOy9mWLc+bXDID/HX4akeU1O6+eBSpNeRgpAcMfD6b/eqKAvDvnixHubu9GemVspmeoA/91i5B70u3kjm0EKup7KLXCp5RutLnLRczDPdfbCB7bEipeRyF8P+UCuhQ==,iv:WN7mGyHpaMDdLRpFGyDUQ2D9a0t/rucfyKroJYqaHPs=,tag:7KTzBEt30nqCJclDgiWuKg==,type:str] +sops: + kms: [] + gcp_kms: [] + azure_kv: [] + hc_vault: [] + age: + - recipient: age1ey3wr2wnkgny3dfgvnyrf0cptwzr7s5x464p2y9ya58lpay8lfrsds3y68 + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBuaHFJcnp0YkN5ZmRYWStz + OFlFKzFWV1pSaGdYQ2tlWkhvMFRYczQvdWtnCkwwYk84bStIeUNOWUhhSktUSWYz + V3FUNkdLUHFBVmwrb0J6QldjSlVDQmsKLS0tIGZrR2txN2grWS9RbmdRRzU3Ui83 + SWl2NjQzWWtFY3dBdlhobi9rY0k0U1kKZm40e+gjMmNsQ/RmaY4rdlEr6gSLrTud + 5FShEZkAkFOkl0FYdHLKPDrmBocrGRJP7gLPYgo1eT5w8LaGYlNmAA== + -----END AGE ENCRYPTED FILE----- + - recipient: age1n8936ux6ushjyz3kuumdrz63jcwsvz7qkfj66rrkgk8d78wl2dssgev4tm + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBGVGJPYVVYd3RqbzkxNEg1 + Nm9DN2Y3OC9yUUZtcGN6bjJjWllOVGxINmxjClR4NUpZQVRFdWdObDYwd1NMOWpT + OHNsUXJ1NUJlOFhTYks5RDAxaHhVZ2MKLS0tIGFaV2JYcWVSMmdFWnlSZlBPTEJi + Ky83VFhiVE9wK01UMDlSbnIrd2d2SHcKp6mF8PaR0ItrvLHpEgMe6fwuboyrrs9y + 7Ct6qZ1SN/4f/xJpDP2qiaQ4KTZzY1BlC3isT3CWeajOQhL/y5JCOw== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2024-11-07T21:12:36Z" + mac: ENC[AES256_GCM,data:z0ePEvsEKvcMca2x2qjTsSBwk+qI3jd8h2uAnSsGtJL5UI1OdBL8oVIGKty0pGaCvtrF01UN1ncKBGe5y12Vij2yuyv7LK4ANArxQ4+O583NdYHYeD+T75yGu4SAYjcoM23RD1h+W0SLQpCen2J3WYmJaOjtqMBv/gaFYl/DV7I=,iv:VJjZTd1g4oJCDLEp8+jH15Y2svTNtQUE1vc3WQoJJZU=,tag:4U7uh6U5PwHJ2r6/WFUbnw==,type:str] + pgp: [] + unencrypted_suffix: _unencrypted + version: 3.9.1 From 32629f1ef6c9af6b44657ea395f5f02277471936 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 7 Nov 2024 15:00:35 -0800 Subject: [PATCH 209/412] Nvidia, remove deprecated driSupport32Bit --- nixosModules/services/graphics/nvidia/default.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/nixosModules/services/graphics/nvidia/default.nix b/nixosModules/services/graphics/nvidia/default.nix index bd11b84..de39b58 100644 --- a/nixosModules/services/graphics/nvidia/default.nix +++ b/nixosModules/services/graphics/nvidia/default.nix @@ -9,7 +9,6 @@ config = lib.mkIf config.nvidia.enable { hardware.graphics = { enable = true; - driSupport32Bit = true; extraPackages = with pkgs; [ rocm-opencl-icd rocm-opencl-runtime From 8c834008423a6be6686239f3318f59d6ab8d0256 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 7 Nov 2024 15:00:35 -0800 Subject: [PATCH 210/412] Nvidia, remove deprecated driSupport32Bit --- nixosModules/services/graphics/nvidia/default.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/nixosModules/services/graphics/nvidia/default.nix b/nixosModules/services/graphics/nvidia/default.nix index bd11b84..de39b58 100644 --- a/nixosModules/services/graphics/nvidia/default.nix +++ b/nixosModules/services/graphics/nvidia/default.nix @@ -9,7 +9,6 @@ config = lib.mkIf config.nvidia.enable { hardware.graphics = { enable = true; - driSupport32Bit = true; extraPackages = with pkgs; [ rocm-opencl-icd rocm-opencl-runtime From b02debe3492b91a2482ce91827c6304332d2e8f0 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Fri, 8 Nov 2024 10:10:16 -0800 Subject: [PATCH 211/412] Flake update 2024-11-07 --- flake.lock | 217 +++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 170 insertions(+), 47 deletions(-) diff --git a/flake.lock b/flake.lock index 8e96569..7cc9e57 100644 --- a/flake.lock +++ b/flake.lock @@ -6,11 +6,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1720211568, - "narHash": "sha256-Uph6rcbiuOD6bGEySonDFozdO+mznTug08x27WG4BIg=", + "lastModified": 1730486342, + "narHash": "sha256-/fNj+vW2oE69JMXqyjadxVeuQoWshn+wHp2LHufiVpw=", "owner": "ezKEa", "repo": "aagl-gtk-on-nix", - "rev": "ce7e02b20fe45425bbdbebc6fe0fdcc018c9efc6", + "rev": "512940696be1969a42d3b89e1e77f9dc7e0641b4", "type": "github" }, "original": { @@ -19,6 +19,39 @@ "type": "github" } }, + "aquamarine": { + "inputs": { + "hyprutils": [ + "hyprland", + "hyprutils" + ], + "hyprwayland-scanner": [ + "hyprland", + "hyprwayland-scanner" + ], + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1730968822, + "narHash": "sha256-NocDjINsh6ismkhb0Xr6xPRksmhuB2WGf8ZmXMhxu7Y=", + "owner": "hyprwm", + "repo": "aquamarine", + "rev": "a49bc3583ff223f426cb3526fdaa4bcaa247ec14", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "aquamarine", + "type": "github" + } + }, "flake-compat": { "flake": false, "locked": { @@ -35,6 +68,44 @@ "type": "github" } }, + "flake-compat_2": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "gitignore": { + "inputs": { + "nixpkgs": [ + "hyprland", + "pre-commit-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, "hyprcursor": { "inputs": { "hyprlang": [ @@ -51,11 +122,11 @@ ] }, "locked": { - "lastModified": 1720108799, - "narHash": "sha256-AxRkTJlbB8r7aG6gvc7IaLhc2T9TO4/8uqanKRxukBQ=", + "lastModified": 1728669738, + "narHash": "sha256-EDNAU9AYcx8OupUzbTbWE1d3HYdeG0wO6Msg3iL1muk=", "owner": "hyprwm", "repo": "hyprcursor", - "rev": "a5c0d57325c5f0814c39110a70ca19c070ae9486", + "rev": "0264e698149fcb857a66a53018157b41f8d97bb0", "type": "github" }, "original": { @@ -66,20 +137,23 @@ }, "hyprland": { "inputs": { + "aquamarine": "aquamarine", "hyprcursor": "hyprcursor", + "hyprland-protocols": "hyprland-protocols", "hyprlang": "hyprlang", "hyprutils": "hyprutils", "hyprwayland-scanner": "hyprwayland-scanner", "nixpkgs": "nixpkgs_2", + "pre-commit-hooks": "pre-commit-hooks", "systems": "systems", "xdph": "xdph" }, "locked": { - "lastModified": 1720896272, - "narHash": "sha256-zo1lDMsxjEyko/P+KfCLNYZrCAWQOrX90/J31nqzpy4=", + "lastModified": 1730969692, + "narHash": "sha256-yHY98IWTLDz57TrseUxdh5QnpngcNCjNXTJ2XCeNhtk=", "ref": "refs/heads/main", - "rev": "bc6b0880dda2607a80f000c134f573c970452a0f", - "revCount": 4925, + "rev": "e58e97b0a38b8ccc87a4304c9e4e2b37c9966875", + "revCount": 5425, "submodules": true, "type": "git", "url": "https://github.com/hyprwm/Hyprland" @@ -94,21 +168,19 @@ "inputs": { "nixpkgs": [ "hyprland", - "xdph", "nixpkgs" ], "systems": [ "hyprland", - "xdph", "systems" ] }, "locked": { - "lastModified": 1718746314, - "narHash": "sha256-HUklK5u86w2Yh9dOkk4FdsL8eehcOZ95jPhLixGDRQY=", + "lastModified": 1728345020, + "narHash": "sha256-xGbkc7U/Roe0/Cv3iKlzijIaFBNguasI31ynL2IlEoM=", "owner": "hyprwm", "repo": "hyprland-protocols", - "rev": "1b61f0093afff20ab44d88ad707aed8bf2215290", + "rev": "a7c183800e74f337753de186522b9017a07a8cee", "type": "github" }, "original": { @@ -133,11 +205,11 @@ ] }, "locked": { - "lastModified": 1720381373, - "narHash": "sha256-lyC/EZdHULsaAKVryK11lgHY9u6pXr7qR4irnxNWC7k=", + "lastModified": 1728168612, + "narHash": "sha256-AnB1KfiXINmuiW7BALYrKqcjCnsLZPifhb/7BsfPbns=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "5df0174fd09de4ac5475233d65ffc703e89b82eb", + "rev": "f054f2e44d6a0b74607a6bc0f52dba337a3db38e", "type": "github" }, "original": { @@ -158,11 +230,11 @@ ] }, "locked": { - "lastModified": 1720545076, - "narHash": "sha256-Pxacc2uoxI00koXp5+CyNqHOTQlqNlK0rlRHDBHX4+g=", + "lastModified": 1730968903, + "narHash": "sha256-zFvzLXcSm0Ia4XI1SE4FQ9KE63hlGrRWhLtwMolWuR8=", "owner": "hyprwm", "repo": "hyprutils", - "rev": "6174a2a25f4e216c0f1d0c4278adc23c476b1d09", + "rev": "3ce0cde8709cdacbfba471f8e828433b58a561e9", "type": "github" }, "original": { @@ -183,11 +255,11 @@ ] }, "locked": { - "lastModified": 1720215857, - "narHash": "sha256-JPdL+Qul+jEueAn8CARfcWP83eJgwkhMejQYfDvrgvU=", + "lastModified": 1726874836, + "narHash": "sha256-VKR0sf0PSNCB0wPHVKSAn41mCNVCnegWmgkrneKDhHM=", "owner": "hyprwm", "repo": "hyprwayland-scanner", - "rev": "d5fa094ca27e0039be5e94c0a80ae433145af8bb", + "rev": "500c81a9e1a76760371049a8d99e008ea77aa59e", "type": "github" }, "original": { @@ -198,11 +270,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1719506693, - "narHash": "sha256-C8e9S7RzshSdHB7L+v9I51af1gDM5unhJ2xO1ywxNH8=", + "lastModified": 1730200266, + "narHash": "sha256-l253w0XMT8nWHGXuXqyiIC/bMvh1VRszGXgdpQlfhvU=", "owner": "nixos", "repo": "nixpkgs", - "rev": "b2852eb9365c6de48ffb0dc2c9562591f652242a", + "rev": "807e9154dcb16384b1b765ebe9cd2bba2ac287fd", "type": "github" }, "original": { @@ -214,11 +286,27 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1720915306, - "narHash": "sha256-6vuViC56+KSr+945bCV8akHK+7J5k6n/epYg/W3I5eQ=", + "lastModified": 1730741070, + "narHash": "sha256-edm8WG19kWozJ/GqyYx2VjW99EdhjKwbY3ZwdlPAAlo=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "74348da2f3a312ee25cea09b98cdba4cb9fa5d5d", + "rev": "d063c1dd113c91ab27959ba540c0d9753409edf3", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-24.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-stable_2": { + "locked": { + "lastModified": 1730602179, + "narHash": "sha256-efgLzQAWSzJuCLiCaQUCDu4NudNlHdg2NzGLX5GYaEY=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "3c2f1c4ca372622cb2f9de8016c9a0b1cbd0f37c", "type": "github" }, "original": { @@ -230,11 +318,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1720542800, - "narHash": "sha256-ZgnNHuKV6h2+fQ5LuqnUaqZey1Lqqt5dTUAiAnqH0QQ=", + "lastModified": 1730785428, + "narHash": "sha256-Zwl8YgTVJTEum+L+0zVAWvXAGbWAuXHax3KzuejaDyo=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "feb2849fdeb70028c70d73b848214b00d324a497", + "rev": "4aa36568d413aca0ea84a1684d2d46f55dbabad7", "type": "github" }, "original": { @@ -246,11 +334,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1720768451, - "narHash": "sha256-EYekUHJE2gxeo2pM/zM9Wlqw1Uw2XTJXOSAO79ksc4Y=", + "lastModified": 1730785428, + "narHash": "sha256-Zwl8YgTVJTEum+L+0zVAWvXAGbWAuXHax3KzuejaDyo=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "7e7c39ea35c5cdd002cd4588b03a3fb9ece6fad9", + "rev": "4aa36568d413aca0ea84a1684d2d46f55dbabad7", "type": "github" }, "original": { @@ -261,11 +349,11 @@ }, "nixpkgs_4": { "locked": { - "lastModified": 1720781449, - "narHash": "sha256-po3TZO9kcZwzvkyMJKb0WCzzDtiHWD34XeRaX1lWXp0=", + "lastModified": 1730272153, + "narHash": "sha256-B5WRZYsRlJgwVHIV6DvidFN7VX7Fg9uuwkRW9Ha8z+w=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "8b5a3d5a1d951344d683b442c0739010b80039db", + "rev": "2d2a9ddbe3f2c00747398f3dc9b05f7f2ebb0f53", "type": "github" }, "original": { @@ -275,6 +363,30 @@ "type": "github" } }, + "pre-commit-hooks": { + "inputs": { + "flake-compat": "flake-compat_2", + "gitignore": "gitignore", + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "nixpkgs-stable": "nixpkgs-stable" + }, + "locked": { + "lastModified": 1730814269, + "narHash": "sha256-fWPHyhYE6xvMI1eGY3pwBTq85wcy1YXqdzTZF+06nOg=", + "owner": "cachix", + "repo": "git-hooks.nix", + "rev": "d70155fdc00df4628446352fc58adc640cd705c2", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "git-hooks.nix", + "type": "github" + } + }, "root": { "inputs": { "aagl": "aagl", @@ -286,14 +398,14 @@ "sops-nix": { "inputs": { "nixpkgs": "nixpkgs_4", - "nixpkgs-stable": "nixpkgs-stable" + "nixpkgs-stable": "nixpkgs-stable_2" }, "locked": { - "lastModified": 1720926522, - "narHash": "sha256-eTpnrT6yu1vp8C0B5fxHXhgKxHoYMoYTEikQx///jxY=", + "lastModified": 1731008979, + "narHash": "sha256-yN1NxvmqV8UltLkqYBWTeZNgpD/eyh/7LM58caHiEfE=", "owner": "Mic92", "repo": "sops-nix", - "rev": "0703ba03fd9c1665f8ab68cc3487302475164617", + "rev": "fe63071416471abdab06caa234122932a7c4b980", "type": "github" }, "original": { @@ -319,11 +431,22 @@ }, "xdph": { "inputs": { - "hyprland-protocols": "hyprland-protocols", + "hyprland-protocols": [ + "hyprland", + "hyprland-protocols" + ], "hyprlang": [ "hyprland", "hyprlang" ], + "hyprutils": [ + "hyprland", + "hyprutils" + ], + "hyprwayland-scanner": [ + "hyprland", + "hyprwayland-scanner" + ], "nixpkgs": [ "hyprland", "nixpkgs" @@ -334,11 +457,11 @@ ] }, "locked": { - "lastModified": 1720194466, - "narHash": "sha256-Rizg9efi6ue95zOp0MeIV2ZedNo+5U9G2l6yirgBUnA=", + "lastModified": 1730743262, + "narHash": "sha256-iTLqj3lU8kFehPm5tXpctzkD274t/k1nwSSq3qCWXeg=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "b9b97e5ba23fe7bd5fa4df54696102e8aa863cf6", + "rev": "09b23cef06fe248e61cec8862c04b9bcb62f4b6d", "type": "github" }, "original": { From dd8d3d12f6fbe94863eb446738d4c1bdd30f86e8 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Fri, 8 Nov 2024 10:10:16 -0800 Subject: [PATCH 212/412] Flake update 2024-11-07 --- flake.lock | 217 +++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 170 insertions(+), 47 deletions(-) diff --git a/flake.lock b/flake.lock index 8e96569..7cc9e57 100644 --- a/flake.lock +++ b/flake.lock @@ -6,11 +6,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1720211568, - "narHash": "sha256-Uph6rcbiuOD6bGEySonDFozdO+mznTug08x27WG4BIg=", + "lastModified": 1730486342, + "narHash": "sha256-/fNj+vW2oE69JMXqyjadxVeuQoWshn+wHp2LHufiVpw=", "owner": "ezKEa", "repo": "aagl-gtk-on-nix", - "rev": "ce7e02b20fe45425bbdbebc6fe0fdcc018c9efc6", + "rev": "512940696be1969a42d3b89e1e77f9dc7e0641b4", "type": "github" }, "original": { @@ -19,6 +19,39 @@ "type": "github" } }, + "aquamarine": { + "inputs": { + "hyprutils": [ + "hyprland", + "hyprutils" + ], + "hyprwayland-scanner": [ + "hyprland", + "hyprwayland-scanner" + ], + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1730968822, + "narHash": "sha256-NocDjINsh6ismkhb0Xr6xPRksmhuB2WGf8ZmXMhxu7Y=", + "owner": "hyprwm", + "repo": "aquamarine", + "rev": "a49bc3583ff223f426cb3526fdaa4bcaa247ec14", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "aquamarine", + "type": "github" + } + }, "flake-compat": { "flake": false, "locked": { @@ -35,6 +68,44 @@ "type": "github" } }, + "flake-compat_2": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "gitignore": { + "inputs": { + "nixpkgs": [ + "hyprland", + "pre-commit-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, "hyprcursor": { "inputs": { "hyprlang": [ @@ -51,11 +122,11 @@ ] }, "locked": { - "lastModified": 1720108799, - "narHash": "sha256-AxRkTJlbB8r7aG6gvc7IaLhc2T9TO4/8uqanKRxukBQ=", + "lastModified": 1728669738, + "narHash": "sha256-EDNAU9AYcx8OupUzbTbWE1d3HYdeG0wO6Msg3iL1muk=", "owner": "hyprwm", "repo": "hyprcursor", - "rev": "a5c0d57325c5f0814c39110a70ca19c070ae9486", + "rev": "0264e698149fcb857a66a53018157b41f8d97bb0", "type": "github" }, "original": { @@ -66,20 +137,23 @@ }, "hyprland": { "inputs": { + "aquamarine": "aquamarine", "hyprcursor": "hyprcursor", + "hyprland-protocols": "hyprland-protocols", "hyprlang": "hyprlang", "hyprutils": "hyprutils", "hyprwayland-scanner": "hyprwayland-scanner", "nixpkgs": "nixpkgs_2", + "pre-commit-hooks": "pre-commit-hooks", "systems": "systems", "xdph": "xdph" }, "locked": { - "lastModified": 1720896272, - "narHash": "sha256-zo1lDMsxjEyko/P+KfCLNYZrCAWQOrX90/J31nqzpy4=", + "lastModified": 1730969692, + "narHash": "sha256-yHY98IWTLDz57TrseUxdh5QnpngcNCjNXTJ2XCeNhtk=", "ref": "refs/heads/main", - "rev": "bc6b0880dda2607a80f000c134f573c970452a0f", - "revCount": 4925, + "rev": "e58e97b0a38b8ccc87a4304c9e4e2b37c9966875", + "revCount": 5425, "submodules": true, "type": "git", "url": "https://github.com/hyprwm/Hyprland" @@ -94,21 +168,19 @@ "inputs": { "nixpkgs": [ "hyprland", - "xdph", "nixpkgs" ], "systems": [ "hyprland", - "xdph", "systems" ] }, "locked": { - "lastModified": 1718746314, - "narHash": "sha256-HUklK5u86w2Yh9dOkk4FdsL8eehcOZ95jPhLixGDRQY=", + "lastModified": 1728345020, + "narHash": "sha256-xGbkc7U/Roe0/Cv3iKlzijIaFBNguasI31ynL2IlEoM=", "owner": "hyprwm", "repo": "hyprland-protocols", - "rev": "1b61f0093afff20ab44d88ad707aed8bf2215290", + "rev": "a7c183800e74f337753de186522b9017a07a8cee", "type": "github" }, "original": { @@ -133,11 +205,11 @@ ] }, "locked": { - "lastModified": 1720381373, - "narHash": "sha256-lyC/EZdHULsaAKVryK11lgHY9u6pXr7qR4irnxNWC7k=", + "lastModified": 1728168612, + "narHash": "sha256-AnB1KfiXINmuiW7BALYrKqcjCnsLZPifhb/7BsfPbns=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "5df0174fd09de4ac5475233d65ffc703e89b82eb", + "rev": "f054f2e44d6a0b74607a6bc0f52dba337a3db38e", "type": "github" }, "original": { @@ -158,11 +230,11 @@ ] }, "locked": { - "lastModified": 1720545076, - "narHash": "sha256-Pxacc2uoxI00koXp5+CyNqHOTQlqNlK0rlRHDBHX4+g=", + "lastModified": 1730968903, + "narHash": "sha256-zFvzLXcSm0Ia4XI1SE4FQ9KE63hlGrRWhLtwMolWuR8=", "owner": "hyprwm", "repo": "hyprutils", - "rev": "6174a2a25f4e216c0f1d0c4278adc23c476b1d09", + "rev": "3ce0cde8709cdacbfba471f8e828433b58a561e9", "type": "github" }, "original": { @@ -183,11 +255,11 @@ ] }, "locked": { - "lastModified": 1720215857, - "narHash": "sha256-JPdL+Qul+jEueAn8CARfcWP83eJgwkhMejQYfDvrgvU=", + "lastModified": 1726874836, + "narHash": "sha256-VKR0sf0PSNCB0wPHVKSAn41mCNVCnegWmgkrneKDhHM=", "owner": "hyprwm", "repo": "hyprwayland-scanner", - "rev": "d5fa094ca27e0039be5e94c0a80ae433145af8bb", + "rev": "500c81a9e1a76760371049a8d99e008ea77aa59e", "type": "github" }, "original": { @@ -198,11 +270,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1719506693, - "narHash": "sha256-C8e9S7RzshSdHB7L+v9I51af1gDM5unhJ2xO1ywxNH8=", + "lastModified": 1730200266, + "narHash": "sha256-l253w0XMT8nWHGXuXqyiIC/bMvh1VRszGXgdpQlfhvU=", "owner": "nixos", "repo": "nixpkgs", - "rev": "b2852eb9365c6de48ffb0dc2c9562591f652242a", + "rev": "807e9154dcb16384b1b765ebe9cd2bba2ac287fd", "type": "github" }, "original": { @@ -214,11 +286,27 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1720915306, - "narHash": "sha256-6vuViC56+KSr+945bCV8akHK+7J5k6n/epYg/W3I5eQ=", + "lastModified": 1730741070, + "narHash": "sha256-edm8WG19kWozJ/GqyYx2VjW99EdhjKwbY3ZwdlPAAlo=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "74348da2f3a312ee25cea09b98cdba4cb9fa5d5d", + "rev": "d063c1dd113c91ab27959ba540c0d9753409edf3", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-24.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-stable_2": { + "locked": { + "lastModified": 1730602179, + "narHash": "sha256-efgLzQAWSzJuCLiCaQUCDu4NudNlHdg2NzGLX5GYaEY=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "3c2f1c4ca372622cb2f9de8016c9a0b1cbd0f37c", "type": "github" }, "original": { @@ -230,11 +318,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1720542800, - "narHash": "sha256-ZgnNHuKV6h2+fQ5LuqnUaqZey1Lqqt5dTUAiAnqH0QQ=", + "lastModified": 1730785428, + "narHash": "sha256-Zwl8YgTVJTEum+L+0zVAWvXAGbWAuXHax3KzuejaDyo=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "feb2849fdeb70028c70d73b848214b00d324a497", + "rev": "4aa36568d413aca0ea84a1684d2d46f55dbabad7", "type": "github" }, "original": { @@ -246,11 +334,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1720768451, - "narHash": "sha256-EYekUHJE2gxeo2pM/zM9Wlqw1Uw2XTJXOSAO79ksc4Y=", + "lastModified": 1730785428, + "narHash": "sha256-Zwl8YgTVJTEum+L+0zVAWvXAGbWAuXHax3KzuejaDyo=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "7e7c39ea35c5cdd002cd4588b03a3fb9ece6fad9", + "rev": "4aa36568d413aca0ea84a1684d2d46f55dbabad7", "type": "github" }, "original": { @@ -261,11 +349,11 @@ }, "nixpkgs_4": { "locked": { - "lastModified": 1720781449, - "narHash": "sha256-po3TZO9kcZwzvkyMJKb0WCzzDtiHWD34XeRaX1lWXp0=", + "lastModified": 1730272153, + "narHash": "sha256-B5WRZYsRlJgwVHIV6DvidFN7VX7Fg9uuwkRW9Ha8z+w=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "8b5a3d5a1d951344d683b442c0739010b80039db", + "rev": "2d2a9ddbe3f2c00747398f3dc9b05f7f2ebb0f53", "type": "github" }, "original": { @@ -275,6 +363,30 @@ "type": "github" } }, + "pre-commit-hooks": { + "inputs": { + "flake-compat": "flake-compat_2", + "gitignore": "gitignore", + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "nixpkgs-stable": "nixpkgs-stable" + }, + "locked": { + "lastModified": 1730814269, + "narHash": "sha256-fWPHyhYE6xvMI1eGY3pwBTq85wcy1YXqdzTZF+06nOg=", + "owner": "cachix", + "repo": "git-hooks.nix", + "rev": "d70155fdc00df4628446352fc58adc640cd705c2", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "git-hooks.nix", + "type": "github" + } + }, "root": { "inputs": { "aagl": "aagl", @@ -286,14 +398,14 @@ "sops-nix": { "inputs": { "nixpkgs": "nixpkgs_4", - "nixpkgs-stable": "nixpkgs-stable" + "nixpkgs-stable": "nixpkgs-stable_2" }, "locked": { - "lastModified": 1720926522, - "narHash": "sha256-eTpnrT6yu1vp8C0B5fxHXhgKxHoYMoYTEikQx///jxY=", + "lastModified": 1731008979, + "narHash": "sha256-yN1NxvmqV8UltLkqYBWTeZNgpD/eyh/7LM58caHiEfE=", "owner": "Mic92", "repo": "sops-nix", - "rev": "0703ba03fd9c1665f8ab68cc3487302475164617", + "rev": "fe63071416471abdab06caa234122932a7c4b980", "type": "github" }, "original": { @@ -319,11 +431,22 @@ }, "xdph": { "inputs": { - "hyprland-protocols": "hyprland-protocols", + "hyprland-protocols": [ + "hyprland", + "hyprland-protocols" + ], "hyprlang": [ "hyprland", "hyprlang" ], + "hyprutils": [ + "hyprland", + "hyprutils" + ], + "hyprwayland-scanner": [ + "hyprland", + "hyprwayland-scanner" + ], "nixpkgs": [ "hyprland", "nixpkgs" @@ -334,11 +457,11 @@ ] }, "locked": { - "lastModified": 1720194466, - "narHash": "sha256-Rizg9efi6ue95zOp0MeIV2ZedNo+5U9G2l6yirgBUnA=", + "lastModified": 1730743262, + "narHash": "sha256-iTLqj3lU8kFehPm5tXpctzkD274t/k1nwSSq3qCWXeg=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "b9b97e5ba23fe7bd5fa4df54696102e8aa863cf6", + "rev": "09b23cef06fe248e61cec8862c04b9bcb62f4b6d", "type": "github" }, "original": { From d1dbda98cdb4239bbc8bd02d8ace5f28ab13c747 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Fri, 25 Oct 2024 10:51:21 -0700 Subject: [PATCH 213/412] Hypr, fix package nix store paths --- hmModules/apps/hypr/default.nix | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/hmModules/apps/hypr/default.nix b/hmModules/apps/hypr/default.nix index a28db98..138e067 100644 --- a/hmModules/apps/hypr/default.nix +++ b/hmModules/apps/hypr/default.nix @@ -26,7 +26,7 @@ let rootPath = ./.; in cursor = { enable = lib.mkEnableOption "Enables custom cursor"; theme = lib.mkOption { default = ""; }; - size = lib.mkOption { default = 64; }; + size = lib.mkOption { default = "64"; }; }; xwayland.videobridge.enable = lib.mkEnableOption "Enable xwaylandvideobridge"; mouse.sensitivity = lib.mkOption { default = 0; }; @@ -111,10 +111,10 @@ let rootPath = ./.; in }; exec-once = lopts config.hypr.polkit.enable [ - "${pkgs.polkit-kde-agent}/libexec/polkit-kde-authentication-agent-1" + "${pkgs.polkit-kde-agent}/bin/libexec/polkit-kde-authentication-agent-1" ] ++ lopts config.hypr.background.enable [ - "${pkgs.swww}/swww init" - "${pkgs.swww}/swww img ${config.hypr.background.path}" + "${pkgs.swww}/bin/swww-daemon" + "${pkgs.swww}/bin/swww img ${config.hypr.background.path}" ] ++ lopts config.ags.enable [ "ags" ] ++ lopts config.beeper.enable [ @@ -176,7 +176,7 @@ let rootPath = ./.; in then ("${mod}" + kb) else ("${mod}, " + kb); in map modPrefix ([ - "return, exec, ${config.defaultApps.terminal}" + "Return, exec, ${config.defaultApps.terminal}" "&SHIFT, Q, exit" "h, focusmonitor, l" "l, focusmonitor, r" @@ -199,10 +199,10 @@ let rootPath = ./.; in "&SHIFT, ${toString depth}, movetoworkspacesilent, name:${ws}" ] ++ wsBinds wrksps (depth + 1); in wsBinds workspaces 1) ++ lopts config.rofi.enable [ - "&SHIFT, return, exec, ${pkgs.rofi}/rofi -show run" + "&SHIFT, return, exec, ${pkgs.rofi}/bin/rofi -show run" ] ++ lopts config.hypr.screenshot.enable [ - "P, exec, ${pkgs.grimblast}/grimblast --freeze copy area" - "&SHIFT, P, exec, ${pkgs.grimblast}/grimblast --freeze copysave area" + "P, exec, ${pkgs.grimblast}/bin/grimblast --freeze copy area" + "&SHIFT, P, exec, ${pkgs.grimblast}/bin/grimblast --freeze copysave area" ] ++ lopts config.hypr.workspace.scratchpad.enable [ "i, togglespecialworkspace, scratch" ]); From 7ec06f1585bf3a50b07f03c731873406429086ad Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Fri, 25 Oct 2024 10:51:21 -0700 Subject: [PATCH 214/412] Hypr, fix package nix store paths --- hmModules/apps/hypr/default.nix | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/hmModules/apps/hypr/default.nix b/hmModules/apps/hypr/default.nix index a28db98..138e067 100644 --- a/hmModules/apps/hypr/default.nix +++ b/hmModules/apps/hypr/default.nix @@ -26,7 +26,7 @@ let rootPath = ./.; in cursor = { enable = lib.mkEnableOption "Enables custom cursor"; theme = lib.mkOption { default = ""; }; - size = lib.mkOption { default = 64; }; + size = lib.mkOption { default = "64"; }; }; xwayland.videobridge.enable = lib.mkEnableOption "Enable xwaylandvideobridge"; mouse.sensitivity = lib.mkOption { default = 0; }; @@ -111,10 +111,10 @@ let rootPath = ./.; in }; exec-once = lopts config.hypr.polkit.enable [ - "${pkgs.polkit-kde-agent}/libexec/polkit-kde-authentication-agent-1" + "${pkgs.polkit-kde-agent}/bin/libexec/polkit-kde-authentication-agent-1" ] ++ lopts config.hypr.background.enable [ - "${pkgs.swww}/swww init" - "${pkgs.swww}/swww img ${config.hypr.background.path}" + "${pkgs.swww}/bin/swww-daemon" + "${pkgs.swww}/bin/swww img ${config.hypr.background.path}" ] ++ lopts config.ags.enable [ "ags" ] ++ lopts config.beeper.enable [ @@ -176,7 +176,7 @@ let rootPath = ./.; in then ("${mod}" + kb) else ("${mod}, " + kb); in map modPrefix ([ - "return, exec, ${config.defaultApps.terminal}" + "Return, exec, ${config.defaultApps.terminal}" "&SHIFT, Q, exit" "h, focusmonitor, l" "l, focusmonitor, r" @@ -199,10 +199,10 @@ let rootPath = ./.; in "&SHIFT, ${toString depth}, movetoworkspacesilent, name:${ws}" ] ++ wsBinds wrksps (depth + 1); in wsBinds workspaces 1) ++ lopts config.rofi.enable [ - "&SHIFT, return, exec, ${pkgs.rofi}/rofi -show run" + "&SHIFT, return, exec, ${pkgs.rofi}/bin/rofi -show run" ] ++ lopts config.hypr.screenshot.enable [ - "P, exec, ${pkgs.grimblast}/grimblast --freeze copy area" - "&SHIFT, P, exec, ${pkgs.grimblast}/grimblast --freeze copysave area" + "P, exec, ${pkgs.grimblast}/bin/grimblast --freeze copy area" + "&SHIFT, P, exec, ${pkgs.grimblast}/bin/grimblast --freeze copysave area" ] ++ lopts config.hypr.workspace.scratchpad.enable [ "i, togglespecialworkspace, scratch" ]); From b57482b98b2508a764efea51d9216892560d5a33 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Fri, 25 Oct 2024 11:17:42 -0700 Subject: [PATCH 215/412] Hypr, update from no_gaps_when_only --- hmModules/apps/hypr/default.nix | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/hmModules/apps/hypr/default.nix b/hmModules/apps/hypr/default.nix index 138e067..58a441a 100644 --- a/hmModules/apps/hypr/default.nix +++ b/hmModules/apps/hypr/default.nix @@ -70,6 +70,11 @@ let rootPath = ./.; in builtins.mapAttrs wsMonitor wsAttr )); in makeRules config.hypr.workspace.workspaces + ++ [ + "w[t1], gapsout:0, gapsin:0" + "w[tg1], gapsout:0, gapsin:0" + "f[1], gapsout:0, gapsin:0" + ] ++ lopts config.hypr.workspace.scratchpad.enable [ "special:scratch, on-created-empty: [float; size 50% 50%; center] ${config.defaultApps.terminal}" ]; @@ -103,7 +108,6 @@ let rootPath = ./.; in "workspaces, 1, 3, default" ]; master = { - no_gaps_when_only = 1; mfact = config.hypr.master.mfact; }; misc = { @@ -144,7 +148,15 @@ let rootPath = ./.; in allDefault = wsAttr: builtins.concatLists (builtins.attrValues ( builtins.mapAttrs workspaceDefaults wsAttr )); - in allDefault config.hypr.workspace.defaults + in allDefault config.hypr.workspace.defaults + ++ [ + "bordersize 0, floating:0, onworkspace:w[t1]" + "rounding 0, floating:0, onworkspace:w[t1]" + "bordersize 0, floating:0, onworkspace:w[tg1]" + "rounding 0, floating:0, onworkspace:w[tg1]" + "bordersize 0, floating:0, onworkspace:f[1]" + "rounding 0, floating:0, onworkspace:f[1]" + ] ++ lopts config.hypr.xwayland.videobridge.enable [ "opacity 0.0 override 0.0 override,class:^(xwaylandvideobridge)$" "noanim,class:^(xwaylandvideobridge)$" From 6c632490d50e1ecf65f944a4a15add4b7c79b463 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Fri, 25 Oct 2024 11:17:42 -0700 Subject: [PATCH 216/412] Hypr, update from no_gaps_when_only --- hmModules/apps/hypr/default.nix | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/hmModules/apps/hypr/default.nix b/hmModules/apps/hypr/default.nix index 138e067..58a441a 100644 --- a/hmModules/apps/hypr/default.nix +++ b/hmModules/apps/hypr/default.nix @@ -70,6 +70,11 @@ let rootPath = ./.; in builtins.mapAttrs wsMonitor wsAttr )); in makeRules config.hypr.workspace.workspaces + ++ [ + "w[t1], gapsout:0, gapsin:0" + "w[tg1], gapsout:0, gapsin:0" + "f[1], gapsout:0, gapsin:0" + ] ++ lopts config.hypr.workspace.scratchpad.enable [ "special:scratch, on-created-empty: [float; size 50% 50%; center] ${config.defaultApps.terminal}" ]; @@ -103,7 +108,6 @@ let rootPath = ./.; in "workspaces, 1, 3, default" ]; master = { - no_gaps_when_only = 1; mfact = config.hypr.master.mfact; }; misc = { @@ -144,7 +148,15 @@ let rootPath = ./.; in allDefault = wsAttr: builtins.concatLists (builtins.attrValues ( builtins.mapAttrs workspaceDefaults wsAttr )); - in allDefault config.hypr.workspace.defaults + in allDefault config.hypr.workspace.defaults + ++ [ + "bordersize 0, floating:0, onworkspace:w[t1]" + "rounding 0, floating:0, onworkspace:w[t1]" + "bordersize 0, floating:0, onworkspace:w[tg1]" + "rounding 0, floating:0, onworkspace:w[tg1]" + "bordersize 0, floating:0, onworkspace:f[1]" + "rounding 0, floating:0, onworkspace:f[1]" + ] ++ lopts config.hypr.xwayland.videobridge.enable [ "opacity 0.0 override 0.0 override,class:^(xwaylandvideobridge)$" "noanim,class:^(xwaylandvideobridge)$" From 7e81e09ca43b81a090f01fac9954f599b027d93e Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 11 Nov 2024 12:43:00 -0800 Subject: [PATCH 217/412] Hypr, move from xonsh to python3 --- hmModules/apps/hypr/scripts/changeprimary.py | 61 +++++++++++++++++++ hmModules/apps/hypr/scripts/changeprimary.xsh | 27 -------- .../apps/hypr/scripts/changesecondary.py | 36 +++++++++++ .../apps/hypr/scripts/changesecondary.xsh | 27 -------- 4 files changed, 97 insertions(+), 54 deletions(-) create mode 100755 hmModules/apps/hypr/scripts/changeprimary.py delete mode 100755 hmModules/apps/hypr/scripts/changeprimary.xsh create mode 100755 hmModules/apps/hypr/scripts/changesecondary.py delete mode 100755 hmModules/apps/hypr/scripts/changesecondary.xsh diff --git a/hmModules/apps/hypr/scripts/changeprimary.py b/hmModules/apps/hypr/scripts/changeprimary.py new file mode 100755 index 0000000..9b88129 --- /dev/null +++ b/hmModules/apps/hypr/scripts/changeprimary.py @@ -0,0 +1,61 @@ +#!/usr/bin/env python3 +import shelve +import os +import sys +import subprocess + +# Usage: +# ./changeprimary.xsh workspace +# changes to that workspace +# if workspace is "etc" then changes to etcN where N is a number + +def changeprimary(workspace, pmonitor, smonitor, dbpath): + current_primary = "" + current_secondary = "" + + with shelve.open(dbpath) as db: + current_primary = db.get("primary") + current_secondary = db.get("secondary") + + old_primary = current_primary + current_primary = workspace + + if current_primary == current_secondary: + workspaces = db.get("secondaries").copy() + if old_primary in workspaces: + current_secondary = old_primary + else: + current_secondary = workspaces[ + (workspaces.index(current_secondary)+1) % len(workspaces) + ] + + db["primary"] = current_primary + db["secondary"] = current_secondary + + subprocess.run([ + "hyprctl", "dispatch", "moveworkspacetomonitor", + "name:" + current_secondary, smonitor + ]) + subprocess.run([ + "hyprctl", "dispatch", "workspace", + "name:" + current_secondary + ]) + subprocess.run([ + "hyprctl", "dispatch", "moveworkspacetomonitor", + "name:" + current_primary, pmonitor + ]) + subprocess.run([ + "hyprctl", "dispatch", "workspace", + "name:" + current_primary + ]) + +if __name__ == "__main__": + try: + workspace=sys.argv[1] + primary_monitor=os.environ["HYPR_MON_PRIMARY"] + secondary_monitor=os.environ["HYPR_MON_SECONDARY"] + db=os.environ["HYPR_WORK_DB"] + changeprimary(workspace, primary_monitor, secondary_monitor, db) + except KeyError: + print("Please set HYPR_MON_PRIMARY and HYPR_WORK_DB") + sys.exit(1) diff --git a/hmModules/apps/hypr/scripts/changeprimary.xsh b/hmModules/apps/hypr/scripts/changeprimary.xsh deleted file mode 100755 index 9b7e0e7..0000000 --- a/hmModules/apps/hypr/scripts/changeprimary.xsh +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env xonsh -import shelve - -# Usage: -# ./changeprimary.xsh workspace -# changes to that workspace -# if workspace is "etc" then changes to etcN where N is a number - -workspace=$ARG1 -monitor=$HYPR_MON_PRIMARY - -current_workspace = "home" - -with shelve.open($HYPR_WORK_DB) as db: - current_workspace = db.get("primary") - if workspace == "etc": - if current_workspace.startswith("etc"): - current = current_workspace[3:] % db.get("primary_extras") - current_workspace = "etc" + str(current) - else: - current_workspace = "etc0" - else: - current_workspace = workspace - db["primary"] = current_workspace - -hyprctl dispatch moveworkspacetomonitor name:@(current_workspace) $HYPR_MON_PRIMARY >> /dev/null -hyprctl dispatch workspace name:@(current_workspace) >> /dev/null diff --git a/hmModules/apps/hypr/scripts/changesecondary.py b/hmModules/apps/hypr/scripts/changesecondary.py new file mode 100755 index 0000000..2eb2b46 --- /dev/null +++ b/hmModules/apps/hypr/scripts/changesecondary.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python3 +import shelve +import copy + +# Usage: +# ./changesecondary.xsh +# cycles through the secondary workspaces + +def cyclesecondary(monitor, dbpath): + current_secondary = "" + + with shelve.open(dbpath) as db: + workspaces = db.get("secondaries").copy() + current_primary = db.get("primary") + current_secondary = db.get("secondary") + + if current_primary in workspaces: + workspaces.remove(current_primary) + + current_secondary = workspaces[ + (workspaces.index(current_secondary)+1) % len(workspaces) + ] + db["secondary"] = current_secondary + + # Change primary to bind + hyprctl dispatch moveworkspacetomonitor name:@(current_secondary) $HYPR_MON_SECONDARY + hyprctl dispatch workspace name:@(current_secondary) + +if __name__ == "__main__": + try: + monitor=os.environ["HYPR_MON_SECONDARY"] + db=os.environ["HYPR_WORK_DB"] + cyclesecondary(monitor, db) + except KeyError: + print("Please set HYPR_MON_PRIMARY and HYPR_WORK_DB") + sys.exit(1) diff --git a/hmModules/apps/hypr/scripts/changesecondary.xsh b/hmModules/apps/hypr/scripts/changesecondary.xsh deleted file mode 100755 index b4cfdf9..0000000 --- a/hmModules/apps/hypr/scripts/changesecondary.xsh +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env xonsh -import shelve -import copy - -# Usage: -# ./changesecondary.xsh -# cycles through the secondary workspaces - -current_secondary = "chat" - -with shelve.open($HYPR_WORK_DB) as db: - workspaces = db.get("secondaries").copy() - current_primary = db.get("primary") - current_secondary = db.get("secondary") - #extras = db.get("secondary_extras") - - if current_primary in workspaces: - workspaces.remove(current_primary) - - current_secondary = workspaces[ - (workspaces.index(current_secondary)+1) % len(workspaces) - ] - db["secondary"] = current_secondary - -# Change primary to bind -hyprctl dispatch moveworkspacetomonitor name:@(current_secondary) $HYPR_MON_SECONDARY -hyprctl dispatch workspace name:@(current_secondary) From 3cc4f623baf54d14cf40bc01511fc48ba74c919b Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 11 Nov 2024 12:43:00 -0800 Subject: [PATCH 218/412] Hypr, move from xonsh to python3 --- hmModules/apps/hypr/scripts/changeprimary.py | 61 +++++++++++++++++++ hmModules/apps/hypr/scripts/changeprimary.xsh | 27 -------- .../apps/hypr/scripts/changesecondary.py | 36 +++++++++++ .../apps/hypr/scripts/changesecondary.xsh | 27 -------- 4 files changed, 97 insertions(+), 54 deletions(-) create mode 100755 hmModules/apps/hypr/scripts/changeprimary.py delete mode 100755 hmModules/apps/hypr/scripts/changeprimary.xsh create mode 100755 hmModules/apps/hypr/scripts/changesecondary.py delete mode 100755 hmModules/apps/hypr/scripts/changesecondary.xsh diff --git a/hmModules/apps/hypr/scripts/changeprimary.py b/hmModules/apps/hypr/scripts/changeprimary.py new file mode 100755 index 0000000..9b88129 --- /dev/null +++ b/hmModules/apps/hypr/scripts/changeprimary.py @@ -0,0 +1,61 @@ +#!/usr/bin/env python3 +import shelve +import os +import sys +import subprocess + +# Usage: +# ./changeprimary.xsh workspace +# changes to that workspace +# if workspace is "etc" then changes to etcN where N is a number + +def changeprimary(workspace, pmonitor, smonitor, dbpath): + current_primary = "" + current_secondary = "" + + with shelve.open(dbpath) as db: + current_primary = db.get("primary") + current_secondary = db.get("secondary") + + old_primary = current_primary + current_primary = workspace + + if current_primary == current_secondary: + workspaces = db.get("secondaries").copy() + if old_primary in workspaces: + current_secondary = old_primary + else: + current_secondary = workspaces[ + (workspaces.index(current_secondary)+1) % len(workspaces) + ] + + db["primary"] = current_primary + db["secondary"] = current_secondary + + subprocess.run([ + "hyprctl", "dispatch", "moveworkspacetomonitor", + "name:" + current_secondary, smonitor + ]) + subprocess.run([ + "hyprctl", "dispatch", "workspace", + "name:" + current_secondary + ]) + subprocess.run([ + "hyprctl", "dispatch", "moveworkspacetomonitor", + "name:" + current_primary, pmonitor + ]) + subprocess.run([ + "hyprctl", "dispatch", "workspace", + "name:" + current_primary + ]) + +if __name__ == "__main__": + try: + workspace=sys.argv[1] + primary_monitor=os.environ["HYPR_MON_PRIMARY"] + secondary_monitor=os.environ["HYPR_MON_SECONDARY"] + db=os.environ["HYPR_WORK_DB"] + changeprimary(workspace, primary_monitor, secondary_monitor, db) + except KeyError: + print("Please set HYPR_MON_PRIMARY and HYPR_WORK_DB") + sys.exit(1) diff --git a/hmModules/apps/hypr/scripts/changeprimary.xsh b/hmModules/apps/hypr/scripts/changeprimary.xsh deleted file mode 100755 index 9b7e0e7..0000000 --- a/hmModules/apps/hypr/scripts/changeprimary.xsh +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env xonsh -import shelve - -# Usage: -# ./changeprimary.xsh workspace -# changes to that workspace -# if workspace is "etc" then changes to etcN where N is a number - -workspace=$ARG1 -monitor=$HYPR_MON_PRIMARY - -current_workspace = "home" - -with shelve.open($HYPR_WORK_DB) as db: - current_workspace = db.get("primary") - if workspace == "etc": - if current_workspace.startswith("etc"): - current = current_workspace[3:] % db.get("primary_extras") - current_workspace = "etc" + str(current) - else: - current_workspace = "etc0" - else: - current_workspace = workspace - db["primary"] = current_workspace - -hyprctl dispatch moveworkspacetomonitor name:@(current_workspace) $HYPR_MON_PRIMARY >> /dev/null -hyprctl dispatch workspace name:@(current_workspace) >> /dev/null diff --git a/hmModules/apps/hypr/scripts/changesecondary.py b/hmModules/apps/hypr/scripts/changesecondary.py new file mode 100755 index 0000000..2eb2b46 --- /dev/null +++ b/hmModules/apps/hypr/scripts/changesecondary.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python3 +import shelve +import copy + +# Usage: +# ./changesecondary.xsh +# cycles through the secondary workspaces + +def cyclesecondary(monitor, dbpath): + current_secondary = "" + + with shelve.open(dbpath) as db: + workspaces = db.get("secondaries").copy() + current_primary = db.get("primary") + current_secondary = db.get("secondary") + + if current_primary in workspaces: + workspaces.remove(current_primary) + + current_secondary = workspaces[ + (workspaces.index(current_secondary)+1) % len(workspaces) + ] + db["secondary"] = current_secondary + + # Change primary to bind + hyprctl dispatch moveworkspacetomonitor name:@(current_secondary) $HYPR_MON_SECONDARY + hyprctl dispatch workspace name:@(current_secondary) + +if __name__ == "__main__": + try: + monitor=os.environ["HYPR_MON_SECONDARY"] + db=os.environ["HYPR_WORK_DB"] + cyclesecondary(monitor, db) + except KeyError: + print("Please set HYPR_MON_PRIMARY and HYPR_WORK_DB") + sys.exit(1) diff --git a/hmModules/apps/hypr/scripts/changesecondary.xsh b/hmModules/apps/hypr/scripts/changesecondary.xsh deleted file mode 100755 index b4cfdf9..0000000 --- a/hmModules/apps/hypr/scripts/changesecondary.xsh +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env xonsh -import shelve -import copy - -# Usage: -# ./changesecondary.xsh -# cycles through the secondary workspaces - -current_secondary = "chat" - -with shelve.open($HYPR_WORK_DB) as db: - workspaces = db.get("secondaries").copy() - current_primary = db.get("primary") - current_secondary = db.get("secondary") - #extras = db.get("secondary_extras") - - if current_primary in workspaces: - workspaces.remove(current_primary) - - current_secondary = workspaces[ - (workspaces.index(current_secondary)+1) % len(workspaces) - ] - db["secondary"] = current_secondary - -# Change primary to bind -hyprctl dispatch moveworkspacetomonitor name:@(current_secondary) $HYPR_MON_SECONDARY -hyprctl dispatch workspace name:@(current_secondary) From 985a5ea6e6604f5d40bc49a1c6c1a6f82c6e9ecf Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 11 Nov 2024 12:43:38 -0800 Subject: [PATCH 219/412] pan@jibril, enable miku cursor --- systems/jibril/default.nix | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/systems/jibril/default.nix b/systems/jibril/default.nix index 109e666..f27a420 100644 --- a/systems/jibril/default.nix +++ b/systems/jibril/default.nix @@ -38,10 +38,10 @@ enable = true; path = "${config.home.homeDirectory}/med/pix/bg.png"; }; - # hypr.cursor = { - # enable = true; - # theme = "miku"; - # }; + hypr.cursor = { + enable = true; + theme = "miku"; + }; hypr = { screenshot.enable = true; mouse.sensitivity = -0.52; From 48b5cfc448a26ae288ea6315818e21ab7d4ba31b Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 11 Nov 2024 12:43:38 -0800 Subject: [PATCH 220/412] pan@jibril, enable miku cursor --- systems/jibril/default.nix | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/systems/jibril/default.nix b/systems/jibril/default.nix index 109e666..f27a420 100644 --- a/systems/jibril/default.nix +++ b/systems/jibril/default.nix @@ -38,10 +38,10 @@ enable = true; path = "${config.home.homeDirectory}/med/pix/bg.png"; }; - # hypr.cursor = { - # enable = true; - # theme = "miku"; - # }; + hypr.cursor = { + enable = true; + theme = "miku"; + }; hypr = { screenshot.enable = true; mouse.sensitivity = -0.52; From ba5fd48569a37e6ec791c78464aab342916d9ac2 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 14 Nov 2024 13:55:47 -0800 Subject: [PATCH 221/412] Hosts, Use directory-driven hosts in flake.nix This adds some code to flake.nix to read the directory of hosts/ and find all hosts based on their host.nix file, and set the hostname based on the directory. I don't know enough about hostnames to know what are valid characters, but in the future this could allow a hostname such as "servers/madoka" which may be an issue. For now the structure is simple enough of "hosts/name" resulting in hostname "name" Another commit is planned which will do the same thing for users --- flake.nix | 20 +++++++++++++++----- hosts/jibril/{default.nix => host.nix} | 0 hosts/onizuka/{default.nix => host.nix} | 0 3 files changed, 15 insertions(+), 5 deletions(-) rename hosts/jibril/{default.nix => host.nix} (100%) rename hosts/onizuka/{default.nix => host.nix} (100%) diff --git a/flake.nix b/flake.nix index 85c6a1a..7644915 100644 --- a/flake.nix +++ b/flake.nix @@ -15,6 +15,8 @@ outputs = { self, home-manager, nixpkgs, ... }@inputs: let system = "x86_64-linux"; pkgs = nixpkgs.legacyPackages.${system}; + fs = pkgs.lib.fileset; + st = pkgs.lib.strings; hostConfig = extraModules: nixpkgs.lib.nixosSystem { specialArgs = { inherit inputs; }; @@ -23,6 +25,15 @@ ./nixosModules ] ++ extraModules; }; + hostFilter = { name, ...}: name == "host.nix"; + hostPaths = fs.toList (fs.fileFilter hostFilter ./hosts); + + hosts = builtins.listToAttrs (map (path: { + value = hostConfig [ path ]; + name = builtins.unsafeDiscardStringContext (st.removeSuffix "/host.nix" ( + builtins.elemAt (st.splitString "/hosts/" path) 1 + )); + }) hostPaths); userConfig = extraModules: home-manager.lib.homeManagerConfiguration { inherit pkgs; @@ -31,12 +42,11 @@ ./hmModules ] ++ extraModules; }; - in - { - nixosConfigurations.onizuka = hostConfig [ ./hosts/onizuka ]; - homeConfigurations."pan@onizuka" = userConfig [ ./hosts/onizuka/users/pan ]; - nixosConfigurations.jibril = hostConfig [ ./hosts/jibril ]; + in { + nixosConfigurations = hosts; + + homeConfigurations."pan@onizuka" = userConfig [ ./hosts/onizuka/users/pan ]; homeConfigurations."pan@jibril" = userConfig [ ./hosts/jibril/users/pan ]; }; } diff --git a/hosts/jibril/default.nix b/hosts/jibril/host.nix similarity index 100% rename from hosts/jibril/default.nix rename to hosts/jibril/host.nix diff --git a/hosts/onizuka/default.nix b/hosts/onizuka/host.nix similarity index 100% rename from hosts/onizuka/default.nix rename to hosts/onizuka/host.nix From 9171e5365c464ffdcad35c72d4da489d3b8727f1 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 14 Nov 2024 13:55:47 -0800 Subject: [PATCH 222/412] Hosts, Use directory-driven hosts in flake.nix This adds some code to flake.nix to read the directory of hosts/ and find all hosts based on their host.nix file, and set the hostname based on the directory. I don't know enough about hostnames to know what are valid characters, but in the future this could allow a hostname such as "servers/madoka" which may be an issue. For now the structure is simple enough of "hosts/name" resulting in hostname "name" Another commit is planned which will do the same thing for users --- flake.nix | 20 +++++++++++++++----- hosts/jibril/{default.nix => host.nix} | 0 hosts/onizuka/{default.nix => host.nix} | 0 3 files changed, 15 insertions(+), 5 deletions(-) rename hosts/jibril/{default.nix => host.nix} (100%) rename hosts/onizuka/{default.nix => host.nix} (100%) diff --git a/flake.nix b/flake.nix index 85c6a1a..7644915 100644 --- a/flake.nix +++ b/flake.nix @@ -15,6 +15,8 @@ outputs = { self, home-manager, nixpkgs, ... }@inputs: let system = "x86_64-linux"; pkgs = nixpkgs.legacyPackages.${system}; + fs = pkgs.lib.fileset; + st = pkgs.lib.strings; hostConfig = extraModules: nixpkgs.lib.nixosSystem { specialArgs = { inherit inputs; }; @@ -23,6 +25,15 @@ ./nixosModules ] ++ extraModules; }; + hostFilter = { name, ...}: name == "host.nix"; + hostPaths = fs.toList (fs.fileFilter hostFilter ./hosts); + + hosts = builtins.listToAttrs (map (path: { + value = hostConfig [ path ]; + name = builtins.unsafeDiscardStringContext (st.removeSuffix "/host.nix" ( + builtins.elemAt (st.splitString "/hosts/" path) 1 + )); + }) hostPaths); userConfig = extraModules: home-manager.lib.homeManagerConfiguration { inherit pkgs; @@ -31,12 +42,11 @@ ./hmModules ] ++ extraModules; }; - in - { - nixosConfigurations.onizuka = hostConfig [ ./hosts/onizuka ]; - homeConfigurations."pan@onizuka" = userConfig [ ./hosts/onizuka/users/pan ]; - nixosConfigurations.jibril = hostConfig [ ./hosts/jibril ]; + in { + nixosConfigurations = hosts; + + homeConfigurations."pan@onizuka" = userConfig [ ./hosts/onizuka/users/pan ]; homeConfigurations."pan@jibril" = userConfig [ ./hosts/jibril/users/pan ]; }; } diff --git a/hosts/jibril/default.nix b/hosts/jibril/host.nix similarity index 100% rename from hosts/jibril/default.nix rename to hosts/jibril/host.nix diff --git a/hosts/onizuka/default.nix b/hosts/onizuka/host.nix similarity index 100% rename from hosts/onizuka/default.nix rename to hosts/onizuka/host.nix From 0e5c6ab2c2e9842ef42b6853f751476261a6eb7f Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 25 Nov 2024 09:52:05 -0800 Subject: [PATCH 223/412] Users, use directory-driven users in flake.nix This converts from the old manually defined users in flake.nix to a dynamically defined users based on the directory structure. This is the same as ba5fd48 but for users instead of hosts. --- flake.nix | 43 +++++++++++++------ .../users/pan/{default.nix => user.nix} | 0 .../users/pan/{default.nix => user.nix} | 0 3 files changed, 30 insertions(+), 13 deletions(-) rename hosts/jibril/users/pan/{default.nix => user.nix} (100%) rename hosts/onizuka/users/pan/{default.nix => user.nix} (100%) diff --git a/flake.nix b/flake.nix index 7644915..4bb16e9 100644 --- a/flake.nix +++ b/flake.nix @@ -25,14 +25,18 @@ ./nixosModules ] ++ extraModules; }; - hostFilter = { name, ...}: name == "host.nix"; - hostPaths = fs.toList (fs.fileFilter hostFilter ./hosts); - - hosts = builtins.listToAttrs (map (path: { - value = hostConfig [ path ]; - name = builtins.unsafeDiscardStringContext (st.removeSuffix "/host.nix" ( - builtins.elemAt (st.splitString "/hosts/" path) 1 - )); + hosts = let + hostFilter = { name, ...}: name == "host.nix"; + hostPaths = fs.toList (fs.fileFilter hostFilter ./hosts); + # Assumes dir structure is start_of_path/hosts/hostname/host.nix + extractHostName = path: builtins.unsafeDiscardStringContext ( + st.removeSuffix "/host.nix" ( + builtins.elemAt (st.splitString "/hosts/" path) 1 + ) + ); + in builtins.listToAttrs (map (path: { + value = path; + name = extractHostName path; }) hostPaths); userConfig = extraModules: home-manager.lib.homeManagerConfiguration { @@ -42,11 +46,24 @@ ./hmModules ] ++ extraModules; }; - + users = let + userFilter = { name, ...}: name == "user.nix"; + userPaths = fs.toList (fs.fileFilter userFilter ./hosts); + in builtins.listToAttrs (map (path: let + dirsAndFiles = st.splitString "/" path; + dAFLength = builtins.length dirsAndFiles; + # Assumes dir structure is start_of_path/hosts/hostname/users/username/user.nix + hostname = builtins.unsafeDiscardStringContext ( + builtins.elemAt dirsAndFiles (dAFLength - 4)); + username = builtins.unsafeDiscardStringContext ( + builtins.elemAt dirsAndFiles (dAFLength - 2)); + in { + name = username + "@" + hostname; + value = path; + } + ) userPaths); in { - nixosConfigurations = hosts; - - homeConfigurations."pan@onizuka" = userConfig [ ./hosts/onizuka/users/pan ]; - homeConfigurations."pan@jibril" = userConfig [ ./hosts/jibril/users/pan ]; + nixosConfigurations = builtins.mapAttrs (name: path: hostConfig [ path ]) hosts; + homeConfigurations = builtins.mapAttrs (name: path: userConfig [ path ]) users; }; } diff --git a/hosts/jibril/users/pan/default.nix b/hosts/jibril/users/pan/user.nix similarity index 100% rename from hosts/jibril/users/pan/default.nix rename to hosts/jibril/users/pan/user.nix diff --git a/hosts/onizuka/users/pan/default.nix b/hosts/onizuka/users/pan/user.nix similarity index 100% rename from hosts/onizuka/users/pan/default.nix rename to hosts/onizuka/users/pan/user.nix From 9aa49cd3ae367798718160718ecd235077003837 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 25 Nov 2024 09:52:05 -0800 Subject: [PATCH 224/412] Users, use directory-driven users in flake.nix This converts from the old manually defined users in flake.nix to a dynamically defined users based on the directory structure. This is the same as 9171e53 but for users instead of hosts. --- flake.nix | 43 +++++++++++++------ .../users/pan/{default.nix => user.nix} | 0 .../users/pan/{default.nix => user.nix} | 0 3 files changed, 30 insertions(+), 13 deletions(-) rename hosts/jibril/users/pan/{default.nix => user.nix} (100%) rename hosts/onizuka/users/pan/{default.nix => user.nix} (100%) diff --git a/flake.nix b/flake.nix index 7644915..4bb16e9 100644 --- a/flake.nix +++ b/flake.nix @@ -25,14 +25,18 @@ ./nixosModules ] ++ extraModules; }; - hostFilter = { name, ...}: name == "host.nix"; - hostPaths = fs.toList (fs.fileFilter hostFilter ./hosts); - - hosts = builtins.listToAttrs (map (path: { - value = hostConfig [ path ]; - name = builtins.unsafeDiscardStringContext (st.removeSuffix "/host.nix" ( - builtins.elemAt (st.splitString "/hosts/" path) 1 - )); + hosts = let + hostFilter = { name, ...}: name == "host.nix"; + hostPaths = fs.toList (fs.fileFilter hostFilter ./hosts); + # Assumes dir structure is start_of_path/hosts/hostname/host.nix + extractHostName = path: builtins.unsafeDiscardStringContext ( + st.removeSuffix "/host.nix" ( + builtins.elemAt (st.splitString "/hosts/" path) 1 + ) + ); + in builtins.listToAttrs (map (path: { + value = path; + name = extractHostName path; }) hostPaths); userConfig = extraModules: home-manager.lib.homeManagerConfiguration { @@ -42,11 +46,24 @@ ./hmModules ] ++ extraModules; }; - + users = let + userFilter = { name, ...}: name == "user.nix"; + userPaths = fs.toList (fs.fileFilter userFilter ./hosts); + in builtins.listToAttrs (map (path: let + dirsAndFiles = st.splitString "/" path; + dAFLength = builtins.length dirsAndFiles; + # Assumes dir structure is start_of_path/hosts/hostname/users/username/user.nix + hostname = builtins.unsafeDiscardStringContext ( + builtins.elemAt dirsAndFiles (dAFLength - 4)); + username = builtins.unsafeDiscardStringContext ( + builtins.elemAt dirsAndFiles (dAFLength - 2)); + in { + name = username + "@" + hostname; + value = path; + } + ) userPaths); in { - nixosConfigurations = hosts; - - homeConfigurations."pan@onizuka" = userConfig [ ./hosts/onizuka/users/pan ]; - homeConfigurations."pan@jibril" = userConfig [ ./hosts/jibril/users/pan ]; + nixosConfigurations = builtins.mapAttrs (name: path: hostConfig [ path ]) hosts; + homeConfigurations = builtins.mapAttrs (name: path: userConfig [ path ]) users; }; } diff --git a/hosts/jibril/users/pan/default.nix b/hosts/jibril/users/pan/user.nix similarity index 100% rename from hosts/jibril/users/pan/default.nix rename to hosts/jibril/users/pan/user.nix diff --git a/hosts/onizuka/users/pan/default.nix b/hosts/onizuka/users/pan/user.nix similarity index 100% rename from hosts/onizuka/users/pan/default.nix rename to hosts/onizuka/users/pan/user.nix From 6124a298ebaf05c604d449b40962a01af7536010 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 25 Nov 2024 13:21:06 -0800 Subject: [PATCH 225/412] System, get hostname from directory structure --- flake.nix | 24 ++++++++++++++++-------- hosts/jibril/host.nix | 20 ++++++++------------ hosts/onizuka/host.nix | 4 ---- nixosModules/services/system/default.nix | 8 ++++++-- 4 files changed, 30 insertions(+), 26 deletions(-) diff --git a/flake.nix b/flake.nix index 4bb16e9..679d075 100644 --- a/flake.nix +++ b/flake.nix @@ -18,12 +18,16 @@ fs = pkgs.lib.fileset; st = pkgs.lib.strings; - hostConfig = extraModules: nixpkgs.lib.nixosSystem { - specialArgs = { inherit inputs; }; + hostConfig = hostname: hostpath: nixpkgs.lib.nixosSystem { + specialArgs = { + inherit inputs; + inherit hostname; + }; system = system; modules = [ ./nixosModules - ] ++ extraModules; + hostpath + ]; }; hosts = let hostFilter = { name, ...}: name == "host.nix"; @@ -39,12 +43,16 @@ name = extractHostName path; }) hostPaths); - userConfig = extraModules: home-manager.lib.homeManagerConfiguration { + userConfig = usernameAtHostname: userpath: home-manager.lib.homeManagerConfiguration { inherit pkgs; - extraSpecialArgs = { inherit inputs; }; + extraSpecialArgs = { + inherit inputs; + inherit usernameAtHostname; + }; modules = [ ./hmModules - ] ++ extraModules; + userpath + ]; }; users = let userFilter = { name, ...}: name == "user.nix"; @@ -63,7 +71,7 @@ } ) userPaths); in { - nixosConfigurations = builtins.mapAttrs (name: path: hostConfig [ path ]) hosts; - homeConfigurations = builtins.mapAttrs (name: path: userConfig [ path ]) users; + nixosConfigurations = builtins.mapAttrs (name: path: hostConfig name path) hosts; + homeConfigurations = builtins.mapAttrs (name: path: userConfig name path) users; }; } diff --git a/hosts/jibril/host.nix b/hosts/jibril/host.nix index 840328b..249e9aa 100644 --- a/hosts/jibril/host.nix +++ b/hosts/jibril/host.nix @@ -4,9 +4,14 @@ imports = [ ./hardware.nix ]; - networking.hostName = "jibril"; - nixpkgs.config.allowUnfree = true; - system.stateVersion = "23.05"; + pipewire.enable = true; + polkit.enable = true; + bluetooth.enable = true; + wireless = { + enable = true; + networks = builtins.fromTOML (builtins.readFile ./networks.toml); + secretsFile = config.sops.secrets.wireless.path; + }; sops-nix = { enable = true; @@ -17,15 +22,6 @@ }; }; - pipewire.enable = true; - polkit.enable = true; - bluetooth.enable = true; - wireless = { - enable = true; - networks = builtins.fromTOML (builtins.readFile ./networks.toml); - secretsFile = config.sops.secrets.wireless.path; - }; - user.name = "pan"; user.timezone = "America/Los_Angeles"; diff --git a/hosts/onizuka/host.nix b/hosts/onizuka/host.nix index 5d3e23f..2fdaf05 100644 --- a/hosts/onizuka/host.nix +++ b/hosts/onizuka/host.nix @@ -4,10 +4,6 @@ imports = [ ./hardware.nix ]; - networking.hostName = "onizuka"; - nixpkgs.config.allowUnfree = true; - system.stateVersion = "23.05"; - nvidia.enable = true; pipewire.enable = true; polkit.enable = true; diff --git a/nixosModules/services/system/default.nix b/nixosModules/services/system/default.nix index 0f4bb75..5780ea3 100644 --- a/nixosModules/services/system/default.nix +++ b/nixosModules/services/system/default.nix @@ -1,4 +1,4 @@ -{ config, inputs, pkgs, lib, ... }: +{ config, inputs, pkgs, lib, hostname, ... }: { options = { @@ -15,6 +15,10 @@ boot.loader.timeout = 1; boot.loader.efi.canTouchEfiVariables = true; + networking.hostName = hostname; + nixpkgs.config.allowUnfree = true; + system.stateVersion = "23.05"; + time.timeZone = config.user.timezone; i18n.defaultLocale = "en_US.UTF-8"; @@ -29,7 +33,7 @@ # XDG Compliance xdg.portal.config.common.default = "*"; - environment.sessionVariables = rec { + environment.sessionVariables = { XDG_CONFIG_HOME = "\${HOME}/.config"; XDG_CACHE_HOME = "\${HOME}/.cache"; XDG_STATE_HOME = "\${HOME}/.local/state"; From 85262bf9e192f411fb9c215316d7151b4e86a268 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 25 Nov 2024 13:21:06 -0800 Subject: [PATCH 226/412] System, get hostname from directory structure --- flake.nix | 24 ++++++++++++++++-------- hosts/jibril/host.nix | 20 ++++++++------------ hosts/onizuka/host.nix | 4 ---- nixosModules/services/system/default.nix | 8 ++++++-- 4 files changed, 30 insertions(+), 26 deletions(-) diff --git a/flake.nix b/flake.nix index 4bb16e9..679d075 100644 --- a/flake.nix +++ b/flake.nix @@ -18,12 +18,16 @@ fs = pkgs.lib.fileset; st = pkgs.lib.strings; - hostConfig = extraModules: nixpkgs.lib.nixosSystem { - specialArgs = { inherit inputs; }; + hostConfig = hostname: hostpath: nixpkgs.lib.nixosSystem { + specialArgs = { + inherit inputs; + inherit hostname; + }; system = system; modules = [ ./nixosModules - ] ++ extraModules; + hostpath + ]; }; hosts = let hostFilter = { name, ...}: name == "host.nix"; @@ -39,12 +43,16 @@ name = extractHostName path; }) hostPaths); - userConfig = extraModules: home-manager.lib.homeManagerConfiguration { + userConfig = usernameAtHostname: userpath: home-manager.lib.homeManagerConfiguration { inherit pkgs; - extraSpecialArgs = { inherit inputs; }; + extraSpecialArgs = { + inherit inputs; + inherit usernameAtHostname; + }; modules = [ ./hmModules - ] ++ extraModules; + userpath + ]; }; users = let userFilter = { name, ...}: name == "user.nix"; @@ -63,7 +71,7 @@ } ) userPaths); in { - nixosConfigurations = builtins.mapAttrs (name: path: hostConfig [ path ]) hosts; - homeConfigurations = builtins.mapAttrs (name: path: userConfig [ path ]) users; + nixosConfigurations = builtins.mapAttrs (name: path: hostConfig name path) hosts; + homeConfigurations = builtins.mapAttrs (name: path: userConfig name path) users; }; } diff --git a/hosts/jibril/host.nix b/hosts/jibril/host.nix index 840328b..249e9aa 100644 --- a/hosts/jibril/host.nix +++ b/hosts/jibril/host.nix @@ -4,9 +4,14 @@ imports = [ ./hardware.nix ]; - networking.hostName = "jibril"; - nixpkgs.config.allowUnfree = true; - system.stateVersion = "23.05"; + pipewire.enable = true; + polkit.enable = true; + bluetooth.enable = true; + wireless = { + enable = true; + networks = builtins.fromTOML (builtins.readFile ./networks.toml); + secretsFile = config.sops.secrets.wireless.path; + }; sops-nix = { enable = true; @@ -17,15 +22,6 @@ }; }; - pipewire.enable = true; - polkit.enable = true; - bluetooth.enable = true; - wireless = { - enable = true; - networks = builtins.fromTOML (builtins.readFile ./networks.toml); - secretsFile = config.sops.secrets.wireless.path; - }; - user.name = "pan"; user.timezone = "America/Los_Angeles"; diff --git a/hosts/onizuka/host.nix b/hosts/onizuka/host.nix index 5d3e23f..2fdaf05 100644 --- a/hosts/onizuka/host.nix +++ b/hosts/onizuka/host.nix @@ -4,10 +4,6 @@ imports = [ ./hardware.nix ]; - networking.hostName = "onizuka"; - nixpkgs.config.allowUnfree = true; - system.stateVersion = "23.05"; - nvidia.enable = true; pipewire.enable = true; polkit.enable = true; diff --git a/nixosModules/services/system/default.nix b/nixosModules/services/system/default.nix index 0f4bb75..5780ea3 100644 --- a/nixosModules/services/system/default.nix +++ b/nixosModules/services/system/default.nix @@ -1,4 +1,4 @@ -{ config, inputs, pkgs, lib, ... }: +{ config, inputs, pkgs, lib, hostname, ... }: { options = { @@ -15,6 +15,10 @@ boot.loader.timeout = 1; boot.loader.efi.canTouchEfiVariables = true; + networking.hostName = hostname; + nixpkgs.config.allowUnfree = true; + system.stateVersion = "23.05"; + time.timeZone = config.user.timezone; i18n.defaultLocale = "en_US.UTF-8"; @@ -29,7 +33,7 @@ # XDG Compliance xdg.portal.config.common.default = "*"; - environment.sessionVariables = rec { + environment.sessionVariables = { XDG_CONFIG_HOME = "\${HOME}/.config"; XDG_CACHE_HOME = "\${HOME}/.cache"; XDG_STATE_HOME = "\${HOME}/.local/state"; From d994e119183c51745136a1a323737c54aa9316c3 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 26 Nov 2024 08:42:01 -0800 Subject: [PATCH 227/412] System, dynamic users for host, removes user.name adds a new specialArg to hosts: usernameList, which is a list of users determined through user/user.nix in the host/hostname dir. This touches syncthing, tuigreet, jibril, shells, and system removes the user.name field, and converts user.timezone to system.timezone. This is to move user content off of the host. This old system is replaced with dynamic user creation based on the usernameList variable Because this removes the users.users.defaultUser shells now use the (more appropriate) users.defaultUserShell --- flake.nix | 58 ++++++++++++------- hosts/jibril/host.nix | 4 +- nixosModules/apps/shells/fish/default.nix | 2 +- nixosModules/apps/shells/xonsh/default.nix | 2 +- nixosModules/apps/shells/zsh/default.nix | 2 +- nixosModules/apps/syncthing/default.nix | 26 ++++----- .../graphics/display_manager/default.nix | 2 +- nixosModules/services/system/default.nix | 30 +++++----- 8 files changed, 71 insertions(+), 55 deletions(-) diff --git a/flake.nix b/flake.nix index 679d075..ea26eec 100644 --- a/flake.nix +++ b/flake.nix @@ -17,18 +17,8 @@ pkgs = nixpkgs.legacyPackages.${system}; fs = pkgs.lib.fileset; st = pkgs.lib.strings; + as = pkgs.lib.attrsets; - hostConfig = hostname: hostpath: nixpkgs.lib.nixosSystem { - specialArgs = { - inherit inputs; - inherit hostname; - }; - system = system; - modules = [ - ./nixosModules - hostpath - ]; - }; hosts = let hostFilter = { name, ...}: name == "host.nix"; hostPaths = fs.toList (fs.fileFilter hostFilter ./hosts); @@ -43,17 +33,6 @@ name = extractHostName path; }) hostPaths); - userConfig = usernameAtHostname: userpath: home-manager.lib.homeManagerConfiguration { - inherit pkgs; - extraSpecialArgs = { - inherit inputs; - inherit usernameAtHostname; - }; - modules = [ - ./hmModules - userpath - ]; - }; users = let userFilter = { name, ...}: name == "user.nix"; userPaths = fs.toList (fs.fileFilter userFilter ./hosts); @@ -70,6 +49,41 @@ value = path; } ) userPaths); + + userConfig = usernameAtHostname: userpath: home-manager.lib.homeManagerConfiguration { + inherit pkgs; + extraSpecialArgs = { + inherit inputs; + inherit usernameAtHostname; + }; + modules = [ + ./hmModules + userpath + ]; + }; + + hostConfig = hostname: hostpath: nixpkgs.lib.nixosSystem { + specialArgs = let + hostFilteredUsers = as.filterAttrs ( + name: value: let + userHostname = builtins.elemAt (st.splitString "@" name) 1; + in userHostname == hostname + ) users; + + hostUsers = as.mapAttrsToList ( + name: value: builtins.elemAt (st.splitString "@" name) 0 + ) hostFilteredUsers; + in { + inherit inputs; + inherit hostname; + "usernameList" = hostUsers; + }; + system = system; + modules = [ + ./nixosModules + hostpath + ]; + }; in { nixosConfigurations = builtins.mapAttrs (name: path: hostConfig name path) hosts; homeConfigurations = builtins.mapAttrs (name: path: userConfig name path) users; diff --git a/hosts/jibril/host.nix b/hosts/jibril/host.nix index 249e9aa..cce879f 100644 --- a/hosts/jibril/host.nix +++ b/hosts/jibril/host.nix @@ -22,8 +22,7 @@ }; }; - user.name = "pan"; - user.timezone = "America/Los_Angeles"; + system.timezone = "America/Los_Angeles"; tuigreet.enable = true; hyprland.enable = true; @@ -31,5 +30,4 @@ librewolf.enable = true; fish.enable = true; fish.setDefault = true; - syncthing.enable = true; } diff --git a/nixosModules/apps/shells/fish/default.nix b/nixosModules/apps/shells/fish/default.nix index d4885f9..1e17b4e 100644 --- a/nixosModules/apps/shells/fish/default.nix +++ b/nixosModules/apps/shells/fish/default.nix @@ -9,7 +9,7 @@ config = lib.mkIf config.fish.enable { programs.fish.enable = true; - users.users.defaultUser.shell = lib.mkIf config.fish.setDefault pkgs.fish; + users.defaultUserShell = lib.mkIf config.fish.setDefault pkgs.fish; environment.shells = with pkgs; [ fish ]; }; } diff --git a/nixosModules/apps/shells/xonsh/default.nix b/nixosModules/apps/shells/xonsh/default.nix index 644e14e..4d4215c 100644 --- a/nixosModules/apps/shells/xonsh/default.nix +++ b/nixosModules/apps/shells/xonsh/default.nix @@ -9,7 +9,7 @@ config = lib.mkIf config.xonsh.enable { programs.xonsh.enable = true; - users.users.defaultUser.shell = lib.mkIf config.xonsh.setDefault pkgs.xonsh; + users.defaultUserShell = lib.mkIf config.xonsh.setDefault pkgs.xonsh; environment.shells = with pkgs; [ xonsh ]; }; } diff --git a/nixosModules/apps/shells/zsh/default.nix b/nixosModules/apps/shells/zsh/default.nix index 5ede3d1..93d33f7 100644 --- a/nixosModules/apps/shells/zsh/default.nix +++ b/nixosModules/apps/shells/zsh/default.nix @@ -14,7 +14,7 @@ histFile = "$HOME/.config/zsh/history"; histSize = 2000; }; - users.users.defaultUser.shell = lib.mkIf config.zsh.setDefault pkgs.zsh; + users.defaultUserShell = lib.mkIf config.zsh.setDefault pkgs.zsh; environment.shells = with pkgs; [ zsh ]; }; } diff --git a/nixosModules/apps/syncthing/default.nix b/nixosModules/apps/syncthing/default.nix index 69cea88..fee80a5 100644 --- a/nixosModules/apps/syncthing/default.nix +++ b/nixosModules/apps/syncthing/default.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, ... }: +{ config, lib, ... }: { options = { @@ -8,18 +8,18 @@ config = lib.mkIf config.syncthing.enable { services.syncthing = { enable = true; - user = config.user.name; - dataDir = "/home/" + config.user.name + "/dox/Sync"; - configDir = "/home/" + config.user.name + "/.config/syncthing"; - overrideFolders = true; - overrideDevices = true; - - settings = { - gui = { - user = config.user.name; - password = "password"; - }; - }; + # user = config.user.name; + # dataDir = "/home/" + config.user.name + "/dox/Sync"; + # configDir = "/home/" + config.user.name + "/.config/syncthing"; + # overrideFolders = true; + # overrideDevices = true; + # + # settings = { + # gui = { + # user = config.user.name; + # password = "password"; + # }; + # }; }; }; } diff --git a/nixosModules/services/graphics/display_manager/default.nix b/nixosModules/services/graphics/display_manager/default.nix index 8e0c4c1..3e4dab2 100644 --- a/nixosModules/services/graphics/display_manager/default.nix +++ b/nixosModules/services/graphics/display_manager/default.nix @@ -15,7 +15,7 @@ }; default_session = lib.mkIf config.hyprland.enable { command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time --cmd Hyprland"; - user = config.user.name; + user = "greeter"; }; }; }; diff --git a/nixosModules/services/system/default.nix b/nixosModules/services/system/default.nix index 5780ea3..252a8f9 100644 --- a/nixosModules/services/system/default.nix +++ b/nixosModules/services/system/default.nix @@ -1,9 +1,8 @@ -{ config, inputs, pkgs, lib, hostname, ... }: +{ config, inputs, pkgs, lib, hostname, usernameList, ... }: { options = { - user.name = lib.mkOption { default = "pan"; }; - user.timezone = lib.mkOption { default = "America/Los_Angeles"; }; + system.timezone = lib.mkOption { default = "America/Los_Angeles"; }; system.extraFonts = lib.mkOption { default = []; }; system.doAutoUpgrade = lib.mkEnableOption "Enable auto upgrading system"; }; @@ -19,7 +18,7 @@ nixpkgs.config.allowUnfree = true; system.stateVersion = "23.05"; - time.timeZone = config.user.timezone; + time.timeZone = config.system.timezone; i18n.defaultLocale = "en_US.UTF-8"; @@ -45,15 +44,20 @@ }; nix.settings.use-xdg-base-directories = true; - users.groups = { - wheel = { }; - network = { }; - }; - - users.users.defaultUser = { - name = config.user.name; - isNormalUser = true; - extraGroups = [ "wheel" "network" ]; + users = { + users = builtins.listToAttrs (map ( + user: { + name = user; + value = { + name = user; + isNormalUser = true; + }; + } + ) usernameList); + groups = { + wheel = { }; + network = { }; + }; }; fonts = { From 10038a1fde18379207a2a5c675ce5ececf562778 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 26 Nov 2024 08:42:01 -0800 Subject: [PATCH 228/412] System, dynamic users for host, removes user.name adds a new specialArg to hosts: usernameList, which is a list of users determined through user/user.nix in the host/hostname dir. This touches syncthing, tuigreet, jibril, shells, and system removes the user.name field, and converts user.timezone to system.timezone. This is to move user content off of the host. This old system is replaced with dynamic user creation based on the usernameList variable Because this removes the users.users.defaultUser shells now use the (more appropriate) users.defaultUserShell --- flake.nix | 58 ++++++++++++------- hosts/jibril/host.nix | 4 +- nixosModules/apps/shells/fish/default.nix | 2 +- nixosModules/apps/shells/xonsh/default.nix | 2 +- nixosModules/apps/shells/zsh/default.nix | 2 +- nixosModules/apps/syncthing/default.nix | 26 ++++----- .../graphics/display_manager/default.nix | 2 +- nixosModules/services/system/default.nix | 30 +++++----- 8 files changed, 71 insertions(+), 55 deletions(-) diff --git a/flake.nix b/flake.nix index 679d075..ea26eec 100644 --- a/flake.nix +++ b/flake.nix @@ -17,18 +17,8 @@ pkgs = nixpkgs.legacyPackages.${system}; fs = pkgs.lib.fileset; st = pkgs.lib.strings; + as = pkgs.lib.attrsets; - hostConfig = hostname: hostpath: nixpkgs.lib.nixosSystem { - specialArgs = { - inherit inputs; - inherit hostname; - }; - system = system; - modules = [ - ./nixosModules - hostpath - ]; - }; hosts = let hostFilter = { name, ...}: name == "host.nix"; hostPaths = fs.toList (fs.fileFilter hostFilter ./hosts); @@ -43,17 +33,6 @@ name = extractHostName path; }) hostPaths); - userConfig = usernameAtHostname: userpath: home-manager.lib.homeManagerConfiguration { - inherit pkgs; - extraSpecialArgs = { - inherit inputs; - inherit usernameAtHostname; - }; - modules = [ - ./hmModules - userpath - ]; - }; users = let userFilter = { name, ...}: name == "user.nix"; userPaths = fs.toList (fs.fileFilter userFilter ./hosts); @@ -70,6 +49,41 @@ value = path; } ) userPaths); + + userConfig = usernameAtHostname: userpath: home-manager.lib.homeManagerConfiguration { + inherit pkgs; + extraSpecialArgs = { + inherit inputs; + inherit usernameAtHostname; + }; + modules = [ + ./hmModules + userpath + ]; + }; + + hostConfig = hostname: hostpath: nixpkgs.lib.nixosSystem { + specialArgs = let + hostFilteredUsers = as.filterAttrs ( + name: value: let + userHostname = builtins.elemAt (st.splitString "@" name) 1; + in userHostname == hostname + ) users; + + hostUsers = as.mapAttrsToList ( + name: value: builtins.elemAt (st.splitString "@" name) 0 + ) hostFilteredUsers; + in { + inherit inputs; + inherit hostname; + "usernameList" = hostUsers; + }; + system = system; + modules = [ + ./nixosModules + hostpath + ]; + }; in { nixosConfigurations = builtins.mapAttrs (name: path: hostConfig name path) hosts; homeConfigurations = builtins.mapAttrs (name: path: userConfig name path) users; diff --git a/hosts/jibril/host.nix b/hosts/jibril/host.nix index 249e9aa..cce879f 100644 --- a/hosts/jibril/host.nix +++ b/hosts/jibril/host.nix @@ -22,8 +22,7 @@ }; }; - user.name = "pan"; - user.timezone = "America/Los_Angeles"; + system.timezone = "America/Los_Angeles"; tuigreet.enable = true; hyprland.enable = true; @@ -31,5 +30,4 @@ librewolf.enable = true; fish.enable = true; fish.setDefault = true; - syncthing.enable = true; } diff --git a/nixosModules/apps/shells/fish/default.nix b/nixosModules/apps/shells/fish/default.nix index d4885f9..1e17b4e 100644 --- a/nixosModules/apps/shells/fish/default.nix +++ b/nixosModules/apps/shells/fish/default.nix @@ -9,7 +9,7 @@ config = lib.mkIf config.fish.enable { programs.fish.enable = true; - users.users.defaultUser.shell = lib.mkIf config.fish.setDefault pkgs.fish; + users.defaultUserShell = lib.mkIf config.fish.setDefault pkgs.fish; environment.shells = with pkgs; [ fish ]; }; } diff --git a/nixosModules/apps/shells/xonsh/default.nix b/nixosModules/apps/shells/xonsh/default.nix index 644e14e..4d4215c 100644 --- a/nixosModules/apps/shells/xonsh/default.nix +++ b/nixosModules/apps/shells/xonsh/default.nix @@ -9,7 +9,7 @@ config = lib.mkIf config.xonsh.enable { programs.xonsh.enable = true; - users.users.defaultUser.shell = lib.mkIf config.xonsh.setDefault pkgs.xonsh; + users.defaultUserShell = lib.mkIf config.xonsh.setDefault pkgs.xonsh; environment.shells = with pkgs; [ xonsh ]; }; } diff --git a/nixosModules/apps/shells/zsh/default.nix b/nixosModules/apps/shells/zsh/default.nix index 5ede3d1..93d33f7 100644 --- a/nixosModules/apps/shells/zsh/default.nix +++ b/nixosModules/apps/shells/zsh/default.nix @@ -14,7 +14,7 @@ histFile = "$HOME/.config/zsh/history"; histSize = 2000; }; - users.users.defaultUser.shell = lib.mkIf config.zsh.setDefault pkgs.zsh; + users.defaultUserShell = lib.mkIf config.zsh.setDefault pkgs.zsh; environment.shells = with pkgs; [ zsh ]; }; } diff --git a/nixosModules/apps/syncthing/default.nix b/nixosModules/apps/syncthing/default.nix index 69cea88..fee80a5 100644 --- a/nixosModules/apps/syncthing/default.nix +++ b/nixosModules/apps/syncthing/default.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, ... }: +{ config, lib, ... }: { options = { @@ -8,18 +8,18 @@ config = lib.mkIf config.syncthing.enable { services.syncthing = { enable = true; - user = config.user.name; - dataDir = "/home/" + config.user.name + "/dox/Sync"; - configDir = "/home/" + config.user.name + "/.config/syncthing"; - overrideFolders = true; - overrideDevices = true; - - settings = { - gui = { - user = config.user.name; - password = "password"; - }; - }; + # user = config.user.name; + # dataDir = "/home/" + config.user.name + "/dox/Sync"; + # configDir = "/home/" + config.user.name + "/.config/syncthing"; + # overrideFolders = true; + # overrideDevices = true; + # + # settings = { + # gui = { + # user = config.user.name; + # password = "password"; + # }; + # }; }; }; } diff --git a/nixosModules/services/graphics/display_manager/default.nix b/nixosModules/services/graphics/display_manager/default.nix index 8e0c4c1..3e4dab2 100644 --- a/nixosModules/services/graphics/display_manager/default.nix +++ b/nixosModules/services/graphics/display_manager/default.nix @@ -15,7 +15,7 @@ }; default_session = lib.mkIf config.hyprland.enable { command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time --cmd Hyprland"; - user = config.user.name; + user = "greeter"; }; }; }; diff --git a/nixosModules/services/system/default.nix b/nixosModules/services/system/default.nix index 5780ea3..252a8f9 100644 --- a/nixosModules/services/system/default.nix +++ b/nixosModules/services/system/default.nix @@ -1,9 +1,8 @@ -{ config, inputs, pkgs, lib, hostname, ... }: +{ config, inputs, pkgs, lib, hostname, usernameList, ... }: { options = { - user.name = lib.mkOption { default = "pan"; }; - user.timezone = lib.mkOption { default = "America/Los_Angeles"; }; + system.timezone = lib.mkOption { default = "America/Los_Angeles"; }; system.extraFonts = lib.mkOption { default = []; }; system.doAutoUpgrade = lib.mkEnableOption "Enable auto upgrading system"; }; @@ -19,7 +18,7 @@ nixpkgs.config.allowUnfree = true; system.stateVersion = "23.05"; - time.timeZone = config.user.timezone; + time.timeZone = config.system.timezone; i18n.defaultLocale = "en_US.UTF-8"; @@ -45,15 +44,20 @@ }; nix.settings.use-xdg-base-directories = true; - users.groups = { - wheel = { }; - network = { }; - }; - - users.users.defaultUser = { - name = config.user.name; - isNormalUser = true; - extraGroups = [ "wheel" "network" ]; + users = { + users = builtins.listToAttrs (map ( + user: { + name = user; + value = { + name = user; + isNormalUser = true; + }; + } + ) usernameList); + groups = { + wheel = { }; + network = { }; + }; }; fonts = { From 91e5b47a8f756c5f90c0db1839debdf26f3dd579 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 28 Nov 2024 14:18:11 -0800 Subject: [PATCH 229/412] Hosts, add wheel and network group management --- hosts/jibril/host.nix | 1 + nixosModules/services/system/default.nix | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/hosts/jibril/host.nix b/hosts/jibril/host.nix index cce879f..6af5cab 100644 --- a/hosts/jibril/host.nix +++ b/hosts/jibril/host.nix @@ -23,6 +23,7 @@ }; system.timezone = "America/Los_Angeles"; + system.users.bigWheels = [ "pan" ]; tuigreet.enable = true; hyprland.enable = true; diff --git a/nixosModules/services/system/default.nix b/nixosModules/services/system/default.nix index 252a8f9..2df5223 100644 --- a/nixosModules/services/system/default.nix +++ b/nixosModules/services/system/default.nix @@ -5,6 +5,7 @@ system.timezone = lib.mkOption { default = "America/Los_Angeles"; }; system.extraFonts = lib.mkOption { default = []; }; system.doAutoUpgrade = lib.mkEnableOption "Enable auto upgrading system"; + system.users.bigWheels = lib.mkOption { default = []; }; }; config = { @@ -51,11 +52,14 @@ value = { name = user; isNormalUser = true; + extraGroups = [ "network" ]; }; } ) usernameList); groups = { - wheel = { }; + wheel = { + members = config.system.users.bigWheels; + }; network = { }; }; }; From 9ab0f5bfc983c28f97dd84020de0eef13d7e4ed4 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 28 Nov 2024 14:18:11 -0800 Subject: [PATCH 230/412] Hosts, add wheel and network group management --- hosts/jibril/host.nix | 1 + nixosModules/services/system/default.nix | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/hosts/jibril/host.nix b/hosts/jibril/host.nix index cce879f..6af5cab 100644 --- a/hosts/jibril/host.nix +++ b/hosts/jibril/host.nix @@ -23,6 +23,7 @@ }; system.timezone = "America/Los_Angeles"; + system.users.bigWheels = [ "pan" ]; tuigreet.enable = true; hyprland.enable = true; diff --git a/nixosModules/services/system/default.nix b/nixosModules/services/system/default.nix index 252a8f9..2df5223 100644 --- a/nixosModules/services/system/default.nix +++ b/nixosModules/services/system/default.nix @@ -5,6 +5,7 @@ system.timezone = lib.mkOption { default = "America/Los_Angeles"; }; system.extraFonts = lib.mkOption { default = []; }; system.doAutoUpgrade = lib.mkEnableOption "Enable auto upgrading system"; + system.users.bigWheels = lib.mkOption { default = []; }; }; config = { @@ -51,11 +52,14 @@ value = { name = user; isNormalUser = true; + extraGroups = [ "network" ]; }; } ) usernameList); groups = { - wheel = { }; + wheel = { + members = config.system.users.bigWheels; + }; network = { }; }; }; From f8b582e89e8dc03473209d240becb1fbd613d3c1 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 28 Nov 2024 14:25:17 -0800 Subject: [PATCH 231/412] Flake update 2024-11-28 --- flake.lock | 151 +++++++++++++++++++++++++---------------------------- 1 file changed, 70 insertions(+), 81 deletions(-) diff --git a/flake.lock b/flake.lock index 08ba60c..f9c6c15 100644 --- a/flake.lock +++ b/flake.lock @@ -6,11 +6,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1730486342, - "narHash": "sha256-/fNj+vW2oE69JMXqyjadxVeuQoWshn+wHp2LHufiVpw=", + "lastModified": 1731956781, + "narHash": "sha256-AAZiAMQ2LBCY375NnbQa8HHFJc3KLyfnlGiFXDdb1pE=", "owner": "ezKEa", "repo": "aagl-gtk-on-nix", - "rev": "512940696be1969a42d3b89e1e77f9dc7e0641b4", + "rev": "862c5b3acd097906cd242eedd9ddcc95ac9382cb", "type": "github" }, "original": { @@ -21,15 +21,15 @@ }, "ags": { "inputs": { - "nixpkgs": "nixpkgs_2", - "systems": "systems" + "astal": "astal", + "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1728326430, - "narHash": "sha256-tV1ABHuA1HItMdCTuNdA8fMB+qw7LpjvI945VwMSABI=", + "lastModified": 1732307740, + "narHash": "sha256-ZDsYdZOtg5qkK/wfLLB83B3SI+fE32S+/6Ey0ggHODM=", "owner": "Aylur", "repo": "ags", - "rev": "60180a184cfb32b61a1d871c058b31a3b9b0743d", + "rev": "81159966eb8b39b66c3efc133982fd76920c9605", "type": "github" }, "original": { @@ -58,11 +58,11 @@ ] }, "locked": { - "lastModified": 1730968822, - "narHash": "sha256-NocDjINsh6ismkhb0Xr6xPRksmhuB2WGf8ZmXMhxu7Y=", + "lastModified": 1731774881, + "narHash": "sha256-1Dxryiw8u2ejntxrrv3sMtIE8WHKxmlN4KeH+uMGbmc=", "owner": "hyprwm", "repo": "aquamarine", - "rev": "a49bc3583ff223f426cb3526fdaa4bcaa247ec14", + "rev": "b31a6a4da8199ae3489057db7d36069a70749a56", "type": "github" }, "original": { @@ -71,6 +71,27 @@ "type": "github" } }, + "astal": { + "inputs": { + "nixpkgs": [ + "ags", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1731952585, + "narHash": "sha256-Sh1E7sJd8JJM3PCU1ZOei/QWz97OLCENIi2rTRoaniw=", + "owner": "aylur", + "repo": "astal", + "rev": "664c7a4ddfcf48c6e8accd3c33bb94424b0e8609", + "type": "github" + }, + "original": { + "owner": "aylur", + "repo": "astal", + "type": "github" + } + }, "flake-compat": { "flake": false, "locked": { @@ -130,11 +151,11 @@ "nixpkgs": "nixpkgs_3" }, "locked": { - "lastModified": 1731235328, - "narHash": "sha256-NjavpgE9/bMe/ABvZpyHIUeYF1mqR5lhaep3wB79ucs=", + "lastModified": 1732793095, + "narHash": "sha256-6TrknJ8CpvSSF4gviQSeD+wyj3siRcMvdBKhOXkEMKU=", "owner": "nix-community", "repo": "home-manager", - "rev": "60bb110917844d354f3c18e05450606a435d2d10", + "rev": "2f7739d01080feb4549524e8f6927669b61c6ee3", "type": "github" }, "original": { @@ -182,15 +203,15 @@ "hyprwayland-scanner": "hyprwayland-scanner", "nixpkgs": "nixpkgs_4", "pre-commit-hooks": "pre-commit-hooks", - "systems": "systems_2", + "systems": "systems", "xdph": "xdph" }, "locked": { - "lastModified": 1731372835, - "narHash": "sha256-rkNYRi7enNGo9t5ptzsOXWCl963ACPVp2ETtFCrzfWQ=", + "lastModified": 1732808926, + "narHash": "sha256-//MlFWIxY/HSfFhPr92yFAHZpZOdcMKU9MdIo7Tti9Q=", "ref": "refs/heads/main", - "rev": "a29cfa78431a054a093f3c843228bac6783a6d33", - "revCount": 5449, + "rev": "22bf2853e6271932f073961f3dbeb0f9ff48493e", + "revCount": 5503, "type": "git", "url": "https://github.com/hyprwm/Hyprland" }, @@ -283,11 +304,11 @@ ] }, "locked": { - "lastModified": 1731163338, - "narHash": "sha256-Qflei0JBeqQ0c8jxA8e982xAxJvfMwfx4Aci2eJi84s=", + "lastModified": 1731702627, + "narHash": "sha256-+JeO9gevnXannQxMfR5xzZtF4sYmSlWkX/BPmPx0mWk=", "owner": "hyprwm", "repo": "hyprutils", - "rev": "60d3dece30f98e8ad85131829c8529950630d6bc", + "rev": "e911361a687753bbbdfe3b6a9eab755ecaf1d9e1", "type": "github" }, "original": { @@ -353,33 +374,17 @@ "type": "github" } }, - "nixpkgs-stable_2": { - "locked": { - "lastModified": 1730602179, - "narHash": "sha256-efgLzQAWSzJuCLiCaQUCDu4NudNlHdg2NzGLX5GYaEY=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "3c2f1c4ca372622cb2f9de8016c9a0b1cbd0f37c", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "release-24.05", - "repo": "nixpkgs", - "type": "github" - } - }, "nixpkgs_2": { "locked": { - "lastModified": 1725634671, - "narHash": "sha256-v3rIhsJBOMLR8e/RNWxr828tB+WywYIoajrZKFM+0Gg=", - "owner": "NixOS", + "lastModified": 1731676054, + "narHash": "sha256-OZiZ3m8SCMfh3B6bfGC/Bm4x3qc1m2SVEAlkV6iY7Yg=", + "owner": "nixos", "repo": "nixpkgs", - "rev": "574d1eac1c200690e27b8eb4e24887f8df7ac27c", + "rev": "5e4fbfb6b3de1aa2872b76d49fafc942626e2add", "type": "github" }, "original": { - "owner": "NixOS", + "owner": "nixos", "ref": "nixos-unstable", "repo": "nixpkgs", "type": "github" @@ -387,11 +392,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1730200266, - "narHash": "sha256-l253w0XMT8nWHGXuXqyiIC/bMvh1VRszGXgdpQlfhvU=", + "lastModified": 1732521221, + "narHash": "sha256-2ThgXBUXAE1oFsVATK1ZX9IjPcS4nKFOAjhPNKuiMn0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "807e9154dcb16384b1b765ebe9cd2bba2ac287fd", + "rev": "4633a7c72337ea8fd23a4f2ba3972865e3ec685d", "type": "github" }, "original": { @@ -403,11 +408,11 @@ }, "nixpkgs_4": { "locked": { - "lastModified": 1730785428, - "narHash": "sha256-Zwl8YgTVJTEum+L+0zVAWvXAGbWAuXHax3KzuejaDyo=", + "lastModified": 1731676054, + "narHash": "sha256-OZiZ3m8SCMfh3B6bfGC/Bm4x3qc1m2SVEAlkV6iY7Yg=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "4aa36568d413aca0ea84a1684d2d46f55dbabad7", + "rev": "5e4fbfb6b3de1aa2872b76d49fafc942626e2add", "type": "github" }, "original": { @@ -435,11 +440,11 @@ }, "nixpkgs_6": { "locked": { - "lastModified": 1731139594, - "narHash": "sha256-IigrKK3vYRpUu+HEjPL/phrfh7Ox881er1UEsZvw9Q4=", + "lastModified": 1732521221, + "narHash": "sha256-2ThgXBUXAE1oFsVATK1ZX9IjPcS4nKFOAjhPNKuiMn0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "76612b17c0ce71689921ca12d9ffdc9c23ce40b2", + "rev": "4633a7c72337ea8fd23a4f2ba3972865e3ec685d", "type": "github" }, "original": { @@ -450,11 +455,11 @@ }, "nixpkgs_7": { "locked": { - "lastModified": 1730272153, - "narHash": "sha256-B5WRZYsRlJgwVHIV6DvidFN7VX7Fg9uuwkRW9Ha8z+w=", + "lastModified": 1731763621, + "narHash": "sha256-ddcX4lQL0X05AYkrkV2LMFgGdRvgap7Ho8kgon3iWZk=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "2d2a9ddbe3f2c00747398f3dc9b05f7f2ebb0f53", + "rev": "c69a9bffbecde46b4b939465422ddc59493d3e4d", "type": "github" }, "original": { @@ -475,11 +480,11 @@ "nixpkgs-stable": "nixpkgs-stable" }, "locked": { - "lastModified": 1730814269, - "narHash": "sha256-fWPHyhYE6xvMI1eGY3pwBTq85wcy1YXqdzTZF+06nOg=", + "lastModified": 1731363552, + "narHash": "sha256-vFta1uHnD29VUY4HJOO/D6p6rxyObnf+InnSMT4jlMU=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "d70155fdc00df4628446352fc58adc640cd705c2", + "rev": "cd1af27aa85026ac759d5d3fccf650abe7e1bbf0", "type": "github" }, "original": { @@ -501,15 +506,14 @@ }, "sops-nix": { "inputs": { - "nixpkgs": "nixpkgs_7", - "nixpkgs-stable": "nixpkgs-stable_2" + "nixpkgs": "nixpkgs_7" }, "locked": { - "lastModified": 1731364708, - "narHash": "sha256-HC0anOL+KmUQ2hdRl0AtunbAckasxrkn4VLmxbW/WaA=", + "lastModified": 1732575825, + "narHash": "sha256-xtt95+c7OUMoqZf4OvA/7AemiH3aVuWHQbErYQoPwFk=", "owner": "Mic92", "repo": "sops-nix", - "rev": "4c91d52db103e757fc25b58998b0576ae702d659", + "rev": "3433ea14fbd9e6671d0ff0dd45ed15ee4c156ffa", "type": "github" }, "original": { @@ -533,21 +537,6 @@ "type": "github" } }, - "systems_2": { - "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" - } - }, "xdph": { "inputs": { "hyprland-protocols": [ @@ -576,11 +565,11 @@ ] }, "locked": { - "lastModified": 1730743262, - "narHash": "sha256-iTLqj3lU8kFehPm5tXpctzkD274t/k1nwSSq3qCWXeg=", + "lastModified": 1731703417, + "narHash": "sha256-rheDc/7C+yI+QspYr9J2z9kQ5P9F4ATapI7qyFAe1XA=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "09b23cef06fe248e61cec8862c04b9bcb62f4b6d", + "rev": "8070f36deec723de71e7557441acb17e478204d3", "type": "github" }, "original": { From 31313733c214570e74650e614af0542ae1b042b6 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 28 Nov 2024 14:25:17 -0800 Subject: [PATCH 232/412] Flake update 2024-11-28 --- flake.lock | 151 +++++++++++++++++++++++++---------------------------- 1 file changed, 70 insertions(+), 81 deletions(-) diff --git a/flake.lock b/flake.lock index 08ba60c..f9c6c15 100644 --- a/flake.lock +++ b/flake.lock @@ -6,11 +6,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1730486342, - "narHash": "sha256-/fNj+vW2oE69JMXqyjadxVeuQoWshn+wHp2LHufiVpw=", + "lastModified": 1731956781, + "narHash": "sha256-AAZiAMQ2LBCY375NnbQa8HHFJc3KLyfnlGiFXDdb1pE=", "owner": "ezKEa", "repo": "aagl-gtk-on-nix", - "rev": "512940696be1969a42d3b89e1e77f9dc7e0641b4", + "rev": "862c5b3acd097906cd242eedd9ddcc95ac9382cb", "type": "github" }, "original": { @@ -21,15 +21,15 @@ }, "ags": { "inputs": { - "nixpkgs": "nixpkgs_2", - "systems": "systems" + "astal": "astal", + "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1728326430, - "narHash": "sha256-tV1ABHuA1HItMdCTuNdA8fMB+qw7LpjvI945VwMSABI=", + "lastModified": 1732307740, + "narHash": "sha256-ZDsYdZOtg5qkK/wfLLB83B3SI+fE32S+/6Ey0ggHODM=", "owner": "Aylur", "repo": "ags", - "rev": "60180a184cfb32b61a1d871c058b31a3b9b0743d", + "rev": "81159966eb8b39b66c3efc133982fd76920c9605", "type": "github" }, "original": { @@ -58,11 +58,11 @@ ] }, "locked": { - "lastModified": 1730968822, - "narHash": "sha256-NocDjINsh6ismkhb0Xr6xPRksmhuB2WGf8ZmXMhxu7Y=", + "lastModified": 1731774881, + "narHash": "sha256-1Dxryiw8u2ejntxrrv3sMtIE8WHKxmlN4KeH+uMGbmc=", "owner": "hyprwm", "repo": "aquamarine", - "rev": "a49bc3583ff223f426cb3526fdaa4bcaa247ec14", + "rev": "b31a6a4da8199ae3489057db7d36069a70749a56", "type": "github" }, "original": { @@ -71,6 +71,27 @@ "type": "github" } }, + "astal": { + "inputs": { + "nixpkgs": [ + "ags", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1731952585, + "narHash": "sha256-Sh1E7sJd8JJM3PCU1ZOei/QWz97OLCENIi2rTRoaniw=", + "owner": "aylur", + "repo": "astal", + "rev": "664c7a4ddfcf48c6e8accd3c33bb94424b0e8609", + "type": "github" + }, + "original": { + "owner": "aylur", + "repo": "astal", + "type": "github" + } + }, "flake-compat": { "flake": false, "locked": { @@ -130,11 +151,11 @@ "nixpkgs": "nixpkgs_3" }, "locked": { - "lastModified": 1731235328, - "narHash": "sha256-NjavpgE9/bMe/ABvZpyHIUeYF1mqR5lhaep3wB79ucs=", + "lastModified": 1732793095, + "narHash": "sha256-6TrknJ8CpvSSF4gviQSeD+wyj3siRcMvdBKhOXkEMKU=", "owner": "nix-community", "repo": "home-manager", - "rev": "60bb110917844d354f3c18e05450606a435d2d10", + "rev": "2f7739d01080feb4549524e8f6927669b61c6ee3", "type": "github" }, "original": { @@ -182,15 +203,15 @@ "hyprwayland-scanner": "hyprwayland-scanner", "nixpkgs": "nixpkgs_4", "pre-commit-hooks": "pre-commit-hooks", - "systems": "systems_2", + "systems": "systems", "xdph": "xdph" }, "locked": { - "lastModified": 1731372835, - "narHash": "sha256-rkNYRi7enNGo9t5ptzsOXWCl963ACPVp2ETtFCrzfWQ=", + "lastModified": 1732808926, + "narHash": "sha256-//MlFWIxY/HSfFhPr92yFAHZpZOdcMKU9MdIo7Tti9Q=", "ref": "refs/heads/main", - "rev": "a29cfa78431a054a093f3c843228bac6783a6d33", - "revCount": 5449, + "rev": "22bf2853e6271932f073961f3dbeb0f9ff48493e", + "revCount": 5503, "type": "git", "url": "https://github.com/hyprwm/Hyprland" }, @@ -283,11 +304,11 @@ ] }, "locked": { - "lastModified": 1731163338, - "narHash": "sha256-Qflei0JBeqQ0c8jxA8e982xAxJvfMwfx4Aci2eJi84s=", + "lastModified": 1731702627, + "narHash": "sha256-+JeO9gevnXannQxMfR5xzZtF4sYmSlWkX/BPmPx0mWk=", "owner": "hyprwm", "repo": "hyprutils", - "rev": "60d3dece30f98e8ad85131829c8529950630d6bc", + "rev": "e911361a687753bbbdfe3b6a9eab755ecaf1d9e1", "type": "github" }, "original": { @@ -353,33 +374,17 @@ "type": "github" } }, - "nixpkgs-stable_2": { - "locked": { - "lastModified": 1730602179, - "narHash": "sha256-efgLzQAWSzJuCLiCaQUCDu4NudNlHdg2NzGLX5GYaEY=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "3c2f1c4ca372622cb2f9de8016c9a0b1cbd0f37c", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "release-24.05", - "repo": "nixpkgs", - "type": "github" - } - }, "nixpkgs_2": { "locked": { - "lastModified": 1725634671, - "narHash": "sha256-v3rIhsJBOMLR8e/RNWxr828tB+WywYIoajrZKFM+0Gg=", - "owner": "NixOS", + "lastModified": 1731676054, + "narHash": "sha256-OZiZ3m8SCMfh3B6bfGC/Bm4x3qc1m2SVEAlkV6iY7Yg=", + "owner": "nixos", "repo": "nixpkgs", - "rev": "574d1eac1c200690e27b8eb4e24887f8df7ac27c", + "rev": "5e4fbfb6b3de1aa2872b76d49fafc942626e2add", "type": "github" }, "original": { - "owner": "NixOS", + "owner": "nixos", "ref": "nixos-unstable", "repo": "nixpkgs", "type": "github" @@ -387,11 +392,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1730200266, - "narHash": "sha256-l253w0XMT8nWHGXuXqyiIC/bMvh1VRszGXgdpQlfhvU=", + "lastModified": 1732521221, + "narHash": "sha256-2ThgXBUXAE1oFsVATK1ZX9IjPcS4nKFOAjhPNKuiMn0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "807e9154dcb16384b1b765ebe9cd2bba2ac287fd", + "rev": "4633a7c72337ea8fd23a4f2ba3972865e3ec685d", "type": "github" }, "original": { @@ -403,11 +408,11 @@ }, "nixpkgs_4": { "locked": { - "lastModified": 1730785428, - "narHash": "sha256-Zwl8YgTVJTEum+L+0zVAWvXAGbWAuXHax3KzuejaDyo=", + "lastModified": 1731676054, + "narHash": "sha256-OZiZ3m8SCMfh3B6bfGC/Bm4x3qc1m2SVEAlkV6iY7Yg=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "4aa36568d413aca0ea84a1684d2d46f55dbabad7", + "rev": "5e4fbfb6b3de1aa2872b76d49fafc942626e2add", "type": "github" }, "original": { @@ -435,11 +440,11 @@ }, "nixpkgs_6": { "locked": { - "lastModified": 1731139594, - "narHash": "sha256-IigrKK3vYRpUu+HEjPL/phrfh7Ox881er1UEsZvw9Q4=", + "lastModified": 1732521221, + "narHash": "sha256-2ThgXBUXAE1oFsVATK1ZX9IjPcS4nKFOAjhPNKuiMn0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "76612b17c0ce71689921ca12d9ffdc9c23ce40b2", + "rev": "4633a7c72337ea8fd23a4f2ba3972865e3ec685d", "type": "github" }, "original": { @@ -450,11 +455,11 @@ }, "nixpkgs_7": { "locked": { - "lastModified": 1730272153, - "narHash": "sha256-B5WRZYsRlJgwVHIV6DvidFN7VX7Fg9uuwkRW9Ha8z+w=", + "lastModified": 1731763621, + "narHash": "sha256-ddcX4lQL0X05AYkrkV2LMFgGdRvgap7Ho8kgon3iWZk=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "2d2a9ddbe3f2c00747398f3dc9b05f7f2ebb0f53", + "rev": "c69a9bffbecde46b4b939465422ddc59493d3e4d", "type": "github" }, "original": { @@ -475,11 +480,11 @@ "nixpkgs-stable": "nixpkgs-stable" }, "locked": { - "lastModified": 1730814269, - "narHash": "sha256-fWPHyhYE6xvMI1eGY3pwBTq85wcy1YXqdzTZF+06nOg=", + "lastModified": 1731363552, + "narHash": "sha256-vFta1uHnD29VUY4HJOO/D6p6rxyObnf+InnSMT4jlMU=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "d70155fdc00df4628446352fc58adc640cd705c2", + "rev": "cd1af27aa85026ac759d5d3fccf650abe7e1bbf0", "type": "github" }, "original": { @@ -501,15 +506,14 @@ }, "sops-nix": { "inputs": { - "nixpkgs": "nixpkgs_7", - "nixpkgs-stable": "nixpkgs-stable_2" + "nixpkgs": "nixpkgs_7" }, "locked": { - "lastModified": 1731364708, - "narHash": "sha256-HC0anOL+KmUQ2hdRl0AtunbAckasxrkn4VLmxbW/WaA=", + "lastModified": 1732575825, + "narHash": "sha256-xtt95+c7OUMoqZf4OvA/7AemiH3aVuWHQbErYQoPwFk=", "owner": "Mic92", "repo": "sops-nix", - "rev": "4c91d52db103e757fc25b58998b0576ae702d659", + "rev": "3433ea14fbd9e6671d0ff0dd45ed15ee4c156ffa", "type": "github" }, "original": { @@ -533,21 +537,6 @@ "type": "github" } }, - "systems_2": { - "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" - } - }, "xdph": { "inputs": { "hyprland-protocols": [ @@ -576,11 +565,11 @@ ] }, "locked": { - "lastModified": 1730743262, - "narHash": "sha256-iTLqj3lU8kFehPm5tXpctzkD274t/k1nwSSq3qCWXeg=", + "lastModified": 1731703417, + "narHash": "sha256-rheDc/7C+yI+QspYr9J2z9kQ5P9F4ATapI7qyFAe1XA=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "09b23cef06fe248e61cec8862c04b9bcb62f4b6d", + "rev": "8070f36deec723de71e7557441acb17e478204d3", "type": "github" }, "original": { From dfb064e92b844d5b8266b6a56998bf806e8d8c20 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 28 Nov 2024 15:29:43 -0800 Subject: [PATCH 233/412] Lix, switch to lix from nix, bump flake --- flake.lock | 104 +++++++++++++++++++++++++++++++++++++++++++++++++++-- flake.nix | 5 ++- 2 files changed, 105 insertions(+), 4 deletions(-) diff --git a/flake.lock b/flake.lock index f9c6c15..e2d3c3f 100644 --- a/flake.lock +++ b/flake.lock @@ -124,6 +124,39 @@ "type": "github" } }, + "flake-utils": { + "inputs": { + "systems": "systems_2" + }, + "locked": { + "lastModified": 1726560853, + "narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flakey-profile": { + "locked": { + "lastModified": 1712898590, + "narHash": "sha256-FhGIEU93VHAChKEXx905TSiPZKga69bWl1VB37FK//I=", + "owner": "lf-", + "repo": "flakey-profile", + "rev": "243c903fd8eadc0f63d205665a92d4df91d42d9d", + "type": "github" + }, + "original": { + "owner": "lf-", + "repo": "flakey-profile", + "type": "github" + } + }, "gitignore": { "inputs": { "nixpkgs": [ @@ -342,6 +375,39 @@ "type": "github" } }, + "lix": { + "flake": false, + "locked": { + "lastModified": 1729298361, + "narHash": "sha256-hiGtfzxFkDc9TSYsb96Whg0vnqBVV7CUxyscZNhed0U=", + "rev": "ad9d06f7838a25beec425ff406fe68721fef73be", + "type": "tarball", + "url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/ad9d06f7838a25beec425ff406fe68721fef73be.tar.gz?rev=ad9d06f7838a25beec425ff406fe68721fef73be" + }, + "original": { + "type": "tarball", + "url": "https://git.lix.systems/lix-project/lix/archive/2.91.1.tar.gz" + } + }, + "lix-module": { + "inputs": { + "flake-utils": "flake-utils", + "flakey-profile": "flakey-profile", + "lix": "lix", + "nixpkgs": "nixpkgs_6" + }, + "locked": { + "lastModified": 1732605668, + "narHash": "sha256-DN5/166jhiiAW0Uw6nueXaGTueVxhfZISAkoxasmz/g=", + "rev": "f19bd752910bbe3a861c9cad269bd078689d50fe", + "type": "tarball", + "url": "https://git.lix.systems/api/v1/repos/lix-project/nixos-module/archive/f19bd752910bbe3a861c9cad269bd078689d50fe.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://git.lix.systems/lix-project/nixos-module/archive/2.91.1-2.tar.gz" + } + }, "nixpkgs": { "locked": { "lastModified": 1730200266, @@ -439,6 +505,22 @@ } }, "nixpkgs_6": { + "locked": { + "lastModified": 1729070438, + "narHash": "sha256-KOTTUfPkugH52avUvXGxvWy8ibKKj4genodIYUED+Kc=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "5785b6bb5eaae44e627d541023034e1601455827", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_7": { "locked": { "lastModified": 1732521221, "narHash": "sha256-2ThgXBUXAE1oFsVATK1ZX9IjPcS4nKFOAjhPNKuiMn0=", @@ -453,7 +535,7 @@ "type": "indirect" } }, - "nixpkgs_7": { + "nixpkgs_8": { "locked": { "lastModified": 1731763621, "narHash": "sha256-ddcX4lQL0X05AYkrkV2LMFgGdRvgap7Ho8kgon3iWZk=", @@ -500,13 +582,14 @@ "home-manager": "home-manager", "hyprland": "hyprland", "hyprland-contrib": "hyprland-contrib", - "nixpkgs": "nixpkgs_6", + "lix-module": "lix-module", + "nixpkgs": "nixpkgs_7", "sops-nix": "sops-nix" } }, "sops-nix": { "inputs": { - "nixpkgs": "nixpkgs_7" + "nixpkgs": "nixpkgs_8" }, "locked": { "lastModified": 1732575825, @@ -537,6 +620,21 @@ "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" + } + }, "xdph": { "inputs": { "hyprland-protocols": [ diff --git a/flake.nix b/flake.nix index ea26eec..7cae1e7 100644 --- a/flake.nix +++ b/flake.nix @@ -4,6 +4,8 @@ home-manager.url = "github:nix-community/home-manager"; + lix-module.url = "https://git.lix.systems/lix-project/nixos-module/archive/2.91.1-2.tar.gz"; + hyprland.url = "git+https://github.com/hyprwm/Hyprland"; hyprland-contrib.url = "github:hyprwm/contrib"; @@ -12,7 +14,7 @@ aagl.url = "github:ezKEa/aagl-gtk-on-nix"; }; - outputs = { self, home-manager, nixpkgs, ... }@inputs: let + outputs = { self, home-manager, nixpkgs, lix-module, ... }@inputs: let system = "x86_64-linux"; pkgs = nixpkgs.legacyPackages.${system}; fs = pkgs.lib.fileset; @@ -81,6 +83,7 @@ system = system; modules = [ ./nixosModules + lix-module.nixosModules.default hostpath ]; }; From 42ff2d37c0b7aa4aea0d054100190d10c92759fc Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 28 Nov 2024 15:29:43 -0800 Subject: [PATCH 234/412] Lix, switch to lix from nix, bump flake --- flake.lock | 104 +++++++++++++++++++++++++++++++++++++++++++++++++++-- flake.nix | 5 ++- 2 files changed, 105 insertions(+), 4 deletions(-) diff --git a/flake.lock b/flake.lock index f9c6c15..e2d3c3f 100644 --- a/flake.lock +++ b/flake.lock @@ -124,6 +124,39 @@ "type": "github" } }, + "flake-utils": { + "inputs": { + "systems": "systems_2" + }, + "locked": { + "lastModified": 1726560853, + "narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flakey-profile": { + "locked": { + "lastModified": 1712898590, + "narHash": "sha256-FhGIEU93VHAChKEXx905TSiPZKga69bWl1VB37FK//I=", + "owner": "lf-", + "repo": "flakey-profile", + "rev": "243c903fd8eadc0f63d205665a92d4df91d42d9d", + "type": "github" + }, + "original": { + "owner": "lf-", + "repo": "flakey-profile", + "type": "github" + } + }, "gitignore": { "inputs": { "nixpkgs": [ @@ -342,6 +375,39 @@ "type": "github" } }, + "lix": { + "flake": false, + "locked": { + "lastModified": 1729298361, + "narHash": "sha256-hiGtfzxFkDc9TSYsb96Whg0vnqBVV7CUxyscZNhed0U=", + "rev": "ad9d06f7838a25beec425ff406fe68721fef73be", + "type": "tarball", + "url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/ad9d06f7838a25beec425ff406fe68721fef73be.tar.gz?rev=ad9d06f7838a25beec425ff406fe68721fef73be" + }, + "original": { + "type": "tarball", + "url": "https://git.lix.systems/lix-project/lix/archive/2.91.1.tar.gz" + } + }, + "lix-module": { + "inputs": { + "flake-utils": "flake-utils", + "flakey-profile": "flakey-profile", + "lix": "lix", + "nixpkgs": "nixpkgs_6" + }, + "locked": { + "lastModified": 1732605668, + "narHash": "sha256-DN5/166jhiiAW0Uw6nueXaGTueVxhfZISAkoxasmz/g=", + "rev": "f19bd752910bbe3a861c9cad269bd078689d50fe", + "type": "tarball", + "url": "https://git.lix.systems/api/v1/repos/lix-project/nixos-module/archive/f19bd752910bbe3a861c9cad269bd078689d50fe.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://git.lix.systems/lix-project/nixos-module/archive/2.91.1-2.tar.gz" + } + }, "nixpkgs": { "locked": { "lastModified": 1730200266, @@ -439,6 +505,22 @@ } }, "nixpkgs_6": { + "locked": { + "lastModified": 1729070438, + "narHash": "sha256-KOTTUfPkugH52avUvXGxvWy8ibKKj4genodIYUED+Kc=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "5785b6bb5eaae44e627d541023034e1601455827", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_7": { "locked": { "lastModified": 1732521221, "narHash": "sha256-2ThgXBUXAE1oFsVATK1ZX9IjPcS4nKFOAjhPNKuiMn0=", @@ -453,7 +535,7 @@ "type": "indirect" } }, - "nixpkgs_7": { + "nixpkgs_8": { "locked": { "lastModified": 1731763621, "narHash": "sha256-ddcX4lQL0X05AYkrkV2LMFgGdRvgap7Ho8kgon3iWZk=", @@ -500,13 +582,14 @@ "home-manager": "home-manager", "hyprland": "hyprland", "hyprland-contrib": "hyprland-contrib", - "nixpkgs": "nixpkgs_6", + "lix-module": "lix-module", + "nixpkgs": "nixpkgs_7", "sops-nix": "sops-nix" } }, "sops-nix": { "inputs": { - "nixpkgs": "nixpkgs_7" + "nixpkgs": "nixpkgs_8" }, "locked": { "lastModified": 1732575825, @@ -537,6 +620,21 @@ "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" + } + }, "xdph": { "inputs": { "hyprland-protocols": [ diff --git a/flake.nix b/flake.nix index ea26eec..7cae1e7 100644 --- a/flake.nix +++ b/flake.nix @@ -4,6 +4,8 @@ home-manager.url = "github:nix-community/home-manager"; + lix-module.url = "https://git.lix.systems/lix-project/nixos-module/archive/2.91.1-2.tar.gz"; + hyprland.url = "git+https://github.com/hyprwm/Hyprland"; hyprland-contrib.url = "github:hyprwm/contrib"; @@ -12,7 +14,7 @@ aagl.url = "github:ezKEa/aagl-gtk-on-nix"; }; - outputs = { self, home-manager, nixpkgs, ... }@inputs: let + outputs = { self, home-manager, nixpkgs, lix-module, ... }@inputs: let system = "x86_64-linux"; pkgs = nixpkgs.legacyPackages.${system}; fs = pkgs.lib.fileset; @@ -81,6 +83,7 @@ system = system; modules = [ ./nixosModules + lix-module.nixosModules.default hostpath ]; }; From 525f68172b15bacb8ff199b0843bdf33624b3b0d Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 28 Nov 2024 23:48:40 -0800 Subject: [PATCH 235/412] Services, refactor, clean up, service to automatic Move service to automatic since it has a separate purpose. Refactor the default.nix code to include service.nix files so it is easier to extend code. --- .../{services/system => automatic}/default.nix | 0 nixosModules/default.nix | 1 + .../default.nix => bluetooth/service.nix} | 4 ++-- nixosModules/services/default.nix | 16 +++++----------- .../default.nix => displaymanager/service.nix} | 4 ++-- nixosModules/services/graphics/default.nix | 10 ---------- nixosModules/services/networking/default.nix | 8 -------- .../nvidia/default.nix => nvidia/service.nix} | 4 ++-- .../pipewire/{default.nix => service.nix} | 4 ++-- .../services/polkit/{default.nix => service.nix} | 4 ++-- .../sops-nix/{default.nix => service.nix} | 0 .../default.nix => tabletdrivers/service.nix} | 4 ++-- .../service.nix} | 10 ++++++---- .../default.nix => wireless/service.nix} | 12 +++++------- 14 files changed, 29 insertions(+), 52 deletions(-) rename nixosModules/{services/system => automatic}/default.nix (100%) rename nixosModules/services/{networking/bluetooth/default.nix => bluetooth/service.nix} (75%) rename nixosModules/services/{graphics/display_manager/default.nix => displaymanager/service.nix} (83%) delete mode 100644 nixosModules/services/graphics/default.nix delete mode 100644 nixosModules/services/networking/default.nix rename nixosModules/services/{graphics/nvidia/default.nix => nvidia/service.nix} (91%) rename nixosModules/services/pipewire/{default.nix => service.nix} (80%) rename nixosModules/services/polkit/{default.nix => service.nix} (69%) rename nixosModules/services/sops-nix/{default.nix => service.nix} (100%) rename nixosModules/services/{graphics/tabletdrivers/default.nix => tabletdrivers/service.nix} (81%) rename nixosModules/services/{graphics/wayland_compositors/default.nix => waylandcompositors/service.nix} (57%) rename nixosModules/services/{networking/wireless/default.nix => wireless/service.nix} (70%) diff --git a/nixosModules/services/system/default.nix b/nixosModules/automatic/default.nix similarity index 100% rename from nixosModules/services/system/default.nix rename to nixosModules/automatic/default.nix diff --git a/nixosModules/default.nix b/nixosModules/default.nix index a1d9d7b..b70e50c 100644 --- a/nixosModules/default.nix +++ b/nixosModules/default.nix @@ -3,6 +3,7 @@ { imports = [ ./apps + ./automatic ./services ]; } diff --git a/nixosModules/services/networking/bluetooth/default.nix b/nixosModules/services/bluetooth/service.nix similarity index 75% rename from nixosModules/services/networking/bluetooth/default.nix rename to nixosModules/services/bluetooth/service.nix index 30bed32..646f741 100644 --- a/nixosModules/services/networking/bluetooth/default.nix +++ b/nixosModules/services/bluetooth/service.nix @@ -1,8 +1,8 @@ { config, pkgs, lib, ... }: { - options = { - bluetooth.enable = lib.mkEnableOption "Enables Bluetooth with blueman"; + options.bluetooth = { + enable = lib.mkEnableOption "Enables Bluetooth with blueman"; }; config = lib.mkIf config.bluetooth.enable { diff --git a/nixosModules/services/default.nix b/nixosModules/services/default.nix index 128d32b..5718b40 100644 --- a/nixosModules/services/default.nix +++ b/nixosModules/services/default.nix @@ -1,12 +1,6 @@ -{ config, pkgs, lib, ... }: - -{ - imports = [ - ./graphics - ./networking - ./pipewire - ./polkit - ./sops-nix - ./system - ]; +{ lib, ... }: let + fs = lib.fileset; + appFilter = {name, ...}: name == "service.nix"; +in { + imports = fs.toList (fs.fileFilter appFilter ./.); } diff --git a/nixosModules/services/graphics/display_manager/default.nix b/nixosModules/services/displaymanager/service.nix similarity index 83% rename from nixosModules/services/graphics/display_manager/default.nix rename to nixosModules/services/displaymanager/service.nix index 3e4dab2..1110828 100644 --- a/nixosModules/services/graphics/display_manager/default.nix +++ b/nixosModules/services/displaymanager/service.nix @@ -1,8 +1,8 @@ { config, pkgs, lib, ... }: { - options = { - tuigreet.enable = lib.mkEnableOption "enables tuigreet with greetd"; + options.tuigreet = { + enable = lib.mkEnableOption "enables tuigreet with greetd"; }; config = lib.mkIf config.tuigreet.enable { diff --git a/nixosModules/services/graphics/default.nix b/nixosModules/services/graphics/default.nix deleted file mode 100644 index ec5ce31..0000000 --- a/nixosModules/services/graphics/default.nix +++ /dev/null @@ -1,10 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - imports = [ - ./display_manager - ./nvidia - ./wayland_compositors - ./tabletdrivers - ]; -} diff --git a/nixosModules/services/networking/default.nix b/nixosModules/services/networking/default.nix deleted file mode 100644 index 0da82d9..0000000 --- a/nixosModules/services/networking/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - imports = [ - ./bluetooth - ./wireless - ]; -} diff --git a/nixosModules/services/graphics/nvidia/default.nix b/nixosModules/services/nvidia/service.nix similarity index 91% rename from nixosModules/services/graphics/nvidia/default.nix rename to nixosModules/services/nvidia/service.nix index de39b58..2cac182 100644 --- a/nixosModules/services/graphics/nvidia/default.nix +++ b/nixosModules/services/nvidia/service.nix @@ -1,8 +1,8 @@ { config, pkgs, lib, ... }: { - options = { - nvidia.enable = lib.mkEnableOption + options.nvidia = { + enable = lib.mkEnableOption "Enables nvidia with proprietary drivers"; }; diff --git a/nixosModules/services/pipewire/default.nix b/nixosModules/services/pipewire/service.nix similarity index 80% rename from nixosModules/services/pipewire/default.nix rename to nixosModules/services/pipewire/service.nix index 20387b6..1129a34 100644 --- a/nixosModules/services/pipewire/default.nix +++ b/nixosModules/services/pipewire/service.nix @@ -1,8 +1,8 @@ { config, pkgs, lib, ... }: { - options = { - pipewire.enable = lib.mkEnableOption "Enables pipewire and pulsemixer"; + options.pipewire = { + enable = lib.mkEnableOption "Enables pipewire and pulsemixer"; }; config = lib.mkIf config.pipewire.enable { diff --git a/nixosModules/services/polkit/default.nix b/nixosModules/services/polkit/service.nix similarity index 69% rename from nixosModules/services/polkit/default.nix rename to nixosModules/services/polkit/service.nix index 07f03f8..36c77a5 100644 --- a/nixosModules/services/polkit/default.nix +++ b/nixosModules/services/polkit/service.nix @@ -1,8 +1,8 @@ { config, pkgs, lib, ... }: { - options = { - polkit.enable = lib.mkEnableOption "Enables polkit with kde handler"; + options.polkit = { + enable = lib.mkEnableOption "Enables polkit with kde handler"; }; config = lib.mkIf config.polkit.enable { diff --git a/nixosModules/services/sops-nix/default.nix b/nixosModules/services/sops-nix/service.nix similarity index 100% rename from nixosModules/services/sops-nix/default.nix rename to nixosModules/services/sops-nix/service.nix diff --git a/nixosModules/services/graphics/tabletdrivers/default.nix b/nixosModules/services/tabletdrivers/service.nix similarity index 81% rename from nixosModules/services/graphics/tabletdrivers/default.nix rename to nixosModules/services/tabletdrivers/service.nix index 6afecf7..f1020bd 100644 --- a/nixosModules/services/graphics/tabletdrivers/default.nix +++ b/nixosModules/services/tabletdrivers/service.nix @@ -1,8 +1,8 @@ { config, pkgs, lib, ... }: { - options = { - tablet.enable = lib.mkEnableOption + options.tablet = { + enable = lib.mkEnableOption "Enables tablet support"; }; diff --git a/nixosModules/services/graphics/wayland_compositors/default.nix b/nixosModules/services/waylandcompositors/service.nix similarity index 57% rename from nixosModules/services/graphics/wayland_compositors/default.nix rename to nixosModules/services/waylandcompositors/service.nix index 977ebb2..779a8fe 100644 --- a/nixosModules/services/graphics/wayland_compositors/default.nix +++ b/nixosModules/services/waylandcompositors/service.nix @@ -1,9 +1,9 @@ -{ inputs, config, pkgs, lib, ... }: +{ inputs, config, lib, ... }: { - options = { - hyprland.enable = lib.mkEnableOption "Enables hyprland"; + options.hyprland = { + enable = lib.mkEnableOption "Enables hyprland"; }; imports = [ @@ -13,7 +13,9 @@ config = { nix.settings = { substituters = [ "https://hyprland.cachix.org" ]; - trusted-public-keys = [ "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" ]; + trusted-public-keys = [ + "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" + ]; experimental-features = [ "nix-command" "flakes" ]; }; programs.hyprland.enable = lib.mkIf config.hyprland.enable true; diff --git a/nixosModules/services/networking/wireless/default.nix b/nixosModules/services/wireless/service.nix similarity index 70% rename from nixosModules/services/networking/wireless/default.nix rename to nixosModules/services/wireless/service.nix index a916a71..bf941c0 100644 --- a/nixosModules/services/networking/wireless/default.nix +++ b/nixosModules/services/wireless/service.nix @@ -1,12 +1,10 @@ -{ config, pkgs, lib, ... }: +{ config, lib, ... }: { - options = { - wireless = { - enable = lib.mkEnableOption "Enables wireless"; - networks = lib.mkOption { default = {}; }; - secretsFile = lib.mkOption {}; - }; + options.wireless = { + enable = lib.mkEnableOption "Enables wireless"; + networks = lib.mkOption { default = {}; }; + secretsFile = lib.mkOption {}; }; config = lib.mkIf config.wireless.enable { From 6cc642d32f6f645de06784cb577275c4e0e0c68d Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 28 Nov 2024 23:48:40 -0800 Subject: [PATCH 236/412] Services, refactor, clean up, service to automatic Move service to automatic since it has a separate purpose. Refactor the default.nix code to include service.nix files so it is easier to extend code. --- .../{services/system => automatic}/default.nix | 0 nixosModules/default.nix | 1 + .../default.nix => bluetooth/service.nix} | 4 ++-- nixosModules/services/default.nix | 16 +++++----------- .../default.nix => displaymanager/service.nix} | 4 ++-- nixosModules/services/graphics/default.nix | 10 ---------- nixosModules/services/networking/default.nix | 8 -------- .../nvidia/default.nix => nvidia/service.nix} | 4 ++-- .../pipewire/{default.nix => service.nix} | 4 ++-- .../services/polkit/{default.nix => service.nix} | 4 ++-- .../sops-nix/{default.nix => service.nix} | 0 .../default.nix => tabletdrivers/service.nix} | 4 ++-- .../service.nix} | 10 ++++++---- .../default.nix => wireless/service.nix} | 12 +++++------- 14 files changed, 29 insertions(+), 52 deletions(-) rename nixosModules/{services/system => automatic}/default.nix (100%) rename nixosModules/services/{networking/bluetooth/default.nix => bluetooth/service.nix} (75%) rename nixosModules/services/{graphics/display_manager/default.nix => displaymanager/service.nix} (83%) delete mode 100644 nixosModules/services/graphics/default.nix delete mode 100644 nixosModules/services/networking/default.nix rename nixosModules/services/{graphics/nvidia/default.nix => nvidia/service.nix} (91%) rename nixosModules/services/pipewire/{default.nix => service.nix} (80%) rename nixosModules/services/polkit/{default.nix => service.nix} (69%) rename nixosModules/services/sops-nix/{default.nix => service.nix} (100%) rename nixosModules/services/{graphics/tabletdrivers/default.nix => tabletdrivers/service.nix} (81%) rename nixosModules/services/{graphics/wayland_compositors/default.nix => waylandcompositors/service.nix} (57%) rename nixosModules/services/{networking/wireless/default.nix => wireless/service.nix} (70%) diff --git a/nixosModules/services/system/default.nix b/nixosModules/automatic/default.nix similarity index 100% rename from nixosModules/services/system/default.nix rename to nixosModules/automatic/default.nix diff --git a/nixosModules/default.nix b/nixosModules/default.nix index a1d9d7b..b70e50c 100644 --- a/nixosModules/default.nix +++ b/nixosModules/default.nix @@ -3,6 +3,7 @@ { imports = [ ./apps + ./automatic ./services ]; } diff --git a/nixosModules/services/networking/bluetooth/default.nix b/nixosModules/services/bluetooth/service.nix similarity index 75% rename from nixosModules/services/networking/bluetooth/default.nix rename to nixosModules/services/bluetooth/service.nix index 30bed32..646f741 100644 --- a/nixosModules/services/networking/bluetooth/default.nix +++ b/nixosModules/services/bluetooth/service.nix @@ -1,8 +1,8 @@ { config, pkgs, lib, ... }: { - options = { - bluetooth.enable = lib.mkEnableOption "Enables Bluetooth with blueman"; + options.bluetooth = { + enable = lib.mkEnableOption "Enables Bluetooth with blueman"; }; config = lib.mkIf config.bluetooth.enable { diff --git a/nixosModules/services/default.nix b/nixosModules/services/default.nix index 128d32b..5718b40 100644 --- a/nixosModules/services/default.nix +++ b/nixosModules/services/default.nix @@ -1,12 +1,6 @@ -{ config, pkgs, lib, ... }: - -{ - imports = [ - ./graphics - ./networking - ./pipewire - ./polkit - ./sops-nix - ./system - ]; +{ lib, ... }: let + fs = lib.fileset; + appFilter = {name, ...}: name == "service.nix"; +in { + imports = fs.toList (fs.fileFilter appFilter ./.); } diff --git a/nixosModules/services/graphics/display_manager/default.nix b/nixosModules/services/displaymanager/service.nix similarity index 83% rename from nixosModules/services/graphics/display_manager/default.nix rename to nixosModules/services/displaymanager/service.nix index 3e4dab2..1110828 100644 --- a/nixosModules/services/graphics/display_manager/default.nix +++ b/nixosModules/services/displaymanager/service.nix @@ -1,8 +1,8 @@ { config, pkgs, lib, ... }: { - options = { - tuigreet.enable = lib.mkEnableOption "enables tuigreet with greetd"; + options.tuigreet = { + enable = lib.mkEnableOption "enables tuigreet with greetd"; }; config = lib.mkIf config.tuigreet.enable { diff --git a/nixosModules/services/graphics/default.nix b/nixosModules/services/graphics/default.nix deleted file mode 100644 index ec5ce31..0000000 --- a/nixosModules/services/graphics/default.nix +++ /dev/null @@ -1,10 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - imports = [ - ./display_manager - ./nvidia - ./wayland_compositors - ./tabletdrivers - ]; -} diff --git a/nixosModules/services/networking/default.nix b/nixosModules/services/networking/default.nix deleted file mode 100644 index 0da82d9..0000000 --- a/nixosModules/services/networking/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - imports = [ - ./bluetooth - ./wireless - ]; -} diff --git a/nixosModules/services/graphics/nvidia/default.nix b/nixosModules/services/nvidia/service.nix similarity index 91% rename from nixosModules/services/graphics/nvidia/default.nix rename to nixosModules/services/nvidia/service.nix index de39b58..2cac182 100644 --- a/nixosModules/services/graphics/nvidia/default.nix +++ b/nixosModules/services/nvidia/service.nix @@ -1,8 +1,8 @@ { config, pkgs, lib, ... }: { - options = { - nvidia.enable = lib.mkEnableOption + options.nvidia = { + enable = lib.mkEnableOption "Enables nvidia with proprietary drivers"; }; diff --git a/nixosModules/services/pipewire/default.nix b/nixosModules/services/pipewire/service.nix similarity index 80% rename from nixosModules/services/pipewire/default.nix rename to nixosModules/services/pipewire/service.nix index 20387b6..1129a34 100644 --- a/nixosModules/services/pipewire/default.nix +++ b/nixosModules/services/pipewire/service.nix @@ -1,8 +1,8 @@ { config, pkgs, lib, ... }: { - options = { - pipewire.enable = lib.mkEnableOption "Enables pipewire and pulsemixer"; + options.pipewire = { + enable = lib.mkEnableOption "Enables pipewire and pulsemixer"; }; config = lib.mkIf config.pipewire.enable { diff --git a/nixosModules/services/polkit/default.nix b/nixosModules/services/polkit/service.nix similarity index 69% rename from nixosModules/services/polkit/default.nix rename to nixosModules/services/polkit/service.nix index 07f03f8..36c77a5 100644 --- a/nixosModules/services/polkit/default.nix +++ b/nixosModules/services/polkit/service.nix @@ -1,8 +1,8 @@ { config, pkgs, lib, ... }: { - options = { - polkit.enable = lib.mkEnableOption "Enables polkit with kde handler"; + options.polkit = { + enable = lib.mkEnableOption "Enables polkit with kde handler"; }; config = lib.mkIf config.polkit.enable { diff --git a/nixosModules/services/sops-nix/default.nix b/nixosModules/services/sops-nix/service.nix similarity index 100% rename from nixosModules/services/sops-nix/default.nix rename to nixosModules/services/sops-nix/service.nix diff --git a/nixosModules/services/graphics/tabletdrivers/default.nix b/nixosModules/services/tabletdrivers/service.nix similarity index 81% rename from nixosModules/services/graphics/tabletdrivers/default.nix rename to nixosModules/services/tabletdrivers/service.nix index 6afecf7..f1020bd 100644 --- a/nixosModules/services/graphics/tabletdrivers/default.nix +++ b/nixosModules/services/tabletdrivers/service.nix @@ -1,8 +1,8 @@ { config, pkgs, lib, ... }: { - options = { - tablet.enable = lib.mkEnableOption + options.tablet = { + enable = lib.mkEnableOption "Enables tablet support"; }; diff --git a/nixosModules/services/graphics/wayland_compositors/default.nix b/nixosModules/services/waylandcompositors/service.nix similarity index 57% rename from nixosModules/services/graphics/wayland_compositors/default.nix rename to nixosModules/services/waylandcompositors/service.nix index 977ebb2..779a8fe 100644 --- a/nixosModules/services/graphics/wayland_compositors/default.nix +++ b/nixosModules/services/waylandcompositors/service.nix @@ -1,9 +1,9 @@ -{ inputs, config, pkgs, lib, ... }: +{ inputs, config, lib, ... }: { - options = { - hyprland.enable = lib.mkEnableOption "Enables hyprland"; + options.hyprland = { + enable = lib.mkEnableOption "Enables hyprland"; }; imports = [ @@ -13,7 +13,9 @@ config = { nix.settings = { substituters = [ "https://hyprland.cachix.org" ]; - trusted-public-keys = [ "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" ]; + trusted-public-keys = [ + "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" + ]; experimental-features = [ "nix-command" "flakes" ]; }; programs.hyprland.enable = lib.mkIf config.hyprland.enable true; diff --git a/nixosModules/services/networking/wireless/default.nix b/nixosModules/services/wireless/service.nix similarity index 70% rename from nixosModules/services/networking/wireless/default.nix rename to nixosModules/services/wireless/service.nix index a916a71..bf941c0 100644 --- a/nixosModules/services/networking/wireless/default.nix +++ b/nixosModules/services/wireless/service.nix @@ -1,12 +1,10 @@ -{ config, pkgs, lib, ... }: +{ config, lib, ... }: { - options = { - wireless = { - enable = lib.mkEnableOption "Enables wireless"; - networks = lib.mkOption { default = {}; }; - secretsFile = lib.mkOption {}; - }; + options.wireless = { + enable = lib.mkEnableOption "Enables wireless"; + networks = lib.mkOption { default = {}; }; + secretsFile = lib.mkOption {}; }; config = lib.mkIf config.wireless.enable { From 8560b319cf34c699238b6d3e468623fcead87615 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Fri, 29 Nov 2024 00:02:34 -0800 Subject: [PATCH 237/412] OsModules, remove excess arguments --- nixosModules/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixosModules/default.nix b/nixosModules/default.nix index b70e50c..b12278c 100644 --- a/nixosModules/default.nix +++ b/nixosModules/default.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, ... }: +{ ... }: { imports = [ From 89b2c68b89823df63b4dd73bc71ba69559ca27f8 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Fri, 29 Nov 2024 00:02:34 -0800 Subject: [PATCH 238/412] OsModules, remove excess arguments --- nixosModules/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixosModules/default.nix b/nixosModules/default.nix index b70e50c..b12278c 100644 --- a/nixosModules/default.nix +++ b/nixosModules/default.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, ... }: +{ ... }: { imports = [ From 1f59950af862f16a0969b5ecf893ac03cb2ffff6 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Fri, 29 Nov 2024 00:03:51 -0800 Subject: [PATCH 239/412] OSAuto, remove autoUpgrade and Broken XDG Stuff --- nixosModules/automatic/default.nix | 34 +++--------------------------- 1 file changed, 3 insertions(+), 31 deletions(-) diff --git a/nixosModules/automatic/default.nix b/nixosModules/automatic/default.nix index 2df5223..a61ce29 100644 --- a/nixosModules/automatic/default.nix +++ b/nixosModules/automatic/default.nix @@ -1,10 +1,9 @@ -{ config, inputs, pkgs, lib, hostname, usernameList, ... }: +{ config, pkgs, lib, hostname, usernameList, ... }: { options = { system.timezone = lib.mkOption { default = "America/Los_Angeles"; }; system.extraFonts = lib.mkOption { default = []; }; - system.doAutoUpgrade = lib.mkEnableOption "Enable auto upgrading system"; system.users.bigWheels = lib.mkOption { default = []; }; }; @@ -16,14 +15,13 @@ boot.loader.efi.canTouchEfiVariables = true; networking.hostName = hostname; - nixpkgs.config.allowUnfree = true; system.stateVersion = "23.05"; time.timeZone = config.system.timezone; - i18n.defaultLocale = "en_US.UTF-8"; - # "Essential" Packages + # Packages & Default Packages + nixpkgs.config.allowUnfree = true; environment.systemPackages = with pkgs; [ git neovim @@ -32,17 +30,6 @@ ]; # XDG Compliance - xdg.portal.config.common.default = "*"; - environment.sessionVariables = { - XDG_CONFIG_HOME = "\${HOME}/.config"; - XDG_CACHE_HOME = "\${HOME}/.cache"; - XDG_STATE_HOME = "\${HOME}/.local/state"; - XDG_DATA_HOME = "\${HOME}/.local/share"; - XDG_BIN_HOME = "\${HOME}/.local/bin"; - PATH = [ - "\${HOME}/prog/scripts" - ]; - }; nix.settings.use-xdg-base-directories = true; users = { @@ -72,20 +59,5 @@ source-han-sans # Pan-CJK font ] ++ config.system.extraFonts; }; - - system.autoUpgrade = lib.mkIf config.system.doAutoUpgrade { - enable = true; - flake = inputs.self.outPath; - flags = [ - "--update-input" - "nixpkgs" - "--commit-lock-file" - "-L" - ]; - operation = "boot"; - dates = "22:30"; - randomizedDelaySec = "30min"; - }; - }; } From 66bca2bd56e22dd8d298019bc6141c940fadf87a Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Fri, 29 Nov 2024 00:03:51 -0800 Subject: [PATCH 240/412] OSAuto, remove autoUpgrade and Broken XDG Stuff --- nixosModules/automatic/default.nix | 34 +++--------------------------- 1 file changed, 3 insertions(+), 31 deletions(-) diff --git a/nixosModules/automatic/default.nix b/nixosModules/automatic/default.nix index 2df5223..a61ce29 100644 --- a/nixosModules/automatic/default.nix +++ b/nixosModules/automatic/default.nix @@ -1,10 +1,9 @@ -{ config, inputs, pkgs, lib, hostname, usernameList, ... }: +{ config, pkgs, lib, hostname, usernameList, ... }: { options = { system.timezone = lib.mkOption { default = "America/Los_Angeles"; }; system.extraFonts = lib.mkOption { default = []; }; - system.doAutoUpgrade = lib.mkEnableOption "Enable auto upgrading system"; system.users.bigWheels = lib.mkOption { default = []; }; }; @@ -16,14 +15,13 @@ boot.loader.efi.canTouchEfiVariables = true; networking.hostName = hostname; - nixpkgs.config.allowUnfree = true; system.stateVersion = "23.05"; time.timeZone = config.system.timezone; - i18n.defaultLocale = "en_US.UTF-8"; - # "Essential" Packages + # Packages & Default Packages + nixpkgs.config.allowUnfree = true; environment.systemPackages = with pkgs; [ git neovim @@ -32,17 +30,6 @@ ]; # XDG Compliance - xdg.portal.config.common.default = "*"; - environment.sessionVariables = { - XDG_CONFIG_HOME = "\${HOME}/.config"; - XDG_CACHE_HOME = "\${HOME}/.cache"; - XDG_STATE_HOME = "\${HOME}/.local/state"; - XDG_DATA_HOME = "\${HOME}/.local/share"; - XDG_BIN_HOME = "\${HOME}/.local/bin"; - PATH = [ - "\${HOME}/prog/scripts" - ]; - }; nix.settings.use-xdg-base-directories = true; users = { @@ -72,20 +59,5 @@ source-han-sans # Pan-CJK font ] ++ config.system.extraFonts; }; - - system.autoUpgrade = lib.mkIf config.system.doAutoUpgrade { - enable = true; - flake = inputs.self.outPath; - flags = [ - "--update-input" - "nixpkgs" - "--commit-lock-file" - "-L" - ]; - operation = "boot"; - dates = "22:30"; - randomizedDelaySec = "30min"; - }; - }; } From db7f132f6eef58a26a16ddeee314b6c4d3ca085d Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 28 Nov 2024 20:23:38 -0800 Subject: [PATCH 241/412] Apps, refactor, clean up, remove librewolf Refactors to use app.nix for easier extension. Removes librewolf from host, as it makes more sense on the user every time. --- .../default.nix => animelauncher/app.nix} | 12 ++++----- nixosModules/apps/default.nix | 16 ++++-------- nixosModules/apps/games/default.nix | 8 ------ nixosModules/apps/input-remapper/default.nix | 11 -------- nixosModules/apps/inputremapper/app.nix | 11 ++++++++ nixosModules/apps/librewolf/default.nix | 12 --------- .../apps/shells/{default.nix => app.nix} | 2 +- .../steam/default.nix => steam/app.nix} | 4 +-- nixosModules/apps/syncthing/default.nix | 25 ------------------- .../apps/virtualbox/{default.nix => app.nix} | 6 ++--- 10 files changed, 27 insertions(+), 80 deletions(-) rename nixosModules/apps/{games/anime-launcher/default.nix => animelauncher/app.nix} (73%) delete mode 100644 nixosModules/apps/games/default.nix delete mode 100644 nixosModules/apps/input-remapper/default.nix create mode 100644 nixosModules/apps/inputremapper/app.nix delete mode 100644 nixosModules/apps/librewolf/default.nix rename nixosModules/apps/shells/{default.nix => app.nix} (67%) rename nixosModules/apps/{games/steam/default.nix => steam/app.nix} (77%) delete mode 100644 nixosModules/apps/syncthing/default.nix rename nixosModules/apps/virtualbox/{default.nix => app.nix} (64%) diff --git a/nixosModules/apps/games/anime-launcher/default.nix b/nixosModules/apps/animelauncher/app.nix similarity index 73% rename from nixosModules/apps/games/anime-launcher/default.nix rename to nixosModules/apps/animelauncher/app.nix index bdf76d9..5cf1a9b 100644 --- a/nixosModules/apps/games/anime-launcher/default.nix +++ b/nixosModules/apps/animelauncher/app.nix @@ -1,14 +1,14 @@ -{ config, inputs, pkgs, lib, ... }: +{ config, inputs, lib, ... }: { - options = { - aagl.enable = lib.mkEnableOption + options.aagl = { + enable = lib.mkEnableOption "Enables another anime game launcher settings"; - aagl.honkai-rail = lib.mkEnableOption + honkai-rail = lib.mkEnableOption "Enables honkai star rail"; - aagl.genshin = lib.mkEnableOption + genshin = lib.mkEnableOption "Enables genshin impact"; - aagl.honkai-3rd = lib.mkEnableOption + honkai-3rd = lib.mkEnableOption "Enables honkai 3rd impact"; }; diff --git a/nixosModules/apps/default.nix b/nixosModules/apps/default.nix index aebe893..cb0c66b 100644 --- a/nixosModules/apps/default.nix +++ b/nixosModules/apps/default.nix @@ -1,12 +1,6 @@ -{ config, pkgs, lib, ... }: - -{ - imports = [ - ./games - ./input-remapper - ./librewolf - ./shells - ./syncthing - ./virtualbox - ]; +{ lib, ... }: let + fs = lib.fileset; + appFilter = {name, ...}: name == "app.nix"; +in { + imports = fs.toList (fs.fileFilter appFilter ./.); } diff --git a/nixosModules/apps/games/default.nix b/nixosModules/apps/games/default.nix deleted file mode 100644 index 905db78..0000000 --- a/nixosModules/apps/games/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - imports = [ - ./anime-launcher - ./steam - ]; -} diff --git a/nixosModules/apps/input-remapper/default.nix b/nixosModules/apps/input-remapper/default.nix deleted file mode 100644 index 0646dfc..0000000 --- a/nixosModules/apps/input-remapper/default.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - options = { - input-remapper.enable = lib.mkEnableOption "Enables input-remapper"; - }; - - config = lib.mkIf config.input-remapper.enable { - services.input-remapper.enable = true; - }; -} diff --git a/nixosModules/apps/inputremapper/app.nix b/nixosModules/apps/inputremapper/app.nix new file mode 100644 index 0000000..336e811 --- /dev/null +++ b/nixosModules/apps/inputremapper/app.nix @@ -0,0 +1,11 @@ +{ config, lib, ... }: + +{ + options.input-remapper = { + enable = lib.mkEnableOption "Enables input-remapper"; + }; + + config = lib.mkIf config.input-remapper.enable { + services.input-remapper.enable = true; + }; +} diff --git a/nixosModules/apps/librewolf/default.nix b/nixosModules/apps/librewolf/default.nix deleted file mode 100644 index f0d4406..0000000 --- a/nixosModules/apps/librewolf/default.nix +++ /dev/null @@ -1,12 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - options = { - librewolf.enable = lib.mkEnableOption "Enables librewolf"; - }; - - config = lib.mkIf config.librewolf.enable { - environment.variables.BROWSER = "librewolf"; - environment.systemPackages = with pkgs; [ librewolf ]; - }; -} diff --git a/nixosModules/apps/shells/default.nix b/nixosModules/apps/shells/app.nix similarity index 67% rename from nixosModules/apps/shells/default.nix rename to nixosModules/apps/shells/app.nix index 03ae484..6eab99e 100644 --- a/nixosModules/apps/shells/default.nix +++ b/nixosModules/apps/shells/app.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, ... }: +{ ... }: { imports = [ diff --git a/nixosModules/apps/games/steam/default.nix b/nixosModules/apps/steam/app.nix similarity index 77% rename from nixosModules/apps/games/steam/default.nix rename to nixosModules/apps/steam/app.nix index b45dcb0..6311d9b 100644 --- a/nixosModules/apps/games/steam/default.nix +++ b/nixosModules/apps/steam/app.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, ... }: +{ config, lib, ... }: { options.steam = { @@ -12,6 +12,6 @@ remotePlay.openFirewall = true; dedicatedServer.openFirewall = true; }; - programs.gamemode.enable = true; + programs.gamemode.enable = lib.mkIf config.steam.gamemode true; }; } diff --git a/nixosModules/apps/syncthing/default.nix b/nixosModules/apps/syncthing/default.nix deleted file mode 100644 index fee80a5..0000000 --- a/nixosModules/apps/syncthing/default.nix +++ /dev/null @@ -1,25 +0,0 @@ -{ config, lib, ... }: - -{ - options = { - syncthing.enable = lib.mkEnableOption "Enables syncthing"; - }; - - config = lib.mkIf config.syncthing.enable { - services.syncthing = { - enable = true; - # user = config.user.name; - # dataDir = "/home/" + config.user.name + "/dox/Sync"; - # configDir = "/home/" + config.user.name + "/.config/syncthing"; - # overrideFolders = true; - # overrideDevices = true; - # - # settings = { - # gui = { - # user = config.user.name; - # password = "password"; - # }; - # }; - }; - }; -} diff --git a/nixosModules/apps/virtualbox/default.nix b/nixosModules/apps/virtualbox/app.nix similarity index 64% rename from nixosModules/apps/virtualbox/default.nix rename to nixosModules/apps/virtualbox/app.nix index 87e825d..7bd6c59 100644 --- a/nixosModules/apps/virtualbox/default.nix +++ b/nixosModules/apps/virtualbox/app.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, ... }: +{ config, lib, ... }: { options.virtualbox = { @@ -8,8 +8,6 @@ config = lib.mkIf config.virtualbox.enable { virtualisation.virtualbox.host.enable = true; - users.extraGroups.vboxusers.members = [ - config.user.name - ] ++ config.virtualbox.extra-users; + users.extraGroups.vboxusers.members = config.virtualbox.extra-users; }; } From 7919d19fe99cce7af14d55d6c3482f477bd1573f Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 28 Nov 2024 20:23:38 -0800 Subject: [PATCH 242/412] Apps, refactor, clean up, remove librewolf Refactors to use app.nix for easier extension. Removes librewolf from host, as it makes more sense on the user every time. --- .../default.nix => animelauncher/app.nix} | 12 ++++----- nixosModules/apps/default.nix | 16 ++++-------- nixosModules/apps/games/default.nix | 8 ------ nixosModules/apps/input-remapper/default.nix | 11 -------- nixosModules/apps/inputremapper/app.nix | 11 ++++++++ nixosModules/apps/librewolf/default.nix | 12 --------- .../apps/shells/{default.nix => app.nix} | 2 +- .../steam/default.nix => steam/app.nix} | 4 +-- nixosModules/apps/syncthing/default.nix | 25 ------------------- .../apps/virtualbox/{default.nix => app.nix} | 6 ++--- 10 files changed, 27 insertions(+), 80 deletions(-) rename nixosModules/apps/{games/anime-launcher/default.nix => animelauncher/app.nix} (73%) delete mode 100644 nixosModules/apps/games/default.nix delete mode 100644 nixosModules/apps/input-remapper/default.nix create mode 100644 nixosModules/apps/inputremapper/app.nix delete mode 100644 nixosModules/apps/librewolf/default.nix rename nixosModules/apps/shells/{default.nix => app.nix} (67%) rename nixosModules/apps/{games/steam/default.nix => steam/app.nix} (77%) delete mode 100644 nixosModules/apps/syncthing/default.nix rename nixosModules/apps/virtualbox/{default.nix => app.nix} (64%) diff --git a/nixosModules/apps/games/anime-launcher/default.nix b/nixosModules/apps/animelauncher/app.nix similarity index 73% rename from nixosModules/apps/games/anime-launcher/default.nix rename to nixosModules/apps/animelauncher/app.nix index bdf76d9..5cf1a9b 100644 --- a/nixosModules/apps/games/anime-launcher/default.nix +++ b/nixosModules/apps/animelauncher/app.nix @@ -1,14 +1,14 @@ -{ config, inputs, pkgs, lib, ... }: +{ config, inputs, lib, ... }: { - options = { - aagl.enable = lib.mkEnableOption + options.aagl = { + enable = lib.mkEnableOption "Enables another anime game launcher settings"; - aagl.honkai-rail = lib.mkEnableOption + honkai-rail = lib.mkEnableOption "Enables honkai star rail"; - aagl.genshin = lib.mkEnableOption + genshin = lib.mkEnableOption "Enables genshin impact"; - aagl.honkai-3rd = lib.mkEnableOption + honkai-3rd = lib.mkEnableOption "Enables honkai 3rd impact"; }; diff --git a/nixosModules/apps/default.nix b/nixosModules/apps/default.nix index aebe893..cb0c66b 100644 --- a/nixosModules/apps/default.nix +++ b/nixosModules/apps/default.nix @@ -1,12 +1,6 @@ -{ config, pkgs, lib, ... }: - -{ - imports = [ - ./games - ./input-remapper - ./librewolf - ./shells - ./syncthing - ./virtualbox - ]; +{ lib, ... }: let + fs = lib.fileset; + appFilter = {name, ...}: name == "app.nix"; +in { + imports = fs.toList (fs.fileFilter appFilter ./.); } diff --git a/nixosModules/apps/games/default.nix b/nixosModules/apps/games/default.nix deleted file mode 100644 index 905db78..0000000 --- a/nixosModules/apps/games/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - imports = [ - ./anime-launcher - ./steam - ]; -} diff --git a/nixosModules/apps/input-remapper/default.nix b/nixosModules/apps/input-remapper/default.nix deleted file mode 100644 index 0646dfc..0000000 --- a/nixosModules/apps/input-remapper/default.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - options = { - input-remapper.enable = lib.mkEnableOption "Enables input-remapper"; - }; - - config = lib.mkIf config.input-remapper.enable { - services.input-remapper.enable = true; - }; -} diff --git a/nixosModules/apps/inputremapper/app.nix b/nixosModules/apps/inputremapper/app.nix new file mode 100644 index 0000000..336e811 --- /dev/null +++ b/nixosModules/apps/inputremapper/app.nix @@ -0,0 +1,11 @@ +{ config, lib, ... }: + +{ + options.input-remapper = { + enable = lib.mkEnableOption "Enables input-remapper"; + }; + + config = lib.mkIf config.input-remapper.enable { + services.input-remapper.enable = true; + }; +} diff --git a/nixosModules/apps/librewolf/default.nix b/nixosModules/apps/librewolf/default.nix deleted file mode 100644 index f0d4406..0000000 --- a/nixosModules/apps/librewolf/default.nix +++ /dev/null @@ -1,12 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - options = { - librewolf.enable = lib.mkEnableOption "Enables librewolf"; - }; - - config = lib.mkIf config.librewolf.enable { - environment.variables.BROWSER = "librewolf"; - environment.systemPackages = with pkgs; [ librewolf ]; - }; -} diff --git a/nixosModules/apps/shells/default.nix b/nixosModules/apps/shells/app.nix similarity index 67% rename from nixosModules/apps/shells/default.nix rename to nixosModules/apps/shells/app.nix index 03ae484..6eab99e 100644 --- a/nixosModules/apps/shells/default.nix +++ b/nixosModules/apps/shells/app.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, ... }: +{ ... }: { imports = [ diff --git a/nixosModules/apps/games/steam/default.nix b/nixosModules/apps/steam/app.nix similarity index 77% rename from nixosModules/apps/games/steam/default.nix rename to nixosModules/apps/steam/app.nix index b45dcb0..6311d9b 100644 --- a/nixosModules/apps/games/steam/default.nix +++ b/nixosModules/apps/steam/app.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, ... }: +{ config, lib, ... }: { options.steam = { @@ -12,6 +12,6 @@ remotePlay.openFirewall = true; dedicatedServer.openFirewall = true; }; - programs.gamemode.enable = true; + programs.gamemode.enable = lib.mkIf config.steam.gamemode true; }; } diff --git a/nixosModules/apps/syncthing/default.nix b/nixosModules/apps/syncthing/default.nix deleted file mode 100644 index fee80a5..0000000 --- a/nixosModules/apps/syncthing/default.nix +++ /dev/null @@ -1,25 +0,0 @@ -{ config, lib, ... }: - -{ - options = { - syncthing.enable = lib.mkEnableOption "Enables syncthing"; - }; - - config = lib.mkIf config.syncthing.enable { - services.syncthing = { - enable = true; - # user = config.user.name; - # dataDir = "/home/" + config.user.name + "/dox/Sync"; - # configDir = "/home/" + config.user.name + "/.config/syncthing"; - # overrideFolders = true; - # overrideDevices = true; - # - # settings = { - # gui = { - # user = config.user.name; - # password = "password"; - # }; - # }; - }; - }; -} diff --git a/nixosModules/apps/virtualbox/default.nix b/nixosModules/apps/virtualbox/app.nix similarity index 64% rename from nixosModules/apps/virtualbox/default.nix rename to nixosModules/apps/virtualbox/app.nix index 87e825d..7bd6c59 100644 --- a/nixosModules/apps/virtualbox/default.nix +++ b/nixosModules/apps/virtualbox/app.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, ... }: +{ config, lib, ... }: { options.virtualbox = { @@ -8,8 +8,6 @@ config = lib.mkIf config.virtualbox.enable { virtualisation.virtualbox.host.enable = true; - users.extraGroups.vboxusers.members = [ - config.user.name - ] ++ config.virtualbox.extra-users; + users.extraGroups.vboxusers.members = config.virtualbox.extra-users; }; } From 55bfb8a4fb0ca4b2592d842a87d553e96928a76d Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Fri, 29 Nov 2024 01:53:13 -0800 Subject: [PATCH 243/412] OSShells, refactor shells to single option --- nixosModules/apps/shells/app.nix | 34 +++++++++++++++++----- nixosModules/apps/shells/fish/default.nix | 15 ---------- nixosModules/apps/shells/fish/shell.nix | 7 +++++ nixosModules/apps/shells/xonsh/default.nix | 15 ---------- nixosModules/apps/shells/xonsh/shell.nix | 7 +++++ nixosModules/apps/shells/zsh/default.nix | 20 ------------- nixosModules/apps/shells/zsh/shell.nix | 13 +++++++++ 7 files changed, 54 insertions(+), 57 deletions(-) delete mode 100644 nixosModules/apps/shells/fish/default.nix create mode 100644 nixosModules/apps/shells/fish/shell.nix delete mode 100644 nixosModules/apps/shells/xonsh/default.nix create mode 100644 nixosModules/apps/shells/xonsh/shell.nix delete mode 100644 nixosModules/apps/shells/zsh/default.nix create mode 100644 nixosModules/apps/shells/zsh/shell.nix diff --git a/nixosModules/apps/shells/app.nix b/nixosModules/apps/shells/app.nix index 6eab99e..66092fd 100644 --- a/nixosModules/apps/shells/app.nix +++ b/nixosModules/apps/shells/app.nix @@ -1,9 +1,29 @@ -{ ... }: +{ config, pkgs, lib, ... }: let + fs = lib.fileset; + shellFilter = {name, ...}: name == "shell.nix"; + shellImports = fs.toList (fs.fileFilter shellFilter ./.); + shellNames = map ( + path: let + splitPath = lib.strings.splitString "/" path; + splitPathLen = builtins.length splitPath; + in builtins.elemAt splitPath (splitPathLen - 2) + ) shellImports; +in { + imports = shellImports; -{ - imports = [ - ./fish - ./xonsh - ./zsh - ]; + options.shell = let + shellNameEnum = lib.types.enum shellNames; + in { + defaultShell = lib.mkOption { + type = shellNameEnum; + }; + enabledShells = lib.mkOption { + type = lib.types.listOf shellNameEnum; + }; + }; + + config = { + users.defaultUserShell = pkgs."${config.shell.defaultShell}"; + environment.shells = map (shell: pkgs."${shell}") config.shell.enabledShells; + }; } diff --git a/nixosModules/apps/shells/fish/default.nix b/nixosModules/apps/shells/fish/default.nix deleted file mode 100644 index 1e17b4e..0000000 --- a/nixosModules/apps/shells/fish/default.nix +++ /dev/null @@ -1,15 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - options = { - fish.enable = lib.mkEnableOption "Enables fish"; - fish.setDefault = lib.mkEnableOption - "Sets fish as the default user's shell"; - }; - - config = lib.mkIf config.fish.enable { - programs.fish.enable = true; - users.defaultUserShell = lib.mkIf config.fish.setDefault pkgs.fish; - environment.shells = with pkgs; [ fish ]; - }; -} diff --git a/nixosModules/apps/shells/fish/shell.nix b/nixosModules/apps/shells/fish/shell.nix new file mode 100644 index 0000000..93d7b4a --- /dev/null +++ b/nixosModules/apps/shells/fish/shell.nix @@ -0,0 +1,7 @@ +{ config, lib, ... }: + +{ + config = lib.mkIf (config.shell.defaultShell == "fish") { + programs.fish.enable = true; + }; +} diff --git a/nixosModules/apps/shells/xonsh/default.nix b/nixosModules/apps/shells/xonsh/default.nix deleted file mode 100644 index 4d4215c..0000000 --- a/nixosModules/apps/shells/xonsh/default.nix +++ /dev/null @@ -1,15 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - options = { - xonsh.enable = lib.mkEnableOption "Enables xonsh"; - xonsh.setDefault = lib.mkEnableOption - "Sets xonsh as the default user's shell"; - }; - - config = lib.mkIf config.xonsh.enable { - programs.xonsh.enable = true; - users.defaultUserShell = lib.mkIf config.xonsh.setDefault pkgs.xonsh; - environment.shells = with pkgs; [ xonsh ]; - }; -} diff --git a/nixosModules/apps/shells/xonsh/shell.nix b/nixosModules/apps/shells/xonsh/shell.nix new file mode 100644 index 0000000..2f39a02 --- /dev/null +++ b/nixosModules/apps/shells/xonsh/shell.nix @@ -0,0 +1,7 @@ +{ config, lib, ... }: + +{ + config = lib.mkIf (config.shell.defaultShell == "xonsh") { + programs.xonsh.enable = true; + }; +} diff --git a/nixosModules/apps/shells/zsh/default.nix b/nixosModules/apps/shells/zsh/default.nix deleted file mode 100644 index 93d33f7..0000000 --- a/nixosModules/apps/shells/zsh/default.nix +++ /dev/null @@ -1,20 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - options = { - zsh.enable = lib.mkEnableOption "Enables zsh"; - zsh.setDefault = lib.mkEnableOption "Sets zsh as the default user's shell"; - }; - - config = lib.mkIf config.zsh.enable { - programs.zsh = { - enable = true; - enableCompletion = true; - autosuggestions.enable = true; - histFile = "$HOME/.config/zsh/history"; - histSize = 2000; - }; - users.defaultUserShell = lib.mkIf config.zsh.setDefault pkgs.zsh; - environment.shells = with pkgs; [ zsh ]; - }; -} diff --git a/nixosModules/apps/shells/zsh/shell.nix b/nixosModules/apps/shells/zsh/shell.nix new file mode 100644 index 0000000..979878f --- /dev/null +++ b/nixosModules/apps/shells/zsh/shell.nix @@ -0,0 +1,13 @@ +{ config, lib, ... }: + +{ + config = lib.mkIf (config.shell.defaultShell == "zsh") { + programs.zsh = { + enable = true; + enableCompletion = true; + autosuggestions.enable = true; + histFile = "$HOME/.config/zsh/history"; + histSize = 2000; + }; + }; +} From f53b6d0dede4fce1881abf865c2e20de72886f71 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Fri, 29 Nov 2024 01:53:13 -0800 Subject: [PATCH 244/412] OSShells, refactor shells to single option --- nixosModules/apps/shells/app.nix | 34 +++++++++++++++++----- nixosModules/apps/shells/fish/default.nix | 15 ---------- nixosModules/apps/shells/fish/shell.nix | 7 +++++ nixosModules/apps/shells/xonsh/default.nix | 15 ---------- nixosModules/apps/shells/xonsh/shell.nix | 7 +++++ nixosModules/apps/shells/zsh/default.nix | 20 ------------- nixosModules/apps/shells/zsh/shell.nix | 13 +++++++++ 7 files changed, 54 insertions(+), 57 deletions(-) delete mode 100644 nixosModules/apps/shells/fish/default.nix create mode 100644 nixosModules/apps/shells/fish/shell.nix delete mode 100644 nixosModules/apps/shells/xonsh/default.nix create mode 100644 nixosModules/apps/shells/xonsh/shell.nix delete mode 100644 nixosModules/apps/shells/zsh/default.nix create mode 100644 nixosModules/apps/shells/zsh/shell.nix diff --git a/nixosModules/apps/shells/app.nix b/nixosModules/apps/shells/app.nix index 6eab99e..66092fd 100644 --- a/nixosModules/apps/shells/app.nix +++ b/nixosModules/apps/shells/app.nix @@ -1,9 +1,29 @@ -{ ... }: +{ config, pkgs, lib, ... }: let + fs = lib.fileset; + shellFilter = {name, ...}: name == "shell.nix"; + shellImports = fs.toList (fs.fileFilter shellFilter ./.); + shellNames = map ( + path: let + splitPath = lib.strings.splitString "/" path; + splitPathLen = builtins.length splitPath; + in builtins.elemAt splitPath (splitPathLen - 2) + ) shellImports; +in { + imports = shellImports; -{ - imports = [ - ./fish - ./xonsh - ./zsh - ]; + options.shell = let + shellNameEnum = lib.types.enum shellNames; + in { + defaultShell = lib.mkOption { + type = shellNameEnum; + }; + enabledShells = lib.mkOption { + type = lib.types.listOf shellNameEnum; + }; + }; + + config = { + users.defaultUserShell = pkgs."${config.shell.defaultShell}"; + environment.shells = map (shell: pkgs."${shell}") config.shell.enabledShells; + }; } diff --git a/nixosModules/apps/shells/fish/default.nix b/nixosModules/apps/shells/fish/default.nix deleted file mode 100644 index 1e17b4e..0000000 --- a/nixosModules/apps/shells/fish/default.nix +++ /dev/null @@ -1,15 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - options = { - fish.enable = lib.mkEnableOption "Enables fish"; - fish.setDefault = lib.mkEnableOption - "Sets fish as the default user's shell"; - }; - - config = lib.mkIf config.fish.enable { - programs.fish.enable = true; - users.defaultUserShell = lib.mkIf config.fish.setDefault pkgs.fish; - environment.shells = with pkgs; [ fish ]; - }; -} diff --git a/nixosModules/apps/shells/fish/shell.nix b/nixosModules/apps/shells/fish/shell.nix new file mode 100644 index 0000000..93d7b4a --- /dev/null +++ b/nixosModules/apps/shells/fish/shell.nix @@ -0,0 +1,7 @@ +{ config, lib, ... }: + +{ + config = lib.mkIf (config.shell.defaultShell == "fish") { + programs.fish.enable = true; + }; +} diff --git a/nixosModules/apps/shells/xonsh/default.nix b/nixosModules/apps/shells/xonsh/default.nix deleted file mode 100644 index 4d4215c..0000000 --- a/nixosModules/apps/shells/xonsh/default.nix +++ /dev/null @@ -1,15 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - options = { - xonsh.enable = lib.mkEnableOption "Enables xonsh"; - xonsh.setDefault = lib.mkEnableOption - "Sets xonsh as the default user's shell"; - }; - - config = lib.mkIf config.xonsh.enable { - programs.xonsh.enable = true; - users.defaultUserShell = lib.mkIf config.xonsh.setDefault pkgs.xonsh; - environment.shells = with pkgs; [ xonsh ]; - }; -} diff --git a/nixosModules/apps/shells/xonsh/shell.nix b/nixosModules/apps/shells/xonsh/shell.nix new file mode 100644 index 0000000..2f39a02 --- /dev/null +++ b/nixosModules/apps/shells/xonsh/shell.nix @@ -0,0 +1,7 @@ +{ config, lib, ... }: + +{ + config = lib.mkIf (config.shell.defaultShell == "xonsh") { + programs.xonsh.enable = true; + }; +} diff --git a/nixosModules/apps/shells/zsh/default.nix b/nixosModules/apps/shells/zsh/default.nix deleted file mode 100644 index 93d33f7..0000000 --- a/nixosModules/apps/shells/zsh/default.nix +++ /dev/null @@ -1,20 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - options = { - zsh.enable = lib.mkEnableOption "Enables zsh"; - zsh.setDefault = lib.mkEnableOption "Sets zsh as the default user's shell"; - }; - - config = lib.mkIf config.zsh.enable { - programs.zsh = { - enable = true; - enableCompletion = true; - autosuggestions.enable = true; - histFile = "$HOME/.config/zsh/history"; - histSize = 2000; - }; - users.defaultUserShell = lib.mkIf config.zsh.setDefault pkgs.zsh; - environment.shells = with pkgs; [ zsh ]; - }; -} diff --git a/nixosModules/apps/shells/zsh/shell.nix b/nixosModules/apps/shells/zsh/shell.nix new file mode 100644 index 0000000..979878f --- /dev/null +++ b/nixosModules/apps/shells/zsh/shell.nix @@ -0,0 +1,13 @@ +{ config, lib, ... }: + +{ + config = lib.mkIf (config.shell.defaultShell == "zsh") { + programs.zsh = { + enable = true; + enableCompletion = true; + autosuggestions.enable = true; + histFile = "$HOME/.config/zsh/history"; + histSize = 2000; + }; + }; +} From e2e3598230edd019cf14e732a94f656301753128 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Fri, 29 Nov 2024 01:58:27 -0800 Subject: [PATCH 245/412] Jibril, update to match new host modules --- hosts/jibril/host.nix | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/hosts/jibril/host.nix b/hosts/jibril/host.nix index 6af5cab..e012354 100644 --- a/hosts/jibril/host.nix +++ b/hosts/jibril/host.nix @@ -28,7 +28,6 @@ tuigreet.enable = true; hyprland.enable = true; - librewolf.enable = true; - fish.enable = true; - fish.setDefault = true; + shell.enabledShells = [ "fish" ]; + shell.defaultShell = "fish"; } From c5b4191d66f9278eb8b02bd488efbff93ea71b83 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Fri, 29 Nov 2024 01:58:27 -0800 Subject: [PATCH 246/412] Jibril, update to match new host modules --- hosts/jibril/host.nix | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/hosts/jibril/host.nix b/hosts/jibril/host.nix index 6af5cab..e012354 100644 --- a/hosts/jibril/host.nix +++ b/hosts/jibril/host.nix @@ -28,7 +28,6 @@ tuigreet.enable = true; hyprland.enable = true; - librewolf.enable = true; - fish.enable = true; - fish.setDefault = true; + shell.enabledShells = [ "fish" ]; + shell.defaultShell = "fish"; } From 49cb3c949ca24cc956ad11412444de66f1faeb88 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Fri, 29 Nov 2024 02:20:20 -0800 Subject: [PATCH 247/412] hmServices, refactor extension, home to automatic --- .../{services/home => automatic}/default.nix | 2 +- hmModules/default.nix | 3 ++- hmModules/services/default.nix | 18 +++++------------- .../dunst/{default.nix => service.nix} | 0 .../manpages/{default.nix => service.nix} | 0 .../services/ssh/{default.nix => service.nix} | 0 .../timers/{default.nix => service.nix} | 2 +- .../trash/{default.nix => service.nix} | 2 +- .../services/wal/{default.nix => service.nix} | 2 +- .../widgets/{default.nix => service.nix} | 2 +- 10 files changed, 12 insertions(+), 19 deletions(-) rename hmModules/{services/home => automatic}/default.nix (97%) rename hmModules/services/dunst/{default.nix => service.nix} (100%) rename hmModules/services/manpages/{default.nix => service.nix} (100%) rename hmModules/services/ssh/{default.nix => service.nix} (100%) rename hmModules/services/timers/{default.nix => service.nix} (98%) rename hmModules/services/trash/{default.nix => service.nix} (84%) rename hmModules/services/wal/{default.nix => service.nix} (97%) rename hmModules/services/widgets/{default.nix => service.nix} (61%) diff --git a/hmModules/services/home/default.nix b/hmModules/automatic/default.nix similarity index 97% rename from hmModules/services/home/default.nix rename to hmModules/automatic/default.nix index 7bf691a..4c41659 100644 --- a/hmModules/services/home/default.nix +++ b/hmModules/automatic/default.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, ... }: +{ config, lib, ... }: { options = { diff --git a/hmModules/default.nix b/hmModules/default.nix index 3401811..b12278c 100644 --- a/hmModules/default.nix +++ b/hmModules/default.nix @@ -1,8 +1,9 @@ -{ config, pkgs, ... }: +{ ... }: { imports = [ ./apps + ./automatic ./services ]; } diff --git a/hmModules/services/default.nix b/hmModules/services/default.nix index 75bc088..5718b40 100644 --- a/hmModules/services/default.nix +++ b/hmModules/services/default.nix @@ -1,14 +1,6 @@ -{ config, pkgs, ... }: - -{ - imports = [ - ./dunst - ./home - ./manpages - ./ssh - ./timers - ./trash - ./wal - ./widgets - ]; +{ lib, ... }: let + fs = lib.fileset; + appFilter = {name, ...}: name == "service.nix"; +in { + imports = fs.toList (fs.fileFilter appFilter ./.); } diff --git a/hmModules/services/dunst/default.nix b/hmModules/services/dunst/service.nix similarity index 100% rename from hmModules/services/dunst/default.nix rename to hmModules/services/dunst/service.nix diff --git a/hmModules/services/manpages/default.nix b/hmModules/services/manpages/service.nix similarity index 100% rename from hmModules/services/manpages/default.nix rename to hmModules/services/manpages/service.nix diff --git a/hmModules/services/ssh/default.nix b/hmModules/services/ssh/service.nix similarity index 100% rename from hmModules/services/ssh/default.nix rename to hmModules/services/ssh/service.nix diff --git a/hmModules/services/timers/default.nix b/hmModules/services/timers/service.nix similarity index 98% rename from hmModules/services/timers/default.nix rename to hmModules/services/timers/service.nix index 548ab30..175b107 100644 --- a/hmModules/services/timers/default.nix +++ b/hmModules/services/timers/service.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, ... }: +{ config, lib, ... }: let rootPath = ./.; in { options.timer = { diff --git a/hmModules/services/trash/default.nix b/hmModules/services/trash/service.nix similarity index 84% rename from hmModules/services/trash/default.nix rename to hmModules/services/trash/service.nix index cf54f67..e5f1542 100644 --- a/hmModules/services/trash/default.nix +++ b/hmModules/services/trash/service.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, ... }: +{ pkgs, lib, ... }: { options.trash = { diff --git a/hmModules/services/wal/default.nix b/hmModules/services/wal/service.nix similarity index 97% rename from hmModules/services/wal/default.nix rename to hmModules/services/wal/service.nix index 41930fe..447db08 100644 --- a/hmModules/services/wal/default.nix +++ b/hmModules/services/wal/service.nix @@ -1,5 +1,5 @@ { config, pkgs, lib, ... }: -let rootPath = ./.; in + { options.colors = { enable = lib.mkEnableOption "Enables setting colors using wallust"; diff --git a/hmModules/services/widgets/default.nix b/hmModules/services/widgets/service.nix similarity index 61% rename from hmModules/services/widgets/default.nix rename to hmModules/services/widgets/service.nix index caebead..b679c72 100644 --- a/hmModules/services/widgets/default.nix +++ b/hmModules/services/widgets/service.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, ... }: +{ ... }: { imports = [ From 87568dfd985956279ac37da3b1c454f5c187b654 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Fri, 29 Nov 2024 02:20:20 -0800 Subject: [PATCH 248/412] hmServices, refactor extension, home to automatic --- .../{services/home => automatic}/default.nix | 2 +- hmModules/default.nix | 3 ++- hmModules/services/default.nix | 18 +++++------------- .../dunst/{default.nix => service.nix} | 0 .../manpages/{default.nix => service.nix} | 0 .../services/ssh/{default.nix => service.nix} | 0 .../timers/{default.nix => service.nix} | 2 +- .../trash/{default.nix => service.nix} | 2 +- .../services/wal/{default.nix => service.nix} | 2 +- .../widgets/{default.nix => service.nix} | 2 +- 10 files changed, 12 insertions(+), 19 deletions(-) rename hmModules/{services/home => automatic}/default.nix (97%) rename hmModules/services/dunst/{default.nix => service.nix} (100%) rename hmModules/services/manpages/{default.nix => service.nix} (100%) rename hmModules/services/ssh/{default.nix => service.nix} (100%) rename hmModules/services/timers/{default.nix => service.nix} (98%) rename hmModules/services/trash/{default.nix => service.nix} (84%) rename hmModules/services/wal/{default.nix => service.nix} (97%) rename hmModules/services/widgets/{default.nix => service.nix} (61%) diff --git a/hmModules/services/home/default.nix b/hmModules/automatic/default.nix similarity index 97% rename from hmModules/services/home/default.nix rename to hmModules/automatic/default.nix index 7bf691a..4c41659 100644 --- a/hmModules/services/home/default.nix +++ b/hmModules/automatic/default.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, ... }: +{ config, lib, ... }: { options = { diff --git a/hmModules/default.nix b/hmModules/default.nix index 3401811..b12278c 100644 --- a/hmModules/default.nix +++ b/hmModules/default.nix @@ -1,8 +1,9 @@ -{ config, pkgs, ... }: +{ ... }: { imports = [ ./apps + ./automatic ./services ]; } diff --git a/hmModules/services/default.nix b/hmModules/services/default.nix index 75bc088..5718b40 100644 --- a/hmModules/services/default.nix +++ b/hmModules/services/default.nix @@ -1,14 +1,6 @@ -{ config, pkgs, ... }: - -{ - imports = [ - ./dunst - ./home - ./manpages - ./ssh - ./timers - ./trash - ./wal - ./widgets - ]; +{ lib, ... }: let + fs = lib.fileset; + appFilter = {name, ...}: name == "service.nix"; +in { + imports = fs.toList (fs.fileFilter appFilter ./.); } diff --git a/hmModules/services/dunst/default.nix b/hmModules/services/dunst/service.nix similarity index 100% rename from hmModules/services/dunst/default.nix rename to hmModules/services/dunst/service.nix diff --git a/hmModules/services/manpages/default.nix b/hmModules/services/manpages/service.nix similarity index 100% rename from hmModules/services/manpages/default.nix rename to hmModules/services/manpages/service.nix diff --git a/hmModules/services/ssh/default.nix b/hmModules/services/ssh/service.nix similarity index 100% rename from hmModules/services/ssh/default.nix rename to hmModules/services/ssh/service.nix diff --git a/hmModules/services/timers/default.nix b/hmModules/services/timers/service.nix similarity index 98% rename from hmModules/services/timers/default.nix rename to hmModules/services/timers/service.nix index 548ab30..175b107 100644 --- a/hmModules/services/timers/default.nix +++ b/hmModules/services/timers/service.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, ... }: +{ config, lib, ... }: let rootPath = ./.; in { options.timer = { diff --git a/hmModules/services/trash/default.nix b/hmModules/services/trash/service.nix similarity index 84% rename from hmModules/services/trash/default.nix rename to hmModules/services/trash/service.nix index cf54f67..e5f1542 100644 --- a/hmModules/services/trash/default.nix +++ b/hmModules/services/trash/service.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, ... }: +{ pkgs, lib, ... }: { options.trash = { diff --git a/hmModules/services/wal/default.nix b/hmModules/services/wal/service.nix similarity index 97% rename from hmModules/services/wal/default.nix rename to hmModules/services/wal/service.nix index 41930fe..447db08 100644 --- a/hmModules/services/wal/default.nix +++ b/hmModules/services/wal/service.nix @@ -1,5 +1,5 @@ { config, pkgs, lib, ... }: -let rootPath = ./.; in + { options.colors = { enable = lib.mkEnableOption "Enables setting colors using wallust"; diff --git a/hmModules/services/widgets/default.nix b/hmModules/services/widgets/service.nix similarity index 61% rename from hmModules/services/widgets/default.nix rename to hmModules/services/widgets/service.nix index caebead..b679c72 100644 --- a/hmModules/services/widgets/default.nix +++ b/hmModules/services/widgets/service.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, ... }: +{ ... }: { imports = [ From 7cc650aea6011b616744474ceb2a6b3c4004b78f Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Fri, 29 Nov 2024 02:28:33 -0800 Subject: [PATCH 249/412] hmApps, refactor, clean up, break groups --- .../default.nix => alacritty/app.nix} | 2 +- .../beeper/default.nix => beeper/app.nix} | 0 hmModules/apps/chat/default.nix | 8 ------- hmModules/apps/default.nix | 24 ++++--------------- .../discord/default.nix => discord/app.nix} | 0 .../feh/default.nix => feh/app.nix} | 2 +- hmModules/apps/file-browsers/default.nix | 8 ------- .../{shells/fish/default.nix => fish/app.nix} | 2 +- .../fish/functions/git_prompt.fish | 0 .../apps/{shells => }/fish/functions/ssh.fish | 0 hmModules/apps/gimp/{default.nix => app.nix} | 0 hmModules/apps/git/{default.nix => app.nix} | 2 +- hmModules/apps/hypr/{default.nix => app.nix} | 0 .../kitty/default.nix => kitty/app.nix} | 2 +- .../lf/default.nix => lf/app.nix} | 0 hmModules/apps/{file-browsers => }/lf/icons | 0 .../apps/librewolf/{default.nix => app.nix} | 0 .../apps/lutris/{default.nix => app.nix} | 0 hmModules/apps/media-viewers/default.nix | 9 ------- .../mpv/default.nix => mpv/app.nix} | 0 .../apps/neovim/{default.nix => app.nix} | 0 .../nnn/default.nix => nnn/app.nix} | 2 +- .../nnn/nnn_fish_function.fish | 0 hmModules/apps/obs/{default.nix => app.nix} | 0 hmModules/apps/rofi/{default.nix => app.nix} | 0 hmModules/apps/shells/default.nix | 9 ------- hmModules/apps/terminal-emulators/default.nix | 8 ------- .../xonsh/default.nix => xonsh/app.nix} | 0 hmModules/apps/{shells => }/xonsh/rc.xsh | 0 .../zathura/default.nix => zathura/app.nix} | 2 +- .../apps/zoxide/{default.nix => app.nix} | 2 +- .../{shells/zsh/default.nix => zsh/app.nix} | 0 32 files changed, 13 insertions(+), 69 deletions(-) rename hmModules/apps/{terminal-emulators/alacritty/default.nix => alacritty/app.nix} (96%) rename hmModules/apps/{chat/beeper/default.nix => beeper/app.nix} (100%) delete mode 100644 hmModules/apps/chat/default.nix rename hmModules/apps/{chat/discord/default.nix => discord/app.nix} (100%) rename hmModules/apps/{media-viewers/feh/default.nix => feh/app.nix} (85%) delete mode 100644 hmModules/apps/file-browsers/default.nix rename hmModules/apps/{shells/fish/default.nix => fish/app.nix} (97%) rename hmModules/apps/{shells => }/fish/functions/git_prompt.fish (100%) rename hmModules/apps/{shells => }/fish/functions/ssh.fish (100%) rename hmModules/apps/gimp/{default.nix => app.nix} (100%) rename hmModules/apps/git/{default.nix => app.nix} (95%) rename hmModules/apps/hypr/{default.nix => app.nix} (100%) rename hmModules/apps/{terminal-emulators/kitty/default.nix => kitty/app.nix} (95%) rename hmModules/apps/{file-browsers/lf/default.nix => lf/app.nix} (100%) rename hmModules/apps/{file-browsers => }/lf/icons (100%) rename hmModules/apps/librewolf/{default.nix => app.nix} (100%) rename hmModules/apps/lutris/{default.nix => app.nix} (100%) delete mode 100644 hmModules/apps/media-viewers/default.nix rename hmModules/apps/{media-viewers/mpv/default.nix => mpv/app.nix} (100%) rename hmModules/apps/neovim/{default.nix => app.nix} (100%) rename hmModules/apps/{file-browsers/nnn/default.nix => nnn/app.nix} (94%) rename hmModules/apps/{file-browsers => }/nnn/nnn_fish_function.fish (100%) rename hmModules/apps/obs/{default.nix => app.nix} (100%) rename hmModules/apps/rofi/{default.nix => app.nix} (100%) delete mode 100644 hmModules/apps/shells/default.nix delete mode 100644 hmModules/apps/terminal-emulators/default.nix rename hmModules/apps/{shells/xonsh/default.nix => xonsh/app.nix} (100%) rename hmModules/apps/{shells => }/xonsh/rc.xsh (100%) rename hmModules/apps/{media-viewers/zathura/default.nix => zathura/app.nix} (86%) rename hmModules/apps/zoxide/{default.nix => app.nix} (89%) rename hmModules/apps/{shells/zsh/default.nix => zsh/app.nix} (100%) diff --git a/hmModules/apps/terminal-emulators/alacritty/default.nix b/hmModules/apps/alacritty/app.nix similarity index 96% rename from hmModules/apps/terminal-emulators/alacritty/default.nix rename to hmModules/apps/alacritty/app.nix index c172d63..9677b84 100644 --- a/hmModules/apps/terminal-emulators/alacritty/default.nix +++ b/hmModules/apps/alacritty/app.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, ... }: +{ config, lib, ... }: { options.alacritty = { diff --git a/hmModules/apps/chat/beeper/default.nix b/hmModules/apps/beeper/app.nix similarity index 100% rename from hmModules/apps/chat/beeper/default.nix rename to hmModules/apps/beeper/app.nix diff --git a/hmModules/apps/chat/default.nix b/hmModules/apps/chat/default.nix deleted file mode 100644 index 84ad4e5..0000000 --- a/hmModules/apps/chat/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ config, pkgs, ... }: - -{ - imports = [ - ./discord - ./beeper - ]; -} diff --git a/hmModules/apps/default.nix b/hmModules/apps/default.nix index ef1c1b2..cb0c66b 100644 --- a/hmModules/apps/default.nix +++ b/hmModules/apps/default.nix @@ -1,20 +1,6 @@ -{ config, pkgs, ... }: - -{ - imports = [ - ./chat - ./file-browsers - ./gimp - ./git - ./hypr - ./librewolf - ./lutris - ./media-viewers - ./neovim - ./obs - ./rofi - ./shells - ./terminal-emulators - ./zoxide - ]; +{ lib, ... }: let + fs = lib.fileset; + appFilter = {name, ...}: name == "app.nix"; +in { + imports = fs.toList (fs.fileFilter appFilter ./.); } diff --git a/hmModules/apps/chat/discord/default.nix b/hmModules/apps/discord/app.nix similarity index 100% rename from hmModules/apps/chat/discord/default.nix rename to hmModules/apps/discord/app.nix diff --git a/hmModules/apps/media-viewers/feh/default.nix b/hmModules/apps/feh/app.nix similarity index 85% rename from hmModules/apps/media-viewers/feh/default.nix rename to hmModules/apps/feh/app.nix index c1c4462..d109fe2 100644 --- a/hmModules/apps/media-viewers/feh/default.nix +++ b/hmModules/apps/feh/app.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, ... }: +{ config, lib, ... }: { options.feh = { diff --git a/hmModules/apps/file-browsers/default.nix b/hmModules/apps/file-browsers/default.nix deleted file mode 100644 index 118e357..0000000 --- a/hmModules/apps/file-browsers/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - imports = [ - ./lf - ./nnn - ]; -} diff --git a/hmModules/apps/shells/fish/default.nix b/hmModules/apps/fish/app.nix similarity index 97% rename from hmModules/apps/shells/fish/default.nix rename to hmModules/apps/fish/app.nix index 0fc1e53..0b00897 100644 --- a/hmModules/apps/shells/fish/default.nix +++ b/hmModules/apps/fish/app.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, ... }: +{ config, lib, ... }: let functionModule = with lib.types; submodule { options = { diff --git a/hmModules/apps/shells/fish/functions/git_prompt.fish b/hmModules/apps/fish/functions/git_prompt.fish similarity index 100% rename from hmModules/apps/shells/fish/functions/git_prompt.fish rename to hmModules/apps/fish/functions/git_prompt.fish diff --git a/hmModules/apps/shells/fish/functions/ssh.fish b/hmModules/apps/fish/functions/ssh.fish similarity index 100% rename from hmModules/apps/shells/fish/functions/ssh.fish rename to hmModules/apps/fish/functions/ssh.fish diff --git a/hmModules/apps/gimp/default.nix b/hmModules/apps/gimp/app.nix similarity index 100% rename from hmModules/apps/gimp/default.nix rename to hmModules/apps/gimp/app.nix diff --git a/hmModules/apps/git/default.nix b/hmModules/apps/git/app.nix similarity index 95% rename from hmModules/apps/git/default.nix rename to hmModules/apps/git/app.nix index e164daa..569ee14 100644 --- a/hmModules/apps/git/default.nix +++ b/hmModules/apps/git/app.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, ... }: +{ config, lib, ... }: { options.git = { diff --git a/hmModules/apps/hypr/default.nix b/hmModules/apps/hypr/app.nix similarity index 100% rename from hmModules/apps/hypr/default.nix rename to hmModules/apps/hypr/app.nix diff --git a/hmModules/apps/terminal-emulators/kitty/default.nix b/hmModules/apps/kitty/app.nix similarity index 95% rename from hmModules/apps/terminal-emulators/kitty/default.nix rename to hmModules/apps/kitty/app.nix index 23b8161..9d177b0 100644 --- a/hmModules/apps/terminal-emulators/kitty/default.nix +++ b/hmModules/apps/kitty/app.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, ... }: +{ config, lib, ... }: { options.kitty = { diff --git a/hmModules/apps/file-browsers/lf/default.nix b/hmModules/apps/lf/app.nix similarity index 100% rename from hmModules/apps/file-browsers/lf/default.nix rename to hmModules/apps/lf/app.nix diff --git a/hmModules/apps/file-browsers/lf/icons b/hmModules/apps/lf/icons similarity index 100% rename from hmModules/apps/file-browsers/lf/icons rename to hmModules/apps/lf/icons diff --git a/hmModules/apps/librewolf/default.nix b/hmModules/apps/librewolf/app.nix similarity index 100% rename from hmModules/apps/librewolf/default.nix rename to hmModules/apps/librewolf/app.nix diff --git a/hmModules/apps/lutris/default.nix b/hmModules/apps/lutris/app.nix similarity index 100% rename from hmModules/apps/lutris/default.nix rename to hmModules/apps/lutris/app.nix diff --git a/hmModules/apps/media-viewers/default.nix b/hmModules/apps/media-viewers/default.nix deleted file mode 100644 index 5b26119..0000000 --- a/hmModules/apps/media-viewers/default.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ config, pkgs, ... }: - -{ - imports = [ - ./feh - ./mpv - ./zathura - ]; -} diff --git a/hmModules/apps/media-viewers/mpv/default.nix b/hmModules/apps/mpv/app.nix similarity index 100% rename from hmModules/apps/media-viewers/mpv/default.nix rename to hmModules/apps/mpv/app.nix diff --git a/hmModules/apps/neovim/default.nix b/hmModules/apps/neovim/app.nix similarity index 100% rename from hmModules/apps/neovim/default.nix rename to hmModules/apps/neovim/app.nix diff --git a/hmModules/apps/file-browsers/nnn/default.nix b/hmModules/apps/nnn/app.nix similarity index 94% rename from hmModules/apps/file-browsers/nnn/default.nix rename to hmModules/apps/nnn/app.nix index 8900ee7..604c3f9 100644 --- a/hmModules/apps/file-browsers/nnn/default.nix +++ b/hmModules/apps/nnn/app.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, ... }: +{ config, lib, ... }: { options.nnn = { diff --git a/hmModules/apps/file-browsers/nnn/nnn_fish_function.fish b/hmModules/apps/nnn/nnn_fish_function.fish similarity index 100% rename from hmModules/apps/file-browsers/nnn/nnn_fish_function.fish rename to hmModules/apps/nnn/nnn_fish_function.fish diff --git a/hmModules/apps/obs/default.nix b/hmModules/apps/obs/app.nix similarity index 100% rename from hmModules/apps/obs/default.nix rename to hmModules/apps/obs/app.nix diff --git a/hmModules/apps/rofi/default.nix b/hmModules/apps/rofi/app.nix similarity index 100% rename from hmModules/apps/rofi/default.nix rename to hmModules/apps/rofi/app.nix diff --git a/hmModules/apps/shells/default.nix b/hmModules/apps/shells/default.nix deleted file mode 100644 index 03ae484..0000000 --- a/hmModules/apps/shells/default.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - imports = [ - ./fish - ./xonsh - ./zsh - ]; -} diff --git a/hmModules/apps/terminal-emulators/default.nix b/hmModules/apps/terminal-emulators/default.nix deleted file mode 100644 index ceb550b..0000000 --- a/hmModules/apps/terminal-emulators/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - imports = [ - ./kitty - ./alacritty - ]; -} diff --git a/hmModules/apps/shells/xonsh/default.nix b/hmModules/apps/xonsh/app.nix similarity index 100% rename from hmModules/apps/shells/xonsh/default.nix rename to hmModules/apps/xonsh/app.nix diff --git a/hmModules/apps/shells/xonsh/rc.xsh b/hmModules/apps/xonsh/rc.xsh similarity index 100% rename from hmModules/apps/shells/xonsh/rc.xsh rename to hmModules/apps/xonsh/rc.xsh diff --git a/hmModules/apps/media-viewers/zathura/default.nix b/hmModules/apps/zathura/app.nix similarity index 86% rename from hmModules/apps/media-viewers/zathura/default.nix rename to hmModules/apps/zathura/app.nix index 005c2b6..e4297aa 100644 --- a/hmModules/apps/media-viewers/zathura/default.nix +++ b/hmModules/apps/zathura/app.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, ... }: +{ config, lib, ... }: { options.zathura = { diff --git a/hmModules/apps/zoxide/default.nix b/hmModules/apps/zoxide/app.nix similarity index 89% rename from hmModules/apps/zoxide/default.nix rename to hmModules/apps/zoxide/app.nix index 859c69b..df50441 100644 --- a/hmModules/apps/zoxide/default.nix +++ b/hmModules/apps/zoxide/app.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, ... }: +{ config, lib, ... }: { options.zoxide = { diff --git a/hmModules/apps/shells/zsh/default.nix b/hmModules/apps/zsh/app.nix similarity index 100% rename from hmModules/apps/shells/zsh/default.nix rename to hmModules/apps/zsh/app.nix From e40177da9e1d29b4c7c9285bfc6dd1149ede9a70 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Fri, 29 Nov 2024 02:28:33 -0800 Subject: [PATCH 250/412] hmApps, refactor, clean up, break groups --- .../default.nix => alacritty/app.nix} | 2 +- .../beeper/default.nix => beeper/app.nix} | 0 hmModules/apps/chat/default.nix | 8 ------- hmModules/apps/default.nix | 24 ++++--------------- .../discord/default.nix => discord/app.nix} | 0 .../feh/default.nix => feh/app.nix} | 2 +- hmModules/apps/file-browsers/default.nix | 8 ------- .../{shells/fish/default.nix => fish/app.nix} | 2 +- .../fish/functions/git_prompt.fish | 0 .../apps/{shells => }/fish/functions/ssh.fish | 0 hmModules/apps/gimp/{default.nix => app.nix} | 0 hmModules/apps/git/{default.nix => app.nix} | 2 +- hmModules/apps/hypr/{default.nix => app.nix} | 0 .../kitty/default.nix => kitty/app.nix} | 2 +- .../lf/default.nix => lf/app.nix} | 0 hmModules/apps/{file-browsers => }/lf/icons | 0 .../apps/librewolf/{default.nix => app.nix} | 0 .../apps/lutris/{default.nix => app.nix} | 0 hmModules/apps/media-viewers/default.nix | 9 ------- .../mpv/default.nix => mpv/app.nix} | 0 .../apps/neovim/{default.nix => app.nix} | 0 .../nnn/default.nix => nnn/app.nix} | 2 +- .../nnn/nnn_fish_function.fish | 0 hmModules/apps/obs/{default.nix => app.nix} | 0 hmModules/apps/rofi/{default.nix => app.nix} | 0 hmModules/apps/shells/default.nix | 9 ------- hmModules/apps/terminal-emulators/default.nix | 8 ------- .../xonsh/default.nix => xonsh/app.nix} | 0 hmModules/apps/{shells => }/xonsh/rc.xsh | 0 .../zathura/default.nix => zathura/app.nix} | 2 +- .../apps/zoxide/{default.nix => app.nix} | 2 +- .../{shells/zsh/default.nix => zsh/app.nix} | 0 32 files changed, 13 insertions(+), 69 deletions(-) rename hmModules/apps/{terminal-emulators/alacritty/default.nix => alacritty/app.nix} (96%) rename hmModules/apps/{chat/beeper/default.nix => beeper/app.nix} (100%) delete mode 100644 hmModules/apps/chat/default.nix rename hmModules/apps/{chat/discord/default.nix => discord/app.nix} (100%) rename hmModules/apps/{media-viewers/feh/default.nix => feh/app.nix} (85%) delete mode 100644 hmModules/apps/file-browsers/default.nix rename hmModules/apps/{shells/fish/default.nix => fish/app.nix} (97%) rename hmModules/apps/{shells => }/fish/functions/git_prompt.fish (100%) rename hmModules/apps/{shells => }/fish/functions/ssh.fish (100%) rename hmModules/apps/gimp/{default.nix => app.nix} (100%) rename hmModules/apps/git/{default.nix => app.nix} (95%) rename hmModules/apps/hypr/{default.nix => app.nix} (100%) rename hmModules/apps/{terminal-emulators/kitty/default.nix => kitty/app.nix} (95%) rename hmModules/apps/{file-browsers/lf/default.nix => lf/app.nix} (100%) rename hmModules/apps/{file-browsers => }/lf/icons (100%) rename hmModules/apps/librewolf/{default.nix => app.nix} (100%) rename hmModules/apps/lutris/{default.nix => app.nix} (100%) delete mode 100644 hmModules/apps/media-viewers/default.nix rename hmModules/apps/{media-viewers/mpv/default.nix => mpv/app.nix} (100%) rename hmModules/apps/neovim/{default.nix => app.nix} (100%) rename hmModules/apps/{file-browsers/nnn/default.nix => nnn/app.nix} (94%) rename hmModules/apps/{file-browsers => }/nnn/nnn_fish_function.fish (100%) rename hmModules/apps/obs/{default.nix => app.nix} (100%) rename hmModules/apps/rofi/{default.nix => app.nix} (100%) delete mode 100644 hmModules/apps/shells/default.nix delete mode 100644 hmModules/apps/terminal-emulators/default.nix rename hmModules/apps/{shells/xonsh/default.nix => xonsh/app.nix} (100%) rename hmModules/apps/{shells => }/xonsh/rc.xsh (100%) rename hmModules/apps/{media-viewers/zathura/default.nix => zathura/app.nix} (86%) rename hmModules/apps/zoxide/{default.nix => app.nix} (89%) rename hmModules/apps/{shells/zsh/default.nix => zsh/app.nix} (100%) diff --git a/hmModules/apps/terminal-emulators/alacritty/default.nix b/hmModules/apps/alacritty/app.nix similarity index 96% rename from hmModules/apps/terminal-emulators/alacritty/default.nix rename to hmModules/apps/alacritty/app.nix index c172d63..9677b84 100644 --- a/hmModules/apps/terminal-emulators/alacritty/default.nix +++ b/hmModules/apps/alacritty/app.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, ... }: +{ config, lib, ... }: { options.alacritty = { diff --git a/hmModules/apps/chat/beeper/default.nix b/hmModules/apps/beeper/app.nix similarity index 100% rename from hmModules/apps/chat/beeper/default.nix rename to hmModules/apps/beeper/app.nix diff --git a/hmModules/apps/chat/default.nix b/hmModules/apps/chat/default.nix deleted file mode 100644 index 84ad4e5..0000000 --- a/hmModules/apps/chat/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ config, pkgs, ... }: - -{ - imports = [ - ./discord - ./beeper - ]; -} diff --git a/hmModules/apps/default.nix b/hmModules/apps/default.nix index ef1c1b2..cb0c66b 100644 --- a/hmModules/apps/default.nix +++ b/hmModules/apps/default.nix @@ -1,20 +1,6 @@ -{ config, pkgs, ... }: - -{ - imports = [ - ./chat - ./file-browsers - ./gimp - ./git - ./hypr - ./librewolf - ./lutris - ./media-viewers - ./neovim - ./obs - ./rofi - ./shells - ./terminal-emulators - ./zoxide - ]; +{ lib, ... }: let + fs = lib.fileset; + appFilter = {name, ...}: name == "app.nix"; +in { + imports = fs.toList (fs.fileFilter appFilter ./.); } diff --git a/hmModules/apps/chat/discord/default.nix b/hmModules/apps/discord/app.nix similarity index 100% rename from hmModules/apps/chat/discord/default.nix rename to hmModules/apps/discord/app.nix diff --git a/hmModules/apps/media-viewers/feh/default.nix b/hmModules/apps/feh/app.nix similarity index 85% rename from hmModules/apps/media-viewers/feh/default.nix rename to hmModules/apps/feh/app.nix index c1c4462..d109fe2 100644 --- a/hmModules/apps/media-viewers/feh/default.nix +++ b/hmModules/apps/feh/app.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, ... }: +{ config, lib, ... }: { options.feh = { diff --git a/hmModules/apps/file-browsers/default.nix b/hmModules/apps/file-browsers/default.nix deleted file mode 100644 index 118e357..0000000 --- a/hmModules/apps/file-browsers/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - imports = [ - ./lf - ./nnn - ]; -} diff --git a/hmModules/apps/shells/fish/default.nix b/hmModules/apps/fish/app.nix similarity index 97% rename from hmModules/apps/shells/fish/default.nix rename to hmModules/apps/fish/app.nix index 0fc1e53..0b00897 100644 --- a/hmModules/apps/shells/fish/default.nix +++ b/hmModules/apps/fish/app.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, ... }: +{ config, lib, ... }: let functionModule = with lib.types; submodule { options = { diff --git a/hmModules/apps/shells/fish/functions/git_prompt.fish b/hmModules/apps/fish/functions/git_prompt.fish similarity index 100% rename from hmModules/apps/shells/fish/functions/git_prompt.fish rename to hmModules/apps/fish/functions/git_prompt.fish diff --git a/hmModules/apps/shells/fish/functions/ssh.fish b/hmModules/apps/fish/functions/ssh.fish similarity index 100% rename from hmModules/apps/shells/fish/functions/ssh.fish rename to hmModules/apps/fish/functions/ssh.fish diff --git a/hmModules/apps/gimp/default.nix b/hmModules/apps/gimp/app.nix similarity index 100% rename from hmModules/apps/gimp/default.nix rename to hmModules/apps/gimp/app.nix diff --git a/hmModules/apps/git/default.nix b/hmModules/apps/git/app.nix similarity index 95% rename from hmModules/apps/git/default.nix rename to hmModules/apps/git/app.nix index e164daa..569ee14 100644 --- a/hmModules/apps/git/default.nix +++ b/hmModules/apps/git/app.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, ... }: +{ config, lib, ... }: { options.git = { diff --git a/hmModules/apps/hypr/default.nix b/hmModules/apps/hypr/app.nix similarity index 100% rename from hmModules/apps/hypr/default.nix rename to hmModules/apps/hypr/app.nix diff --git a/hmModules/apps/terminal-emulators/kitty/default.nix b/hmModules/apps/kitty/app.nix similarity index 95% rename from hmModules/apps/terminal-emulators/kitty/default.nix rename to hmModules/apps/kitty/app.nix index 23b8161..9d177b0 100644 --- a/hmModules/apps/terminal-emulators/kitty/default.nix +++ b/hmModules/apps/kitty/app.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, ... }: +{ config, lib, ... }: { options.kitty = { diff --git a/hmModules/apps/file-browsers/lf/default.nix b/hmModules/apps/lf/app.nix similarity index 100% rename from hmModules/apps/file-browsers/lf/default.nix rename to hmModules/apps/lf/app.nix diff --git a/hmModules/apps/file-browsers/lf/icons b/hmModules/apps/lf/icons similarity index 100% rename from hmModules/apps/file-browsers/lf/icons rename to hmModules/apps/lf/icons diff --git a/hmModules/apps/librewolf/default.nix b/hmModules/apps/librewolf/app.nix similarity index 100% rename from hmModules/apps/librewolf/default.nix rename to hmModules/apps/librewolf/app.nix diff --git a/hmModules/apps/lutris/default.nix b/hmModules/apps/lutris/app.nix similarity index 100% rename from hmModules/apps/lutris/default.nix rename to hmModules/apps/lutris/app.nix diff --git a/hmModules/apps/media-viewers/default.nix b/hmModules/apps/media-viewers/default.nix deleted file mode 100644 index 5b26119..0000000 --- a/hmModules/apps/media-viewers/default.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ config, pkgs, ... }: - -{ - imports = [ - ./feh - ./mpv - ./zathura - ]; -} diff --git a/hmModules/apps/media-viewers/mpv/default.nix b/hmModules/apps/mpv/app.nix similarity index 100% rename from hmModules/apps/media-viewers/mpv/default.nix rename to hmModules/apps/mpv/app.nix diff --git a/hmModules/apps/neovim/default.nix b/hmModules/apps/neovim/app.nix similarity index 100% rename from hmModules/apps/neovim/default.nix rename to hmModules/apps/neovim/app.nix diff --git a/hmModules/apps/file-browsers/nnn/default.nix b/hmModules/apps/nnn/app.nix similarity index 94% rename from hmModules/apps/file-browsers/nnn/default.nix rename to hmModules/apps/nnn/app.nix index 8900ee7..604c3f9 100644 --- a/hmModules/apps/file-browsers/nnn/default.nix +++ b/hmModules/apps/nnn/app.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, ... }: +{ config, lib, ... }: { options.nnn = { diff --git a/hmModules/apps/file-browsers/nnn/nnn_fish_function.fish b/hmModules/apps/nnn/nnn_fish_function.fish similarity index 100% rename from hmModules/apps/file-browsers/nnn/nnn_fish_function.fish rename to hmModules/apps/nnn/nnn_fish_function.fish diff --git a/hmModules/apps/obs/default.nix b/hmModules/apps/obs/app.nix similarity index 100% rename from hmModules/apps/obs/default.nix rename to hmModules/apps/obs/app.nix diff --git a/hmModules/apps/rofi/default.nix b/hmModules/apps/rofi/app.nix similarity index 100% rename from hmModules/apps/rofi/default.nix rename to hmModules/apps/rofi/app.nix diff --git a/hmModules/apps/shells/default.nix b/hmModules/apps/shells/default.nix deleted file mode 100644 index 03ae484..0000000 --- a/hmModules/apps/shells/default.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - imports = [ - ./fish - ./xonsh - ./zsh - ]; -} diff --git a/hmModules/apps/terminal-emulators/default.nix b/hmModules/apps/terminal-emulators/default.nix deleted file mode 100644 index ceb550b..0000000 --- a/hmModules/apps/terminal-emulators/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - imports = [ - ./kitty - ./alacritty - ]; -} diff --git a/hmModules/apps/shells/xonsh/default.nix b/hmModules/apps/xonsh/app.nix similarity index 100% rename from hmModules/apps/shells/xonsh/default.nix rename to hmModules/apps/xonsh/app.nix diff --git a/hmModules/apps/shells/xonsh/rc.xsh b/hmModules/apps/xonsh/rc.xsh similarity index 100% rename from hmModules/apps/shells/xonsh/rc.xsh rename to hmModules/apps/xonsh/rc.xsh diff --git a/hmModules/apps/media-viewers/zathura/default.nix b/hmModules/apps/zathura/app.nix similarity index 86% rename from hmModules/apps/media-viewers/zathura/default.nix rename to hmModules/apps/zathura/app.nix index 005c2b6..e4297aa 100644 --- a/hmModules/apps/media-viewers/zathura/default.nix +++ b/hmModules/apps/zathura/app.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, ... }: +{ config, lib, ... }: { options.zathura = { diff --git a/hmModules/apps/zoxide/default.nix b/hmModules/apps/zoxide/app.nix similarity index 89% rename from hmModules/apps/zoxide/default.nix rename to hmModules/apps/zoxide/app.nix index 859c69b..df50441 100644 --- a/hmModules/apps/zoxide/default.nix +++ b/hmModules/apps/zoxide/app.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, ... }: +{ config, lib, ... }: { options.zoxide = { diff --git a/hmModules/apps/shells/zsh/default.nix b/hmModules/apps/zsh/app.nix similarity index 100% rename from hmModules/apps/shells/zsh/default.nix rename to hmModules/apps/zsh/app.nix From 5605c829b64d036059c9bf083924e86b1c49fa86 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sun, 1 Dec 2024 00:18:43 -0800 Subject: [PATCH 251/412] hmAuto, set username based on filedir --- hmModules/automatic/default.nix | 18 ++++++++++++------ hosts/jibril/users/pan/user.nix | 6 ------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/hmModules/automatic/default.nix b/hmModules/automatic/default.nix index 4c41659..f974b21 100644 --- a/hmModules/automatic/default.nix +++ b/hmModules/automatic/default.nix @@ -1,4 +1,4 @@ -{ config, lib, ... }: +{ config, lib, usernameAtHostname, ... }: { options = { @@ -9,10 +9,19 @@ browser = lib.mkOption { default = ""; }; }; }; - - config = { + config = let + st = lib.strings; + in { # Let Home Manager install and manage itself. programs.home-manager.enable = true; + nixpkgs.config.allowUnfree = true; + home.stateVersion = "23.05"; + + home = { + username = builtins.elemAt (st.splitString "@" usernameAtHostname) 0; + homeDirectory = "/home/" + config.home.username; + packages = config.extraPkgs; + }; home.sessionVariables = { GRADLE_USER_HOME = "${config.xdg.dataHome}/gradle"; @@ -36,8 +45,5 @@ download = "${home}/dwn"; }; }; - - home.homeDirectory = "/home/" + config.home.username; - home.packages = config.extraPkgs; }; } diff --git a/hosts/jibril/users/pan/user.nix b/hosts/jibril/users/pan/user.nix index f27a420..ea6c1de 100644 --- a/hosts/jibril/users/pan/user.nix +++ b/hosts/jibril/users/pan/user.nix @@ -1,10 +1,6 @@ { config, ... }: { - home.username = "pan"; - nixpkgs.config.allowUnfree = true; - home.stateVersion = "23.05"; - hypr.enable = true; hypr.monitor = { details = [ @@ -103,8 +99,6 @@ ]; zoxide.enable = true; - gimp.enable = true; - beeper.enable = true; discord.enable = true; } From 183d51f601eaa4a9cb78933243da8ed0b27068db Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sun, 1 Dec 2024 00:18:43 -0800 Subject: [PATCH 252/412] hmAuto, set username based on filedir --- hmModules/automatic/default.nix | 18 ++++++++++++------ hosts/jibril/users/pan/user.nix | 6 ------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/hmModules/automatic/default.nix b/hmModules/automatic/default.nix index 4c41659..f974b21 100644 --- a/hmModules/automatic/default.nix +++ b/hmModules/automatic/default.nix @@ -1,4 +1,4 @@ -{ config, lib, ... }: +{ config, lib, usernameAtHostname, ... }: { options = { @@ -9,10 +9,19 @@ browser = lib.mkOption { default = ""; }; }; }; - - config = { + config = let + st = lib.strings; + in { # Let Home Manager install and manage itself. programs.home-manager.enable = true; + nixpkgs.config.allowUnfree = true; + home.stateVersion = "23.05"; + + home = { + username = builtins.elemAt (st.splitString "@" usernameAtHostname) 0; + homeDirectory = "/home/" + config.home.username; + packages = config.extraPkgs; + }; home.sessionVariables = { GRADLE_USER_HOME = "${config.xdg.dataHome}/gradle"; @@ -36,8 +45,5 @@ download = "${home}/dwn"; }; }; - - home.homeDirectory = "/home/" + config.home.username; - home.packages = config.extraPkgs; }; } diff --git a/hosts/jibril/users/pan/user.nix b/hosts/jibril/users/pan/user.nix index f27a420..ea6c1de 100644 --- a/hosts/jibril/users/pan/user.nix +++ b/hosts/jibril/users/pan/user.nix @@ -1,10 +1,6 @@ { config, ... }: { - home.username = "pan"; - nixpkgs.config.allowUnfree = true; - home.stateVersion = "23.05"; - hypr.enable = true; hypr.monitor = { details = [ @@ -103,8 +99,6 @@ ]; zoxide.enable = true; - gimp.enable = true; - beeper.enable = true; discord.enable = true; } From 0f7638ad401c1e800cce174e002e4a8b0c3b1fdf Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 24 Dec 2024 17:06:05 -0800 Subject: [PATCH 253/412] OS, add Non-EFI Support --- nixosModules/automatic/default.nix | 98 ++++++++++++++++-------------- 1 file changed, 53 insertions(+), 45 deletions(-) diff --git a/nixosModules/automatic/default.nix b/nixosModules/automatic/default.nix index a61ce29..007bfc3 100644 --- a/nixosModules/automatic/default.nix +++ b/nixosModules/automatic/default.nix @@ -4,60 +4,68 @@ options = { system.timezone = lib.mkOption { default = "America/Los_Angeles"; }; system.extraFonts = lib.mkOption { default = []; }; + system.isNonEFI = lib.mkEnableOption + "Enable if you are running a non-EFI system"; system.users.bigWheels = lib.mkOption { default = []; }; }; + + config = lib.mkMerge [ + (lib.mkIf config.system.isNonEFI { + boot.loader.grub.enable = false; + boot.loader.generic-extlinux-compatible.enable = true; + }) + (lib.mkIf (!config.system.isNonEFI) { + boot.kernelPackages = pkgs.linuxPackages_latest; + boot.loader.systemd-boot.enable = true; + boot.loader.timeout = 1; + boot.loader.efi.canTouchEfiVariables = true; + }) + { + networking.hostName = hostname; + system.stateVersion = "23.05"; - config = { - # Use the systemd-boot EFI boot loader. - boot.kernelPackages = pkgs.linuxPackages_latest; - boot.loader.systemd-boot.enable = true; - boot.loader.timeout = 1; - boot.loader.efi.canTouchEfiVariables = true; + time.timeZone = config.system.timezone; + i18n.defaultLocale = "en_US.UTF-8"; - networking.hostName = hostname; - system.stateVersion = "23.05"; + # Packages & Default Packages + nixpkgs.config.allowUnfree = true; + environment.systemPackages = with pkgs; [ + git + neovim + nnn + xdg-user-dirs + ]; - time.timeZone = config.system.timezone; - i18n.defaultLocale = "en_US.UTF-8"; + # XDG Compliance + nix.settings.use-xdg-base-directories = true; - # Packages & Default Packages - nixpkgs.config.allowUnfree = true; - environment.systemPackages = with pkgs; [ - git - neovim - nnn - xdg-user-dirs - ]; - - # XDG Compliance - nix.settings.use-xdg-base-directories = true; - - users = { - users = builtins.listToAttrs (map ( - user: { - name = user; - value = { + users = { + users = builtins.listToAttrs (map ( + user: { name = user; - isNormalUser = true; - extraGroups = [ "network" ]; + value = { + name = user; + isNormalUser = true; + extraGroups = [ "network" ]; + }; + } + ) usernameList); + groups = { + wheel = { + members = config.system.users.bigWheels; }; - } - ) usernameList); - groups = { - wheel = { - members = config.system.users.bigWheels; + network = { }; }; - network = { }; }; - }; - fonts = { - enableDefaultPackages = true; - packages = with pkgs; [ - cascadia-code - (nerdfonts.override { fonts = [ "CascadiaCode" ]; }) - source-han-sans # Pan-CJK font - ] ++ config.system.extraFonts; - }; - }; + fonts = { + enableDefaultPackages = true; + packages = with pkgs; [ + cascadia-code + (nerdfonts.override { fonts = [ "CascadiaCode" ]; }) + source-han-sans # Pan-CJK font + ] ++ config.system.extraFonts; + }; + } + ]; } From f9611c32df225c30df6effed955a026df2feb41b Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 24 Dec 2024 17:06:05 -0800 Subject: [PATCH 254/412] OS, add Non-EFI Support --- nixosModules/automatic/default.nix | 98 ++++++++++++++++-------------- 1 file changed, 53 insertions(+), 45 deletions(-) diff --git a/nixosModules/automatic/default.nix b/nixosModules/automatic/default.nix index a61ce29..007bfc3 100644 --- a/nixosModules/automatic/default.nix +++ b/nixosModules/automatic/default.nix @@ -4,60 +4,68 @@ options = { system.timezone = lib.mkOption { default = "America/Los_Angeles"; }; system.extraFonts = lib.mkOption { default = []; }; + system.isNonEFI = lib.mkEnableOption + "Enable if you are running a non-EFI system"; system.users.bigWheels = lib.mkOption { default = []; }; }; + + config = lib.mkMerge [ + (lib.mkIf config.system.isNonEFI { + boot.loader.grub.enable = false; + boot.loader.generic-extlinux-compatible.enable = true; + }) + (lib.mkIf (!config.system.isNonEFI) { + boot.kernelPackages = pkgs.linuxPackages_latest; + boot.loader.systemd-boot.enable = true; + boot.loader.timeout = 1; + boot.loader.efi.canTouchEfiVariables = true; + }) + { + networking.hostName = hostname; + system.stateVersion = "23.05"; - config = { - # Use the systemd-boot EFI boot loader. - boot.kernelPackages = pkgs.linuxPackages_latest; - boot.loader.systemd-boot.enable = true; - boot.loader.timeout = 1; - boot.loader.efi.canTouchEfiVariables = true; + time.timeZone = config.system.timezone; + i18n.defaultLocale = "en_US.UTF-8"; - networking.hostName = hostname; - system.stateVersion = "23.05"; + # Packages & Default Packages + nixpkgs.config.allowUnfree = true; + environment.systemPackages = with pkgs; [ + git + neovim + nnn + xdg-user-dirs + ]; - time.timeZone = config.system.timezone; - i18n.defaultLocale = "en_US.UTF-8"; + # XDG Compliance + nix.settings.use-xdg-base-directories = true; - # Packages & Default Packages - nixpkgs.config.allowUnfree = true; - environment.systemPackages = with pkgs; [ - git - neovim - nnn - xdg-user-dirs - ]; - - # XDG Compliance - nix.settings.use-xdg-base-directories = true; - - users = { - users = builtins.listToAttrs (map ( - user: { - name = user; - value = { + users = { + users = builtins.listToAttrs (map ( + user: { name = user; - isNormalUser = true; - extraGroups = [ "network" ]; + value = { + name = user; + isNormalUser = true; + extraGroups = [ "network" ]; + }; + } + ) usernameList); + groups = { + wheel = { + members = config.system.users.bigWheels; }; - } - ) usernameList); - groups = { - wheel = { - members = config.system.users.bigWheels; + network = { }; }; - network = { }; }; - }; - fonts = { - enableDefaultPackages = true; - packages = with pkgs; [ - cascadia-code - (nerdfonts.override { fonts = [ "CascadiaCode" ]; }) - source-han-sans # Pan-CJK font - ] ++ config.system.extraFonts; - }; - }; + fonts = { + enableDefaultPackages = true; + packages = with pkgs; [ + cascadia-code + (nerdfonts.override { fonts = [ "CascadiaCode" ]; }) + source-han-sans # Pan-CJK font + ] ++ config.system.extraFonts; + }; + } + ]; } From 17c7fde05f345231482bfdab40ed1cd5775790ca Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 8 Jan 2025 13:39:56 -0800 Subject: [PATCH 255/412] OS, add basic tailscale app --- hosts/jibril/host.nix | 3 +++ nixosModules/apps/tailscale/app.nix | 11 +++++++++++ 2 files changed, 14 insertions(+) create mode 100644 nixosModules/apps/tailscale/app.nix diff --git a/hosts/jibril/host.nix b/hosts/jibril/host.nix index e012354..2778816 100644 --- a/hosts/jibril/host.nix +++ b/hosts/jibril/host.nix @@ -27,7 +27,10 @@ tuigreet.enable = true; hyprland.enable = true; + tailscale.enable = true; shell.enabledShells = [ "fish" ]; shell.defaultShell = "fish"; + + steam.enable = true; } diff --git a/nixosModules/apps/tailscale/app.nix b/nixosModules/apps/tailscale/app.nix new file mode 100644 index 0000000..37dcc9f --- /dev/null +++ b/nixosModules/apps/tailscale/app.nix @@ -0,0 +1,11 @@ +{ config, lib, ... }: + +{ + options.tailscale = { + enable = lib.mkEnableOption "Enables tailscale"; + }; + + config = lib.mkIf config.tailscale.enable { + services.tailscale.enable = true; + }; +} From 62fe907e91a33e1f2d57b5af0acef6bffb9b633b Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 8 Jan 2025 13:39:56 -0800 Subject: [PATCH 256/412] OS, add basic tailscale app --- hosts/jibril/host.nix | 3 +++ nixosModules/apps/tailscale/app.nix | 11 +++++++++++ 2 files changed, 14 insertions(+) create mode 100644 nixosModules/apps/tailscale/app.nix diff --git a/hosts/jibril/host.nix b/hosts/jibril/host.nix index e012354..2778816 100644 --- a/hosts/jibril/host.nix +++ b/hosts/jibril/host.nix @@ -27,7 +27,10 @@ tuigreet.enable = true; hyprland.enable = true; + tailscale.enable = true; shell.enabledShells = [ "fish" ]; shell.defaultShell = "fish"; + + steam.enable = true; } diff --git a/nixosModules/apps/tailscale/app.nix b/nixosModules/apps/tailscale/app.nix new file mode 100644 index 0000000..37dcc9f --- /dev/null +++ b/nixosModules/apps/tailscale/app.nix @@ -0,0 +1,11 @@ +{ config, lib, ... }: + +{ + options.tailscale = { + enable = lib.mkEnableOption "Enables tailscale"; + }; + + config = lib.mkIf config.tailscale.enable { + services.tailscale.enable = true; + }; +} From dfbe5210c476ca9b4671da7214c1dedd399c3761 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 9 Jan 2025 09:35:51 -0800 Subject: [PATCH 257/412] Neovim, go lang, remore rustacean lsp call --- hmModules/apps/neovim/app.nix | 8 +++++++- hmModules/apps/neovim/plugin/lsp.nix | 8 ++++---- hmModules/apps/neovim/plugin/treesitter.nix | 1 + hosts/jibril/users/pan/user.nix | 1 + 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/hmModules/apps/neovim/app.nix b/hmModules/apps/neovim/app.nix index 3557f90..e4ef676 100644 --- a/hmModules/apps/neovim/app.nix +++ b/hmModules/apps/neovim/app.nix @@ -5,6 +5,7 @@ enable = lib.mkEnableOption "Enables neovim"; languages = { c.enable = lib.mkEnableOption "Enables c support"; + go.enable = lib.mkEnableOption "Enables go support"; nix.enable = lib.mkEnableOption "Enables nix support"; rust.enable = lib.mkEnableOption "Enables rust support"; }; @@ -48,6 +49,7 @@ extraPackages = with pkgs; [ (lib.mkIf config.neovim.languages.c.enable libclang) + (lib.mkIf config.neovim.languages.go.enable gopls) (lib.mkIf config.neovim.languages.nix.enable nil) (lib.mkIf config.neovim.languages.rust.enable rust-analyzer) ]; @@ -96,6 +98,10 @@ rust-pkg = lopts cfgl.rust.enable (with pkgs.vimPlugins; [ rustaceanvim ]); + + go-pkg = lopts cfgl.go.enable (with pkgs.vimPlugins; [ + go-nvim + ]); wiki = lopts cfgp.wiki.enable (with pkgs.vimPlugins; [ { @@ -114,7 +120,7 @@ } ]); in comments ++ fugitive ++ luasnip-pkg ++ lualine ++ - nix-pkg ++ rust-pkg ++ wiki; + nix-pkg ++ rust-pkg ++ go-pkg ++ wiki; }; }; } diff --git a/hmModules/apps/neovim/plugin/lsp.nix b/hmModules/apps/neovim/plugin/lsp.nix index bd06204..f5a66c5 100644 --- a/hmModules/apps/neovim/plugin/lsp.nix +++ b/hmModules/apps/neovim/plugin/lsp.nix @@ -35,12 +35,12 @@ end local capabilities = vim.lsp.protocol.make_client_capabilities() - '' + lib.strings.optionalString cfgl.nix.enable '' - require('lspconfig').nil_ls.setup {} '' + lib.strings.optionalString cfgl.c.enable '' require('lspconfig').clangd.setup {} - '' + lib.strings.optionalString cfgl.rust.enable '' - require('lspconfig').rustaceanvim.setup {} + '' + lib.strings.optionalString cfgl.go.enable '' + require('lspconfig').gopls.setup {} + '' + lib.strings.optionalString cfgl.nix.enable '' + require('lspconfig').nil_ls.setup {} ''; in with pkgs.vimPlugins; [ { diff --git a/hmModules/apps/neovim/plugin/treesitter.nix b/hmModules/apps/neovim/plugin/treesitter.nix index 43b2d28..d1e9fe3 100644 --- a/hmModules/apps/neovim/plugin/treesitter.nix +++ b/hmModules/apps/neovim/plugin/treesitter.nix @@ -22,6 +22,7 @@ in { # dynamically. For not just have them always loaded regardless of config treeplugs = p: [ p.tree-sitter-c + p.tree-sitter-go p.tree-sitter-nix p.tree-sitter-rust ]; diff --git a/hosts/jibril/users/pan/user.nix b/hosts/jibril/users/pan/user.nix index ea6c1de..c534af4 100644 --- a/hosts/jibril/users/pan/user.nix +++ b/hosts/jibril/users/pan/user.nix @@ -72,6 +72,7 @@ neovim.enable = true; neovim.languages = { c.enable = true; + go.enable = true; nix.enable = true; rust.enable = true; }; From 547dd01e34324b638c6d68dcd8d4da66eb4e79a7 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 9 Jan 2025 09:35:51 -0800 Subject: [PATCH 258/412] Neovim, go lang, remore rustacean lsp call --- hmModules/apps/neovim/app.nix | 8 +++++++- hmModules/apps/neovim/plugin/lsp.nix | 8 ++++---- hmModules/apps/neovim/plugin/treesitter.nix | 1 + hosts/jibril/users/pan/user.nix | 1 + 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/hmModules/apps/neovim/app.nix b/hmModules/apps/neovim/app.nix index 3557f90..e4ef676 100644 --- a/hmModules/apps/neovim/app.nix +++ b/hmModules/apps/neovim/app.nix @@ -5,6 +5,7 @@ enable = lib.mkEnableOption "Enables neovim"; languages = { c.enable = lib.mkEnableOption "Enables c support"; + go.enable = lib.mkEnableOption "Enables go support"; nix.enable = lib.mkEnableOption "Enables nix support"; rust.enable = lib.mkEnableOption "Enables rust support"; }; @@ -48,6 +49,7 @@ extraPackages = with pkgs; [ (lib.mkIf config.neovim.languages.c.enable libclang) + (lib.mkIf config.neovim.languages.go.enable gopls) (lib.mkIf config.neovim.languages.nix.enable nil) (lib.mkIf config.neovim.languages.rust.enable rust-analyzer) ]; @@ -96,6 +98,10 @@ rust-pkg = lopts cfgl.rust.enable (with pkgs.vimPlugins; [ rustaceanvim ]); + + go-pkg = lopts cfgl.go.enable (with pkgs.vimPlugins; [ + go-nvim + ]); wiki = lopts cfgp.wiki.enable (with pkgs.vimPlugins; [ { @@ -114,7 +120,7 @@ } ]); in comments ++ fugitive ++ luasnip-pkg ++ lualine ++ - nix-pkg ++ rust-pkg ++ wiki; + nix-pkg ++ rust-pkg ++ go-pkg ++ wiki; }; }; } diff --git a/hmModules/apps/neovim/plugin/lsp.nix b/hmModules/apps/neovim/plugin/lsp.nix index bd06204..f5a66c5 100644 --- a/hmModules/apps/neovim/plugin/lsp.nix +++ b/hmModules/apps/neovim/plugin/lsp.nix @@ -35,12 +35,12 @@ end local capabilities = vim.lsp.protocol.make_client_capabilities() - '' + lib.strings.optionalString cfgl.nix.enable '' - require('lspconfig').nil_ls.setup {} '' + lib.strings.optionalString cfgl.c.enable '' require('lspconfig').clangd.setup {} - '' + lib.strings.optionalString cfgl.rust.enable '' - require('lspconfig').rustaceanvim.setup {} + '' + lib.strings.optionalString cfgl.go.enable '' + require('lspconfig').gopls.setup {} + '' + lib.strings.optionalString cfgl.nix.enable '' + require('lspconfig').nil_ls.setup {} ''; in with pkgs.vimPlugins; [ { diff --git a/hmModules/apps/neovim/plugin/treesitter.nix b/hmModules/apps/neovim/plugin/treesitter.nix index 43b2d28..d1e9fe3 100644 --- a/hmModules/apps/neovim/plugin/treesitter.nix +++ b/hmModules/apps/neovim/plugin/treesitter.nix @@ -22,6 +22,7 @@ in { # dynamically. For not just have them always loaded regardless of config treeplugs = p: [ p.tree-sitter-c + p.tree-sitter-go p.tree-sitter-nix p.tree-sitter-rust ]; diff --git a/hosts/jibril/users/pan/user.nix b/hosts/jibril/users/pan/user.nix index ea6c1de..c534af4 100644 --- a/hosts/jibril/users/pan/user.nix +++ b/hosts/jibril/users/pan/user.nix @@ -72,6 +72,7 @@ neovim.enable = true; neovim.languages = { c.enable = true; + go.enable = true; nix.enable = true; rust.enable = true; }; From f7ff7efe7c21e5510e599fe6c656be016a3c6dc1 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 9 Jan 2025 10:04:32 -0800 Subject: [PATCH 259/412] Neovim, add catppuccin theme --- hmModules/apps/neovim/app.nix | 34 +++++++++++++++++++++++++++++---- hosts/jibril/users/pan/user.nix | 1 + 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/hmModules/apps/neovim/app.nix b/hmModules/apps/neovim/app.nix index e4ef676..4a1ddfd 100644 --- a/hmModules/apps/neovim/app.nix +++ b/hmModules/apps/neovim/app.nix @@ -9,6 +9,9 @@ nix.enable = lib.mkEnableOption "Enables nix support"; rust.enable = lib.mkEnableOption "Enables rust support"; }; + themes = { + catppuccin.enable = lib.mkEnableOption "Enables catppuccin theme"; + }; plugins = { comments.enable = lib.mkEnableOption "Enables nvim-comment"; fugitive.enable = lib.mkEnableOption "Enables git-fugitive"; @@ -59,6 +62,7 @@ lopts = lib.lists.optionals; cfgp = config.neovim.plugins; cfgl = config.neovim.languages; + cfgt = config.neovim.themes; comments = lopts cfgp.comments.enable (with pkgs.vimPlugins; [ { @@ -83,9 +87,14 @@ plugin = lualine-nvim; type = "lua"; config = '' - require("lualine").setup({ - icons_enabled = true, - }) + require("lualine").setup { + options = { + icons_enabled = true, + '' + lib.strings.optionalString cfgt.catppuccin.enable '' + theme = "catppuccin" + '' + '' + } + } ''; } nvim-web-devicons @@ -103,6 +112,23 @@ go-nvim ]); + catppuccin-pkg = lopts cfgt.catppuccin.enable (with pkgs.vimPlugins; [ + { + plugin = catppuccin-nvim; + type = "lua"; + config = '' + vim.cmd.colorscheme "catppuccin-mocha" + require('catppuccin').setup({ + integrations = { + '' + lib.strings.optionalString cfgp.wiki.enable '' + vimwiki = true + '' + '' + } + }) + ''; + } + ]); + wiki = lopts cfgp.wiki.enable (with pkgs.vimPlugins; [ { plugin = vimwiki; @@ -120,7 +146,7 @@ } ]); in comments ++ fugitive ++ luasnip-pkg ++ lualine ++ - nix-pkg ++ rust-pkg ++ go-pkg ++ wiki; + nix-pkg ++ rust-pkg ++ go-pkg ++ wiki ++ catppuccin-pkg; }; }; } diff --git a/hosts/jibril/users/pan/user.nix b/hosts/jibril/users/pan/user.nix index c534af4..02195dd 100644 --- a/hosts/jibril/users/pan/user.nix +++ b/hosts/jibril/users/pan/user.nix @@ -89,6 +89,7 @@ treesitter.enable = true; wiki.enable = true; }; + neovim.themes.catppuccin.enable = true; lf.enable = true; lf.hiddenfiles = [ From e4d82452034a17c690e8fd5e9582e15a84fdd18d Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 9 Jan 2025 10:04:32 -0800 Subject: [PATCH 260/412] Neovim, add catppuccin theme --- hmModules/apps/neovim/app.nix | 34 +++++++++++++++++++++++++++++---- hosts/jibril/users/pan/user.nix | 1 + 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/hmModules/apps/neovim/app.nix b/hmModules/apps/neovim/app.nix index e4ef676..4a1ddfd 100644 --- a/hmModules/apps/neovim/app.nix +++ b/hmModules/apps/neovim/app.nix @@ -9,6 +9,9 @@ nix.enable = lib.mkEnableOption "Enables nix support"; rust.enable = lib.mkEnableOption "Enables rust support"; }; + themes = { + catppuccin.enable = lib.mkEnableOption "Enables catppuccin theme"; + }; plugins = { comments.enable = lib.mkEnableOption "Enables nvim-comment"; fugitive.enable = lib.mkEnableOption "Enables git-fugitive"; @@ -59,6 +62,7 @@ lopts = lib.lists.optionals; cfgp = config.neovim.plugins; cfgl = config.neovim.languages; + cfgt = config.neovim.themes; comments = lopts cfgp.comments.enable (with pkgs.vimPlugins; [ { @@ -83,9 +87,14 @@ plugin = lualine-nvim; type = "lua"; config = '' - require("lualine").setup({ - icons_enabled = true, - }) + require("lualine").setup { + options = { + icons_enabled = true, + '' + lib.strings.optionalString cfgt.catppuccin.enable '' + theme = "catppuccin" + '' + '' + } + } ''; } nvim-web-devicons @@ -103,6 +112,23 @@ go-nvim ]); + catppuccin-pkg = lopts cfgt.catppuccin.enable (with pkgs.vimPlugins; [ + { + plugin = catppuccin-nvim; + type = "lua"; + config = '' + vim.cmd.colorscheme "catppuccin-mocha" + require('catppuccin').setup({ + integrations = { + '' + lib.strings.optionalString cfgp.wiki.enable '' + vimwiki = true + '' + '' + } + }) + ''; + } + ]); + wiki = lopts cfgp.wiki.enable (with pkgs.vimPlugins; [ { plugin = vimwiki; @@ -120,7 +146,7 @@ } ]); in comments ++ fugitive ++ luasnip-pkg ++ lualine ++ - nix-pkg ++ rust-pkg ++ go-pkg ++ wiki; + nix-pkg ++ rust-pkg ++ go-pkg ++ wiki ++ catppuccin-pkg; }; }; } diff --git a/hosts/jibril/users/pan/user.nix b/hosts/jibril/users/pan/user.nix index c534af4..02195dd 100644 --- a/hosts/jibril/users/pan/user.nix +++ b/hosts/jibril/users/pan/user.nix @@ -89,6 +89,7 @@ treesitter.enable = true; wiki.enable = true; }; + neovim.themes.catppuccin.enable = true; lf.enable = true; lf.hiddenfiles = [ From a4f50c3aee19dd5c9b0f1a5ea664ea95d324234b Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 9 Jan 2025 10:20:46 -0800 Subject: [PATCH 261/412] Kitty, add catppuccin theme --- hmModules/apps/kitty/app.nix | 4 ++++ hosts/jibril/users/pan/user.nix | 1 + 2 files changed, 5 insertions(+) diff --git a/hmModules/apps/kitty/app.nix b/hmModules/apps/kitty/app.nix index 9d177b0..d217284 100644 --- a/hmModules/apps/kitty/app.nix +++ b/hmModules/apps/kitty/app.nix @@ -6,6 +6,9 @@ make_default = lib.mkEnableOption "Makes kitty default terminal emulator"; font = lib.mkOption { default = ""; }; font_size = lib.mkOption { default = 18; }; + theme = { + catppuccin.enable = lib.mkEnableOption "Enables catppuccin theme for kitty"; + }; }; config = lib.mkIf config.kitty.enable { @@ -17,6 +20,7 @@ enable_audio_bell = "no"; confirm_os_window_close = 0; }; + themeFile = lib.mkIf config.kitty.theme.catppuccin.enable "Catppuccin-Mocha"; }; defaultApps.terminal = lib.mkIf config.kitty.make_default "kitty"; }; diff --git a/hosts/jibril/users/pan/user.nix b/hosts/jibril/users/pan/user.nix index 02195dd..24b4965 100644 --- a/hosts/jibril/users/pan/user.nix +++ b/hosts/jibril/users/pan/user.nix @@ -58,6 +58,7 @@ kitty.enable = true; kitty.make_default = true; kitty.font = "Cascadia Code"; + kitty.theme.catppuccin.enable = true; git.enable = true; git.username = "Julia Lange"; git.email = "public@julialange.org"; From 6769c38a13d301abe28bd6284eafe488401b8705 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 9 Jan 2025 10:20:46 -0800 Subject: [PATCH 262/412] Kitty, add catppuccin theme --- hmModules/apps/kitty/app.nix | 4 ++++ hosts/jibril/users/pan/user.nix | 1 + 2 files changed, 5 insertions(+) diff --git a/hmModules/apps/kitty/app.nix b/hmModules/apps/kitty/app.nix index 9d177b0..d217284 100644 --- a/hmModules/apps/kitty/app.nix +++ b/hmModules/apps/kitty/app.nix @@ -6,6 +6,9 @@ make_default = lib.mkEnableOption "Makes kitty default terminal emulator"; font = lib.mkOption { default = ""; }; font_size = lib.mkOption { default = 18; }; + theme = { + catppuccin.enable = lib.mkEnableOption "Enables catppuccin theme for kitty"; + }; }; config = lib.mkIf config.kitty.enable { @@ -17,6 +20,7 @@ enable_audio_bell = "no"; confirm_os_window_close = 0; }; + themeFile = lib.mkIf config.kitty.theme.catppuccin.enable "Catppuccin-Mocha"; }; defaultApps.terminal = lib.mkIf config.kitty.make_default "kitty"; }; diff --git a/hosts/jibril/users/pan/user.nix b/hosts/jibril/users/pan/user.nix index 02195dd..24b4965 100644 --- a/hosts/jibril/users/pan/user.nix +++ b/hosts/jibril/users/pan/user.nix @@ -58,6 +58,7 @@ kitty.enable = true; kitty.make_default = true; kitty.font = "Cascadia Code"; + kitty.theme.catppuccin.enable = true; git.enable = true; git.username = "Julia Lange"; git.email = "public@julialange.org"; From 37b29f9a0875c1dbb3f635f8a2fc2a3685a0b125 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 14 Jan 2025 13:29:17 -0800 Subject: [PATCH 263/412] Flake update 2025-01-14 --- flake.lock | 209 +++++++++++++++++------------ nixosModules/automatic/default.nix | 2 +- 2 files changed, 127 insertions(+), 84 deletions(-) diff --git a/flake.lock b/flake.lock index e2d3c3f..4c32025 100644 --- a/flake.lock +++ b/flake.lock @@ -6,11 +6,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1731956781, - "narHash": "sha256-AAZiAMQ2LBCY375NnbQa8HHFJc3KLyfnlGiFXDdb1pE=", + "lastModified": 1736877444, + "narHash": "sha256-K25atZ9alRsGb6TW+rRcpJTbtP5tnb3qusd762B2qWw=", "owner": "ezKEa", "repo": "aagl-gtk-on-nix", - "rev": "862c5b3acd097906cd242eedd9ddcc95ac9382cb", + "rev": "a1f0ce3bfbe9f0cc81e8b7def5e652a021e95c98", "type": "github" }, "original": { @@ -25,11 +25,11 @@ "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1732307740, - "narHash": "sha256-ZDsYdZOtg5qkK/wfLLB83B3SI+fE32S+/6Ey0ggHODM=", + "lastModified": 1736677288, + "narHash": "sha256-Vj3WOLy6o6Zf44Rwg9eLqNRQPlVoDrQ89tsef3l3990=", "owner": "Aylur", "repo": "ags", - "rev": "81159966eb8b39b66c3efc133982fd76920c9605", + "rev": "90db9b9fecc0f4228440d83107c6c745a35e7d77", "type": "github" }, "original": { @@ -58,11 +58,11 @@ ] }, "locked": { - "lastModified": 1731774881, - "narHash": "sha256-1Dxryiw8u2ejntxrrv3sMtIE8WHKxmlN4KeH+uMGbmc=", + "lastModified": 1736102453, + "narHash": "sha256-5qb4kb7Xbt8jJFL/oDqOor9Z2+E+A+ql3PiyDvsfWZ0=", "owner": "hyprwm", "repo": "aquamarine", - "rev": "b31a6a4da8199ae3489057db7d36069a70749a56", + "rev": "4846091641f3be0ad7542086d52769bb7932bde6", "type": "github" }, "original": { @@ -79,11 +79,11 @@ ] }, "locked": { - "lastModified": 1731952585, - "narHash": "sha256-Sh1E7sJd8JJM3PCU1ZOei/QWz97OLCENIi2rTRoaniw=", + "lastModified": 1735172721, + "narHash": "sha256-rtEAwGsHSppnkR3Qg3eRJ6Xh/F84IY9CrBBLzYabalY=", "owner": "aylur", "repo": "astal", - "rev": "664c7a4ddfcf48c6e8accd3c33bb94424b0e8609", + "rev": "6c84b64efc736e039a8a10774a4a1bf772c37aa2", "type": "github" }, "original": { @@ -95,11 +95,11 @@ "flake-compat": { "flake": false, "locked": { - "lastModified": 1696426674, - "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "lastModified": 1733328505, + "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=", "owner": "edolstra", "repo": "flake-compat", - "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec", "type": "github" }, "original": { @@ -184,11 +184,11 @@ "nixpkgs": "nixpkgs_3" }, "locked": { - "lastModified": 1732793095, - "narHash": "sha256-6TrknJ8CpvSSF4gviQSeD+wyj3siRcMvdBKhOXkEMKU=", + "lastModified": 1736785676, + "narHash": "sha256-TY0jUwR3EW0fnS0X5wXMAVy6h4Z7Y6a3m+Yq++C9AyE=", "owner": "nix-community", "repo": "home-manager", - "rev": "2f7739d01080feb4549524e8f6927669b61c6ee3", + "rev": "fc52a210b60f2f52c74eac41a8647c1573d2071d", "type": "github" }, "original": { @@ -213,11 +213,11 @@ ] }, "locked": { - "lastModified": 1728669738, - "narHash": "sha256-EDNAU9AYcx8OupUzbTbWE1d3HYdeG0wO6Msg3iL1muk=", + "lastModified": 1734906540, + "narHash": "sha256-vQ/L9hZFezC0LquLo4TWXkyniWtYBlFHAKIsDc7PYJE=", "owner": "hyprwm", "repo": "hyprcursor", - "rev": "0264e698149fcb857a66a53018157b41f8d97bb0", + "rev": "69270ba8f057d55b0e6c2dca0e165d652856e613", "type": "github" }, "original": { @@ -226,11 +226,42 @@ "type": "github" } }, + "hyprgraphics": { + "inputs": { + "hyprutils": [ + "hyprland", + "hyprutils" + ], + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1736115290, + "narHash": "sha256-Jcn6yAzfUMcxy3tN/iZRbi/QgrYm7XLyVRl9g/nbUl4=", + "owner": "hyprwm", + "repo": "hyprgraphics", + "rev": "52202272d89da32a9f866c0d10305a5e3d954c50", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprgraphics", + "type": "github" + } + }, "hyprland": { "inputs": { "aquamarine": "aquamarine", "hyprcursor": "hyprcursor", + "hyprgraphics": "hyprgraphics", "hyprland-protocols": "hyprland-protocols", + "hyprland-qtutils": "hyprland-qtutils", "hyprlang": "hyprlang", "hyprutils": "hyprutils", "hyprwayland-scanner": "hyprwayland-scanner", @@ -240,11 +271,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1732808926, - "narHash": "sha256-//MlFWIxY/HSfFhPr92yFAHZpZOdcMKU9MdIo7Tti9Q=", + "lastModified": 1736873552, + "narHash": "sha256-VByeYPOu3I0a5r5Nn45loSaEV8M9fmZrTByUdu9sjfY=", "ref": "refs/heads/main", - "rev": "22bf2853e6271932f073961f3dbeb0f9ff48493e", - "revCount": 5503, + "rev": "25add26881d7b98d2b80eb7a95d3aee0449b72b9", + "revCount": 5672, "type": "git", "url": "https://github.com/hyprwm/Hyprland" }, @@ -258,11 +289,11 @@ "nixpkgs": "nixpkgs_5" }, "locked": { - "lastModified": 1730743354, - "narHash": "sha256-gU4NySYyXeAzVaF5bI6BKmj2CdgiwGFnuPjXUId3Dx0=", + "lastModified": 1733056338, + "narHash": "sha256-sp14z0mrqrtmouz1+bU4Jh8/0xi+xwQHF2l7mhGSSVU=", "owner": "hyprwm", "repo": "contrib", - "rev": "792f6b83dc719214e0e2a0b380c34f147b28ece2", + "rev": "d7c55140f1785b8d9fef351f1cd2a4c9e1eaa466", "type": "github" }, "original": { @@ -283,11 +314,11 @@ ] }, "locked": { - "lastModified": 1728345020, - "narHash": "sha256-xGbkc7U/Roe0/Cv3iKlzijIaFBNguasI31ynL2IlEoM=", + "lastModified": 1735774328, + "narHash": "sha256-vIRwLS9w+N99EU1aJ+XNOU6mJTxrUBa31i1r82l0V7s=", "owner": "hyprwm", "repo": "hyprland-protocols", - "rev": "a7c183800e74f337753de186522b9017a07a8cee", + "rev": "e3b6af97ddcfaafbda8e2828c719a5af84f662cb", "type": "github" }, "original": { @@ -296,6 +327,35 @@ "type": "github" } }, + "hyprland-qtutils": { + "inputs": { + "hyprutils": [ + "hyprland", + "hyprutils" + ], + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1736114838, + "narHash": "sha256-FxbuGQExtN37ToWYnGmO6weOYN6WPHN/RAqbr7gNPek=", + "owner": "hyprwm", + "repo": "hyprland-qtutils", + "rev": "6997fe382dcf396704227d2b98ffdd5066da6959", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprland-qtutils", + "type": "github" + } + }, "hyprlang": { "inputs": { "hyprutils": [ @@ -312,11 +372,11 @@ ] }, "locked": { - "lastModified": 1728168612, - "narHash": "sha256-AnB1KfiXINmuiW7BALYrKqcjCnsLZPifhb/7BsfPbns=", + "lastModified": 1735393019, + "narHash": "sha256-NPpqA8rtmDLsEmZOmz+qR67zsB6Y503Jnv+nSFLKJZ8=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "f054f2e44d6a0b74607a6bc0f52dba337a3db38e", + "rev": "55608efdaa387af7bfdc0eddb404c409958efa43", "type": "github" }, "original": { @@ -337,11 +397,11 @@ ] }, "locked": { - "lastModified": 1731702627, - "narHash": "sha256-+JeO9gevnXannQxMfR5xzZtF4sYmSlWkX/BPmPx0mWk=", + "lastModified": 1736164519, + "narHash": "sha256-1LimBKvDpBbeX+qW7T240WEyw+DBVpDotZB4JYm8Aps=", "owner": "hyprwm", "repo": "hyprutils", - "rev": "e911361a687753bbbdfe3b6a9eab755ecaf1d9e1", + "rev": "3c895da64b0eb19870142196fa48c07090b441c4", "type": "github" }, "original": { @@ -362,11 +422,11 @@ ] }, "locked": { - "lastModified": 1726874836, - "narHash": "sha256-VKR0sf0PSNCB0wPHVKSAn41mCNVCnegWmgkrneKDhHM=", + "lastModified": 1735493474, + "narHash": "sha256-fktzv4NaqKm94VAkAoVqO/nqQlw+X0/tJJNAeCSfzK4=", "owner": "hyprwm", "repo": "hyprwayland-scanner", - "rev": "500c81a9e1a76760371049a8d99e008ea77aa59e", + "rev": "de913476b59ee88685fdc018e77b8f6637a2ae0b", "type": "github" }, "original": { @@ -401,7 +461,7 @@ "narHash": "sha256-DN5/166jhiiAW0Uw6nueXaGTueVxhfZISAkoxasmz/g=", "rev": "f19bd752910bbe3a861c9cad269bd078689d50fe", "type": "tarball", - "url": "https://git.lix.systems/api/v1/repos/lix-project/nixos-module/archive/f19bd752910bbe3a861c9cad269bd078689d50fe.tar.gz" + "url": "https://git.lix.systems/api/v1/repos/lix-project/nixos-module/archive/f19bd752910bbe3a861c9cad269bd078689d50fe.tar.gz?rev=f19bd752910bbe3a861c9cad269bd078689d50fe" }, "original": { "type": "tarball", @@ -410,11 +470,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1730200266, - "narHash": "sha256-l253w0XMT8nWHGXuXqyiIC/bMvh1VRszGXgdpQlfhvU=", + "lastModified": 1734424634, + "narHash": "sha256-cHar1vqHOOyC7f1+tVycPoWTfKIaqkoe1Q6TnKzuti4=", "owner": "nixos", "repo": "nixpkgs", - "rev": "807e9154dcb16384b1b765ebe9cd2bba2ac287fd", + "rev": "d3c42f187194c26d9f0309a8ecc469d6c878ce33", "type": "github" }, "original": { @@ -424,29 +484,13 @@ "type": "github" } }, - "nixpkgs-stable": { - "locked": { - "lastModified": 1730741070, - "narHash": "sha256-edm8WG19kWozJ/GqyYx2VjW99EdhjKwbY3ZwdlPAAlo=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "d063c1dd113c91ab27959ba540c0d9753409edf3", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-24.05", - "repo": "nixpkgs", - "type": "github" - } - }, "nixpkgs_2": { "locked": { - "lastModified": 1731676054, - "narHash": "sha256-OZiZ3m8SCMfh3B6bfGC/Bm4x3qc1m2SVEAlkV6iY7Yg=", + "lastModified": 1734649271, + "narHash": "sha256-4EVBRhOjMDuGtMaofAIqzJbg4Ql7Ai0PSeuVZTHjyKQ=", "owner": "nixos", "repo": "nixpkgs", - "rev": "5e4fbfb6b3de1aa2872b76d49fafc942626e2add", + "rev": "d70bd19e0a38ad4790d3913bf08fcbfc9eeca507", "type": "github" }, "original": { @@ -458,11 +502,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1732521221, - "narHash": "sha256-2ThgXBUXAE1oFsVATK1ZX9IjPcS4nKFOAjhPNKuiMn0=", + "lastModified": 1736012469, + "narHash": "sha256-/qlNWm/IEVVH7GfgAIyP6EsVZI6zjAx1cV5zNyrs+rI=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "4633a7c72337ea8fd23a4f2ba3972865e3ec685d", + "rev": "8f3e1f807051e32d8c95cd12b9b421623850a34d", "type": "github" }, "original": { @@ -474,11 +518,11 @@ }, "nixpkgs_4": { "locked": { - "lastModified": 1731676054, - "narHash": "sha256-OZiZ3m8SCMfh3B6bfGC/Bm4x3qc1m2SVEAlkV6iY7Yg=", + "lastModified": 1736012469, + "narHash": "sha256-/qlNWm/IEVVH7GfgAIyP6EsVZI6zjAx1cV5zNyrs+rI=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "5e4fbfb6b3de1aa2872b76d49fafc942626e2add", + "rev": "8f3e1f807051e32d8c95cd12b9b421623850a34d", "type": "github" }, "original": { @@ -522,11 +566,11 @@ }, "nixpkgs_7": { "locked": { - "lastModified": 1732521221, - "narHash": "sha256-2ThgXBUXAE1oFsVATK1ZX9IjPcS4nKFOAjhPNKuiMn0=", + "lastModified": 1736798957, + "narHash": "sha256-qwpCtZhSsSNQtK4xYGzMiyEDhkNzOCz/Vfu4oL2ETsQ=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "4633a7c72337ea8fd23a4f2ba3972865e3ec685d", + "rev": "9abb87b552b7f55ac8916b6fc9e5cb486656a2f3", "type": "github" }, "original": { @@ -558,15 +602,14 @@ "nixpkgs": [ "hyprland", "nixpkgs" - ], - "nixpkgs-stable": "nixpkgs-stable" + ] }, "locked": { - "lastModified": 1731363552, - "narHash": "sha256-vFta1uHnD29VUY4HJOO/D6p6rxyObnf+InnSMT4jlMU=", + "lastModified": 1735882644, + "narHash": "sha256-3FZAG+pGt3OElQjesCAWeMkQ7C/nB1oTHLRQ8ceP110=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "cd1af27aa85026ac759d5d3fccf650abe7e1bbf0", + "rev": "a5a961387e75ae44cc20f0a57ae463da5e959656", "type": "github" }, "original": { @@ -592,11 +635,11 @@ "nixpkgs": "nixpkgs_8" }, "locked": { - "lastModified": 1732575825, - "narHash": "sha256-xtt95+c7OUMoqZf4OvA/7AemiH3aVuWHQbErYQoPwFk=", + "lastModified": 1736808430, + "narHash": "sha256-wlgdf/n7bJMLBheqt1jmPoxJFrUP6FByKQFXuM9YvIk=", "owner": "Mic92", "repo": "sops-nix", - "rev": "3433ea14fbd9e6671d0ff0dd45ed15ee4c156ffa", + "rev": "553c7cb22fed19fd60eb310423fdc93045c51ba8", "type": "github" }, "original": { @@ -663,11 +706,11 @@ ] }, "locked": { - "lastModified": 1731703417, - "narHash": "sha256-rheDc/7C+yI+QspYr9J2z9kQ5P9F4ATapI7qyFAe1XA=", + "lastModified": 1734907020, + "narHash": "sha256-p6HxwpRKVl1KIiY5xrJdjcEeK3pbmc///UOyV6QER+w=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "8070f36deec723de71e7557441acb17e478204d3", + "rev": "d7f18dda5e511749fa1511185db3536208fb1a63", "type": "github" }, "original": { diff --git a/nixosModules/automatic/default.nix b/nixosModules/automatic/default.nix index 007bfc3..a48158b 100644 --- a/nixosModules/automatic/default.nix +++ b/nixosModules/automatic/default.nix @@ -61,8 +61,8 @@ fonts = { enableDefaultPackages = true; packages = with pkgs; [ + nerd-fonts.caskaydia-cove cascadia-code - (nerdfonts.override { fonts = [ "CascadiaCode" ]; }) source-han-sans # Pan-CJK font ] ++ config.system.extraFonts; }; From 5c01a63feb69cedd3139457f7bbcdc28565ce5ed Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 14 Jan 2025 13:29:17 -0800 Subject: [PATCH 264/412] Flake update 2025-01-14 --- flake.lock | 209 +++++++++++++++++------------ nixosModules/automatic/default.nix | 2 +- 2 files changed, 127 insertions(+), 84 deletions(-) diff --git a/flake.lock b/flake.lock index e2d3c3f..4c32025 100644 --- a/flake.lock +++ b/flake.lock @@ -6,11 +6,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1731956781, - "narHash": "sha256-AAZiAMQ2LBCY375NnbQa8HHFJc3KLyfnlGiFXDdb1pE=", + "lastModified": 1736877444, + "narHash": "sha256-K25atZ9alRsGb6TW+rRcpJTbtP5tnb3qusd762B2qWw=", "owner": "ezKEa", "repo": "aagl-gtk-on-nix", - "rev": "862c5b3acd097906cd242eedd9ddcc95ac9382cb", + "rev": "a1f0ce3bfbe9f0cc81e8b7def5e652a021e95c98", "type": "github" }, "original": { @@ -25,11 +25,11 @@ "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1732307740, - "narHash": "sha256-ZDsYdZOtg5qkK/wfLLB83B3SI+fE32S+/6Ey0ggHODM=", + "lastModified": 1736677288, + "narHash": "sha256-Vj3WOLy6o6Zf44Rwg9eLqNRQPlVoDrQ89tsef3l3990=", "owner": "Aylur", "repo": "ags", - "rev": "81159966eb8b39b66c3efc133982fd76920c9605", + "rev": "90db9b9fecc0f4228440d83107c6c745a35e7d77", "type": "github" }, "original": { @@ -58,11 +58,11 @@ ] }, "locked": { - "lastModified": 1731774881, - "narHash": "sha256-1Dxryiw8u2ejntxrrv3sMtIE8WHKxmlN4KeH+uMGbmc=", + "lastModified": 1736102453, + "narHash": "sha256-5qb4kb7Xbt8jJFL/oDqOor9Z2+E+A+ql3PiyDvsfWZ0=", "owner": "hyprwm", "repo": "aquamarine", - "rev": "b31a6a4da8199ae3489057db7d36069a70749a56", + "rev": "4846091641f3be0ad7542086d52769bb7932bde6", "type": "github" }, "original": { @@ -79,11 +79,11 @@ ] }, "locked": { - "lastModified": 1731952585, - "narHash": "sha256-Sh1E7sJd8JJM3PCU1ZOei/QWz97OLCENIi2rTRoaniw=", + "lastModified": 1735172721, + "narHash": "sha256-rtEAwGsHSppnkR3Qg3eRJ6Xh/F84IY9CrBBLzYabalY=", "owner": "aylur", "repo": "astal", - "rev": "664c7a4ddfcf48c6e8accd3c33bb94424b0e8609", + "rev": "6c84b64efc736e039a8a10774a4a1bf772c37aa2", "type": "github" }, "original": { @@ -95,11 +95,11 @@ "flake-compat": { "flake": false, "locked": { - "lastModified": 1696426674, - "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "lastModified": 1733328505, + "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=", "owner": "edolstra", "repo": "flake-compat", - "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec", "type": "github" }, "original": { @@ -184,11 +184,11 @@ "nixpkgs": "nixpkgs_3" }, "locked": { - "lastModified": 1732793095, - "narHash": "sha256-6TrknJ8CpvSSF4gviQSeD+wyj3siRcMvdBKhOXkEMKU=", + "lastModified": 1736785676, + "narHash": "sha256-TY0jUwR3EW0fnS0X5wXMAVy6h4Z7Y6a3m+Yq++C9AyE=", "owner": "nix-community", "repo": "home-manager", - "rev": "2f7739d01080feb4549524e8f6927669b61c6ee3", + "rev": "fc52a210b60f2f52c74eac41a8647c1573d2071d", "type": "github" }, "original": { @@ -213,11 +213,11 @@ ] }, "locked": { - "lastModified": 1728669738, - "narHash": "sha256-EDNAU9AYcx8OupUzbTbWE1d3HYdeG0wO6Msg3iL1muk=", + "lastModified": 1734906540, + "narHash": "sha256-vQ/L9hZFezC0LquLo4TWXkyniWtYBlFHAKIsDc7PYJE=", "owner": "hyprwm", "repo": "hyprcursor", - "rev": "0264e698149fcb857a66a53018157b41f8d97bb0", + "rev": "69270ba8f057d55b0e6c2dca0e165d652856e613", "type": "github" }, "original": { @@ -226,11 +226,42 @@ "type": "github" } }, + "hyprgraphics": { + "inputs": { + "hyprutils": [ + "hyprland", + "hyprutils" + ], + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1736115290, + "narHash": "sha256-Jcn6yAzfUMcxy3tN/iZRbi/QgrYm7XLyVRl9g/nbUl4=", + "owner": "hyprwm", + "repo": "hyprgraphics", + "rev": "52202272d89da32a9f866c0d10305a5e3d954c50", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprgraphics", + "type": "github" + } + }, "hyprland": { "inputs": { "aquamarine": "aquamarine", "hyprcursor": "hyprcursor", + "hyprgraphics": "hyprgraphics", "hyprland-protocols": "hyprland-protocols", + "hyprland-qtutils": "hyprland-qtutils", "hyprlang": "hyprlang", "hyprutils": "hyprutils", "hyprwayland-scanner": "hyprwayland-scanner", @@ -240,11 +271,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1732808926, - "narHash": "sha256-//MlFWIxY/HSfFhPr92yFAHZpZOdcMKU9MdIo7Tti9Q=", + "lastModified": 1736873552, + "narHash": "sha256-VByeYPOu3I0a5r5Nn45loSaEV8M9fmZrTByUdu9sjfY=", "ref": "refs/heads/main", - "rev": "22bf2853e6271932f073961f3dbeb0f9ff48493e", - "revCount": 5503, + "rev": "25add26881d7b98d2b80eb7a95d3aee0449b72b9", + "revCount": 5672, "type": "git", "url": "https://github.com/hyprwm/Hyprland" }, @@ -258,11 +289,11 @@ "nixpkgs": "nixpkgs_5" }, "locked": { - "lastModified": 1730743354, - "narHash": "sha256-gU4NySYyXeAzVaF5bI6BKmj2CdgiwGFnuPjXUId3Dx0=", + "lastModified": 1733056338, + "narHash": "sha256-sp14z0mrqrtmouz1+bU4Jh8/0xi+xwQHF2l7mhGSSVU=", "owner": "hyprwm", "repo": "contrib", - "rev": "792f6b83dc719214e0e2a0b380c34f147b28ece2", + "rev": "d7c55140f1785b8d9fef351f1cd2a4c9e1eaa466", "type": "github" }, "original": { @@ -283,11 +314,11 @@ ] }, "locked": { - "lastModified": 1728345020, - "narHash": "sha256-xGbkc7U/Roe0/Cv3iKlzijIaFBNguasI31ynL2IlEoM=", + "lastModified": 1735774328, + "narHash": "sha256-vIRwLS9w+N99EU1aJ+XNOU6mJTxrUBa31i1r82l0V7s=", "owner": "hyprwm", "repo": "hyprland-protocols", - "rev": "a7c183800e74f337753de186522b9017a07a8cee", + "rev": "e3b6af97ddcfaafbda8e2828c719a5af84f662cb", "type": "github" }, "original": { @@ -296,6 +327,35 @@ "type": "github" } }, + "hyprland-qtutils": { + "inputs": { + "hyprutils": [ + "hyprland", + "hyprutils" + ], + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1736114838, + "narHash": "sha256-FxbuGQExtN37ToWYnGmO6weOYN6WPHN/RAqbr7gNPek=", + "owner": "hyprwm", + "repo": "hyprland-qtutils", + "rev": "6997fe382dcf396704227d2b98ffdd5066da6959", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprland-qtutils", + "type": "github" + } + }, "hyprlang": { "inputs": { "hyprutils": [ @@ -312,11 +372,11 @@ ] }, "locked": { - "lastModified": 1728168612, - "narHash": "sha256-AnB1KfiXINmuiW7BALYrKqcjCnsLZPifhb/7BsfPbns=", + "lastModified": 1735393019, + "narHash": "sha256-NPpqA8rtmDLsEmZOmz+qR67zsB6Y503Jnv+nSFLKJZ8=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "f054f2e44d6a0b74607a6bc0f52dba337a3db38e", + "rev": "55608efdaa387af7bfdc0eddb404c409958efa43", "type": "github" }, "original": { @@ -337,11 +397,11 @@ ] }, "locked": { - "lastModified": 1731702627, - "narHash": "sha256-+JeO9gevnXannQxMfR5xzZtF4sYmSlWkX/BPmPx0mWk=", + "lastModified": 1736164519, + "narHash": "sha256-1LimBKvDpBbeX+qW7T240WEyw+DBVpDotZB4JYm8Aps=", "owner": "hyprwm", "repo": "hyprutils", - "rev": "e911361a687753bbbdfe3b6a9eab755ecaf1d9e1", + "rev": "3c895da64b0eb19870142196fa48c07090b441c4", "type": "github" }, "original": { @@ -362,11 +422,11 @@ ] }, "locked": { - "lastModified": 1726874836, - "narHash": "sha256-VKR0sf0PSNCB0wPHVKSAn41mCNVCnegWmgkrneKDhHM=", + "lastModified": 1735493474, + "narHash": "sha256-fktzv4NaqKm94VAkAoVqO/nqQlw+X0/tJJNAeCSfzK4=", "owner": "hyprwm", "repo": "hyprwayland-scanner", - "rev": "500c81a9e1a76760371049a8d99e008ea77aa59e", + "rev": "de913476b59ee88685fdc018e77b8f6637a2ae0b", "type": "github" }, "original": { @@ -401,7 +461,7 @@ "narHash": "sha256-DN5/166jhiiAW0Uw6nueXaGTueVxhfZISAkoxasmz/g=", "rev": "f19bd752910bbe3a861c9cad269bd078689d50fe", "type": "tarball", - "url": "https://git.lix.systems/api/v1/repos/lix-project/nixos-module/archive/f19bd752910bbe3a861c9cad269bd078689d50fe.tar.gz" + "url": "https://git.lix.systems/api/v1/repos/lix-project/nixos-module/archive/f19bd752910bbe3a861c9cad269bd078689d50fe.tar.gz?rev=f19bd752910bbe3a861c9cad269bd078689d50fe" }, "original": { "type": "tarball", @@ -410,11 +470,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1730200266, - "narHash": "sha256-l253w0XMT8nWHGXuXqyiIC/bMvh1VRszGXgdpQlfhvU=", + "lastModified": 1734424634, + "narHash": "sha256-cHar1vqHOOyC7f1+tVycPoWTfKIaqkoe1Q6TnKzuti4=", "owner": "nixos", "repo": "nixpkgs", - "rev": "807e9154dcb16384b1b765ebe9cd2bba2ac287fd", + "rev": "d3c42f187194c26d9f0309a8ecc469d6c878ce33", "type": "github" }, "original": { @@ -424,29 +484,13 @@ "type": "github" } }, - "nixpkgs-stable": { - "locked": { - "lastModified": 1730741070, - "narHash": "sha256-edm8WG19kWozJ/GqyYx2VjW99EdhjKwbY3ZwdlPAAlo=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "d063c1dd113c91ab27959ba540c0d9753409edf3", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-24.05", - "repo": "nixpkgs", - "type": "github" - } - }, "nixpkgs_2": { "locked": { - "lastModified": 1731676054, - "narHash": "sha256-OZiZ3m8SCMfh3B6bfGC/Bm4x3qc1m2SVEAlkV6iY7Yg=", + "lastModified": 1734649271, + "narHash": "sha256-4EVBRhOjMDuGtMaofAIqzJbg4Ql7Ai0PSeuVZTHjyKQ=", "owner": "nixos", "repo": "nixpkgs", - "rev": "5e4fbfb6b3de1aa2872b76d49fafc942626e2add", + "rev": "d70bd19e0a38ad4790d3913bf08fcbfc9eeca507", "type": "github" }, "original": { @@ -458,11 +502,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1732521221, - "narHash": "sha256-2ThgXBUXAE1oFsVATK1ZX9IjPcS4nKFOAjhPNKuiMn0=", + "lastModified": 1736012469, + "narHash": "sha256-/qlNWm/IEVVH7GfgAIyP6EsVZI6zjAx1cV5zNyrs+rI=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "4633a7c72337ea8fd23a4f2ba3972865e3ec685d", + "rev": "8f3e1f807051e32d8c95cd12b9b421623850a34d", "type": "github" }, "original": { @@ -474,11 +518,11 @@ }, "nixpkgs_4": { "locked": { - "lastModified": 1731676054, - "narHash": "sha256-OZiZ3m8SCMfh3B6bfGC/Bm4x3qc1m2SVEAlkV6iY7Yg=", + "lastModified": 1736012469, + "narHash": "sha256-/qlNWm/IEVVH7GfgAIyP6EsVZI6zjAx1cV5zNyrs+rI=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "5e4fbfb6b3de1aa2872b76d49fafc942626e2add", + "rev": "8f3e1f807051e32d8c95cd12b9b421623850a34d", "type": "github" }, "original": { @@ -522,11 +566,11 @@ }, "nixpkgs_7": { "locked": { - "lastModified": 1732521221, - "narHash": "sha256-2ThgXBUXAE1oFsVATK1ZX9IjPcS4nKFOAjhPNKuiMn0=", + "lastModified": 1736798957, + "narHash": "sha256-qwpCtZhSsSNQtK4xYGzMiyEDhkNzOCz/Vfu4oL2ETsQ=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "4633a7c72337ea8fd23a4f2ba3972865e3ec685d", + "rev": "9abb87b552b7f55ac8916b6fc9e5cb486656a2f3", "type": "github" }, "original": { @@ -558,15 +602,14 @@ "nixpkgs": [ "hyprland", "nixpkgs" - ], - "nixpkgs-stable": "nixpkgs-stable" + ] }, "locked": { - "lastModified": 1731363552, - "narHash": "sha256-vFta1uHnD29VUY4HJOO/D6p6rxyObnf+InnSMT4jlMU=", + "lastModified": 1735882644, + "narHash": "sha256-3FZAG+pGt3OElQjesCAWeMkQ7C/nB1oTHLRQ8ceP110=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "cd1af27aa85026ac759d5d3fccf650abe7e1bbf0", + "rev": "a5a961387e75ae44cc20f0a57ae463da5e959656", "type": "github" }, "original": { @@ -592,11 +635,11 @@ "nixpkgs": "nixpkgs_8" }, "locked": { - "lastModified": 1732575825, - "narHash": "sha256-xtt95+c7OUMoqZf4OvA/7AemiH3aVuWHQbErYQoPwFk=", + "lastModified": 1736808430, + "narHash": "sha256-wlgdf/n7bJMLBheqt1jmPoxJFrUP6FByKQFXuM9YvIk=", "owner": "Mic92", "repo": "sops-nix", - "rev": "3433ea14fbd9e6671d0ff0dd45ed15ee4c156ffa", + "rev": "553c7cb22fed19fd60eb310423fdc93045c51ba8", "type": "github" }, "original": { @@ -663,11 +706,11 @@ ] }, "locked": { - "lastModified": 1731703417, - "narHash": "sha256-rheDc/7C+yI+QspYr9J2z9kQ5P9F4ATapI7qyFAe1XA=", + "lastModified": 1734907020, + "narHash": "sha256-p6HxwpRKVl1KIiY5xrJdjcEeK3pbmc///UOyV6QER+w=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "8070f36deec723de71e7557441acb17e478204d3", + "rev": "d7f18dda5e511749fa1511185db3536208fb1a63", "type": "github" }, "original": { diff --git a/nixosModules/automatic/default.nix b/nixosModules/automatic/default.nix index 007bfc3..a48158b 100644 --- a/nixosModules/automatic/default.nix +++ b/nixosModules/automatic/default.nix @@ -61,8 +61,8 @@ fonts = { enableDefaultPackages = true; packages = with pkgs; [ + nerd-fonts.caskaydia-cove cascadia-code - (nerdfonts.override { fonts = [ "CascadiaCode" ]; }) source-han-sans # Pan-CJK font ] ++ config.system.extraFonts; }; From 9ad9e42199b7c4b2bd713fe7fd1be1ec897869d0 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 22 Jan 2025 10:14:01 -0800 Subject: [PATCH 265/412] Flake update 2025-01-17, remove system = system --- flake.lock | 26 +++++++++++++------------- flake.nix | 1 - 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/flake.lock b/flake.lock index 4c32025..080e7a3 100644 --- a/flake.lock +++ b/flake.lock @@ -184,11 +184,11 @@ "nixpkgs": "nixpkgs_3" }, "locked": { - "lastModified": 1736785676, - "narHash": "sha256-TY0jUwR3EW0fnS0X5wXMAVy6h4Z7Y6a3m+Yq++C9AyE=", + "lastModified": 1737120639, + "narHash": "sha256-p5e/45V41YD3tMELuiNIoVCa25/w4nhOTm0B9MtdHFI=", "owner": "nix-community", "repo": "home-manager", - "rev": "fc52a210b60f2f52c74eac41a8647c1573d2071d", + "rev": "a0046af169ce7b1da503974e1b22c48ef4d71887", "type": "github" }, "original": { @@ -271,11 +271,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1736873552, - "narHash": "sha256-VByeYPOu3I0a5r5Nn45loSaEV8M9fmZrTByUdu9sjfY=", + "lastModified": 1737145437, + "narHash": "sha256-Pw5yG6LdFJCE+ThFjXOJ/mrs4WJGceHSi/be74bnwLs=", "ref": "refs/heads/main", - "rev": "25add26881d7b98d2b80eb7a95d3aee0449b72b9", - "revCount": 5672, + "rev": "078e13f463d56a4e773aa104bca5567b9e9c8658", + "revCount": 5681, "type": "git", "url": "https://github.com/hyprwm/Hyprland" }, @@ -566,11 +566,11 @@ }, "nixpkgs_7": { "locked": { - "lastModified": 1736798957, - "narHash": "sha256-qwpCtZhSsSNQtK4xYGzMiyEDhkNzOCz/Vfu4oL2ETsQ=", + "lastModified": 1736883708, + "narHash": "sha256-uQ+NQ0/xYU0N1CnXsa2zghgNaOPxWpMJXSUJJ9W7140=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "9abb87b552b7f55ac8916b6fc9e5cb486656a2f3", + "rev": "eb62e6aa39ea67e0b8018ba8ea077efe65807dc8", "type": "github" }, "original": { @@ -635,11 +635,11 @@ "nixpkgs": "nixpkgs_8" }, "locked": { - "lastModified": 1736808430, - "narHash": "sha256-wlgdf/n7bJMLBheqt1jmPoxJFrUP6FByKQFXuM9YvIk=", + "lastModified": 1737107480, + "narHash": "sha256-GXUE9+FgxoZU8v0p6ilBJ8NH7k8nKmZjp/7dmMrCv3o=", "owner": "Mic92", "repo": "sops-nix", - "rev": "553c7cb22fed19fd60eb310423fdc93045c51ba8", + "rev": "4c4fb93f18b9072c6fa1986221f9a3d7bf1fe4b6", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 7cae1e7..ce8850f 100644 --- a/flake.nix +++ b/flake.nix @@ -80,7 +80,6 @@ inherit hostname; "usernameList" = hostUsers; }; - system = system; modules = [ ./nixosModules lix-module.nixosModules.default From 0fb01f4edbc3616ad009ca0d87547303383b139d Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 22 Jan 2025 10:14:01 -0800 Subject: [PATCH 266/412] Flake update 2025-01-17, remove system = system --- flake.lock | 26 +++++++++++++------------- flake.nix | 1 - 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/flake.lock b/flake.lock index 4c32025..080e7a3 100644 --- a/flake.lock +++ b/flake.lock @@ -184,11 +184,11 @@ "nixpkgs": "nixpkgs_3" }, "locked": { - "lastModified": 1736785676, - "narHash": "sha256-TY0jUwR3EW0fnS0X5wXMAVy6h4Z7Y6a3m+Yq++C9AyE=", + "lastModified": 1737120639, + "narHash": "sha256-p5e/45V41YD3tMELuiNIoVCa25/w4nhOTm0B9MtdHFI=", "owner": "nix-community", "repo": "home-manager", - "rev": "fc52a210b60f2f52c74eac41a8647c1573d2071d", + "rev": "a0046af169ce7b1da503974e1b22c48ef4d71887", "type": "github" }, "original": { @@ -271,11 +271,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1736873552, - "narHash": "sha256-VByeYPOu3I0a5r5Nn45loSaEV8M9fmZrTByUdu9sjfY=", + "lastModified": 1737145437, + "narHash": "sha256-Pw5yG6LdFJCE+ThFjXOJ/mrs4WJGceHSi/be74bnwLs=", "ref": "refs/heads/main", - "rev": "25add26881d7b98d2b80eb7a95d3aee0449b72b9", - "revCount": 5672, + "rev": "078e13f463d56a4e773aa104bca5567b9e9c8658", + "revCount": 5681, "type": "git", "url": "https://github.com/hyprwm/Hyprland" }, @@ -566,11 +566,11 @@ }, "nixpkgs_7": { "locked": { - "lastModified": 1736798957, - "narHash": "sha256-qwpCtZhSsSNQtK4xYGzMiyEDhkNzOCz/Vfu4oL2ETsQ=", + "lastModified": 1736883708, + "narHash": "sha256-uQ+NQ0/xYU0N1CnXsa2zghgNaOPxWpMJXSUJJ9W7140=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "9abb87b552b7f55ac8916b6fc9e5cb486656a2f3", + "rev": "eb62e6aa39ea67e0b8018ba8ea077efe65807dc8", "type": "github" }, "original": { @@ -635,11 +635,11 @@ "nixpkgs": "nixpkgs_8" }, "locked": { - "lastModified": 1736808430, - "narHash": "sha256-wlgdf/n7bJMLBheqt1jmPoxJFrUP6FByKQFXuM9YvIk=", + "lastModified": 1737107480, + "narHash": "sha256-GXUE9+FgxoZU8v0p6ilBJ8NH7k8nKmZjp/7dmMrCv3o=", "owner": "Mic92", "repo": "sops-nix", - "rev": "553c7cb22fed19fd60eb310423fdc93045c51ba8", + "rev": "4c4fb93f18b9072c6fa1986221f9a3d7bf1fe4b6", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 7cae1e7..ce8850f 100644 --- a/flake.nix +++ b/flake.nix @@ -80,7 +80,6 @@ inherit hostname; "usernameList" = hostUsers; }; - system = system; modules = [ ./nixosModules lix-module.nixosModules.default From bb463bfb3fd1c49c5846508d08cb4a62162ef4f3 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 22 Jan 2025 10:19:51 -0800 Subject: [PATCH 267/412] Hypr, fix rebuild not working due to missing icons The old .gitignore contained the hypr icons path. Newer versions of nix did not want to rebuild because hypr/icons didn't exist in git. The fix was simple to move the .gitignore from the home directory to inside of the icons folder and include it. That way icons can be added and the folder exists. Oh--this also adds musescore because that was the impetus to fix this... It has nothing critical to do with the commit, I'd just rather have them in one rn --- .gitignore | 1 - hmModules/apps/hypr/icons/.gitignore | 1 + hosts/jibril/users/pan/user.nix | 6 +++++- 3 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 hmModules/apps/hypr/icons/.gitignore diff --git a/.gitignore b/.gitignore index fe40c22..e69de29 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +0,0 @@ -hmModules/apps/hypr/icons/ diff --git a/hmModules/apps/hypr/icons/.gitignore b/hmModules/apps/hypr/icons/.gitignore new file mode 100644 index 0000000..72e8ffc --- /dev/null +++ b/hmModules/apps/hypr/icons/.gitignore @@ -0,0 +1 @@ +* diff --git a/hosts/jibril/users/pan/user.nix b/hosts/jibril/users/pan/user.nix index 24b4965..b915e9e 100644 --- a/hosts/jibril/users/pan/user.nix +++ b/hosts/jibril/users/pan/user.nix @@ -1,4 +1,4 @@ -{ config, ... }: +{ config, pkgs, ... }: { hypr.enable = true; @@ -104,4 +104,8 @@ beeper.enable = true; discord.enable = true; + extraPkgs = with pkgs; [ + # Applications + musescore + ]; } From 55b9d772eb75aad7f4e8847421e4cf37238a1156 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 22 Jan 2025 10:19:51 -0800 Subject: [PATCH 268/412] Hypr, fix rebuild not working due to missing icons The old .gitignore contained the hypr icons path. Newer versions of nix did not want to rebuild because hypr/icons didn't exist in git. The fix was simple to move the .gitignore from the home directory to inside of the icons folder and include it. That way icons can be added and the folder exists. Oh--this also adds musescore because that was the impetus to fix this... It has nothing critical to do with the commit, I'd just rather have them in one rn --- .gitignore | 1 - hmModules/apps/hypr/icons/.gitignore | 1 + hosts/jibril/users/pan/user.nix | 6 +++++- 3 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 hmModules/apps/hypr/icons/.gitignore diff --git a/.gitignore b/.gitignore index fe40c22..e69de29 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +0,0 @@ -hmModules/apps/hypr/icons/ diff --git a/hmModules/apps/hypr/icons/.gitignore b/hmModules/apps/hypr/icons/.gitignore new file mode 100644 index 0000000..72e8ffc --- /dev/null +++ b/hmModules/apps/hypr/icons/.gitignore @@ -0,0 +1 @@ +* diff --git a/hosts/jibril/users/pan/user.nix b/hosts/jibril/users/pan/user.nix index 24b4965..b915e9e 100644 --- a/hosts/jibril/users/pan/user.nix +++ b/hosts/jibril/users/pan/user.nix @@ -1,4 +1,4 @@ -{ config, ... }: +{ config, pkgs, ... }: { hypr.enable = true; @@ -104,4 +104,8 @@ beeper.enable = true; discord.enable = true; + extraPkgs = with pkgs; [ + # Applications + musescore + ]; } From 3b7b2eb45f75d94754ba9f46eac3a9e0b435bd20 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sun, 23 Feb 2025 14:34:05 -0800 Subject: [PATCH 269/412] Librewolf, switch to hm from nixpkgs --- hmModules/apps/librewolf/app.nix | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/hmModules/apps/librewolf/app.nix b/hmModules/apps/librewolf/app.nix index f298127..b5e7682 100644 --- a/hmModules/apps/librewolf/app.nix +++ b/hmModules/apps/librewolf/app.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, ... }: +{ config, lib, ... }: { options.librewolf = { @@ -7,9 +7,7 @@ }; config = lib.mkIf config.librewolf.enable { - home.packages = with pkgs; [ - librewolf - ]; + programs.librewolf.enable = true; home.sessionVariables = { BROWSER = "librewolf"; }; From 400edf0951844005c5dfe155a6e4535d7971bc19 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sun, 23 Feb 2025 14:34:05 -0800 Subject: [PATCH 270/412] Librewolf, switch to hm from nixpkgs --- hmModules/apps/librewolf/app.nix | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/hmModules/apps/librewolf/app.nix b/hmModules/apps/librewolf/app.nix index f298127..b5e7682 100644 --- a/hmModules/apps/librewolf/app.nix +++ b/hmModules/apps/librewolf/app.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, ... }: +{ config, lib, ... }: { options.librewolf = { @@ -7,9 +7,7 @@ }; config = lib.mkIf config.librewolf.enable { - home.packages = with pkgs; [ - librewolf - ]; + programs.librewolf.enable = true; home.sessionVariables = { BROWSER = "librewolf"; }; From 863891641f1e7eba165cc33db89c2ebd5920334c Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sun, 23 Feb 2025 14:40:00 -0800 Subject: [PATCH 271/412] Nvidia, add option to use open drivers --- nixosModules/services/nvidia/service.nix | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/nixosModules/services/nvidia/service.nix b/nixosModules/services/nvidia/service.nix index 2cac182..78e4ef2 100644 --- a/nixosModules/services/nvidia/service.nix +++ b/nixosModules/services/nvidia/service.nix @@ -4,20 +4,18 @@ options.nvidia = { enable = lib.mkEnableOption "Enables nvidia with proprietary drivers"; + open = lib.mkEnableOption "Use open nvidia option for newer cards"; }; config = lib.mkIf config.nvidia.enable { hardware.graphics = { enable = true; - extraPackages = with pkgs; [ - rocm-opencl-icd - rocm-opencl-runtime - ]; }; services.xserver.videoDrivers = ["nvidia"]; hardware.nvidia = { + open = if config.nvidia.open then true else false; modesetting.enable = true; package = config.boot.kernelPackages.nvidiaPackages.beta; }; From bc07a7ba5438af902f2fbdfcc4fb3561d2da982d Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sun, 23 Feb 2025 14:40:00 -0800 Subject: [PATCH 272/412] Nvidia, add option to use open drivers --- nixosModules/services/nvidia/service.nix | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/nixosModules/services/nvidia/service.nix b/nixosModules/services/nvidia/service.nix index 2cac182..78e4ef2 100644 --- a/nixosModules/services/nvidia/service.nix +++ b/nixosModules/services/nvidia/service.nix @@ -4,20 +4,18 @@ options.nvidia = { enable = lib.mkEnableOption "Enables nvidia with proprietary drivers"; + open = lib.mkEnableOption "Use open nvidia option for newer cards"; }; config = lib.mkIf config.nvidia.enable { hardware.graphics = { enable = true; - extraPackages = with pkgs; [ - rocm-opencl-icd - rocm-opencl-runtime - ]; }; services.xserver.videoDrivers = ["nvidia"]; hardware.nvidia = { + open = if config.nvidia.open then true else false; modesetting.enable = true; package = config.boot.kernelPackages.nvidiaPackages.beta; }; From 5c4a4ef333ab5e76d7c8e3b40307d3521c4725a1 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 12 Mar 2025 22:29:53 -0700 Subject: [PATCH 273/412] Sshd, very simple sshd setup --- nixosModules/services/ssh/service.nix | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 nixosModules/services/ssh/service.nix diff --git a/nixosModules/services/ssh/service.nix b/nixosModules/services/ssh/service.nix new file mode 100644 index 0000000..e584637 --- /dev/null +++ b/nixosModules/services/ssh/service.nix @@ -0,0 +1,11 @@ +{ config, pkgs, lib, ... }: + +{ + options.sshd = { + enable = lib.mkEnableOption "Enables ssh daemon"; + }; + + config = lib.mkIf config.sshd.enable { + services.openssh.enable = true; + }; +} From a37979255d3df62145537e935b30bdd38a80b63d Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 12 Mar 2025 22:29:53 -0700 Subject: [PATCH 274/412] Sshd, very simple sshd setup --- nixosModules/services/ssh/service.nix | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 nixosModules/services/ssh/service.nix diff --git a/nixosModules/services/ssh/service.nix b/nixosModules/services/ssh/service.nix new file mode 100644 index 0000000..e584637 --- /dev/null +++ b/nixosModules/services/ssh/service.nix @@ -0,0 +1,11 @@ +{ config, pkgs, lib, ... }: + +{ + options.sshd = { + enable = lib.mkEnableOption "Enables ssh daemon"; + }; + + config = lib.mkIf config.sshd.enable { + services.openssh.enable = true; + }; +} From 7c5bbbe9f472c01c1ff8b1acc943bce5faee453a Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 12 Mar 2025 22:30:33 -0700 Subject: [PATCH 275/412] Users, add juri and update automatic start version --- hosts/juri/hardware.nix | 38 ++++++++++++++++++++++++++++++ hosts/juri/host.nix | 16 +++++++++++++ hosts/juri/users/pan/user.nix | 16 +++++++++++++ nixosModules/automatic/default.nix | 2 +- 4 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 hosts/juri/hardware.nix create mode 100644 hosts/juri/host.nix create mode 100644 hosts/juri/users/pan/user.nix diff --git a/hosts/juri/hardware.nix b/hosts/juri/hardware.nix new file mode 100644 index 0000000..768a86f --- /dev/null +++ b/hosts/juri/hardware.nix @@ -0,0 +1,38 @@ +# Do not modify this file! It was generated by ‘nixos-generate-config’ +# and may be overwritten by future invocations. Please make changes +# to /etc/nixos/configuration.nix instead. +{ config, lib, pkgs, modulesPath, ... }: + +{ + imports = [ ]; + + boot.initrd.availableKernelModules = [ "ahci" "xhci_pci" "virtio_pci" "sr_mod" "virtio_blk" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = + { device = "/dev/disk/by-uuid/9a4fe059-6451-49b3-adec-be4a2c9c6bd9"; + fsType = "ext4"; + }; + + fileSystems."/boot" = + { device = "/dev/disk/by-uuid/5483-A6C8"; + fsType = "vfat"; + options = [ "fmask=0077" "dmask=0077" ]; + }; + + swapDevices = + [ { device = "/dev/disk/by-uuid/96deb154-1888-43e2-9b64-9f7b30b82626"; } + ]; + + # Enables DHCP on each ethernet and wireless interface. In case of scripted networking + # (the default) this is the recommended approach. When using systemd-networkd it's + # still possible to use this option, but it's recommended to use it in conjunction + # with explicit per-interface declarations with `networking.interfaces..useDHCP`. + networking.useDHCP = lib.mkDefault true; + # networking.interfaces.enp1s0.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + virtualisation.hypervGuest.enable = true; +} diff --git a/hosts/juri/host.nix b/hosts/juri/host.nix new file mode 100644 index 0000000..4dd1643 --- /dev/null +++ b/hosts/juri/host.nix @@ -0,0 +1,16 @@ +{ config, ... }: + +{ + imports = [ + ./hardware.nix + ]; + system.stateVersion = "24.11"; + system.timezone = "America/Los_Angeles"; + system.users.bigWheels = [ "pan" ]; + + shell.enabledShells = [ "fish" ]; + shell.defaultShell = "fish"; + + sshd.enable = true; +} + diff --git a/hosts/juri/users/pan/user.nix b/hosts/juri/users/pan/user.nix new file mode 100644 index 0000000..67f147d --- /dev/null +++ b/hosts/juri/users/pan/user.nix @@ -0,0 +1,16 @@ +{ config, pkgs, ... }: + +{ + fish.enable = true; + git = { + enable = true; + username = "Julia Lange"; + email = "public@julialange.org"; + }; + neovim = { + enable = true; + themes.catppuccin.enable = true; + }; + lf.enable = true; + zoxide.enable = true; +} diff --git a/nixosModules/automatic/default.nix b/nixosModules/automatic/default.nix index a48158b..3afd663 100644 --- a/nixosModules/automatic/default.nix +++ b/nixosModules/automatic/default.nix @@ -22,7 +22,7 @@ }) { networking.hostName = hostname; - system.stateVersion = "23.05"; + system.stateVersion = lib.mkDefault "23.05"; time.timeZone = config.system.timezone; i18n.defaultLocale = "en_US.UTF-8"; From f27cec2c9a680c84b916dca150d1bed014730f6d Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 12 Mar 2025 22:30:33 -0700 Subject: [PATCH 276/412] Users, add juri and update automatic start version --- hosts/juri/hardware.nix | 38 ++++++++++++++++++++++++++++++ hosts/juri/host.nix | 16 +++++++++++++ hosts/juri/users/pan/user.nix | 16 +++++++++++++ nixosModules/automatic/default.nix | 2 +- 4 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 hosts/juri/hardware.nix create mode 100644 hosts/juri/host.nix create mode 100644 hosts/juri/users/pan/user.nix diff --git a/hosts/juri/hardware.nix b/hosts/juri/hardware.nix new file mode 100644 index 0000000..768a86f --- /dev/null +++ b/hosts/juri/hardware.nix @@ -0,0 +1,38 @@ +# Do not modify this file! It was generated by ‘nixos-generate-config’ +# and may be overwritten by future invocations. Please make changes +# to /etc/nixos/configuration.nix instead. +{ config, lib, pkgs, modulesPath, ... }: + +{ + imports = [ ]; + + boot.initrd.availableKernelModules = [ "ahci" "xhci_pci" "virtio_pci" "sr_mod" "virtio_blk" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = + { device = "/dev/disk/by-uuid/9a4fe059-6451-49b3-adec-be4a2c9c6bd9"; + fsType = "ext4"; + }; + + fileSystems."/boot" = + { device = "/dev/disk/by-uuid/5483-A6C8"; + fsType = "vfat"; + options = [ "fmask=0077" "dmask=0077" ]; + }; + + swapDevices = + [ { device = "/dev/disk/by-uuid/96deb154-1888-43e2-9b64-9f7b30b82626"; } + ]; + + # Enables DHCP on each ethernet and wireless interface. In case of scripted networking + # (the default) this is the recommended approach. When using systemd-networkd it's + # still possible to use this option, but it's recommended to use it in conjunction + # with explicit per-interface declarations with `networking.interfaces..useDHCP`. + networking.useDHCP = lib.mkDefault true; + # networking.interfaces.enp1s0.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + virtualisation.hypervGuest.enable = true; +} diff --git a/hosts/juri/host.nix b/hosts/juri/host.nix new file mode 100644 index 0000000..4dd1643 --- /dev/null +++ b/hosts/juri/host.nix @@ -0,0 +1,16 @@ +{ config, ... }: + +{ + imports = [ + ./hardware.nix + ]; + system.stateVersion = "24.11"; + system.timezone = "America/Los_Angeles"; + system.users.bigWheels = [ "pan" ]; + + shell.enabledShells = [ "fish" ]; + shell.defaultShell = "fish"; + + sshd.enable = true; +} + diff --git a/hosts/juri/users/pan/user.nix b/hosts/juri/users/pan/user.nix new file mode 100644 index 0000000..67f147d --- /dev/null +++ b/hosts/juri/users/pan/user.nix @@ -0,0 +1,16 @@ +{ config, pkgs, ... }: + +{ + fish.enable = true; + git = { + enable = true; + username = "Julia Lange"; + email = "public@julialange.org"; + }; + neovim = { + enable = true; + themes.catppuccin.enable = true; + }; + lf.enable = true; + zoxide.enable = true; +} diff --git a/nixosModules/automatic/default.nix b/nixosModules/automatic/default.nix index a48158b..3afd663 100644 --- a/nixosModules/automatic/default.nix +++ b/nixosModules/automatic/default.nix @@ -22,7 +22,7 @@ }) { networking.hostName = hostname; - system.stateVersion = "23.05"; + system.stateVersion = lib.mkDefault "23.05"; time.timeZone = config.system.timezone; i18n.defaultLocale = "en_US.UTF-8"; From 66ba9163cbf76d4ceada4dc8848f86f024f6bf05 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 12 Mar 2025 22:32:46 -0700 Subject: [PATCH 277/412] Flake update 2025-03-12, remove Lix (build-time) --- flake.lock | 175 ++++++++++++++++++++++++++++++++--------------------- flake.nix | 1 - 2 files changed, 107 insertions(+), 69 deletions(-) diff --git a/flake.lock b/flake.lock index 080e7a3..c080ad3 100644 --- a/flake.lock +++ b/flake.lock @@ -6,11 +6,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1736877444, - "narHash": "sha256-K25atZ9alRsGb6TW+rRcpJTbtP5tnb3qusd762B2qWw=", + "lastModified": 1740876632, + "narHash": "sha256-u695YUS3R5HI1VQp7feCifWYOn3Gh6yGde1vp5rKqTg=", "owner": "ezKEa", "repo": "aagl-gtk-on-nix", - "rev": "a1f0ce3bfbe9f0cc81e8b7def5e652a021e95c98", + "rev": "5505af25160f16ad26f9107aebee9ea7713b59d9", "type": "github" }, "original": { @@ -25,11 +25,11 @@ "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1736677288, - "narHash": "sha256-Vj3WOLy6o6Zf44Rwg9eLqNRQPlVoDrQ89tsef3l3990=", + "lastModified": 1738087375, + "narHash": "sha256-GLyNtU9A2VN22jNRHZ2OXuFfTJLh8uEVVt+ftsKUX0c=", "owner": "Aylur", "repo": "ags", - "rev": "90db9b9fecc0f4228440d83107c6c745a35e7d77", + "rev": "a6a7a0adb17740f4c34a59902701870d46fbb6a4", "type": "github" }, "original": { @@ -58,11 +58,11 @@ ] }, "locked": { - "lastModified": 1736102453, - "narHash": "sha256-5qb4kb7Xbt8jJFL/oDqOor9Z2+E+A+ql3PiyDvsfWZ0=", + "lastModified": 1741282631, + "narHash": "sha256-jZE1CmQ53uN1Gq4FjaLFzSSjDqzL0pG4mdRbjBqSmho=", "owner": "hyprwm", "repo": "aquamarine", - "rev": "4846091641f3be0ad7542086d52769bb7932bde6", + "rev": "81498562d0f53e613d30368bb5b076784fa86f80", "type": "github" }, "original": { @@ -79,11 +79,11 @@ ] }, "locked": { - "lastModified": 1735172721, - "narHash": "sha256-rtEAwGsHSppnkR3Qg3eRJ6Xh/F84IY9CrBBLzYabalY=", + "lastModified": 1737670815, + "narHash": "sha256-ZCxxshGN7XooabArcoGkYSNx5yVunqjKJi2aTv6cznI=", "owner": "aylur", "repo": "astal", - "rev": "6c84b64efc736e039a8a10774a4a1bf772c37aa2", + "rev": "127e9cdcbf173846a3c40ddc0abfbb038df48042", "type": "github" }, "original": { @@ -184,11 +184,11 @@ "nixpkgs": "nixpkgs_3" }, "locked": { - "lastModified": 1737120639, - "narHash": "sha256-p5e/45V41YD3tMELuiNIoVCa25/w4nhOTm0B9MtdHFI=", + "lastModified": 1741791118, + "narHash": "sha256-4Y427uj0eql4yRU5rely3EcOlB9q457UDbG9omPtXiA=", "owner": "nix-community", "repo": "home-manager", - "rev": "a0046af169ce7b1da503974e1b22c48ef4d71887", + "rev": "18780912345970e5b546b1b085385789b6935a83", "type": "github" }, "original": { @@ -213,11 +213,11 @@ ] }, "locked": { - "lastModified": 1734906540, - "narHash": "sha256-vQ/L9hZFezC0LquLo4TWXkyniWtYBlFHAKIsDc7PYJE=", + "lastModified": 1738664950, + "narHash": "sha256-xIeGNM+iivwVHkv9tHwOqoUP5dDrtees34bbFKKMZYs=", "owner": "hyprwm", "repo": "hyprcursor", - "rev": "69270ba8f057d55b0e6c2dca0e165d652856e613", + "rev": "7c6d165e1eb9045a996551eb9f121b6d1b30adc3", "type": "github" }, "original": { @@ -242,11 +242,11 @@ ] }, "locked": { - "lastModified": 1736115290, - "narHash": "sha256-Jcn6yAzfUMcxy3tN/iZRbi/QgrYm7XLyVRl9g/nbUl4=", + "lastModified": 1739049071, + "narHash": "sha256-3+7TpXMrbsUXSwgr5VAKAnmkzMb6JO+Rvc9XRb5NMg4=", "owner": "hyprwm", "repo": "hyprgraphics", - "rev": "52202272d89da32a9f866c0d10305a5e3d954c50", + "rev": "175c6b29b6ff82100539e7c4363a35a02c74dd73", "type": "github" }, "original": { @@ -271,11 +271,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1737145437, - "narHash": "sha256-Pw5yG6LdFJCE+ThFjXOJ/mrs4WJGceHSi/be74bnwLs=", + "lastModified": 1741788549, + "narHash": "sha256-Ot/AuQGw5KJwHjyTMHWmyaduNkcE58bOCmyitZ4VxEQ=", "ref": "refs/heads/main", - "rev": "078e13f463d56a4e773aa104bca5567b9e9c8658", - "revCount": 5681, + "rev": "e86d3a14e46d19d8a47f8ceb6410546715d45f10", + "revCount": 5879, "type": "git", "url": "https://github.com/hyprwm/Hyprland" }, @@ -289,11 +289,11 @@ "nixpkgs": "nixpkgs_5" }, "locked": { - "lastModified": 1733056338, - "narHash": "sha256-sp14z0mrqrtmouz1+bU4Jh8/0xi+xwQHF2l7mhGSSVU=", + "lastModified": 1741681240, + "narHash": "sha256-SJrLVyoaQUg29fq3nNdRmYrLgiu9dtgcIVqpl8j/Teo=", "owner": "hyprwm", "repo": "contrib", - "rev": "d7c55140f1785b8d9fef351f1cd2a4c9e1eaa466", + "rev": "e14d9c5e9aea4a84c3677e0a7c73268153b15327", "type": "github" }, "original": { @@ -314,11 +314,11 @@ ] }, "locked": { - "lastModified": 1735774328, - "narHash": "sha256-vIRwLS9w+N99EU1aJ+XNOU6mJTxrUBa31i1r82l0V7s=", + "lastModified": 1738422629, + "narHash": "sha256-5v+bv75wJWvahyM2xcMTSNNxmV8a7hb01Eey5zYnBJw=", "owner": "hyprwm", "repo": "hyprland-protocols", - "rev": "e3b6af97ddcfaafbda8e2828c719a5af84f662cb", + "rev": "755aef8dab49d0fc4663c715fa4ad221b2aedaed", "type": "github" }, "original": { @@ -327,10 +327,49 @@ "type": "github" } }, + "hyprland-qt-support": { + "inputs": { + "hyprlang": [ + "hyprland", + "hyprland-qtutils", + "hyprlang" + ], + "nixpkgs": [ + "hyprland", + "hyprland-qtutils", + "nixpkgs" + ], + "systems": [ + "hyprland", + "hyprland-qtutils", + "systems" + ] + }, + "locked": { + "lastModified": 1737634706, + "narHash": "sha256-nGCibkfsXz7ARx5R+SnisRtMq21IQIhazp6viBU8I/A=", + "owner": "hyprwm", + "repo": "hyprland-qt-support", + "rev": "8810df502cdee755993cb803eba7b23f189db795", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprland-qt-support", + "type": "github" + } + }, "hyprland-qtutils": { "inputs": { + "hyprland-qt-support": "hyprland-qt-support", + "hyprlang": [ + "hyprland", + "hyprlang" + ], "hyprutils": [ "hyprland", + "hyprland-qtutils", + "hyprlang", "hyprutils" ], "nixpkgs": [ @@ -343,11 +382,11 @@ ] }, "locked": { - "lastModified": 1736114838, - "narHash": "sha256-FxbuGQExtN37ToWYnGmO6weOYN6WPHN/RAqbr7gNPek=", + "lastModified": 1739048983, + "narHash": "sha256-REhTcXq4qs3B3cCDtLlYDz0GZvmsBSh947Ub6pQWGTQ=", "owner": "hyprwm", "repo": "hyprland-qtutils", - "rev": "6997fe382dcf396704227d2b98ffdd5066da6959", + "rev": "3504a293c8f8db4127cb0f7cfc1a318ffb4316f8", "type": "github" }, "original": { @@ -372,11 +411,11 @@ ] }, "locked": { - "lastModified": 1735393019, - "narHash": "sha256-NPpqA8rtmDLsEmZOmz+qR67zsB6Y503Jnv+nSFLKJZ8=", + "lastModified": 1741191527, + "narHash": "sha256-kM+11Nch47Xwfgtw2EpRitJuORy4miwoMuRi5tyMBDY=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "55608efdaa387af7bfdc0eddb404c409958efa43", + "rev": "72df3861f1197e41b078faa3e38eedd60e00018d", "type": "github" }, "original": { @@ -397,11 +436,11 @@ ] }, "locked": { - "lastModified": 1736164519, - "narHash": "sha256-1LimBKvDpBbeX+qW7T240WEyw+DBVpDotZB4JYm8Aps=", + "lastModified": 1741123584, + "narHash": "sha256-mprerMlucqtirmbx6L3VoFnF2bGYc2WSUCj7tuc6xTQ=", "owner": "hyprwm", "repo": "hyprutils", - "rev": "3c895da64b0eb19870142196fa48c07090b441c4", + "rev": "6b0154b183f9539097f13af9b5da78ca24da6df2", "type": "github" }, "original": { @@ -422,11 +461,11 @@ ] }, "locked": { - "lastModified": 1735493474, - "narHash": "sha256-fktzv4NaqKm94VAkAoVqO/nqQlw+X0/tJJNAeCSfzK4=", + "lastModified": 1739870480, + "narHash": "sha256-SiDN5BGxa/1hAsqhgJsS03C3t2QrLgBT8u+ENJ0Qzwc=", "owner": "hyprwm", "repo": "hyprwayland-scanner", - "rev": "de913476b59ee88685fdc018e77b8f6637a2ae0b", + "rev": "206367a08dc5ac4ba7ad31bdca391d098082e64b", "type": "github" }, "original": { @@ -461,7 +500,7 @@ "narHash": "sha256-DN5/166jhiiAW0Uw6nueXaGTueVxhfZISAkoxasmz/g=", "rev": "f19bd752910bbe3a861c9cad269bd078689d50fe", "type": "tarball", - "url": "https://git.lix.systems/api/v1/repos/lix-project/nixos-module/archive/f19bd752910bbe3a861c9cad269bd078689d50fe.tar.gz?rev=f19bd752910bbe3a861c9cad269bd078689d50fe" + "url": "https://git.lix.systems/api/v1/repos/lix-project/nixos-module/archive/f19bd752910bbe3a861c9cad269bd078689d50fe.tar.gz" }, "original": { "type": "tarball", @@ -470,11 +509,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1734424634, - "narHash": "sha256-cHar1vqHOOyC7f1+tVycPoWTfKIaqkoe1Q6TnKzuti4=", + "lastModified": 1740560979, + "narHash": "sha256-Vr3Qi346M+8CjedtbyUevIGDZW8LcA1fTG0ugPY/Hic=", "owner": "nixos", "repo": "nixpkgs", - "rev": "d3c42f187194c26d9f0309a8ecc469d6c878ce33", + "rev": "5135c59491985879812717f4c9fea69604e7f26f", "type": "github" }, "original": { @@ -486,11 +525,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1734649271, - "narHash": "sha256-4EVBRhOjMDuGtMaofAIqzJbg4Ql7Ai0PSeuVZTHjyKQ=", + "lastModified": 1737469691, + "narHash": "sha256-nmKOgAU48S41dTPIXAq0AHZSehWUn6ZPrUKijHAMmIk=", "owner": "nixos", "repo": "nixpkgs", - "rev": "d70bd19e0a38ad4790d3913bf08fcbfc9eeca507", + "rev": "9e4d5190a9482a1fb9d18adf0bdb83c6e506eaab", "type": "github" }, "original": { @@ -502,11 +541,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1736012469, - "narHash": "sha256-/qlNWm/IEVVH7GfgAIyP6EsVZI6zjAx1cV5zNyrs+rI=", + "lastModified": 1741513245, + "narHash": "sha256-7rTAMNTY1xoBwz0h7ZMtEcd8LELk9R5TzBPoHuhNSCk=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "8f3e1f807051e32d8c95cd12b9b421623850a34d", + "rev": "e3e32b642a31e6714ec1b712de8c91a3352ce7e1", "type": "github" }, "original": { @@ -518,11 +557,11 @@ }, "nixpkgs_4": { "locked": { - "lastModified": 1736012469, - "narHash": "sha256-/qlNWm/IEVVH7GfgAIyP6EsVZI6zjAx1cV5zNyrs+rI=", + "lastModified": 1741246872, + "narHash": "sha256-Q6pMP4a9ed636qilcYX8XUguvKl/0/LGXhHcRI91p0U=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "8f3e1f807051e32d8c95cd12b9b421623850a34d", + "rev": "10069ef4cf863633f57238f179a0297de84bd8d3", "type": "github" }, "original": { @@ -566,11 +605,11 @@ }, "nixpkgs_7": { "locked": { - "lastModified": 1736883708, - "narHash": "sha256-uQ+NQ0/xYU0N1CnXsa2zghgNaOPxWpMJXSUJJ9W7140=", + "lastModified": 1741513245, + "narHash": "sha256-7rTAMNTY1xoBwz0h7ZMtEcd8LELk9R5TzBPoHuhNSCk=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "eb62e6aa39ea67e0b8018ba8ea077efe65807dc8", + "rev": "e3e32b642a31e6714ec1b712de8c91a3352ce7e1", "type": "github" }, "original": { @@ -605,11 +644,11 @@ ] }, "locked": { - "lastModified": 1735882644, - "narHash": "sha256-3FZAG+pGt3OElQjesCAWeMkQ7C/nB1oTHLRQ8ceP110=", + "lastModified": 1741379162, + "narHash": "sha256-srpAbmJapkaqGRE3ytf3bj4XshspVR5964OX5LfjDWc=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "a5a961387e75ae44cc20f0a57ae463da5e959656", + "rev": "b5a62751225b2f62ff3147d0a334055ebadcd5cc", "type": "github" }, "original": { @@ -635,11 +674,11 @@ "nixpkgs": "nixpkgs_8" }, "locked": { - "lastModified": 1737107480, - "narHash": "sha256-GXUE9+FgxoZU8v0p6ilBJ8NH7k8nKmZjp/7dmMrCv3o=", + "lastModified": 1741644481, + "narHash": "sha256-E0RrMykMtEv15V3QhpsFutgoSKhL1JBhidn+iZajOyg=", "owner": "Mic92", "repo": "sops-nix", - "rev": "4c4fb93f18b9072c6fa1986221f9a3d7bf1fe4b6", + "rev": "e653d71e82575a43fe9d228def8eddb73887b866", "type": "github" }, "original": { @@ -706,11 +745,11 @@ ] }, "locked": { - "lastModified": 1734907020, - "narHash": "sha256-p6HxwpRKVl1KIiY5xrJdjcEeK3pbmc///UOyV6QER+w=", + "lastModified": 1737634991, + "narHash": "sha256-dBAnb7Kbnier30cA7AgxVSxxARmxKZ1vHZT33THSIr8=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "d7f18dda5e511749fa1511185db3536208fb1a63", + "rev": "e09dfe2726c8008f983e45a0aa1a3b7416aaeb8a", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index ce8850f..d9b8179 100644 --- a/flake.nix +++ b/flake.nix @@ -82,7 +82,6 @@ }; modules = [ ./nixosModules - lix-module.nixosModules.default hostpath ]; }; From 813901ec3f387163a0f3d12026063f4a9a73f248 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 12 Mar 2025 22:32:46 -0700 Subject: [PATCH 278/412] Flake update 2025-03-12, remove Lix (build-time) --- flake.lock | 175 ++++++++++++++++++++++++++++++++--------------------- flake.nix | 1 - 2 files changed, 107 insertions(+), 69 deletions(-) diff --git a/flake.lock b/flake.lock index 080e7a3..c080ad3 100644 --- a/flake.lock +++ b/flake.lock @@ -6,11 +6,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1736877444, - "narHash": "sha256-K25atZ9alRsGb6TW+rRcpJTbtP5tnb3qusd762B2qWw=", + "lastModified": 1740876632, + "narHash": "sha256-u695YUS3R5HI1VQp7feCifWYOn3Gh6yGde1vp5rKqTg=", "owner": "ezKEa", "repo": "aagl-gtk-on-nix", - "rev": "a1f0ce3bfbe9f0cc81e8b7def5e652a021e95c98", + "rev": "5505af25160f16ad26f9107aebee9ea7713b59d9", "type": "github" }, "original": { @@ -25,11 +25,11 @@ "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1736677288, - "narHash": "sha256-Vj3WOLy6o6Zf44Rwg9eLqNRQPlVoDrQ89tsef3l3990=", + "lastModified": 1738087375, + "narHash": "sha256-GLyNtU9A2VN22jNRHZ2OXuFfTJLh8uEVVt+ftsKUX0c=", "owner": "Aylur", "repo": "ags", - "rev": "90db9b9fecc0f4228440d83107c6c745a35e7d77", + "rev": "a6a7a0adb17740f4c34a59902701870d46fbb6a4", "type": "github" }, "original": { @@ -58,11 +58,11 @@ ] }, "locked": { - "lastModified": 1736102453, - "narHash": "sha256-5qb4kb7Xbt8jJFL/oDqOor9Z2+E+A+ql3PiyDvsfWZ0=", + "lastModified": 1741282631, + "narHash": "sha256-jZE1CmQ53uN1Gq4FjaLFzSSjDqzL0pG4mdRbjBqSmho=", "owner": "hyprwm", "repo": "aquamarine", - "rev": "4846091641f3be0ad7542086d52769bb7932bde6", + "rev": "81498562d0f53e613d30368bb5b076784fa86f80", "type": "github" }, "original": { @@ -79,11 +79,11 @@ ] }, "locked": { - "lastModified": 1735172721, - "narHash": "sha256-rtEAwGsHSppnkR3Qg3eRJ6Xh/F84IY9CrBBLzYabalY=", + "lastModified": 1737670815, + "narHash": "sha256-ZCxxshGN7XooabArcoGkYSNx5yVunqjKJi2aTv6cznI=", "owner": "aylur", "repo": "astal", - "rev": "6c84b64efc736e039a8a10774a4a1bf772c37aa2", + "rev": "127e9cdcbf173846a3c40ddc0abfbb038df48042", "type": "github" }, "original": { @@ -184,11 +184,11 @@ "nixpkgs": "nixpkgs_3" }, "locked": { - "lastModified": 1737120639, - "narHash": "sha256-p5e/45V41YD3tMELuiNIoVCa25/w4nhOTm0B9MtdHFI=", + "lastModified": 1741791118, + "narHash": "sha256-4Y427uj0eql4yRU5rely3EcOlB9q457UDbG9omPtXiA=", "owner": "nix-community", "repo": "home-manager", - "rev": "a0046af169ce7b1da503974e1b22c48ef4d71887", + "rev": "18780912345970e5b546b1b085385789b6935a83", "type": "github" }, "original": { @@ -213,11 +213,11 @@ ] }, "locked": { - "lastModified": 1734906540, - "narHash": "sha256-vQ/L9hZFezC0LquLo4TWXkyniWtYBlFHAKIsDc7PYJE=", + "lastModified": 1738664950, + "narHash": "sha256-xIeGNM+iivwVHkv9tHwOqoUP5dDrtees34bbFKKMZYs=", "owner": "hyprwm", "repo": "hyprcursor", - "rev": "69270ba8f057d55b0e6c2dca0e165d652856e613", + "rev": "7c6d165e1eb9045a996551eb9f121b6d1b30adc3", "type": "github" }, "original": { @@ -242,11 +242,11 @@ ] }, "locked": { - "lastModified": 1736115290, - "narHash": "sha256-Jcn6yAzfUMcxy3tN/iZRbi/QgrYm7XLyVRl9g/nbUl4=", + "lastModified": 1739049071, + "narHash": "sha256-3+7TpXMrbsUXSwgr5VAKAnmkzMb6JO+Rvc9XRb5NMg4=", "owner": "hyprwm", "repo": "hyprgraphics", - "rev": "52202272d89da32a9f866c0d10305a5e3d954c50", + "rev": "175c6b29b6ff82100539e7c4363a35a02c74dd73", "type": "github" }, "original": { @@ -271,11 +271,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1737145437, - "narHash": "sha256-Pw5yG6LdFJCE+ThFjXOJ/mrs4WJGceHSi/be74bnwLs=", + "lastModified": 1741788549, + "narHash": "sha256-Ot/AuQGw5KJwHjyTMHWmyaduNkcE58bOCmyitZ4VxEQ=", "ref": "refs/heads/main", - "rev": "078e13f463d56a4e773aa104bca5567b9e9c8658", - "revCount": 5681, + "rev": "e86d3a14e46d19d8a47f8ceb6410546715d45f10", + "revCount": 5879, "type": "git", "url": "https://github.com/hyprwm/Hyprland" }, @@ -289,11 +289,11 @@ "nixpkgs": "nixpkgs_5" }, "locked": { - "lastModified": 1733056338, - "narHash": "sha256-sp14z0mrqrtmouz1+bU4Jh8/0xi+xwQHF2l7mhGSSVU=", + "lastModified": 1741681240, + "narHash": "sha256-SJrLVyoaQUg29fq3nNdRmYrLgiu9dtgcIVqpl8j/Teo=", "owner": "hyprwm", "repo": "contrib", - "rev": "d7c55140f1785b8d9fef351f1cd2a4c9e1eaa466", + "rev": "e14d9c5e9aea4a84c3677e0a7c73268153b15327", "type": "github" }, "original": { @@ -314,11 +314,11 @@ ] }, "locked": { - "lastModified": 1735774328, - "narHash": "sha256-vIRwLS9w+N99EU1aJ+XNOU6mJTxrUBa31i1r82l0V7s=", + "lastModified": 1738422629, + "narHash": "sha256-5v+bv75wJWvahyM2xcMTSNNxmV8a7hb01Eey5zYnBJw=", "owner": "hyprwm", "repo": "hyprland-protocols", - "rev": "e3b6af97ddcfaafbda8e2828c719a5af84f662cb", + "rev": "755aef8dab49d0fc4663c715fa4ad221b2aedaed", "type": "github" }, "original": { @@ -327,10 +327,49 @@ "type": "github" } }, + "hyprland-qt-support": { + "inputs": { + "hyprlang": [ + "hyprland", + "hyprland-qtutils", + "hyprlang" + ], + "nixpkgs": [ + "hyprland", + "hyprland-qtutils", + "nixpkgs" + ], + "systems": [ + "hyprland", + "hyprland-qtutils", + "systems" + ] + }, + "locked": { + "lastModified": 1737634706, + "narHash": "sha256-nGCibkfsXz7ARx5R+SnisRtMq21IQIhazp6viBU8I/A=", + "owner": "hyprwm", + "repo": "hyprland-qt-support", + "rev": "8810df502cdee755993cb803eba7b23f189db795", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprland-qt-support", + "type": "github" + } + }, "hyprland-qtutils": { "inputs": { + "hyprland-qt-support": "hyprland-qt-support", + "hyprlang": [ + "hyprland", + "hyprlang" + ], "hyprutils": [ "hyprland", + "hyprland-qtutils", + "hyprlang", "hyprutils" ], "nixpkgs": [ @@ -343,11 +382,11 @@ ] }, "locked": { - "lastModified": 1736114838, - "narHash": "sha256-FxbuGQExtN37ToWYnGmO6weOYN6WPHN/RAqbr7gNPek=", + "lastModified": 1739048983, + "narHash": "sha256-REhTcXq4qs3B3cCDtLlYDz0GZvmsBSh947Ub6pQWGTQ=", "owner": "hyprwm", "repo": "hyprland-qtutils", - "rev": "6997fe382dcf396704227d2b98ffdd5066da6959", + "rev": "3504a293c8f8db4127cb0f7cfc1a318ffb4316f8", "type": "github" }, "original": { @@ -372,11 +411,11 @@ ] }, "locked": { - "lastModified": 1735393019, - "narHash": "sha256-NPpqA8rtmDLsEmZOmz+qR67zsB6Y503Jnv+nSFLKJZ8=", + "lastModified": 1741191527, + "narHash": "sha256-kM+11Nch47Xwfgtw2EpRitJuORy4miwoMuRi5tyMBDY=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "55608efdaa387af7bfdc0eddb404c409958efa43", + "rev": "72df3861f1197e41b078faa3e38eedd60e00018d", "type": "github" }, "original": { @@ -397,11 +436,11 @@ ] }, "locked": { - "lastModified": 1736164519, - "narHash": "sha256-1LimBKvDpBbeX+qW7T240WEyw+DBVpDotZB4JYm8Aps=", + "lastModified": 1741123584, + "narHash": "sha256-mprerMlucqtirmbx6L3VoFnF2bGYc2WSUCj7tuc6xTQ=", "owner": "hyprwm", "repo": "hyprutils", - "rev": "3c895da64b0eb19870142196fa48c07090b441c4", + "rev": "6b0154b183f9539097f13af9b5da78ca24da6df2", "type": "github" }, "original": { @@ -422,11 +461,11 @@ ] }, "locked": { - "lastModified": 1735493474, - "narHash": "sha256-fktzv4NaqKm94VAkAoVqO/nqQlw+X0/tJJNAeCSfzK4=", + "lastModified": 1739870480, + "narHash": "sha256-SiDN5BGxa/1hAsqhgJsS03C3t2QrLgBT8u+ENJ0Qzwc=", "owner": "hyprwm", "repo": "hyprwayland-scanner", - "rev": "de913476b59ee88685fdc018e77b8f6637a2ae0b", + "rev": "206367a08dc5ac4ba7ad31bdca391d098082e64b", "type": "github" }, "original": { @@ -461,7 +500,7 @@ "narHash": "sha256-DN5/166jhiiAW0Uw6nueXaGTueVxhfZISAkoxasmz/g=", "rev": "f19bd752910bbe3a861c9cad269bd078689d50fe", "type": "tarball", - "url": "https://git.lix.systems/api/v1/repos/lix-project/nixos-module/archive/f19bd752910bbe3a861c9cad269bd078689d50fe.tar.gz?rev=f19bd752910bbe3a861c9cad269bd078689d50fe" + "url": "https://git.lix.systems/api/v1/repos/lix-project/nixos-module/archive/f19bd752910bbe3a861c9cad269bd078689d50fe.tar.gz" }, "original": { "type": "tarball", @@ -470,11 +509,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1734424634, - "narHash": "sha256-cHar1vqHOOyC7f1+tVycPoWTfKIaqkoe1Q6TnKzuti4=", + "lastModified": 1740560979, + "narHash": "sha256-Vr3Qi346M+8CjedtbyUevIGDZW8LcA1fTG0ugPY/Hic=", "owner": "nixos", "repo": "nixpkgs", - "rev": "d3c42f187194c26d9f0309a8ecc469d6c878ce33", + "rev": "5135c59491985879812717f4c9fea69604e7f26f", "type": "github" }, "original": { @@ -486,11 +525,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1734649271, - "narHash": "sha256-4EVBRhOjMDuGtMaofAIqzJbg4Ql7Ai0PSeuVZTHjyKQ=", + "lastModified": 1737469691, + "narHash": "sha256-nmKOgAU48S41dTPIXAq0AHZSehWUn6ZPrUKijHAMmIk=", "owner": "nixos", "repo": "nixpkgs", - "rev": "d70bd19e0a38ad4790d3913bf08fcbfc9eeca507", + "rev": "9e4d5190a9482a1fb9d18adf0bdb83c6e506eaab", "type": "github" }, "original": { @@ -502,11 +541,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1736012469, - "narHash": "sha256-/qlNWm/IEVVH7GfgAIyP6EsVZI6zjAx1cV5zNyrs+rI=", + "lastModified": 1741513245, + "narHash": "sha256-7rTAMNTY1xoBwz0h7ZMtEcd8LELk9R5TzBPoHuhNSCk=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "8f3e1f807051e32d8c95cd12b9b421623850a34d", + "rev": "e3e32b642a31e6714ec1b712de8c91a3352ce7e1", "type": "github" }, "original": { @@ -518,11 +557,11 @@ }, "nixpkgs_4": { "locked": { - "lastModified": 1736012469, - "narHash": "sha256-/qlNWm/IEVVH7GfgAIyP6EsVZI6zjAx1cV5zNyrs+rI=", + "lastModified": 1741246872, + "narHash": "sha256-Q6pMP4a9ed636qilcYX8XUguvKl/0/LGXhHcRI91p0U=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "8f3e1f807051e32d8c95cd12b9b421623850a34d", + "rev": "10069ef4cf863633f57238f179a0297de84bd8d3", "type": "github" }, "original": { @@ -566,11 +605,11 @@ }, "nixpkgs_7": { "locked": { - "lastModified": 1736883708, - "narHash": "sha256-uQ+NQ0/xYU0N1CnXsa2zghgNaOPxWpMJXSUJJ9W7140=", + "lastModified": 1741513245, + "narHash": "sha256-7rTAMNTY1xoBwz0h7ZMtEcd8LELk9R5TzBPoHuhNSCk=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "eb62e6aa39ea67e0b8018ba8ea077efe65807dc8", + "rev": "e3e32b642a31e6714ec1b712de8c91a3352ce7e1", "type": "github" }, "original": { @@ -605,11 +644,11 @@ ] }, "locked": { - "lastModified": 1735882644, - "narHash": "sha256-3FZAG+pGt3OElQjesCAWeMkQ7C/nB1oTHLRQ8ceP110=", + "lastModified": 1741379162, + "narHash": "sha256-srpAbmJapkaqGRE3ytf3bj4XshspVR5964OX5LfjDWc=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "a5a961387e75ae44cc20f0a57ae463da5e959656", + "rev": "b5a62751225b2f62ff3147d0a334055ebadcd5cc", "type": "github" }, "original": { @@ -635,11 +674,11 @@ "nixpkgs": "nixpkgs_8" }, "locked": { - "lastModified": 1737107480, - "narHash": "sha256-GXUE9+FgxoZU8v0p6ilBJ8NH7k8nKmZjp/7dmMrCv3o=", + "lastModified": 1741644481, + "narHash": "sha256-E0RrMykMtEv15V3QhpsFutgoSKhL1JBhidn+iZajOyg=", "owner": "Mic92", "repo": "sops-nix", - "rev": "4c4fb93f18b9072c6fa1986221f9a3d7bf1fe4b6", + "rev": "e653d71e82575a43fe9d228def8eddb73887b866", "type": "github" }, "original": { @@ -706,11 +745,11 @@ ] }, "locked": { - "lastModified": 1734907020, - "narHash": "sha256-p6HxwpRKVl1KIiY5xrJdjcEeK3pbmc///UOyV6QER+w=", + "lastModified": 1737634991, + "narHash": "sha256-dBAnb7Kbnier30cA7AgxVSxxARmxKZ1vHZT33THSIr8=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "d7f18dda5e511749fa1511185db3536208fb1a63", + "rev": "e09dfe2726c8008f983e45a0aa1a3b7416aaeb8a", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index ce8850f..d9b8179 100644 --- a/flake.nix +++ b/flake.nix @@ -82,7 +82,6 @@ }; modules = [ ./nixosModules - lix-module.nixosModules.default hostpath ]; }; From 224f3e5555137703cc23b0840ea26d8d5a7da52c Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 17 Mar 2025 12:31:06 -0700 Subject: [PATCH 279/412] Sshd, 922 port and no password auth --- nixosModules/services/ssh/service.nix | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/nixosModules/services/ssh/service.nix b/nixosModules/services/ssh/service.nix index e584637..56f7147 100644 --- a/nixosModules/services/ssh/service.nix +++ b/nixosModules/services/ssh/service.nix @@ -6,6 +6,13 @@ }; config = lib.mkIf config.sshd.enable { - services.openssh.enable = true; + services.openssh = { + enable = true; + ports = [ 922 ]; + settings = { + PasswordAuthentication = false; + PermitRootLogin = "no"; + }; + }; }; } From c4201b7810846da602be836266d287f8e4d2099b Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 17 Mar 2025 12:31:06 -0700 Subject: [PATCH 280/412] Sshd, 922 port and no password auth --- nixosModules/services/ssh/service.nix | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/nixosModules/services/ssh/service.nix b/nixosModules/services/ssh/service.nix index e584637..56f7147 100644 --- a/nixosModules/services/ssh/service.nix +++ b/nixosModules/services/ssh/service.nix @@ -6,6 +6,13 @@ }; config = lib.mkIf config.sshd.enable { - services.openssh.enable = true; + services.openssh = { + enable = true; + ports = [ 922 ]; + settings = { + PasswordAuthentication = false; + PermitRootLogin = "no"; + }; + }; }; } From efa7cd004eb5b6c94b48fd7c318652ff0ed212f6 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 17 Mar 2025 13:53:19 -0700 Subject: [PATCH 281/412] Sops, fix regex from systems to hosts, add Juri --- .sops.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.sops.yaml b/.sops.yaml index 56dcd1f..ce0eba6 100644 --- a/.sops.yaml +++ b/.sops.yaml @@ -5,9 +5,11 @@ keys: - &onizuka age1ey3wr2wnkgny3dfgvnyrf0cptwzr7s5x464p2y9ya58lpay8lfrsds3y68 - &jibril age1n8936ux6ushjyz3kuumdrz63jcwsvz7qkfj66rrkgk8d78wl2dssgev4tm + - &juri age13udaj4rx4g5fwqe5qg8e3lh3dqqp9me4qqq66z2s9qev4z8pyv5q9m8e72 creation_rules: - - path_regex: systems/[^/]+/secrets\.yaml$ + - path_regex: hosts/[^/]+/secrets\.yaml$ key_groups: - age: - *onizuka - *jibril + - *juri From c383aee76e51cd5912d16fe66f3c443a2a1ddb78 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 17 Mar 2025 13:53:19 -0700 Subject: [PATCH 282/412] Sops, fix regex from systems to hosts, add Juri --- .sops.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.sops.yaml b/.sops.yaml index 56dcd1f..ce0eba6 100644 --- a/.sops.yaml +++ b/.sops.yaml @@ -5,9 +5,11 @@ keys: - &onizuka age1ey3wr2wnkgny3dfgvnyrf0cptwzr7s5x464p2y9ya58lpay8lfrsds3y68 - &jibril age1n8936ux6ushjyz3kuumdrz63jcwsvz7qkfj66rrkgk8d78wl2dssgev4tm + - &juri age13udaj4rx4g5fwqe5qg8e3lh3dqqp9me4qqq66z2s9qev4z8pyv5q9m8e72 creation_rules: - - path_regex: systems/[^/]+/secrets\.yaml$ + - path_regex: hosts/[^/]+/secrets\.yaml$ key_groups: - age: - *onizuka - *jibril + - *juri From cb75b0a444104e78dab4dd7f5ab7ecf11bccd660 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 17 Mar 2025 16:17:07 -0700 Subject: [PATCH 283/412] Pds, add default pds with config options --- nixosModules/services/pds/service.nix | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 nixosModules/services/pds/service.nix diff --git a/nixosModules/services/pds/service.nix b/nixosModules/services/pds/service.nix new file mode 100644 index 0000000..500179e --- /dev/null +++ b/nixosModules/services/pds/service.nix @@ -0,0 +1,21 @@ +{ config, pkgs, lib, ... }: + +{ + options.pds = { + enable = lib.mkEnableOption "Enables atproto Personal Data Server"; + hostname = lib.mkOption { type = lib.types.str; }; + adminEmail = lib.mkOption { type = lib.types.str; }; + environmentFile = lib.mkOption { type = lib.types.path; }; + }; + + config = lib.mkIf config.pds.enable { + services.pds = { + enable = true; + environmentFiles = [ config.pds.environmentFile ]; + settings = { + PDS_HOSTNAME = config.pds.hostname; + PDS_ADMIN_EMAIL = config.pds.adminEmail; + }; + }; + }; +} From 1182970d58ac518aff3bb4fcb517425ad7953353 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 17 Mar 2025 16:17:07 -0700 Subject: [PATCH 284/412] Pds, add default pds with config options --- nixosModules/services/pds/service.nix | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 nixosModules/services/pds/service.nix diff --git a/nixosModules/services/pds/service.nix b/nixosModules/services/pds/service.nix new file mode 100644 index 0000000..500179e --- /dev/null +++ b/nixosModules/services/pds/service.nix @@ -0,0 +1,21 @@ +{ config, pkgs, lib, ... }: + +{ + options.pds = { + enable = lib.mkEnableOption "Enables atproto Personal Data Server"; + hostname = lib.mkOption { type = lib.types.str; }; + adminEmail = lib.mkOption { type = lib.types.str; }; + environmentFile = lib.mkOption { type = lib.types.path; }; + }; + + config = lib.mkIf config.pds.enable { + services.pds = { + enable = true; + environmentFiles = [ config.pds.environmentFile ]; + settings = { + PDS_HOSTNAME = config.pds.hostname; + PDS_ADMIN_EMAIL = config.pds.adminEmail; + }; + }; + }; +} From eed568e289a5a001d5f1b2248daef6e1af9fe658 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 17 Mar 2025 16:18:17 -0700 Subject: [PATCH 285/412] Juri, add sops and pds invocation --- hosts/juri/host.nix | 16 ++++++++++++++++ hosts/juri/secrets.yaml | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 hosts/juri/secrets.yaml diff --git a/hosts/juri/host.nix b/hosts/juri/host.nix index 4dd1643..24d7558 100644 --- a/hosts/juri/host.nix +++ b/hosts/juri/host.nix @@ -8,6 +8,22 @@ system.timezone = "America/Los_Angeles"; system.users.bigWheels = [ "pan" ]; + sops-nix = { + enable = true; + keyFile = "/etc/sops/age/keys.txt"; + sopsFile = ./secrets.yaml; + secrets = { + pdsEnv = {}; + }; + }; + + pds = { + enable = true; + hostname = "juri.woach.me"; + adminEmail = "admin@woach.me"; + environmentFile = config.sops.secrets.pdsEnv.path; + }; + shell.enabledShells = [ "fish" ]; shell.defaultShell = "fish"; diff --git a/hosts/juri/secrets.yaml b/hosts/juri/secrets.yaml new file mode 100644 index 0000000..ee434f8 --- /dev/null +++ b/hosts/juri/secrets.yaml @@ -0,0 +1,39 @@ +pdsEnv: ENC[AES256_GCM,data:W1kKvcntrBOSgo7gLxwO8A9ZkWjkRWfUDZUMy5YNvhzqYS5xBPGL4QEcknWtQaVfaZklnO/+Gr5JEq/qgU2nIEY3xazfjYl4MNkZBhuwI20RwZB9voVubzHbPwjLtZbNTXRMa7BzO6a3ieSudKWAMP0dumG3/+wHtTYOM6lxUBfpw51+lNikc7kLqI+lzys0jC37ajP0/cm/U644BD0ozSSF289CLtXSkLt8sgHvA1ci8M+wEEq4aJ0JTVs98m0E7Udaride4tjLelESx3hPdoVzBIEa,iv:sQiYE//UGGA2qPfbM9//FcKEued6t8ORiKW8kfzLtz0=,tag:Fj+CzBgL8MH/6FLnUadIPQ==,type:str] +sops: + kms: [] + gcp_kms: [] + azure_kv: [] + hc_vault: [] + age: + - recipient: age1ey3wr2wnkgny3dfgvnyrf0cptwzr7s5x464p2y9ya58lpay8lfrsds3y68 + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBJVTNqTDZmRmcyek53SWtx + NDBIYzZYRHFmblNKTHh0WTQzQm1XMUlsQW53ClJibzc4VFlKWFpkZmJBVVFyRWJY + K000dXFzMlRnUTZuVGhCYy80NVZXUjQKLS0tIGVYdVh2SVdxam9aczNYK3ZZTmh2 + TEFUOVk5MzBRbUJnd0JobUpuVjdweHcK7rSkAlsHsfxOeAOoY9FBn91x1+jJbG9l + 5svl6BOCzbjso9n3EALJ+yBl58+9CKWn4ssQPr1C3NTIiCCQ9gjYww== + -----END AGE ENCRYPTED FILE----- + - recipient: age1n8936ux6ushjyz3kuumdrz63jcwsvz7qkfj66rrkgk8d78wl2dssgev4tm + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAxZ3dobkxsQm83VE1GY0dH + RTduRzRISmovWHhrYWFSQ1J6UkY2WGVleTBnCkYvR0J4d1cyQjhNTkErTVowLzRy + NkE4QzkrdGxaVStYODQ3Z0oxR0RxaVEKLS0tIFRhaXRZcnZpNjgrdGtlOC82Q0l5 + eGZBNXV4SFVHUTFYazB3RFdab1pTdlUKPagc8o7qhryN8t8YllZW2/NFkcvVjihz + 1i3VV7pdxjc870bwZ/gflHGygSDCsAcZnWwIjFDz2lbF/lEGfSE6Aw== + -----END AGE ENCRYPTED FILE----- + - recipient: age13udaj4rx4g5fwqe5qg8e3lh3dqqp9me4qqq66z2s9qev4z8pyv5q9m8e72 + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBRK3MyYWFGeGZWNmhoTUoy + cFlNS1RVUmQwSTRYUXVkMVByV1ptdXpTdW40CjVtZDhIdnMxL3NLOEI1MGpOZHlv + cDc4Zmt4UmFEUFZoWERJbkFjKzRaSXcKLS0tIFQyNkh2V3RySkEyMHZmVGQxOGMw + N3NhMHp3V1ppclQvWTIxNkM5RjhRV0EKl8goB9tCl0BGi4jN7Fzuh0Ajm146x2Hu + vesj+ENu2E9II3OeYuBndD+Y4x2zugIpzNOPg1V8zkarJOf7R/sXEw== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2025-03-17T22:11:41Z" + mac: ENC[AES256_GCM,data:0eCl7IHwfmBVYXOESIjK4DXzAe56fWWQKprmAVVyaCipmnAfgZieDm9esU4asRibROUtbOXplTBvtAGSqG1C8C15ecNN+WCB4lXM8cKtrwkXqCp6u6bUPn+ioQSrHBDLDWK7M4NWCiPi+2FwIwQJSaKGxJtF+v2wuufd4/JsU8Q=,iv:vgz7gQ3lmG8+UhnGhcn0Z+xMzJbeC6lmWyPyrZ+mOcs=,tag:tEg4WZ5+KYGtr6iR8G1rlg==,type:str] + pgp: [] + unencrypted_suffix: _unencrypted + version: 3.9.4 From de1f6d020f36376d0976f3e3688484796d72f49d Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 17 Mar 2025 16:18:17 -0700 Subject: [PATCH 286/412] Juri, add sops and pds invocation --- hosts/juri/host.nix | 16 ++++++++++++++++ hosts/juri/secrets.yaml | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 hosts/juri/secrets.yaml diff --git a/hosts/juri/host.nix b/hosts/juri/host.nix index 4dd1643..24d7558 100644 --- a/hosts/juri/host.nix +++ b/hosts/juri/host.nix @@ -8,6 +8,22 @@ system.timezone = "America/Los_Angeles"; system.users.bigWheels = [ "pan" ]; + sops-nix = { + enable = true; + keyFile = "/etc/sops/age/keys.txt"; + sopsFile = ./secrets.yaml; + secrets = { + pdsEnv = {}; + }; + }; + + pds = { + enable = true; + hostname = "juri.woach.me"; + adminEmail = "admin@woach.me"; + environmentFile = config.sops.secrets.pdsEnv.path; + }; + shell.enabledShells = [ "fish" ]; shell.defaultShell = "fish"; diff --git a/hosts/juri/secrets.yaml b/hosts/juri/secrets.yaml new file mode 100644 index 0000000..ee434f8 --- /dev/null +++ b/hosts/juri/secrets.yaml @@ -0,0 +1,39 @@ +pdsEnv: ENC[AES256_GCM,data:W1kKvcntrBOSgo7gLxwO8A9ZkWjkRWfUDZUMy5YNvhzqYS5xBPGL4QEcknWtQaVfaZklnO/+Gr5JEq/qgU2nIEY3xazfjYl4MNkZBhuwI20RwZB9voVubzHbPwjLtZbNTXRMa7BzO6a3ieSudKWAMP0dumG3/+wHtTYOM6lxUBfpw51+lNikc7kLqI+lzys0jC37ajP0/cm/U644BD0ozSSF289CLtXSkLt8sgHvA1ci8M+wEEq4aJ0JTVs98m0E7Udaride4tjLelESx3hPdoVzBIEa,iv:sQiYE//UGGA2qPfbM9//FcKEued6t8ORiKW8kfzLtz0=,tag:Fj+CzBgL8MH/6FLnUadIPQ==,type:str] +sops: + kms: [] + gcp_kms: [] + azure_kv: [] + hc_vault: [] + age: + - recipient: age1ey3wr2wnkgny3dfgvnyrf0cptwzr7s5x464p2y9ya58lpay8lfrsds3y68 + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBJVTNqTDZmRmcyek53SWtx + NDBIYzZYRHFmblNKTHh0WTQzQm1XMUlsQW53ClJibzc4VFlKWFpkZmJBVVFyRWJY + K000dXFzMlRnUTZuVGhCYy80NVZXUjQKLS0tIGVYdVh2SVdxam9aczNYK3ZZTmh2 + TEFUOVk5MzBRbUJnd0JobUpuVjdweHcK7rSkAlsHsfxOeAOoY9FBn91x1+jJbG9l + 5svl6BOCzbjso9n3EALJ+yBl58+9CKWn4ssQPr1C3NTIiCCQ9gjYww== + -----END AGE ENCRYPTED FILE----- + - recipient: age1n8936ux6ushjyz3kuumdrz63jcwsvz7qkfj66rrkgk8d78wl2dssgev4tm + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAxZ3dobkxsQm83VE1GY0dH + RTduRzRISmovWHhrYWFSQ1J6UkY2WGVleTBnCkYvR0J4d1cyQjhNTkErTVowLzRy + NkE4QzkrdGxaVStYODQ3Z0oxR0RxaVEKLS0tIFRhaXRZcnZpNjgrdGtlOC82Q0l5 + eGZBNXV4SFVHUTFYazB3RFdab1pTdlUKPagc8o7qhryN8t8YllZW2/NFkcvVjihz + 1i3VV7pdxjc870bwZ/gflHGygSDCsAcZnWwIjFDz2lbF/lEGfSE6Aw== + -----END AGE ENCRYPTED FILE----- + - recipient: age13udaj4rx4g5fwqe5qg8e3lh3dqqp9me4qqq66z2s9qev4z8pyv5q9m8e72 + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBRK3MyYWFGeGZWNmhoTUoy + cFlNS1RVUmQwSTRYUXVkMVByV1ptdXpTdW40CjVtZDhIdnMxL3NLOEI1MGpOZHlv + cDc4Zmt4UmFEUFZoWERJbkFjKzRaSXcKLS0tIFQyNkh2V3RySkEyMHZmVGQxOGMw + N3NhMHp3V1ppclQvWTIxNkM5RjhRV0EKl8goB9tCl0BGi4jN7Fzuh0Ajm146x2Hu + vesj+ENu2E9II3OeYuBndD+Y4x2zugIpzNOPg1V8zkarJOf7R/sXEw== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2025-03-17T22:11:41Z" + mac: ENC[AES256_GCM,data:0eCl7IHwfmBVYXOESIjK4DXzAe56fWWQKprmAVVyaCipmnAfgZieDm9esU4asRibROUtbOXplTBvtAGSqG1C8C15ecNN+WCB4lXM8cKtrwkXqCp6u6bUPn+ioQSrHBDLDWK7M4NWCiPi+2FwIwQJSaKGxJtF+v2wuufd4/JsU8Q=,iv:vgz7gQ3lmG8+UhnGhcn0Z+xMzJbeC6lmWyPyrZ+mOcs=,tag:tEg4WZ5+KYGtr6iR8G1rlg==,type:str] + pgp: [] + unencrypted_suffix: _unencrypted + version: 3.9.4 From 57a1d1f5b9de864e7797429ef93895a7a2eff145 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 17 Mar 2025 16:26:56 -0700 Subject: [PATCH 287/412] Polkit,Hypr, update kde-packages to qt6, remove portal There is a warning to update before deprecation. This is a fix for that. Remove a conflicting portal implementation --- hmModules/apps/hypr/app.nix | 5 ++--- nixosModules/services/polkit/service.nix | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/hmModules/apps/hypr/app.nix b/hmModules/apps/hypr/app.nix index 58a441a..85e7b6f 100644 --- a/hmModules/apps/hypr/app.nix +++ b/hmModules/apps/hypr/app.nix @@ -115,7 +115,7 @@ let rootPath = ./.; in }; exec-once = lopts config.hypr.polkit.enable [ - "${pkgs.polkit-kde-agent}/bin/libexec/polkit-kde-authentication-agent-1" + "${pkgs.kdePackages.polkit-kde-agent-1}/bin/libexec/polkit-kde-authentication-agent-1" ] ++ lopts config.hypr.background.enable [ "${pkgs.swww}/bin/swww-daemon" "${pkgs.swww}/bin/swww img ${config.hypr.background.path}" @@ -229,9 +229,8 @@ let rootPath = ./.; in home.packages = with pkgs; [ wlr-randr # Xrandr for wayland wl-clipboard # Clipboard manager for wayland - xdg-desktop-portal-hyprland # XDP for hyprland ] ++ lopts config.hypr.xwayland.videobridge.enable [ - xwaylandvideobridge + kdePackages.xwaylandvideobridge ] ++ lopts config.hypr.cursor.enable [ hyprcursor ] ++ lopts config.hypr.screenshot.enable [ diff --git a/nixosModules/services/polkit/service.nix b/nixosModules/services/polkit/service.nix index 36c77a5..0c77dda 100644 --- a/nixosModules/services/polkit/service.nix +++ b/nixosModules/services/polkit/service.nix @@ -8,7 +8,7 @@ config = lib.mkIf config.polkit.enable { security.polkit.enable = true; environment.systemPackages = with pkgs; [ - polkit-kde-agent + kdePackages.polkit-kde-agent-1 ]; }; } From f6bced0e83c45cffba576d748cad3621e1af69d8 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 17 Mar 2025 16:26:56 -0700 Subject: [PATCH 288/412] Polkit,Hypr, update kde-packages to qt6, remove portal There is a warning to update before deprecation. This is a fix for that. Remove a conflicting portal implementation --- hmModules/apps/hypr/app.nix | 5 ++--- nixosModules/services/polkit/service.nix | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/hmModules/apps/hypr/app.nix b/hmModules/apps/hypr/app.nix index 58a441a..85e7b6f 100644 --- a/hmModules/apps/hypr/app.nix +++ b/hmModules/apps/hypr/app.nix @@ -115,7 +115,7 @@ let rootPath = ./.; in }; exec-once = lopts config.hypr.polkit.enable [ - "${pkgs.polkit-kde-agent}/bin/libexec/polkit-kde-authentication-agent-1" + "${pkgs.kdePackages.polkit-kde-agent-1}/bin/libexec/polkit-kde-authentication-agent-1" ] ++ lopts config.hypr.background.enable [ "${pkgs.swww}/bin/swww-daemon" "${pkgs.swww}/bin/swww img ${config.hypr.background.path}" @@ -229,9 +229,8 @@ let rootPath = ./.; in home.packages = with pkgs; [ wlr-randr # Xrandr for wayland wl-clipboard # Clipboard manager for wayland - xdg-desktop-portal-hyprland # XDP for hyprland ] ++ lopts config.hypr.xwayland.videobridge.enable [ - xwaylandvideobridge + kdePackages.xwaylandvideobridge ] ++ lopts config.hypr.cursor.enable [ hyprcursor ] ++ lopts config.hypr.screenshot.enable [ diff --git a/nixosModules/services/polkit/service.nix b/nixosModules/services/polkit/service.nix index 36c77a5..0c77dda 100644 --- a/nixosModules/services/polkit/service.nix +++ b/nixosModules/services/polkit/service.nix @@ -8,7 +8,7 @@ config = lib.mkIf config.polkit.enable { security.polkit.enable = true; environment.systemPackages = with pkgs; [ - polkit-kde-agent + kdePackages.polkit-kde-agent-1 ]; }; } From 68b38ecb38667f56295f02fe3140af40f420ea7c Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sun, 16 Mar 2025 20:02:24 -0700 Subject: [PATCH 289/412] Onizuka, fix hypr and new hosts structure --- hosts/onizuka/host.nix | 15 ++++++--------- hosts/onizuka/users/pan/user.nix | 23 +++++++---------------- 2 files changed, 13 insertions(+), 25 deletions(-) diff --git a/hosts/onizuka/host.nix b/hosts/onizuka/host.nix index 2fdaf05..619a462 100644 --- a/hosts/onizuka/host.nix +++ b/hosts/onizuka/host.nix @@ -9,21 +9,18 @@ polkit.enable = true; tablet.enable = true; - user.name = "pan"; - user.timezone = "America/Los_Angeles"; - system.doAutoUpgrade = true; + system.timezone = "America/Los_Angeles"; + system.users.bigWheels = [ "pan" ]; tuigreet.enable = true; hyprland.enable = true; - librewolf.enable = true; - fish.enable = true; - fish.setDefault = true; - syncthing.enable = true; - steam.enable = true; - steam.gamemode.enable = true; + steam.gamemode = true; aagl.enable = true; aagl.honkai-rail = true; input-remapper.enable = true; + + shell.enabledShells = [ "fish" ]; + shell.defaultShell = "fish"; } diff --git a/hosts/onizuka/users/pan/user.nix b/hosts/onizuka/users/pan/user.nix index f59b05b..62ec37a 100644 --- a/hosts/onizuka/users/pan/user.nix +++ b/hosts/onizuka/users/pan/user.nix @@ -1,20 +1,12 @@ { config, pkgs, ... }: { - home.username = "pan"; - nixpkgs.config.allowUnfree = true; - home.stateVersion = "23.05"; - hypr.enable = true; - hypr.monitor = { - details = [ + hypr.monitor.details = [ "DP-2,2560x1440@144,0x0,1" "DP-1,2560x1440@144,-2560x0,1" "HDMI-A-1,disable" ]; - primary = "DP-2"; - secondary = "DP-1"; - }; hypr.workspace = { workspaces = { "DP-2" = [ @@ -29,13 +21,13 @@ }; scratchpad.enable = true; defaults = { - "name:web" = [ "librewolf" ]; - "name:med" = [ "librewolf,title:Picture-in-Picture" ]; - "name:chat" = [ "Beeper" ]; - "name:game" = [ "lutris" "explorer.exe" ]; + "name:web" = [ "class:(librewolf)" ]; + "name:med" = [ "class:(librewolf),title:Picture-in-Picture" ]; + "name:chat" = [ "class:(Beeper)" ]; + "name:game" = [ "class:(lutris)" "class:(explorer.exe)" ]; }; }; - windows.opaque = [ + hypr.windows.opaque = [ "initialTitle:^(Discord Popout)$" "class:^(firefox)$" "class:^(Gimp)$" @@ -57,7 +49,6 @@ master.mfact = 0.53; xwayland.videobridge.enable = true; }; - ags.enable = true; rofi.enable = true; timer.enableHourly = true; @@ -126,7 +117,7 @@ lutgen # LUT generator prismlauncher # Minecraft launcher jdk8 # For playing older minecraft - gnucash # Personal Finance Manager zoom-us # Zoom + musescore ]; } From 9dd0a9bbded14bc54352019fd7087afddbdc3f7a Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Sun, 16 Mar 2025 20:02:24 -0700 Subject: [PATCH 290/412] Onizuka, fix hypr and new hosts structure --- hosts/onizuka/host.nix | 15 ++++++--------- hosts/onizuka/users/pan/user.nix | 23 +++++++---------------- 2 files changed, 13 insertions(+), 25 deletions(-) diff --git a/hosts/onizuka/host.nix b/hosts/onizuka/host.nix index 2fdaf05..619a462 100644 --- a/hosts/onizuka/host.nix +++ b/hosts/onizuka/host.nix @@ -9,21 +9,18 @@ polkit.enable = true; tablet.enable = true; - user.name = "pan"; - user.timezone = "America/Los_Angeles"; - system.doAutoUpgrade = true; + system.timezone = "America/Los_Angeles"; + system.users.bigWheels = [ "pan" ]; tuigreet.enable = true; hyprland.enable = true; - librewolf.enable = true; - fish.enable = true; - fish.setDefault = true; - syncthing.enable = true; - steam.enable = true; - steam.gamemode.enable = true; + steam.gamemode = true; aagl.enable = true; aagl.honkai-rail = true; input-remapper.enable = true; + + shell.enabledShells = [ "fish" ]; + shell.defaultShell = "fish"; } diff --git a/hosts/onizuka/users/pan/user.nix b/hosts/onizuka/users/pan/user.nix index f59b05b..62ec37a 100644 --- a/hosts/onizuka/users/pan/user.nix +++ b/hosts/onizuka/users/pan/user.nix @@ -1,20 +1,12 @@ { config, pkgs, ... }: { - home.username = "pan"; - nixpkgs.config.allowUnfree = true; - home.stateVersion = "23.05"; - hypr.enable = true; - hypr.monitor = { - details = [ + hypr.monitor.details = [ "DP-2,2560x1440@144,0x0,1" "DP-1,2560x1440@144,-2560x0,1" "HDMI-A-1,disable" ]; - primary = "DP-2"; - secondary = "DP-1"; - }; hypr.workspace = { workspaces = { "DP-2" = [ @@ -29,13 +21,13 @@ }; scratchpad.enable = true; defaults = { - "name:web" = [ "librewolf" ]; - "name:med" = [ "librewolf,title:Picture-in-Picture" ]; - "name:chat" = [ "Beeper" ]; - "name:game" = [ "lutris" "explorer.exe" ]; + "name:web" = [ "class:(librewolf)" ]; + "name:med" = [ "class:(librewolf),title:Picture-in-Picture" ]; + "name:chat" = [ "class:(Beeper)" ]; + "name:game" = [ "class:(lutris)" "class:(explorer.exe)" ]; }; }; - windows.opaque = [ + hypr.windows.opaque = [ "initialTitle:^(Discord Popout)$" "class:^(firefox)$" "class:^(Gimp)$" @@ -57,7 +49,6 @@ master.mfact = 0.53; xwayland.videobridge.enable = true; }; - ags.enable = true; rofi.enable = true; timer.enableHourly = true; @@ -126,7 +117,7 @@ lutgen # LUT generator prismlauncher # Minecraft launcher jdk8 # For playing older minecraft - gnucash # Personal Finance Manager zoom-us # Zoom + musescore ]; } From b42f2570ac1f16cbe36211afa12d25095e4ad99e Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 17 Mar 2025 18:31:31 -0700 Subject: [PATCH 291/412] Flake update 2025-03-17 --- flake.lock | 80 +++++++++++++++++++++++++++--------------------------- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/flake.lock b/flake.lock index c080ad3..e8276ee 100644 --- a/flake.lock +++ b/flake.lock @@ -6,11 +6,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1740876632, - "narHash": "sha256-u695YUS3R5HI1VQp7feCifWYOn3Gh6yGde1vp5rKqTg=", + "lastModified": 1742237177, + "narHash": "sha256-SZO34S9RKyp0Vub/7JFyNrpxtS/i+2q6Vqi4NIF5NH0=", "owner": "ezKEa", "repo": "aagl-gtk-on-nix", - "rev": "5505af25160f16ad26f9107aebee9ea7713b59d9", + "rev": "796472887bd6362917f26f3ceac019ef21a39e75", "type": "github" }, "original": { @@ -58,11 +58,11 @@ ] }, "locked": { - "lastModified": 1741282631, - "narHash": "sha256-jZE1CmQ53uN1Gq4FjaLFzSSjDqzL0pG4mdRbjBqSmho=", + "lastModified": 1742213273, + "narHash": "sha256-0l0vDb4anfsBu1rOs94bC73Hub+xEivgBAo6QXl2MmU=", "owner": "hyprwm", "repo": "aquamarine", - "rev": "81498562d0f53e613d30368bb5b076784fa86f80", + "rev": "484b732195cc53f4536ce4bd59a5c6402b1e7ccf", "type": "github" }, "original": { @@ -184,11 +184,11 @@ "nixpkgs": "nixpkgs_3" }, "locked": { - "lastModified": 1741791118, - "narHash": "sha256-4Y427uj0eql4yRU5rely3EcOlB9q457UDbG9omPtXiA=", + "lastModified": 1742246081, + "narHash": "sha256-1e4oFbtdOOb6NqauHevWWjEUXZnfZ6RUAJJjn9i4YBc=", "owner": "nix-community", "repo": "home-manager", - "rev": "18780912345970e5b546b1b085385789b6935a83", + "rev": "c657142e24a43ea1035889f0b0a7c24598e0e18a", "type": "github" }, "original": { @@ -213,11 +213,11 @@ ] }, "locked": { - "lastModified": 1738664950, - "narHash": "sha256-xIeGNM+iivwVHkv9tHwOqoUP5dDrtees34bbFKKMZYs=", + "lastModified": 1742215578, + "narHash": "sha256-zfs71PXVVPEe56WEyNi2TJQPs0wabU4WAlq0XV7GcdE=", "owner": "hyprwm", "repo": "hyprcursor", - "rev": "7c6d165e1eb9045a996551eb9f121b6d1b30adc3", + "rev": "2fd36421c21aa87e2fe3bee11067540ae612f719", "type": "github" }, "original": { @@ -271,11 +271,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1741788549, - "narHash": "sha256-Ot/AuQGw5KJwHjyTMHWmyaduNkcE58bOCmyitZ4VxEQ=", + "lastModified": 1742245601, + "narHash": "sha256-02OZCZPy6J2dFpKNnWlWkpZHwV8iyi5rPSIWmB0YMvY=", "ref": "refs/heads/main", - "rev": "e86d3a14e46d19d8a47f8ceb6410546715d45f10", - "revCount": 5879, + "rev": "5f60fc7d00eb08ee39cac1f5eceeb97ffbea0e7f", + "revCount": 5901, "type": "git", "url": "https://github.com/hyprwm/Hyprland" }, @@ -289,11 +289,11 @@ "nixpkgs": "nixpkgs_5" }, "locked": { - "lastModified": 1741681240, - "narHash": "sha256-SJrLVyoaQUg29fq3nNdRmYrLgiu9dtgcIVqpl8j/Teo=", + "lastModified": 1742213523, + "narHash": "sha256-I8JVdQRu8eWvY5W8XWYZkdd5pojDHkxeqQV7mMIsbhs=", "owner": "hyprwm", "repo": "contrib", - "rev": "e14d9c5e9aea4a84c3677e0a7c73268153b15327", + "rev": "bd81329944be53b0ffb99e05864804b95f1d7c65", "type": "github" }, "original": { @@ -436,11 +436,11 @@ ] }, "locked": { - "lastModified": 1741123584, - "narHash": "sha256-mprerMlucqtirmbx6L3VoFnF2bGYc2WSUCj7tuc6xTQ=", + "lastModified": 1741534688, + "narHash": "sha256-EV3945SnjOCuRVbGRghsWx/9D89FyshnSO1Q6/TuQ14=", "owner": "hyprwm", "repo": "hyprutils", - "rev": "6b0154b183f9539097f13af9b5da78ca24da6df2", + "rev": "dd1f720cbc2dbb3c71167c9598045dd3261d27b3", "type": "github" }, "original": { @@ -557,11 +557,11 @@ }, "nixpkgs_4": { "locked": { - "lastModified": 1741246872, - "narHash": "sha256-Q6pMP4a9ed636qilcYX8XUguvKl/0/LGXhHcRI91p0U=", + "lastModified": 1742069588, + "narHash": "sha256-C7jVfohcGzdZRF6DO+ybyG/sqpo1h6bZi9T56sxLy+k=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "10069ef4cf863633f57238f179a0297de84bd8d3", + "rev": "c80f6a7e10b39afcc1894e02ef785b1ad0b0d7e5", "type": "github" }, "original": { @@ -605,11 +605,11 @@ }, "nixpkgs_7": { "locked": { - "lastModified": 1741513245, - "narHash": "sha256-7rTAMNTY1xoBwz0h7ZMtEcd8LELk9R5TzBPoHuhNSCk=", + "lastModified": 1742069588, + "narHash": "sha256-C7jVfohcGzdZRF6DO+ybyG/sqpo1h6bZi9T56sxLy+k=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "e3e32b642a31e6714ec1b712de8c91a3352ce7e1", + "rev": "c80f6a7e10b39afcc1894e02ef785b1ad0b0d7e5", "type": "github" }, "original": { @@ -620,11 +620,11 @@ }, "nixpkgs_8": { "locked": { - "lastModified": 1731763621, - "narHash": "sha256-ddcX4lQL0X05AYkrkV2LMFgGdRvgap7Ho8kgon3iWZk=", + "lastModified": 1741865919, + "narHash": "sha256-4thdbnP6dlbdq+qZWTsm4ffAwoS8Tiq1YResB+RP6WE=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "c69a9bffbecde46b4b939465422ddc59493d3e4d", + "rev": "573c650e8a14b2faa0041645ab18aed7e60f0c9a", "type": "github" }, "original": { @@ -644,11 +644,11 @@ ] }, "locked": { - "lastModified": 1741379162, - "narHash": "sha256-srpAbmJapkaqGRE3ytf3bj4XshspVR5964OX5LfjDWc=", + "lastModified": 1742058297, + "narHash": "sha256-b4SZc6TkKw8WQQssbN5O2DaCEzmFfvSTPYHlx/SFW9Y=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "b5a62751225b2f62ff3147d0a334055ebadcd5cc", + "rev": "59f17850021620cd348ad2e9c0c64f4e6325ce2a", "type": "github" }, "original": { @@ -674,11 +674,11 @@ "nixpkgs": "nixpkgs_8" }, "locked": { - "lastModified": 1741644481, - "narHash": "sha256-E0RrMykMtEv15V3QhpsFutgoSKhL1JBhidn+iZajOyg=", + "lastModified": 1742239755, + "narHash": "sha256-ptn8dR4Uat3UUadGYNnB7CIH9SQm8mK69D2A/twBUXQ=", "owner": "Mic92", "repo": "sops-nix", - "rev": "e653d71e82575a43fe9d228def8eddb73887b866", + "rev": "787afce414bcce803b605c510b60bf43c11f4b55", "type": "github" }, "original": { @@ -745,11 +745,11 @@ ] }, "locked": { - "lastModified": 1737634991, - "narHash": "sha256-dBAnb7Kbnier30cA7AgxVSxxARmxKZ1vHZT33THSIr8=", + "lastModified": 1741934139, + "narHash": "sha256-ZhTcTH9FoeAtbPfWGrhkH7RjLJZ7GeF18nygLAMR+WE=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "e09dfe2726c8008f983e45a0aa1a3b7416aaeb8a", + "rev": "150b0b6f52bb422a1b232a53698606fe0320dde0", "type": "github" }, "original": { From 2f2aea12080b08f18ef12a7653139a9ea679494d Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 17 Mar 2025 18:31:31 -0700 Subject: [PATCH 292/412] Flake update 2025-03-17 --- flake.lock | 80 +++++++++++++++++++++++++++--------------------------- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/flake.lock b/flake.lock index c080ad3..e8276ee 100644 --- a/flake.lock +++ b/flake.lock @@ -6,11 +6,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1740876632, - "narHash": "sha256-u695YUS3R5HI1VQp7feCifWYOn3Gh6yGde1vp5rKqTg=", + "lastModified": 1742237177, + "narHash": "sha256-SZO34S9RKyp0Vub/7JFyNrpxtS/i+2q6Vqi4NIF5NH0=", "owner": "ezKEa", "repo": "aagl-gtk-on-nix", - "rev": "5505af25160f16ad26f9107aebee9ea7713b59d9", + "rev": "796472887bd6362917f26f3ceac019ef21a39e75", "type": "github" }, "original": { @@ -58,11 +58,11 @@ ] }, "locked": { - "lastModified": 1741282631, - "narHash": "sha256-jZE1CmQ53uN1Gq4FjaLFzSSjDqzL0pG4mdRbjBqSmho=", + "lastModified": 1742213273, + "narHash": "sha256-0l0vDb4anfsBu1rOs94bC73Hub+xEivgBAo6QXl2MmU=", "owner": "hyprwm", "repo": "aquamarine", - "rev": "81498562d0f53e613d30368bb5b076784fa86f80", + "rev": "484b732195cc53f4536ce4bd59a5c6402b1e7ccf", "type": "github" }, "original": { @@ -184,11 +184,11 @@ "nixpkgs": "nixpkgs_3" }, "locked": { - "lastModified": 1741791118, - "narHash": "sha256-4Y427uj0eql4yRU5rely3EcOlB9q457UDbG9omPtXiA=", + "lastModified": 1742246081, + "narHash": "sha256-1e4oFbtdOOb6NqauHevWWjEUXZnfZ6RUAJJjn9i4YBc=", "owner": "nix-community", "repo": "home-manager", - "rev": "18780912345970e5b546b1b085385789b6935a83", + "rev": "c657142e24a43ea1035889f0b0a7c24598e0e18a", "type": "github" }, "original": { @@ -213,11 +213,11 @@ ] }, "locked": { - "lastModified": 1738664950, - "narHash": "sha256-xIeGNM+iivwVHkv9tHwOqoUP5dDrtees34bbFKKMZYs=", + "lastModified": 1742215578, + "narHash": "sha256-zfs71PXVVPEe56WEyNi2TJQPs0wabU4WAlq0XV7GcdE=", "owner": "hyprwm", "repo": "hyprcursor", - "rev": "7c6d165e1eb9045a996551eb9f121b6d1b30adc3", + "rev": "2fd36421c21aa87e2fe3bee11067540ae612f719", "type": "github" }, "original": { @@ -271,11 +271,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1741788549, - "narHash": "sha256-Ot/AuQGw5KJwHjyTMHWmyaduNkcE58bOCmyitZ4VxEQ=", + "lastModified": 1742245601, + "narHash": "sha256-02OZCZPy6J2dFpKNnWlWkpZHwV8iyi5rPSIWmB0YMvY=", "ref": "refs/heads/main", - "rev": "e86d3a14e46d19d8a47f8ceb6410546715d45f10", - "revCount": 5879, + "rev": "5f60fc7d00eb08ee39cac1f5eceeb97ffbea0e7f", + "revCount": 5901, "type": "git", "url": "https://github.com/hyprwm/Hyprland" }, @@ -289,11 +289,11 @@ "nixpkgs": "nixpkgs_5" }, "locked": { - "lastModified": 1741681240, - "narHash": "sha256-SJrLVyoaQUg29fq3nNdRmYrLgiu9dtgcIVqpl8j/Teo=", + "lastModified": 1742213523, + "narHash": "sha256-I8JVdQRu8eWvY5W8XWYZkdd5pojDHkxeqQV7mMIsbhs=", "owner": "hyprwm", "repo": "contrib", - "rev": "e14d9c5e9aea4a84c3677e0a7c73268153b15327", + "rev": "bd81329944be53b0ffb99e05864804b95f1d7c65", "type": "github" }, "original": { @@ -436,11 +436,11 @@ ] }, "locked": { - "lastModified": 1741123584, - "narHash": "sha256-mprerMlucqtirmbx6L3VoFnF2bGYc2WSUCj7tuc6xTQ=", + "lastModified": 1741534688, + "narHash": "sha256-EV3945SnjOCuRVbGRghsWx/9D89FyshnSO1Q6/TuQ14=", "owner": "hyprwm", "repo": "hyprutils", - "rev": "6b0154b183f9539097f13af9b5da78ca24da6df2", + "rev": "dd1f720cbc2dbb3c71167c9598045dd3261d27b3", "type": "github" }, "original": { @@ -557,11 +557,11 @@ }, "nixpkgs_4": { "locked": { - "lastModified": 1741246872, - "narHash": "sha256-Q6pMP4a9ed636qilcYX8XUguvKl/0/LGXhHcRI91p0U=", + "lastModified": 1742069588, + "narHash": "sha256-C7jVfohcGzdZRF6DO+ybyG/sqpo1h6bZi9T56sxLy+k=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "10069ef4cf863633f57238f179a0297de84bd8d3", + "rev": "c80f6a7e10b39afcc1894e02ef785b1ad0b0d7e5", "type": "github" }, "original": { @@ -605,11 +605,11 @@ }, "nixpkgs_7": { "locked": { - "lastModified": 1741513245, - "narHash": "sha256-7rTAMNTY1xoBwz0h7ZMtEcd8LELk9R5TzBPoHuhNSCk=", + "lastModified": 1742069588, + "narHash": "sha256-C7jVfohcGzdZRF6DO+ybyG/sqpo1h6bZi9T56sxLy+k=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "e3e32b642a31e6714ec1b712de8c91a3352ce7e1", + "rev": "c80f6a7e10b39afcc1894e02ef785b1ad0b0d7e5", "type": "github" }, "original": { @@ -620,11 +620,11 @@ }, "nixpkgs_8": { "locked": { - "lastModified": 1731763621, - "narHash": "sha256-ddcX4lQL0X05AYkrkV2LMFgGdRvgap7Ho8kgon3iWZk=", + "lastModified": 1741865919, + "narHash": "sha256-4thdbnP6dlbdq+qZWTsm4ffAwoS8Tiq1YResB+RP6WE=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "c69a9bffbecde46b4b939465422ddc59493d3e4d", + "rev": "573c650e8a14b2faa0041645ab18aed7e60f0c9a", "type": "github" }, "original": { @@ -644,11 +644,11 @@ ] }, "locked": { - "lastModified": 1741379162, - "narHash": "sha256-srpAbmJapkaqGRE3ytf3bj4XshspVR5964OX5LfjDWc=", + "lastModified": 1742058297, + "narHash": "sha256-b4SZc6TkKw8WQQssbN5O2DaCEzmFfvSTPYHlx/SFW9Y=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "b5a62751225b2f62ff3147d0a334055ebadcd5cc", + "rev": "59f17850021620cd348ad2e9c0c64f4e6325ce2a", "type": "github" }, "original": { @@ -674,11 +674,11 @@ "nixpkgs": "nixpkgs_8" }, "locked": { - "lastModified": 1741644481, - "narHash": "sha256-E0RrMykMtEv15V3QhpsFutgoSKhL1JBhidn+iZajOyg=", + "lastModified": 1742239755, + "narHash": "sha256-ptn8dR4Uat3UUadGYNnB7CIH9SQm8mK69D2A/twBUXQ=", "owner": "Mic92", "repo": "sops-nix", - "rev": "e653d71e82575a43fe9d228def8eddb73887b866", + "rev": "787afce414bcce803b605c510b60bf43c11f4b55", "type": "github" }, "original": { @@ -745,11 +745,11 @@ ] }, "locked": { - "lastModified": 1737634991, - "narHash": "sha256-dBAnb7Kbnier30cA7AgxVSxxARmxKZ1vHZT33THSIr8=", + "lastModified": 1741934139, + "narHash": "sha256-ZhTcTH9FoeAtbPfWGrhkH7RjLJZ7GeF18nygLAMR+WE=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "e09dfe2726c8008f983e45a0aa1a3b7416aaeb8a", + "rev": "150b0b6f52bb422a1b232a53698606fe0320dde0", "type": "github" }, "original": { From 85d6bb74e27c52168ebb9b654fe280dedf70b016 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 18 Mar 2025 14:09:03 -0700 Subject: [PATCH 293/412] Caddy, caddy vhost configuration --- nixosModules/services/caddy/service.nix | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 nixosModules/services/caddy/service.nix diff --git a/nixosModules/services/caddy/service.nix b/nixosModules/services/caddy/service.nix new file mode 100644 index 0000000..b07fa3c --- /dev/null +++ b/nixosModules/services/caddy/service.nix @@ -0,0 +1,18 @@ +{ config, pkgs, lib, ... }: + +{ + options.caddy = { + enable = lib.mkEnableOption "Enables caddy webserver"; + vhosts = lib.mkOption {}; + adminEmail = lib.mkOption { type = lib.types.str; }; + }; + + config = lib.mkIf config.caddy.enable { + networking.firewall.allowedTCPPorts = [ 80 443 ]; + services.caddy = { + enable = true; + virtualHosts = config.caddy.vhosts; + email = config.caddy.adminEmail; + }; + }; +} From c179f844251b5dc900d3672f9751e26390e952e6 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 18 Mar 2025 14:09:03 -0700 Subject: [PATCH 294/412] Caddy, caddy vhost configuration --- nixosModules/services/caddy/service.nix | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 nixosModules/services/caddy/service.nix diff --git a/nixosModules/services/caddy/service.nix b/nixosModules/services/caddy/service.nix new file mode 100644 index 0000000..b07fa3c --- /dev/null +++ b/nixosModules/services/caddy/service.nix @@ -0,0 +1,18 @@ +{ config, pkgs, lib, ... }: + +{ + options.caddy = { + enable = lib.mkEnableOption "Enables caddy webserver"; + vhosts = lib.mkOption {}; + adminEmail = lib.mkOption { type = lib.types.str; }; + }; + + config = lib.mkIf config.caddy.enable { + networking.firewall.allowedTCPPorts = [ 80 443 ]; + services.caddy = { + enable = true; + virtualHosts = config.caddy.vhosts; + email = config.caddy.adminEmail; + }; + }; +} From 6b734043614dd2c9d3aa26f07db56ee7c091616b Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 18 Mar 2025 14:09:25 -0700 Subject: [PATCH 295/412] Juri, pds + caddy running --- hosts/juri/host.nix | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/hosts/juri/host.nix b/hosts/juri/host.nix index 24d7558..a95345e 100644 --- a/hosts/juri/host.nix +++ b/hosts/juri/host.nix @@ -1,6 +1,7 @@ { config, ... }: - -{ +let + email = "admin@woach.me"; +in { imports = [ ./hardware.nix ]; @@ -17,10 +18,23 @@ }; }; + caddy = { + enable = true; + adminEmail = email; + vhosts = { + "juri.woach.me" = { + extraConfig = '' + reverse_proxy :3000 + ''; + serverAliases = [ "*.juri.woach.me" ]; + }; + }; + }; + pds = { enable = true; hostname = "juri.woach.me"; - adminEmail = "admin@woach.me"; + adminEmail = email; environmentFile = config.sops.secrets.pdsEnv.path; }; @@ -29,4 +43,3 @@ sshd.enable = true; } - From d27cedfd0e04169ccb72c9cbe48af6e8d1b1a0e8 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 18 Mar 2025 14:09:25 -0700 Subject: [PATCH 296/412] Juri, pds + caddy running --- hosts/juri/host.nix | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/hosts/juri/host.nix b/hosts/juri/host.nix index 24d7558..a95345e 100644 --- a/hosts/juri/host.nix +++ b/hosts/juri/host.nix @@ -1,6 +1,7 @@ { config, ... }: - -{ +let + email = "admin@woach.me"; +in { imports = [ ./hardware.nix ]; @@ -17,10 +18,23 @@ }; }; + caddy = { + enable = true; + adminEmail = email; + vhosts = { + "juri.woach.me" = { + extraConfig = '' + reverse_proxy :3000 + ''; + serverAliases = [ "*.juri.woach.me" ]; + }; + }; + }; + pds = { enable = true; hostname = "juri.woach.me"; - adminEmail = "admin@woach.me"; + adminEmail = email; environmentFile = config.sops.secrets.pdsEnv.path; }; @@ -29,4 +43,3 @@ sshd.enable = true; } - From 25c92c2d9ee6ef1324ace9acf598adbffd1312aa Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 18 Mar 2025 14:45:09 -0700 Subject: [PATCH 297/412] Timers, fix timers creating files when disabled They aren't enabled--they should act like it. --- hmModules/services/timers/service.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hmModules/services/timers/service.nix b/hmModules/services/timers/service.nix index 175b107..503a4e3 100644 --- a/hmModules/services/timers/service.nix +++ b/hmModules/services/timers/service.nix @@ -51,7 +51,7 @@ let rootPath = ./.; in }; }; }; - xdg.configFile."timer-scripts" = { + xdg.configFile."timer-scripts" = lib.mkIf (config.timer.enableQuarterly || config.timer.enableHourly) { source = rootPath + "/scripts"; target = "timer_scripts/"; executable = true; From 5cf617c4da3291c67fa7bb9772046115678ab94f Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 18 Mar 2025 14:45:09 -0700 Subject: [PATCH 298/412] Timers, fix timers creating files when disabled They aren't enabled--they should act like it. --- hmModules/services/timers/service.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hmModules/services/timers/service.nix b/hmModules/services/timers/service.nix index 175b107..503a4e3 100644 --- a/hmModules/services/timers/service.nix +++ b/hmModules/services/timers/service.nix @@ -51,7 +51,7 @@ let rootPath = ./.; in }; }; }; - xdg.configFile."timer-scripts" = { + xdg.configFile."timer-scripts" = lib.mkIf (config.timer.enableQuarterly || config.timer.enableHourly) { source = rootPath + "/scripts"; target = "timer_scripts/"; executable = true; From 42e98420616a9b75eac296e87fadfb5bd0aca12f Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 18 Mar 2025 14:45:55 -0700 Subject: [PATCH 299/412] Os, remove nnn from automatic apps I'm in love with lf now. But my divorce has made me see that I do not in fact need a terminal file browser as an automatic app. If anything is getting added it's zoxide --- nixosModules/automatic/default.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/nixosModules/automatic/default.nix b/nixosModules/automatic/default.nix index 3afd663..7a680f6 100644 --- a/nixosModules/automatic/default.nix +++ b/nixosModules/automatic/default.nix @@ -32,7 +32,6 @@ environment.systemPackages = with pkgs; [ git neovim - nnn xdg-user-dirs ]; From 3957a0335266cca46cb8f267c5dc702edac51d91 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 18 Mar 2025 14:45:55 -0700 Subject: [PATCH 300/412] Os, remove nnn from automatic apps I'm in love with lf now. But my divorce has made me see that I do not in fact need a terminal file browser as an automatic app. If anything is getting added it's zoxide --- nixosModules/automatic/default.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/nixosModules/automatic/default.nix b/nixosModules/automatic/default.nix index 3afd663..7a680f6 100644 --- a/nixosModules/automatic/default.nix +++ b/nixosModules/automatic/default.nix @@ -32,7 +32,6 @@ environment.systemPackages = with pkgs; [ git neovim - nnn xdg-user-dirs ]; From f373f2f74399f5d4818adff479980b6f8cc66552 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 24 Mar 2025 11:16:45 -0700 Subject: [PATCH 301/412] Sshd, added port as option Primarily so that it can be used in other modules since I default to a non-standard port for obsecurity reasons. --- nixosModules/services/ssh/service.nix | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/nixosModules/services/ssh/service.nix b/nixosModules/services/ssh/service.nix index 56f7147..4537b0d 100644 --- a/nixosModules/services/ssh/service.nix +++ b/nixosModules/services/ssh/service.nix @@ -1,14 +1,18 @@ -{ config, pkgs, lib, ... }: +{ config, lib, ... }: { options.sshd = { enable = lib.mkEnableOption "Enables ssh daemon"; + port = lib.mkOption { + default = 922; + type = lib.types.port; + }; }; config = lib.mkIf config.sshd.enable { services.openssh = { enable = true; - ports = [ 922 ]; + ports = [ config.sshd.port ]; settings = { PasswordAuthentication = false; PermitRootLogin = "no"; From 291173d21ab1fafe578ed6a564fdb7f2f9b37bc5 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 24 Mar 2025 11:16:45 -0700 Subject: [PATCH 302/412] Sshd, added port as option Primarily so that it can be used in other modules since I default to a non-standard port for obsecurity reasons. --- nixosModules/services/ssh/service.nix | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/nixosModules/services/ssh/service.nix b/nixosModules/services/ssh/service.nix index 56f7147..4537b0d 100644 --- a/nixosModules/services/ssh/service.nix +++ b/nixosModules/services/ssh/service.nix @@ -1,14 +1,18 @@ -{ config, pkgs, lib, ... }: +{ config, lib, ... }: { options.sshd = { enable = lib.mkEnableOption "Enables ssh daemon"; + port = lib.mkOption { + default = 922; + type = lib.types.port; + }; }; config = lib.mkIf config.sshd.enable { services.openssh = { enable = true; - ports = [ 922 ]; + ports = [ config.sshd.port ]; settings = { PasswordAuthentication = false; PermitRootLogin = "no"; From 2c2c711dd98ab1a7706416f667d6c9045d42a69b Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 24 Mar 2025 12:33:48 -0700 Subject: [PATCH 303/412] Forgejo, init with admin account and server config Automatically creates an admin account with sops data. Not my favorite process because user needs to know to change the sops password to be owned by forgejo, otherwise good though. Has a bunch of useful config settings for setting up a server easily. Commit with that to follow. Point of worry: SSH_PORT setting isn't set, and will probably need to be set later to allow people to commit and similar to the repos. --- nixosModules/services/forgejo/service.nix | 40 +++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 nixosModules/services/forgejo/service.nix diff --git a/nixosModules/services/forgejo/service.nix b/nixosModules/services/forgejo/service.nix new file mode 100644 index 0000000..2a1b2c2 --- /dev/null +++ b/nixosModules/services/forgejo/service.nix @@ -0,0 +1,40 @@ +{ config, lib, ... }: + +{ + options.forgejo = { + enable = lib.mkEnableOption ""; + server = { + port = lib.mkOption { default = 4848; }; + domain = lib.mkOption { type = lib.types.str; }; + }; + users = { + admin = { + enable = lib.mkEnableOption "creates an admin account"; + username = lib.mkOption { type = lib.types.str; }; + passwordFile = lib.mkOption {}; + }; + }; + }; + + config = lib.mkIf config.forgejo.enable { + services.forgejo = { + enable = true; + settings = { + server = { + DOMAIN = config.forgejo.server.domain; #"winry.woach.me"; + HTTP_PORT = config.forgejo.server.port; + ROOT_URL = "https://${config.services.forgejo.settings.server.DOMAIN}/"; + }; + # SSH_PORT = config.sshd.port; + session.COOKIE_SECURE = true; + service.DISABLE_REGISTRATION = true; + }; + }; + + systemd.services.forgejo.preStart = lib.mkIf config.forgejo.users.admin.enable (let + adminCmd = "${lib.getExe config.services.forgejo.package}"; + in '' + ${adminCmd} admin user create --admin --email "root@localhost" --username ${config.forgejo.users.admin.username} --password "$(tr -d '\n' < ${config.forgejo.users.admin.passwordFile})" || true + ''); + }; +} From e2f470b5c2c2eff4745fdb5a22d65711f4397c9a Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 24 Mar 2025 12:33:48 -0700 Subject: [PATCH 304/412] Forgejo, init with admin account and server config Automatically creates an admin account with sops data. Not my favorite process because user needs to know to change the sops password to be owned by forgejo, otherwise good though. Has a bunch of useful config settings for setting up a server easily. Commit with that to follow. Point of worry: SSH_PORT setting isn't set, and will probably need to be set later to allow people to commit and similar to the repos. --- nixosModules/services/forgejo/service.nix | 40 +++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 nixosModules/services/forgejo/service.nix diff --git a/nixosModules/services/forgejo/service.nix b/nixosModules/services/forgejo/service.nix new file mode 100644 index 0000000..2a1b2c2 --- /dev/null +++ b/nixosModules/services/forgejo/service.nix @@ -0,0 +1,40 @@ +{ config, lib, ... }: + +{ + options.forgejo = { + enable = lib.mkEnableOption ""; + server = { + port = lib.mkOption { default = 4848; }; + domain = lib.mkOption { type = lib.types.str; }; + }; + users = { + admin = { + enable = lib.mkEnableOption "creates an admin account"; + username = lib.mkOption { type = lib.types.str; }; + passwordFile = lib.mkOption {}; + }; + }; + }; + + config = lib.mkIf config.forgejo.enable { + services.forgejo = { + enable = true; + settings = { + server = { + DOMAIN = config.forgejo.server.domain; #"winry.woach.me"; + HTTP_PORT = config.forgejo.server.port; + ROOT_URL = "https://${config.services.forgejo.settings.server.DOMAIN}/"; + }; + # SSH_PORT = config.sshd.port; + session.COOKIE_SECURE = true; + service.DISABLE_REGISTRATION = true; + }; + }; + + systemd.services.forgejo.preStart = lib.mkIf config.forgejo.users.admin.enable (let + adminCmd = "${lib.getExe config.services.forgejo.package}"; + in '' + ${adminCmd} admin user create --admin --email "root@localhost" --username ${config.forgejo.users.admin.username} --password "$(tr -d '\n' < ${config.forgejo.users.admin.passwordFile})" || true + ''); + }; +} From 4b708b5fb393d224f21c3af24b0b128993bd589e Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 24 Mar 2025 12:36:15 -0700 Subject: [PATCH 305/412] Juri, add forgejo server with admin account --- hosts/juri/host.nix | 18 ++++++++++++++++++ hosts/juri/secrets.yaml | 5 +++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/hosts/juri/host.nix b/hosts/juri/host.nix index a95345e..4d32aa2 100644 --- a/hosts/juri/host.nix +++ b/hosts/juri/host.nix @@ -15,6 +15,9 @@ in { sopsFile = ./secrets.yaml; secrets = { pdsEnv = {}; + forgejoPassword = { + owner = "forgejo"; + }; }; }; @@ -28,6 +31,11 @@ in { ''; serverAliases = [ "*.juri.woach.me" ]; }; + "winry.woach.me" = { + extraConfig = '' + reverse_proxy :${builtins.toString config.forgejo.server.port} + ''; + }; }; }; @@ -38,6 +46,16 @@ in { environmentFile = config.sops.secrets.pdsEnv.path; }; + forgejo = { + enable = true; + server.domain = "winry.woach.me"; + users.admin = { + enable = true; + username = "Julia"; + passwordFile = config.sops.secrets.forgejoPassword.path; + }; + }; + shell.enabledShells = [ "fish" ]; shell.defaultShell = "fish"; diff --git a/hosts/juri/secrets.yaml b/hosts/juri/secrets.yaml index ee434f8..6800ced 100644 --- a/hosts/juri/secrets.yaml +++ b/hosts/juri/secrets.yaml @@ -1,4 +1,5 @@ pdsEnv: ENC[AES256_GCM,data:W1kKvcntrBOSgo7gLxwO8A9ZkWjkRWfUDZUMy5YNvhzqYS5xBPGL4QEcknWtQaVfaZklnO/+Gr5JEq/qgU2nIEY3xazfjYl4MNkZBhuwI20RwZB9voVubzHbPwjLtZbNTXRMa7BzO6a3ieSudKWAMP0dumG3/+wHtTYOM6lxUBfpw51+lNikc7kLqI+lzys0jC37ajP0/cm/U644BD0ozSSF289CLtXSkLt8sgHvA1ci8M+wEEq4aJ0JTVs98m0E7Udaride4tjLelESx3hPdoVzBIEa,iv:sQiYE//UGGA2qPfbM9//FcKEued6t8ORiKW8kfzLtz0=,tag:Fj+CzBgL8MH/6FLnUadIPQ==,type:str] +forgejoPassword: ENC[AES256_GCM,data:cQJJbf07v4HngeSYE2TwTcAx8WY=,iv:533TO2MfJVop93U4T7yIIiu6i4swDtduFuu79ZzFYFU=,tag:Pz5u/NqOSTKz2zFNzNLY5w==,type:str] sops: kms: [] gcp_kms: [] @@ -32,8 +33,8 @@ sops: N3NhMHp3V1ppclQvWTIxNkM5RjhRV0EKl8goB9tCl0BGi4jN7Fzuh0Ajm146x2Hu vesj+ENu2E9II3OeYuBndD+Y4x2zugIpzNOPg1V8zkarJOf7R/sXEw== -----END AGE ENCRYPTED FILE----- - lastmodified: "2025-03-17T22:11:41Z" - mac: ENC[AES256_GCM,data:0eCl7IHwfmBVYXOESIjK4DXzAe56fWWQKprmAVVyaCipmnAfgZieDm9esU4asRibROUtbOXplTBvtAGSqG1C8C15ecNN+WCB4lXM8cKtrwkXqCp6u6bUPn+ioQSrHBDLDWK7M4NWCiPi+2FwIwQJSaKGxJtF+v2wuufd4/JsU8Q=,iv:vgz7gQ3lmG8+UhnGhcn0Z+xMzJbeC6lmWyPyrZ+mOcs=,tag:tEg4WZ5+KYGtr6iR8G1rlg==,type:str] + lastmodified: "2025-03-24T19:31:53Z" + mac: ENC[AES256_GCM,data:5FVSw5wMXRl4qZQmD4yS7g/9qztaveDiU7mgifiOhOBqQrtvv5I/V7rkb5nKew+N3vKmg4vpWBL4kFxsQvWekAPT+ToNED4XhB5H5wZ/RyXga0CU0PMKWtGdEKdyjs4cIZjfScclW0ONgaSkv6XtCLj1V+ukPY3WBI3/2jnf6dA=,iv:7p1qEG1+E7SNLv64/aqjm1ppF4jQ/5h+Z5iHzd8sGDA=,tag:hG59vDcqha1MQf+kN1jguw==,type:str] pgp: [] unencrypted_suffix: _unencrypted version: 3.9.4 From 9102af1c088acbe20a0657c8953f3916ad25e68b Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 24 Mar 2025 12:36:15 -0700 Subject: [PATCH 306/412] Juri, add forgejo server with admin account --- hosts/juri/host.nix | 18 ++++++++++++++++++ hosts/juri/secrets.yaml | 5 +++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/hosts/juri/host.nix b/hosts/juri/host.nix index a95345e..4d32aa2 100644 --- a/hosts/juri/host.nix +++ b/hosts/juri/host.nix @@ -15,6 +15,9 @@ in { sopsFile = ./secrets.yaml; secrets = { pdsEnv = {}; + forgejoPassword = { + owner = "forgejo"; + }; }; }; @@ -28,6 +31,11 @@ in { ''; serverAliases = [ "*.juri.woach.me" ]; }; + "winry.woach.me" = { + extraConfig = '' + reverse_proxy :${builtins.toString config.forgejo.server.port} + ''; + }; }; }; @@ -38,6 +46,16 @@ in { environmentFile = config.sops.secrets.pdsEnv.path; }; + forgejo = { + enable = true; + server.domain = "winry.woach.me"; + users.admin = { + enable = true; + username = "Julia"; + passwordFile = config.sops.secrets.forgejoPassword.path; + }; + }; + shell.enabledShells = [ "fish" ]; shell.defaultShell = "fish"; diff --git a/hosts/juri/secrets.yaml b/hosts/juri/secrets.yaml index ee434f8..6800ced 100644 --- a/hosts/juri/secrets.yaml +++ b/hosts/juri/secrets.yaml @@ -1,4 +1,5 @@ pdsEnv: ENC[AES256_GCM,data:W1kKvcntrBOSgo7gLxwO8A9ZkWjkRWfUDZUMy5YNvhzqYS5xBPGL4QEcknWtQaVfaZklnO/+Gr5JEq/qgU2nIEY3xazfjYl4MNkZBhuwI20RwZB9voVubzHbPwjLtZbNTXRMa7BzO6a3ieSudKWAMP0dumG3/+wHtTYOM6lxUBfpw51+lNikc7kLqI+lzys0jC37ajP0/cm/U644BD0ozSSF289CLtXSkLt8sgHvA1ci8M+wEEq4aJ0JTVs98m0E7Udaride4tjLelESx3hPdoVzBIEa,iv:sQiYE//UGGA2qPfbM9//FcKEued6t8ORiKW8kfzLtz0=,tag:Fj+CzBgL8MH/6FLnUadIPQ==,type:str] +forgejoPassword: ENC[AES256_GCM,data:cQJJbf07v4HngeSYE2TwTcAx8WY=,iv:533TO2MfJVop93U4T7yIIiu6i4swDtduFuu79ZzFYFU=,tag:Pz5u/NqOSTKz2zFNzNLY5w==,type:str] sops: kms: [] gcp_kms: [] @@ -32,8 +33,8 @@ sops: N3NhMHp3V1ppclQvWTIxNkM5RjhRV0EKl8goB9tCl0BGi4jN7Fzuh0Ajm146x2Hu vesj+ENu2E9II3OeYuBndD+Y4x2zugIpzNOPg1V8zkarJOf7R/sXEw== -----END AGE ENCRYPTED FILE----- - lastmodified: "2025-03-17T22:11:41Z" - mac: ENC[AES256_GCM,data:0eCl7IHwfmBVYXOESIjK4DXzAe56fWWQKprmAVVyaCipmnAfgZieDm9esU4asRibROUtbOXplTBvtAGSqG1C8C15ecNN+WCB4lXM8cKtrwkXqCp6u6bUPn+ioQSrHBDLDWK7M4NWCiPi+2FwIwQJSaKGxJtF+v2wuufd4/JsU8Q=,iv:vgz7gQ3lmG8+UhnGhcn0Z+xMzJbeC6lmWyPyrZ+mOcs=,tag:tEg4WZ5+KYGtr6iR8G1rlg==,type:str] + lastmodified: "2025-03-24T19:31:53Z" + mac: ENC[AES256_GCM,data:5FVSw5wMXRl4qZQmD4yS7g/9qztaveDiU7mgifiOhOBqQrtvv5I/V7rkb5nKew+N3vKmg4vpWBL4kFxsQvWekAPT+ToNED4XhB5H5wZ/RyXga0CU0PMKWtGdEKdyjs4cIZjfScclW0ONgaSkv6XtCLj1V+ukPY3WBI3/2jnf6dA=,iv:7p1qEG1+E7SNLv64/aqjm1ppF4jQ/5h+Z5iHzd8sGDA=,tag:hG59vDcqha1MQf+kN1jguw==,type:str] pgp: [] unencrypted_suffix: _unencrypted version: 3.9.4 From b5eea3d798b7faf45d74b7703cf97a981b2f7055 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 27 Mar 2025 09:26:52 -0700 Subject: [PATCH 307/412] Forgejo, use sshd port internally, disable https --- nixosModules/services/forgejo/service.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/nixosModules/services/forgejo/service.nix b/nixosModules/services/forgejo/service.nix index 2a1b2c2..e27e24d 100644 --- a/nixosModules/services/forgejo/service.nix +++ b/nixosModules/services/forgejo/service.nix @@ -24,10 +24,11 @@ DOMAIN = config.forgejo.server.domain; #"winry.woach.me"; HTTP_PORT = config.forgejo.server.port; ROOT_URL = "https://${config.services.forgejo.settings.server.DOMAIN}/"; + SSH_PORT = config.sshd.port; }; - # SSH_PORT = config.sshd.port; session.COOKIE_SECURE = true; service.DISABLE_REGISTRATION = true; + repository.DISABLE_HTTP_GIT = true; }; }; From 88972441116717cea17ba987f73ac3fc1b6d3dbd Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 27 Mar 2025 09:26:52 -0700 Subject: [PATCH 308/412] Forgejo, use sshd port internally, disable https --- nixosModules/services/forgejo/service.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/nixosModules/services/forgejo/service.nix b/nixosModules/services/forgejo/service.nix index 2a1b2c2..e27e24d 100644 --- a/nixosModules/services/forgejo/service.nix +++ b/nixosModules/services/forgejo/service.nix @@ -24,10 +24,11 @@ DOMAIN = config.forgejo.server.domain; #"winry.woach.me"; HTTP_PORT = config.forgejo.server.port; ROOT_URL = "https://${config.services.forgejo.settings.server.DOMAIN}/"; + SSH_PORT = config.sshd.port; }; - # SSH_PORT = config.sshd.port; session.COOKIE_SECURE = true; service.DISABLE_REGISTRATION = true; + repository.DISABLE_HTTP_GIT = true; }; }; From 8cd1945b3bd344febad2da4f28b15c04a31b3c50 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 9 Apr 2025 14:06:04 -0700 Subject: [PATCH 309/412] Postgres, service init --- hosts/juri/host.nix | 2 ++ nixosModules/services/postgresql/service.nix | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 nixosModules/services/postgresql/service.nix diff --git a/hosts/juri/host.nix b/hosts/juri/host.nix index 4d32aa2..8a016b6 100644 --- a/hosts/juri/host.nix +++ b/hosts/juri/host.nix @@ -56,6 +56,8 @@ in { }; }; + postgres.enable = true; + shell.enabledShells = [ "fish" ]; shell.defaultShell = "fish"; diff --git a/nixosModules/services/postgresql/service.nix b/nixosModules/services/postgresql/service.nix new file mode 100644 index 0000000..fe6eaa3 --- /dev/null +++ b/nixosModules/services/postgresql/service.nix @@ -0,0 +1,18 @@ +{ config, lib, pkgs, ... }: + +{ + options.postgres = { + enable = lib.mkEnableOption ""; + }; + + config = lib.mkIf config.postgres.enable { + services.postgresql = { + enable = true; + package = pkgs.postgresql_17; + authentication = '' + #type database DBuser auth-method + local all all trust + ''; + }; + }; +} From 1c15dedf15a339ce1252634bc6a7f6e3790768db Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 9 Apr 2025 14:06:04 -0700 Subject: [PATCH 310/412] Postgres, service init --- hosts/juri/host.nix | 2 ++ nixosModules/services/postgresql/service.nix | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 nixosModules/services/postgresql/service.nix diff --git a/hosts/juri/host.nix b/hosts/juri/host.nix index 4d32aa2..8a016b6 100644 --- a/hosts/juri/host.nix +++ b/hosts/juri/host.nix @@ -56,6 +56,8 @@ in { }; }; + postgres.enable = true; + shell.enabledShells = [ "fish" ]; shell.defaultShell = "fish"; diff --git a/nixosModules/services/postgresql/service.nix b/nixosModules/services/postgresql/service.nix new file mode 100644 index 0000000..fe6eaa3 --- /dev/null +++ b/nixosModules/services/postgresql/service.nix @@ -0,0 +1,18 @@ +{ config, lib, pkgs, ... }: + +{ + options.postgres = { + enable = lib.mkEnableOption ""; + }; + + config = lib.mkIf config.postgres.enable { + services.postgresql = { + enable = true; + package = pkgs.postgresql_17; + authentication = '' + #type database DBuser auth-method + local all all trust + ''; + }; + }; +} From 90f412816424edf5e5ee3aec8aca518eb76a0c2d Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 16 Apr 2025 11:52:16 -0700 Subject: [PATCH 311/412] Fish, fix pull/push prompt and change characters The prompt has been broken for a while now on pull/push, this is because it was using unicode characters that were larger in the terminal, causing wraps that would reprint lines. I changed the characters for push/pull because of it. I also removed the stash character, and changed the dirty and staged characters to match the new characters --- hmModules/apps/fish/functions/git_prompt.fish | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/hmModules/apps/fish/functions/git_prompt.fish b/hmModules/apps/fish/functions/git_prompt.fish index a0bb65b..b02ecc6 100644 --- a/hmModules/apps/fish/functions/git_prompt.fish +++ b/hmModules/apps/fish/functions/git_prompt.fish @@ -43,22 +43,22 @@ if git_is_repo if test (command git ls-files --others --exclude-standard | wc -w 2> /dev/null) -gt 0 set git_meta "$git_meta?" end - if test (command git rev-list --walk-reflogs --count refs/stash 2> /dev/null) - set git_meta "$git_meta\$" - end + # if test (command git rev-list --walk-reflogs --count refs/stash 2> /dev/null) + # set git_meta "$git_meta\$" + # end if git_is_touched - git_is_dirty && set git_meta "$git_meta⨯" - git_is_staged && set git_meta "$git_meta●" + git_is_dirty && set git_meta (string join "$git_meta" "x") + git_is_staged && set git_meta (string join "$git_meta" "o") end set -l commit_count (command git rev-list --count --left-right (git remote)/(git_branch_name)"...HEAD" 2> /dev/null) if test $commit_count set -l behind (echo $commit_count | cut -f 1) set -l ahead (echo $commit_count | cut -f 2) if test $behind -gt 0 - set git_meta "$git_meta🠋" + set git_meta "$git_meta«" end if test $ahead -gt 0 - set git_meta "$git_meta🠉" + set git_meta "$git_meta»" end end if test $git_meta From 7fd019b53ff36de6db077136717b360c87d44100 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 16 Apr 2025 11:52:16 -0700 Subject: [PATCH 312/412] Fish, fix pull/push prompt and change characters The prompt has been broken for a while now on pull/push, this is because it was using unicode characters that were larger in the terminal, causing wraps that would reprint lines. I changed the characters for push/pull because of it. I also removed the stash character, and changed the dirty and staged characters to match the new characters --- hmModules/apps/fish/functions/git_prompt.fish | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/hmModules/apps/fish/functions/git_prompt.fish b/hmModules/apps/fish/functions/git_prompt.fish index a0bb65b..b02ecc6 100644 --- a/hmModules/apps/fish/functions/git_prompt.fish +++ b/hmModules/apps/fish/functions/git_prompt.fish @@ -43,22 +43,22 @@ if git_is_repo if test (command git ls-files --others --exclude-standard | wc -w 2> /dev/null) -gt 0 set git_meta "$git_meta?" end - if test (command git rev-list --walk-reflogs --count refs/stash 2> /dev/null) - set git_meta "$git_meta\$" - end + # if test (command git rev-list --walk-reflogs --count refs/stash 2> /dev/null) + # set git_meta "$git_meta\$" + # end if git_is_touched - git_is_dirty && set git_meta "$git_meta⨯" - git_is_staged && set git_meta "$git_meta●" + git_is_dirty && set git_meta (string join "$git_meta" "x") + git_is_staged && set git_meta (string join "$git_meta" "o") end set -l commit_count (command git rev-list --count --left-right (git remote)/(git_branch_name)"...HEAD" 2> /dev/null) if test $commit_count set -l behind (echo $commit_count | cut -f 1) set -l ahead (echo $commit_count | cut -f 2) if test $behind -gt 0 - set git_meta "$git_meta🠋" + set git_meta "$git_meta«" end if test $ahead -gt 0 - set git_meta "$git_meta🠉" + set git_meta "$git_meta»" end end if test $git_meta From 196e86723b385353fb0e431dd9b10bb8ec9bf2b1 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Fri, 18 Apr 2025 20:03:39 -0700 Subject: [PATCH 313/412] Discord, switch to native from vesktop --- hmModules/apps/discord/app.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hmModules/apps/discord/app.nix b/hmModules/apps/discord/app.nix index 474b6ac..946f0ad 100644 --- a/hmModules/apps/discord/app.nix +++ b/hmModules/apps/discord/app.nix @@ -6,7 +6,7 @@ config = lib.mkIf config.discord.enable { home.packages = with pkgs; [ - vesktop # Base app + discord # Base app ]; }; } From 09806b22be3e4d0dd829be85a459f9869bd92d70 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Fri, 18 Apr 2025 20:03:39 -0700 Subject: [PATCH 314/412] Discord, switch to native from vesktop --- hmModules/apps/discord/app.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hmModules/apps/discord/app.nix b/hmModules/apps/discord/app.nix index 474b6ac..946f0ad 100644 --- a/hmModules/apps/discord/app.nix +++ b/hmModules/apps/discord/app.nix @@ -6,7 +6,7 @@ config = lib.mkIf config.discord.enable { home.packages = with pkgs; [ - vesktop # Base app + discord # Base app ]; }; } From 21c134cdba0c822e5b7a514eb912460062895ed7 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 6 May 2025 12:35:24 -0700 Subject: [PATCH 315/412] Onizuka, enable sshd --- hosts/onizuka/host.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/hosts/onizuka/host.nix b/hosts/onizuka/host.nix index 619a462..e562908 100644 --- a/hosts/onizuka/host.nix +++ b/hosts/onizuka/host.nix @@ -12,8 +12,11 @@ system.timezone = "America/Los_Angeles"; system.users.bigWheels = [ "pan" ]; + sshd.enable = true; + tuigreet.enable = true; hyprland.enable = true; + niri.enable = true; steam.enable = true; steam.gamemode = true; From cc06993e26357a49e01f81d06cac42dd4f9f7176 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 6 May 2025 12:35:24 -0700 Subject: [PATCH 316/412] Onizuka, enable sshd --- hosts/onizuka/host.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/hosts/onizuka/host.nix b/hosts/onizuka/host.nix index 619a462..e562908 100644 --- a/hosts/onizuka/host.nix +++ b/hosts/onizuka/host.nix @@ -12,8 +12,11 @@ system.timezone = "America/Los_Angeles"; system.users.bigWheels = [ "pan" ]; + sshd.enable = true; + tuigreet.enable = true; hyprland.enable = true; + niri.enable = true; steam.enable = true; steam.gamemode = true; From f5962d1d272801a5a92d060e68804e01cd42d190 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 6 May 2025 12:52:09 -0700 Subject: [PATCH 317/412] Niri, Hypr, Flake Bump, tuigreet, init niri Sets up a config for Niri which involved both the host and user config settings. It's a semi basic set up to be improved on further later. This also needs to bump flake so that niri can be added to the flake update. I don't know what the flake bump date was at this point, so I'll have to bump it again soon. This needs to break apart the "waylandcompositors" service to allow niri and hypr to better fit the directory structure. Otherwise Hypr is unchanged. need to update the tuigreet default WM based on the currently selected one. Currently prioritizes Hyprland > Niri because I didn't want to write assert code... --- flake.lock | 250 +++++++++++++----- flake.nix | 2 + hmModules/apps/niri/app.nix | 91 +++++++ hosts/onizuka/host.nix | 1 - hosts/onizuka/users/pan/user.nix | 77 ++---- .../services/displaymanager/service.nix | 10 +- .../service.nix | 0 nixosModules/services/niri/service.nix | 16 ++ 8 files changed, 330 insertions(+), 117 deletions(-) create mode 100644 hmModules/apps/niri/app.nix rename nixosModules/services/{waylandcompositors => hyprland}/service.nix (100%) create mode 100644 nixosModules/services/niri/service.nix diff --git a/flake.lock b/flake.lock index e8276ee..3ce7a51 100644 --- a/flake.lock +++ b/flake.lock @@ -6,11 +6,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1742237177, - "narHash": "sha256-SZO34S9RKyp0Vub/7JFyNrpxtS/i+2q6Vqi4NIF5NH0=", + "lastModified": 1744234873, + "narHash": "sha256-lQOQNEU1z4/oVBpWDjTXidMdelaafNR3jecj6n0hCIU=", "owner": "ezKEa", "repo": "aagl-gtk-on-nix", - "rev": "796472887bd6362917f26f3ceac019ef21a39e75", + "rev": "8f45b51942618a16e2027a67f054400a32a4b534", "type": "github" }, "original": { @@ -25,11 +25,11 @@ "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1738087375, - "narHash": "sha256-GLyNtU9A2VN22jNRHZ2OXuFfTJLh8uEVVt+ftsKUX0c=", + "lastModified": 1744557573, + "narHash": "sha256-XAyj0iDuI51BytJ1PwN53uLpzTDdznPDQFG4RwihlTQ=", "owner": "Aylur", "repo": "ags", - "rev": "a6a7a0adb17740f4c34a59902701870d46fbb6a4", + "rev": "3ed9737bdbc8fc7a7c7ceef2165c9109f336bff6", "type": "github" }, "original": { @@ -58,11 +58,11 @@ ] }, "locked": { - "lastModified": 1742213273, - "narHash": "sha256-0l0vDb4anfsBu1rOs94bC73Hub+xEivgBAo6QXl2MmU=", + "lastModified": 1744289235, + "narHash": "sha256-ZFkHLdimtFzQACsVVyZkZlfYdj4iNy3PkzXfrwmlse8=", "owner": "hyprwm", "repo": "aquamarine", - "rev": "484b732195cc53f4536ce4bd59a5c6402b1e7ccf", + "rev": "c8282f4982b56dfa5e9b9f659809da93f8d37e7a", "type": "github" }, "original": { @@ -79,11 +79,11 @@ ] }, "locked": { - "lastModified": 1737670815, - "narHash": "sha256-ZCxxshGN7XooabArcoGkYSNx5yVunqjKJi2aTv6cznI=", + "lastModified": 1742571008, + "narHash": "sha256-5WgfJAeBpxiKbTR/gJvxrGYfqQRge5aUDcGKmU1YZ1Q=", "owner": "aylur", "repo": "astal", - "rev": "127e9cdcbf173846a3c40ddc0abfbb038df48042", + "rev": "dc0e5d37abe9424c53dcbd2506a4886ffee6296e", "type": "github" }, "original": { @@ -184,11 +184,11 @@ "nixpkgs": "nixpkgs_3" }, "locked": { - "lastModified": 1742246081, - "narHash": "sha256-1e4oFbtdOOb6NqauHevWWjEUXZnfZ6RUAJJjn9i4YBc=", + "lastModified": 1745024268, + "narHash": "sha256-bcVWOqJ1sDgHmwNvPrdJrF4H659rq7nno1w632BToas=", "owner": "nix-community", "repo": "home-manager", - "rev": "c657142e24a43ea1035889f0b0a7c24598e0e18a", + "rev": "991a4804720669220f7cbba078a2a27e2496eb69", "type": "github" }, "original": { @@ -242,11 +242,11 @@ ] }, "locked": { - "lastModified": 1739049071, - "narHash": "sha256-3+7TpXMrbsUXSwgr5VAKAnmkzMb6JO+Rvc9XRb5NMg4=", + "lastModified": 1743953322, + "narHash": "sha256-prQ5JKopXtzCMX2eT3dXbaVvGmzjMRE2bXStQDdazpM=", "owner": "hyprwm", "repo": "hyprgraphics", - "rev": "175c6b29b6ff82100539e7c4363a35a02c74dd73", + "rev": "9d7f2687c84c729afbc3b13f7937655570f2978d", "type": "github" }, "original": { @@ -271,11 +271,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1742245601, - "narHash": "sha256-02OZCZPy6J2dFpKNnWlWkpZHwV8iyi5rPSIWmB0YMvY=", + "lastModified": 1745018190, + "narHash": "sha256-A+qY3YZp9/J6EDaRsCxbfAm6yBJuPtBRnn7pu4HituQ=", "ref": "refs/heads/main", - "rev": "5f60fc7d00eb08ee39cac1f5eceeb97ffbea0e7f", - "revCount": 5901, + "rev": "f48ee7a3d17810c9a0bf229fc3131e15b09ef179", + "revCount": 6008, "type": "git", "url": "https://github.com/hyprwm/Hyprland" }, @@ -289,11 +289,11 @@ "nixpkgs": "nixpkgs_5" }, "locked": { - "lastModified": 1742213523, - "narHash": "sha256-I8JVdQRu8eWvY5W8XWYZkdd5pojDHkxeqQV7mMIsbhs=", + "lastModified": 1743417258, + "narHash": "sha256-YItzk1pj8Kz+b7VlC9zN1pSZ6CuX35asYy3HuMQ3lBQ=", "owner": "hyprwm", "repo": "contrib", - "rev": "bd81329944be53b0ffb99e05864804b95f1d7c65", + "rev": "bc2ad24e0b2e66c3e164994c4897cd94a933fd10", "type": "github" }, "original": { @@ -314,11 +314,11 @@ ] }, "locked": { - "lastModified": 1738422629, - "narHash": "sha256-5v+bv75wJWvahyM2xcMTSNNxmV8a7hb01Eey5zYnBJw=", + "lastModified": 1743714874, + "narHash": "sha256-yt8F7NhMFCFHUHy/lNjH/pjZyIDFNk52Q4tivQ31WFo=", "owner": "hyprwm", "repo": "hyprland-protocols", - "rev": "755aef8dab49d0fc4663c715fa4ad221b2aedaed", + "rev": "3a5c2bda1c1a4e55cc1330c782547695a93f05b2", "type": "github" }, "original": { @@ -411,11 +411,11 @@ ] }, "locked": { - "lastModified": 1741191527, - "narHash": "sha256-kM+11Nch47Xwfgtw2EpRitJuORy4miwoMuRi5tyMBDY=", + "lastModified": 1744468525, + "narHash": "sha256-9HySx+EtsbbKlZDlY+naqqOV679VdxP6x6fP3wxDXJk=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "72df3861f1197e41b078faa3e38eedd60e00018d", + "rev": "f1000c54d266e6e4e9d646df0774fac5b8a652df", "type": "github" }, "original": { @@ -436,11 +436,11 @@ ] }, "locked": { - "lastModified": 1741534688, - "narHash": "sha256-EV3945SnjOCuRVbGRghsWx/9D89FyshnSO1Q6/TuQ14=", + "lastModified": 1743950287, + "narHash": "sha256-/6IAEWyb8gC/NKZElxiHChkouiUOrVYNq9YqG0Pzm4Y=", "owner": "hyprwm", "repo": "hyprutils", - "rev": "dd1f720cbc2dbb3c71167c9598045dd3261d27b3", + "rev": "f2dc70e448b994cef627a157ee340135bd68fbc6", "type": "github" }, "original": { @@ -507,13 +507,69 @@ "url": "https://git.lix.systems/lix-project/nixos-module/archive/2.91.1-2.tar.gz" } }, + "niri": { + "inputs": { + "niri-stable": "niri-stable", + "niri-unstable": "niri-unstable", + "nixpkgs": "nixpkgs_7", + "nixpkgs-stable": "nixpkgs-stable", + "xwayland-satellite-stable": "xwayland-satellite-stable", + "xwayland-satellite-unstable": "xwayland-satellite-unstable" + }, + "locked": { + "lastModified": 1744991948, + "narHash": "sha256-f4xKjzY64l6e28YExcf/V8aLYzBzDdjNI7ZZJGBBz3Y=", + "owner": "sodiboo", + "repo": "niri-flake", + "rev": "a70acecb35de8941bac791c82d8e214d4be70567", + "type": "github" + }, + "original": { + "owner": "sodiboo", + "repo": "niri-flake", + "type": "github" + } + }, + "niri-stable": { + "flake": false, + "locked": { + "lastModified": 1740117926, + "narHash": "sha256-mTTHA0RAaQcdYe+9A3Jx77cmmyLFHmRoZdd8RpWa+m8=", + "owner": "YaLTeR", + "repo": "niri", + "rev": "b94a5db8790339cf9134873d8b490be69e02ac71", + "type": "github" + }, + "original": { + "owner": "YaLTeR", + "ref": "v25.02", + "repo": "niri", + "type": "github" + } + }, + "niri-unstable": { + "flake": false, + "locked": { + "lastModified": 1744878694, + "narHash": "sha256-e3jPdRQmlgeWwDTC/wnvKgIy4Ga8KZYoxUPQ8PCNktM=", + "owner": "YaLTeR", + "repo": "niri", + "rev": "7884d3bfea810740fe2ca7021b102af0f049ccae", + "type": "github" + }, + "original": { + "owner": "YaLTeR", + "repo": "niri", + "type": "github" + } + }, "nixpkgs": { "locked": { - "lastModified": 1740560979, - "narHash": "sha256-Vr3Qi346M+8CjedtbyUevIGDZW8LcA1fTG0ugPY/Hic=", + "lastModified": 1743315132, + "narHash": "sha256-6hl6L/tRnwubHcA4pfUUtk542wn2Om+D4UnDhlDW9BE=", "owner": "nixos", "repo": "nixpkgs", - "rev": "5135c59491985879812717f4c9fea69604e7f26f", + "rev": "52faf482a3889b7619003c0daec593a1912fddc1", "type": "github" }, "original": { @@ -523,13 +579,29 @@ "type": "github" } }, + "nixpkgs-stable": { + "locked": { + "lastModified": 1744440957, + "narHash": "sha256-FHlSkNqFmPxPJvy+6fNLaNeWnF1lZSgqVCl/eWaJRc4=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "26d499fc9f1d567283d5d56fcf367edd815dba1d", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-24.11", + "repo": "nixpkgs", + "type": "github" + } + }, "nixpkgs_2": { "locked": { - "lastModified": 1737469691, - "narHash": "sha256-nmKOgAU48S41dTPIXAq0AHZSehWUn6ZPrUKijHAMmIk=", + "lastModified": 1743583204, + "narHash": "sha256-F7n4+KOIfWrwoQjXrL2wD9RhFYLs2/GGe/MQY1sSdlE=", "owner": "nixos", "repo": "nixpkgs", - "rev": "9e4d5190a9482a1fb9d18adf0bdb83c6e506eaab", + "rev": "2c8d3f48d33929642c1c12cd243df4cc7d2ce434", "type": "github" }, "original": { @@ -541,11 +613,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1741513245, - "narHash": "sha256-7rTAMNTY1xoBwz0h7ZMtEcd8LELk9R5TzBPoHuhNSCk=", + "lastModified": 1744463964, + "narHash": "sha256-LWqduOgLHCFxiTNYi3Uj5Lgz0SR+Xhw3kr/3Xd0GPTM=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "e3e32b642a31e6714ec1b712de8c91a3352ce7e1", + "rev": "2631b0b7abcea6e640ce31cd78ea58910d31e650", "type": "github" }, "original": { @@ -557,11 +629,11 @@ }, "nixpkgs_4": { "locked": { - "lastModified": 1742069588, - "narHash": "sha256-C7jVfohcGzdZRF6DO+ybyG/sqpo1h6bZi9T56sxLy+k=", + "lastModified": 1744932701, + "narHash": "sha256-fusHbZCyv126cyArUwwKrLdCkgVAIaa/fQJYFlCEqiU=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "c80f6a7e10b39afcc1894e02ef785b1ad0b0d7e5", + "rev": "b024ced1aac25639f8ca8fdfc2f8c4fbd66c48ef", "type": "github" }, "original": { @@ -605,11 +677,27 @@ }, "nixpkgs_7": { "locked": { - "lastModified": 1742069588, - "narHash": "sha256-C7jVfohcGzdZRF6DO+ybyG/sqpo1h6bZi9T56sxLy+k=", + "lastModified": 1744932701, + "narHash": "sha256-fusHbZCyv126cyArUwwKrLdCkgVAIaa/fQJYFlCEqiU=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "c80f6a7e10b39afcc1894e02ef785b1ad0b0d7e5", + "rev": "b024ced1aac25639f8ca8fdfc2f8c4fbd66c48ef", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_8": { + "locked": { + "lastModified": 1744932701, + "narHash": "sha256-fusHbZCyv126cyArUwwKrLdCkgVAIaa/fQJYFlCEqiU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "b024ced1aac25639f8ca8fdfc2f8c4fbd66c48ef", "type": "github" }, "original": { @@ -618,13 +706,13 @@ "type": "indirect" } }, - "nixpkgs_8": { + "nixpkgs_9": { "locked": { - "lastModified": 1741865919, - "narHash": "sha256-4thdbnP6dlbdq+qZWTsm4ffAwoS8Tiq1YResB+RP6WE=", + "lastModified": 1744502386, + "narHash": "sha256-QAd1L37eU7ktL2WeLLLTmI6P9moz9+a/ONO8qNBYJgM=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "573c650e8a14b2faa0041645ab18aed7e60f0c9a", + "rev": "f6db44a8daa59c40ae41ba6e5823ec77fe0d2124", "type": "github" }, "original": { @@ -644,11 +732,11 @@ ] }, "locked": { - "lastModified": 1742058297, - "narHash": "sha256-b4SZc6TkKw8WQQssbN5O2DaCEzmFfvSTPYHlx/SFW9Y=", + "lastModified": 1742649964, + "narHash": "sha256-DwOTp7nvfi8mRfuL1escHDXabVXFGT1VlPD1JHrtrco=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "59f17850021620cd348ad2e9c0c64f4e6325ce2a", + "rev": "dcf5072734cb576d2b0c59b2ac44f5050b5eac82", "type": "github" }, "original": { @@ -665,20 +753,21 @@ "hyprland": "hyprland", "hyprland-contrib": "hyprland-contrib", "lix-module": "lix-module", - "nixpkgs": "nixpkgs_7", + "niri": "niri", + "nixpkgs": "nixpkgs_8", "sops-nix": "sops-nix" } }, "sops-nix": { "inputs": { - "nixpkgs": "nixpkgs_8" + "nixpkgs": "nixpkgs_9" }, "locked": { - "lastModified": 1742239755, - "narHash": "sha256-ptn8dR4Uat3UUadGYNnB7CIH9SQm8mK69D2A/twBUXQ=", + "lastModified": 1744669848, + "narHash": "sha256-pXyanHLUzLNd3MX9vsWG+6Z2hTU8niyphWstYEP3/GU=", "owner": "Mic92", "repo": "sops-nix", - "rev": "787afce414bcce803b605c510b60bf43c11f4b55", + "rev": "61154300d945f0b147b30d24ddcafa159148026a", "type": "github" }, "original": { @@ -745,11 +834,11 @@ ] }, "locked": { - "lastModified": 1741934139, - "narHash": "sha256-ZhTcTH9FoeAtbPfWGrhkH7RjLJZ7GeF18nygLAMR+WE=", + "lastModified": 1744644585, + "narHash": "sha256-p0D/e4J6Sv6GSb+9u8OQcVHSE2gPNYB5ygIfGDyEiXQ=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "150b0b6f52bb422a1b232a53698606fe0320dde0", + "rev": "be6771e754345f18244fb00aae5c9e5ab21ccc26", "type": "github" }, "original": { @@ -757,6 +846,39 @@ "repo": "xdg-desktop-portal-hyprland", "type": "github" } + }, + "xwayland-satellite-stable": { + "flake": false, + "locked": { + "lastModified": 1739246919, + "narHash": "sha256-/hBM43/Gd0/tW+egrhlWgOIISeJxEs2uAOIYVpfDKeU=", + "owner": "Supreeeme", + "repo": "xwayland-satellite", + "rev": "44590a416d4a3e8220e19e29e0b6efe64a80315d", + "type": "github" + }, + "original": { + "owner": "Supreeeme", + "ref": "v0.5.1", + "repo": "xwayland-satellite", + "type": "github" + } + }, + "xwayland-satellite-unstable": { + "flake": false, + "locked": { + "lastModified": 1744860839, + "narHash": "sha256-m/p0wFYey7zqlf5yEJ3g/h+4ZNPkjPsGiMZVJ09aWWw=", + "owner": "Supreeeme", + "repo": "xwayland-satellite", + "rev": "2b5288b4b9ad2481a033e9c3cc1205108323e7d9", + "type": "github" + }, + "original": { + "owner": "Supreeeme", + "repo": "xwayland-satellite", + "type": "github" + } } }, "root": "root", diff --git a/flake.nix b/flake.nix index d9b8179..eeb4bd0 100644 --- a/flake.nix +++ b/flake.nix @@ -9,6 +9,8 @@ hyprland.url = "git+https://github.com/hyprwm/Hyprland"; hyprland-contrib.url = "github:hyprwm/contrib"; + niri.url = "github:sodiboo/niri-flake"; + sops-nix.url = "github:Mic92/sops-nix"; ags.url = "github:Aylur/ags"; aagl.url = "github:ezKEa/aagl-gtk-on-nix"; diff --git a/hmModules/apps/niri/app.nix b/hmModules/apps/niri/app.nix new file mode 100644 index 0000000..2b84d94 --- /dev/null +++ b/hmModules/apps/niri/app.nix @@ -0,0 +1,91 @@ +{ inputs, config, lib, pkgs, ... }: + +{ + options.niri = { + enable = lib.mkEnableOption "Enables niri"; + outputs = lib.mkOption { default = {}; }; + mouse.accel = lib.mkOption { default = 0.0; }; + }; + + + imports = [ + inputs.niri.homeModules.niri + ]; + + config = lib.mkIf config.niri.enable { + home.packages = [ pkgs.xwayland-satellite ]; + programs.niri = { + enable = true; + settings = { + prefer-no-csd = true; + screenshot-path = config.xdg.userDirs.pictures + "/screenshots"; + spawn-at-startup = [ + { command = [ "xwayland-satellite" ]; } + ]; + environment = { + ELECTRON_OZONE_PLATFORM_HINT = "auto"; + DISPLAY = ":0"; + }; + outputs = config.niri.outputs; + input = { + mouse = { + accel-profile = "flat"; + accel-speed = config.niri.mouse.accel; + }; + }; + layout = { + gaps = 3; + focus-ring.enable = false; + border = { + enable = true; + width = 2; + active.color = "#F5C2E7"; + inactive.color = "#1E1D2F"; + }; + preset-column-widths = [ + { proportion = 1. / 2.; } + { proportion = 1.; } + ]; + }; + animations = { + slowdown = 0.6; + }; + binds = with config.lib.niri.actions; { + "Mod+Return".action= spawn "${config.defaultApps.terminal}"; + "Mod+Shift+Return".action = spawn "${pkgs.fuzzel}/bin/fuzzel"; + "Mod+P".action = screenshot; + "Mod+Shift+P".action = screenshot-window; + + "Mod+Tab".action = switch-preset-column-width; + "Mod+Shift+Q".action = quit; + "Mod+C".action = close-window; + + "Mod+Space".action = maximize-column; + "Mod+SHIFT+Space".action = fullscreen-window; + + "Mod+A".action = focus-monitor-left; + "Mod+F".action = focus-monitor-right; + "Mod+S".action = move-column-to-monitor-left; + "Mod+D".action = move-column-to-monitor-right; + "Mod+SHIFT+A".action = move-workspace-to-monitor-left; + "Mod+SHIFT+F".action = move-workspace-to-monitor-right; + + "Mod+H".action = focus-column-left; + "Mod+J".action = focus-window-or-workspace-down; + "Mod+K".action = focus-window-or-workspace-up; + "Mod+L".action = focus-column-right; + + "Mod+SHIFT+H".action = consume-or-expel-window-left; + "Mod+SHIFT+J".action = move-window-down-or-to-workspace-down; + "Mod+SHIFT+K".action = move-window-up-or-to-workspace-up; + "Mod+SHIFT+L".action = consume-or-expel-window-right; + + "Mod+BracketLeft".action = set-column-width "-10%"; + "Mod+BracketRight".action = set-column-width "+10%"; + + # "MOD+I".action = spawn-scratchpad; + }; + }; + }; + }; +} diff --git a/hosts/onizuka/host.nix b/hosts/onizuka/host.nix index e562908..5b139c5 100644 --- a/hosts/onizuka/host.nix +++ b/hosts/onizuka/host.nix @@ -15,7 +15,6 @@ sshd.enable = true; tuigreet.enable = true; - hyprland.enable = true; niri.enable = true; steam.enable = true; diff --git a/hosts/onizuka/users/pan/user.nix b/hosts/onizuka/users/pan/user.nix index 62ec37a..21abf26 100644 --- a/hosts/onizuka/users/pan/user.nix +++ b/hosts/onizuka/users/pan/user.nix @@ -1,55 +1,36 @@ { config, pkgs, ... }: { - hypr.enable = true; - hypr.monitor.details = [ - "DP-2,2560x1440@144,0x0,1" - "DP-1,2560x1440@144,-2560x0,1" - "HDMI-A-1,disable" - ]; - hypr.workspace = { - workspaces = { - "DP-2" = [ - "home" - "web" - "med" - "game" - ]; - "DP-1" = [ - "chat" - ]; - }; - scratchpad.enable = true; - defaults = { - "name:web" = [ "class:(librewolf)" ]; - "name:med" = [ "class:(librewolf),title:Picture-in-Picture" ]; - "name:chat" = [ "class:(Beeper)" ]; - "name:game" = [ "class:(lutris)" "class:(explorer.exe)" ]; + # "DP-2" = [ + # "home" + # "web" + # "med" + # "game" + # ]; + # "DP-1" = [ + # "chat" + # ]; + # RULES + # "name:web" = [ "class:(librewolf)" ]; + # "name:med" = [ "class:(librewolf),title:Picture-in-Picture" ]; + # "name:chat" = [ "class:(Beeper)" ]; + # "name:game" = [ "class:(lutris)" "class:(explorer.exe)" ]; + # OPAQUE: + # "initialTitle:^(Discord Popout)$" + # "class:^(firefox)$" + # "class:^(Gimp)$" + # "class:^(feh)$" + # "class:^(mpv)$" + # path = "${config.home.homeDirectory}/med/pix/bg.png"; + # theme = "miku"; + niri = { + enable = true; + mouse.accel = -0.53; + outputs = { + "DP-1".mode = { width = 2560; height = 1440; refresh = 144.000; }; + "DP-2".mode = { width = 2560; height = 1440; refresh = 144.000; }; }; }; - hypr.windows.opaque = [ - "initialTitle:^(Discord Popout)$" - "class:^(firefox)$" - "class:^(Gimp)$" - "class:^(feh)$" - "class:^(mpv)$" - ]; - hypr.background = { - enable = true; - path = "${config.home.homeDirectory}/med/pix/bg.png"; - }; - hypr.cursor = { - enable = true; - theme = "miku"; - }; - hypr = { - screenshot.enable = true; - mouse.sensitivity = -0.52; - polkit.enable = true; - master.mfact = 0.53; - xwayland.videobridge.enable = true; - }; - rofi.enable = true; timer.enableHourly = true; timer.enableQuarterly = true; @@ -117,7 +98,5 @@ lutgen # LUT generator prismlauncher # Minecraft launcher jdk8 # For playing older minecraft - zoom-us # Zoom - musescore ]; } diff --git a/nixosModules/services/displaymanager/service.nix b/nixosModules/services/displaymanager/service.nix index 1110828..92f2d75 100644 --- a/nixosModules/services/displaymanager/service.nix +++ b/nixosModules/services/displaymanager/service.nix @@ -6,15 +6,19 @@ }; config = lib.mkIf config.tuigreet.enable { - services.greetd = { + services.greetd = let + wm = + if config.hyprland.enable then "Hyprland" + else (if config.niri.enable then "niri" else null); + in { enable = true; package = pkgs.greetd.tuigreet; settings = { terminal = { vt = 2; }; - default_session = lib.mkIf config.hyprland.enable { - command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time --cmd Hyprland"; + default_session = lib.mkIf (wm != null) { + command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time --cmd ${wm}"; user = "greeter"; }; }; diff --git a/nixosModules/services/waylandcompositors/service.nix b/nixosModules/services/hyprland/service.nix similarity index 100% rename from nixosModules/services/waylandcompositors/service.nix rename to nixosModules/services/hyprland/service.nix diff --git a/nixosModules/services/niri/service.nix b/nixosModules/services/niri/service.nix new file mode 100644 index 0000000..2b9d8e8 --- /dev/null +++ b/nixosModules/services/niri/service.nix @@ -0,0 +1,16 @@ +{ inputs, config, lib, ... }: + +{ + + options.niri = { + enable = lib.mkEnableOption "enables niri"; + }; + + imports = [ + inputs.niri.nixosModules.niri + ]; + + config = lib.mkIf config.niri.enable { + programs.niri.enable = true; + }; +} From 8ede8136ea0e45b7360d8c5d5b640317995bce7a Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 6 May 2025 12:52:09 -0700 Subject: [PATCH 318/412] Niri, Hypr, Flake Bump, tuigreet, init niri Sets up a config for Niri which involved both the host and user config settings. It's a semi basic set up to be improved on further later. This also needs to bump flake so that niri can be added to the flake update. I don't know what the flake bump date was at this point, so I'll have to bump it again soon. This needs to break apart the "waylandcompositors" service to allow niri and hypr to better fit the directory structure. Otherwise Hypr is unchanged. need to update the tuigreet default WM based on the currently selected one. Currently prioritizes Hyprland > Niri because I didn't want to write assert code... --- flake.lock | 250 +++++++++++++----- flake.nix | 2 + hmModules/apps/niri/app.nix | 91 +++++++ hosts/onizuka/host.nix | 1 - hosts/onizuka/users/pan/user.nix | 77 ++---- .../services/displaymanager/service.nix | 10 +- .../service.nix | 0 nixosModules/services/niri/service.nix | 16 ++ 8 files changed, 330 insertions(+), 117 deletions(-) create mode 100644 hmModules/apps/niri/app.nix rename nixosModules/services/{waylandcompositors => hyprland}/service.nix (100%) create mode 100644 nixosModules/services/niri/service.nix diff --git a/flake.lock b/flake.lock index e8276ee..3ce7a51 100644 --- a/flake.lock +++ b/flake.lock @@ -6,11 +6,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1742237177, - "narHash": "sha256-SZO34S9RKyp0Vub/7JFyNrpxtS/i+2q6Vqi4NIF5NH0=", + "lastModified": 1744234873, + "narHash": "sha256-lQOQNEU1z4/oVBpWDjTXidMdelaafNR3jecj6n0hCIU=", "owner": "ezKEa", "repo": "aagl-gtk-on-nix", - "rev": "796472887bd6362917f26f3ceac019ef21a39e75", + "rev": "8f45b51942618a16e2027a67f054400a32a4b534", "type": "github" }, "original": { @@ -25,11 +25,11 @@ "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1738087375, - "narHash": "sha256-GLyNtU9A2VN22jNRHZ2OXuFfTJLh8uEVVt+ftsKUX0c=", + "lastModified": 1744557573, + "narHash": "sha256-XAyj0iDuI51BytJ1PwN53uLpzTDdznPDQFG4RwihlTQ=", "owner": "Aylur", "repo": "ags", - "rev": "a6a7a0adb17740f4c34a59902701870d46fbb6a4", + "rev": "3ed9737bdbc8fc7a7c7ceef2165c9109f336bff6", "type": "github" }, "original": { @@ -58,11 +58,11 @@ ] }, "locked": { - "lastModified": 1742213273, - "narHash": "sha256-0l0vDb4anfsBu1rOs94bC73Hub+xEivgBAo6QXl2MmU=", + "lastModified": 1744289235, + "narHash": "sha256-ZFkHLdimtFzQACsVVyZkZlfYdj4iNy3PkzXfrwmlse8=", "owner": "hyprwm", "repo": "aquamarine", - "rev": "484b732195cc53f4536ce4bd59a5c6402b1e7ccf", + "rev": "c8282f4982b56dfa5e9b9f659809da93f8d37e7a", "type": "github" }, "original": { @@ -79,11 +79,11 @@ ] }, "locked": { - "lastModified": 1737670815, - "narHash": "sha256-ZCxxshGN7XooabArcoGkYSNx5yVunqjKJi2aTv6cznI=", + "lastModified": 1742571008, + "narHash": "sha256-5WgfJAeBpxiKbTR/gJvxrGYfqQRge5aUDcGKmU1YZ1Q=", "owner": "aylur", "repo": "astal", - "rev": "127e9cdcbf173846a3c40ddc0abfbb038df48042", + "rev": "dc0e5d37abe9424c53dcbd2506a4886ffee6296e", "type": "github" }, "original": { @@ -184,11 +184,11 @@ "nixpkgs": "nixpkgs_3" }, "locked": { - "lastModified": 1742246081, - "narHash": "sha256-1e4oFbtdOOb6NqauHevWWjEUXZnfZ6RUAJJjn9i4YBc=", + "lastModified": 1745024268, + "narHash": "sha256-bcVWOqJ1sDgHmwNvPrdJrF4H659rq7nno1w632BToas=", "owner": "nix-community", "repo": "home-manager", - "rev": "c657142e24a43ea1035889f0b0a7c24598e0e18a", + "rev": "991a4804720669220f7cbba078a2a27e2496eb69", "type": "github" }, "original": { @@ -242,11 +242,11 @@ ] }, "locked": { - "lastModified": 1739049071, - "narHash": "sha256-3+7TpXMrbsUXSwgr5VAKAnmkzMb6JO+Rvc9XRb5NMg4=", + "lastModified": 1743953322, + "narHash": "sha256-prQ5JKopXtzCMX2eT3dXbaVvGmzjMRE2bXStQDdazpM=", "owner": "hyprwm", "repo": "hyprgraphics", - "rev": "175c6b29b6ff82100539e7c4363a35a02c74dd73", + "rev": "9d7f2687c84c729afbc3b13f7937655570f2978d", "type": "github" }, "original": { @@ -271,11 +271,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1742245601, - "narHash": "sha256-02OZCZPy6J2dFpKNnWlWkpZHwV8iyi5rPSIWmB0YMvY=", + "lastModified": 1745018190, + "narHash": "sha256-A+qY3YZp9/J6EDaRsCxbfAm6yBJuPtBRnn7pu4HituQ=", "ref": "refs/heads/main", - "rev": "5f60fc7d00eb08ee39cac1f5eceeb97ffbea0e7f", - "revCount": 5901, + "rev": "f48ee7a3d17810c9a0bf229fc3131e15b09ef179", + "revCount": 6008, "type": "git", "url": "https://github.com/hyprwm/Hyprland" }, @@ -289,11 +289,11 @@ "nixpkgs": "nixpkgs_5" }, "locked": { - "lastModified": 1742213523, - "narHash": "sha256-I8JVdQRu8eWvY5W8XWYZkdd5pojDHkxeqQV7mMIsbhs=", + "lastModified": 1743417258, + "narHash": "sha256-YItzk1pj8Kz+b7VlC9zN1pSZ6CuX35asYy3HuMQ3lBQ=", "owner": "hyprwm", "repo": "contrib", - "rev": "bd81329944be53b0ffb99e05864804b95f1d7c65", + "rev": "bc2ad24e0b2e66c3e164994c4897cd94a933fd10", "type": "github" }, "original": { @@ -314,11 +314,11 @@ ] }, "locked": { - "lastModified": 1738422629, - "narHash": "sha256-5v+bv75wJWvahyM2xcMTSNNxmV8a7hb01Eey5zYnBJw=", + "lastModified": 1743714874, + "narHash": "sha256-yt8F7NhMFCFHUHy/lNjH/pjZyIDFNk52Q4tivQ31WFo=", "owner": "hyprwm", "repo": "hyprland-protocols", - "rev": "755aef8dab49d0fc4663c715fa4ad221b2aedaed", + "rev": "3a5c2bda1c1a4e55cc1330c782547695a93f05b2", "type": "github" }, "original": { @@ -411,11 +411,11 @@ ] }, "locked": { - "lastModified": 1741191527, - "narHash": "sha256-kM+11Nch47Xwfgtw2EpRitJuORy4miwoMuRi5tyMBDY=", + "lastModified": 1744468525, + "narHash": "sha256-9HySx+EtsbbKlZDlY+naqqOV679VdxP6x6fP3wxDXJk=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "72df3861f1197e41b078faa3e38eedd60e00018d", + "rev": "f1000c54d266e6e4e9d646df0774fac5b8a652df", "type": "github" }, "original": { @@ -436,11 +436,11 @@ ] }, "locked": { - "lastModified": 1741534688, - "narHash": "sha256-EV3945SnjOCuRVbGRghsWx/9D89FyshnSO1Q6/TuQ14=", + "lastModified": 1743950287, + "narHash": "sha256-/6IAEWyb8gC/NKZElxiHChkouiUOrVYNq9YqG0Pzm4Y=", "owner": "hyprwm", "repo": "hyprutils", - "rev": "dd1f720cbc2dbb3c71167c9598045dd3261d27b3", + "rev": "f2dc70e448b994cef627a157ee340135bd68fbc6", "type": "github" }, "original": { @@ -507,13 +507,69 @@ "url": "https://git.lix.systems/lix-project/nixos-module/archive/2.91.1-2.tar.gz" } }, + "niri": { + "inputs": { + "niri-stable": "niri-stable", + "niri-unstable": "niri-unstable", + "nixpkgs": "nixpkgs_7", + "nixpkgs-stable": "nixpkgs-stable", + "xwayland-satellite-stable": "xwayland-satellite-stable", + "xwayland-satellite-unstable": "xwayland-satellite-unstable" + }, + "locked": { + "lastModified": 1744991948, + "narHash": "sha256-f4xKjzY64l6e28YExcf/V8aLYzBzDdjNI7ZZJGBBz3Y=", + "owner": "sodiboo", + "repo": "niri-flake", + "rev": "a70acecb35de8941bac791c82d8e214d4be70567", + "type": "github" + }, + "original": { + "owner": "sodiboo", + "repo": "niri-flake", + "type": "github" + } + }, + "niri-stable": { + "flake": false, + "locked": { + "lastModified": 1740117926, + "narHash": "sha256-mTTHA0RAaQcdYe+9A3Jx77cmmyLFHmRoZdd8RpWa+m8=", + "owner": "YaLTeR", + "repo": "niri", + "rev": "b94a5db8790339cf9134873d8b490be69e02ac71", + "type": "github" + }, + "original": { + "owner": "YaLTeR", + "ref": "v25.02", + "repo": "niri", + "type": "github" + } + }, + "niri-unstable": { + "flake": false, + "locked": { + "lastModified": 1744878694, + "narHash": "sha256-e3jPdRQmlgeWwDTC/wnvKgIy4Ga8KZYoxUPQ8PCNktM=", + "owner": "YaLTeR", + "repo": "niri", + "rev": "7884d3bfea810740fe2ca7021b102af0f049ccae", + "type": "github" + }, + "original": { + "owner": "YaLTeR", + "repo": "niri", + "type": "github" + } + }, "nixpkgs": { "locked": { - "lastModified": 1740560979, - "narHash": "sha256-Vr3Qi346M+8CjedtbyUevIGDZW8LcA1fTG0ugPY/Hic=", + "lastModified": 1743315132, + "narHash": "sha256-6hl6L/tRnwubHcA4pfUUtk542wn2Om+D4UnDhlDW9BE=", "owner": "nixos", "repo": "nixpkgs", - "rev": "5135c59491985879812717f4c9fea69604e7f26f", + "rev": "52faf482a3889b7619003c0daec593a1912fddc1", "type": "github" }, "original": { @@ -523,13 +579,29 @@ "type": "github" } }, + "nixpkgs-stable": { + "locked": { + "lastModified": 1744440957, + "narHash": "sha256-FHlSkNqFmPxPJvy+6fNLaNeWnF1lZSgqVCl/eWaJRc4=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "26d499fc9f1d567283d5d56fcf367edd815dba1d", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-24.11", + "repo": "nixpkgs", + "type": "github" + } + }, "nixpkgs_2": { "locked": { - "lastModified": 1737469691, - "narHash": "sha256-nmKOgAU48S41dTPIXAq0AHZSehWUn6ZPrUKijHAMmIk=", + "lastModified": 1743583204, + "narHash": "sha256-F7n4+KOIfWrwoQjXrL2wD9RhFYLs2/GGe/MQY1sSdlE=", "owner": "nixos", "repo": "nixpkgs", - "rev": "9e4d5190a9482a1fb9d18adf0bdb83c6e506eaab", + "rev": "2c8d3f48d33929642c1c12cd243df4cc7d2ce434", "type": "github" }, "original": { @@ -541,11 +613,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1741513245, - "narHash": "sha256-7rTAMNTY1xoBwz0h7ZMtEcd8LELk9R5TzBPoHuhNSCk=", + "lastModified": 1744463964, + "narHash": "sha256-LWqduOgLHCFxiTNYi3Uj5Lgz0SR+Xhw3kr/3Xd0GPTM=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "e3e32b642a31e6714ec1b712de8c91a3352ce7e1", + "rev": "2631b0b7abcea6e640ce31cd78ea58910d31e650", "type": "github" }, "original": { @@ -557,11 +629,11 @@ }, "nixpkgs_4": { "locked": { - "lastModified": 1742069588, - "narHash": "sha256-C7jVfohcGzdZRF6DO+ybyG/sqpo1h6bZi9T56sxLy+k=", + "lastModified": 1744932701, + "narHash": "sha256-fusHbZCyv126cyArUwwKrLdCkgVAIaa/fQJYFlCEqiU=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "c80f6a7e10b39afcc1894e02ef785b1ad0b0d7e5", + "rev": "b024ced1aac25639f8ca8fdfc2f8c4fbd66c48ef", "type": "github" }, "original": { @@ -605,11 +677,27 @@ }, "nixpkgs_7": { "locked": { - "lastModified": 1742069588, - "narHash": "sha256-C7jVfohcGzdZRF6DO+ybyG/sqpo1h6bZi9T56sxLy+k=", + "lastModified": 1744932701, + "narHash": "sha256-fusHbZCyv126cyArUwwKrLdCkgVAIaa/fQJYFlCEqiU=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "c80f6a7e10b39afcc1894e02ef785b1ad0b0d7e5", + "rev": "b024ced1aac25639f8ca8fdfc2f8c4fbd66c48ef", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_8": { + "locked": { + "lastModified": 1744932701, + "narHash": "sha256-fusHbZCyv126cyArUwwKrLdCkgVAIaa/fQJYFlCEqiU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "b024ced1aac25639f8ca8fdfc2f8c4fbd66c48ef", "type": "github" }, "original": { @@ -618,13 +706,13 @@ "type": "indirect" } }, - "nixpkgs_8": { + "nixpkgs_9": { "locked": { - "lastModified": 1741865919, - "narHash": "sha256-4thdbnP6dlbdq+qZWTsm4ffAwoS8Tiq1YResB+RP6WE=", + "lastModified": 1744502386, + "narHash": "sha256-QAd1L37eU7ktL2WeLLLTmI6P9moz9+a/ONO8qNBYJgM=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "573c650e8a14b2faa0041645ab18aed7e60f0c9a", + "rev": "f6db44a8daa59c40ae41ba6e5823ec77fe0d2124", "type": "github" }, "original": { @@ -644,11 +732,11 @@ ] }, "locked": { - "lastModified": 1742058297, - "narHash": "sha256-b4SZc6TkKw8WQQssbN5O2DaCEzmFfvSTPYHlx/SFW9Y=", + "lastModified": 1742649964, + "narHash": "sha256-DwOTp7nvfi8mRfuL1escHDXabVXFGT1VlPD1JHrtrco=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "59f17850021620cd348ad2e9c0c64f4e6325ce2a", + "rev": "dcf5072734cb576d2b0c59b2ac44f5050b5eac82", "type": "github" }, "original": { @@ -665,20 +753,21 @@ "hyprland": "hyprland", "hyprland-contrib": "hyprland-contrib", "lix-module": "lix-module", - "nixpkgs": "nixpkgs_7", + "niri": "niri", + "nixpkgs": "nixpkgs_8", "sops-nix": "sops-nix" } }, "sops-nix": { "inputs": { - "nixpkgs": "nixpkgs_8" + "nixpkgs": "nixpkgs_9" }, "locked": { - "lastModified": 1742239755, - "narHash": "sha256-ptn8dR4Uat3UUadGYNnB7CIH9SQm8mK69D2A/twBUXQ=", + "lastModified": 1744669848, + "narHash": "sha256-pXyanHLUzLNd3MX9vsWG+6Z2hTU8niyphWstYEP3/GU=", "owner": "Mic92", "repo": "sops-nix", - "rev": "787afce414bcce803b605c510b60bf43c11f4b55", + "rev": "61154300d945f0b147b30d24ddcafa159148026a", "type": "github" }, "original": { @@ -745,11 +834,11 @@ ] }, "locked": { - "lastModified": 1741934139, - "narHash": "sha256-ZhTcTH9FoeAtbPfWGrhkH7RjLJZ7GeF18nygLAMR+WE=", + "lastModified": 1744644585, + "narHash": "sha256-p0D/e4J6Sv6GSb+9u8OQcVHSE2gPNYB5ygIfGDyEiXQ=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "150b0b6f52bb422a1b232a53698606fe0320dde0", + "rev": "be6771e754345f18244fb00aae5c9e5ab21ccc26", "type": "github" }, "original": { @@ -757,6 +846,39 @@ "repo": "xdg-desktop-portal-hyprland", "type": "github" } + }, + "xwayland-satellite-stable": { + "flake": false, + "locked": { + "lastModified": 1739246919, + "narHash": "sha256-/hBM43/Gd0/tW+egrhlWgOIISeJxEs2uAOIYVpfDKeU=", + "owner": "Supreeeme", + "repo": "xwayland-satellite", + "rev": "44590a416d4a3e8220e19e29e0b6efe64a80315d", + "type": "github" + }, + "original": { + "owner": "Supreeeme", + "ref": "v0.5.1", + "repo": "xwayland-satellite", + "type": "github" + } + }, + "xwayland-satellite-unstable": { + "flake": false, + "locked": { + "lastModified": 1744860839, + "narHash": "sha256-m/p0wFYey7zqlf5yEJ3g/h+4ZNPkjPsGiMZVJ09aWWw=", + "owner": "Supreeeme", + "repo": "xwayland-satellite", + "rev": "2b5288b4b9ad2481a033e9c3cc1205108323e7d9", + "type": "github" + }, + "original": { + "owner": "Supreeeme", + "repo": "xwayland-satellite", + "type": "github" + } } }, "root": "root", diff --git a/flake.nix b/flake.nix index d9b8179..eeb4bd0 100644 --- a/flake.nix +++ b/flake.nix @@ -9,6 +9,8 @@ hyprland.url = "git+https://github.com/hyprwm/Hyprland"; hyprland-contrib.url = "github:hyprwm/contrib"; + niri.url = "github:sodiboo/niri-flake"; + sops-nix.url = "github:Mic92/sops-nix"; ags.url = "github:Aylur/ags"; aagl.url = "github:ezKEa/aagl-gtk-on-nix"; diff --git a/hmModules/apps/niri/app.nix b/hmModules/apps/niri/app.nix new file mode 100644 index 0000000..2b84d94 --- /dev/null +++ b/hmModules/apps/niri/app.nix @@ -0,0 +1,91 @@ +{ inputs, config, lib, pkgs, ... }: + +{ + options.niri = { + enable = lib.mkEnableOption "Enables niri"; + outputs = lib.mkOption { default = {}; }; + mouse.accel = lib.mkOption { default = 0.0; }; + }; + + + imports = [ + inputs.niri.homeModules.niri + ]; + + config = lib.mkIf config.niri.enable { + home.packages = [ pkgs.xwayland-satellite ]; + programs.niri = { + enable = true; + settings = { + prefer-no-csd = true; + screenshot-path = config.xdg.userDirs.pictures + "/screenshots"; + spawn-at-startup = [ + { command = [ "xwayland-satellite" ]; } + ]; + environment = { + ELECTRON_OZONE_PLATFORM_HINT = "auto"; + DISPLAY = ":0"; + }; + outputs = config.niri.outputs; + input = { + mouse = { + accel-profile = "flat"; + accel-speed = config.niri.mouse.accel; + }; + }; + layout = { + gaps = 3; + focus-ring.enable = false; + border = { + enable = true; + width = 2; + active.color = "#F5C2E7"; + inactive.color = "#1E1D2F"; + }; + preset-column-widths = [ + { proportion = 1. / 2.; } + { proportion = 1.; } + ]; + }; + animations = { + slowdown = 0.6; + }; + binds = with config.lib.niri.actions; { + "Mod+Return".action= spawn "${config.defaultApps.terminal}"; + "Mod+Shift+Return".action = spawn "${pkgs.fuzzel}/bin/fuzzel"; + "Mod+P".action = screenshot; + "Mod+Shift+P".action = screenshot-window; + + "Mod+Tab".action = switch-preset-column-width; + "Mod+Shift+Q".action = quit; + "Mod+C".action = close-window; + + "Mod+Space".action = maximize-column; + "Mod+SHIFT+Space".action = fullscreen-window; + + "Mod+A".action = focus-monitor-left; + "Mod+F".action = focus-monitor-right; + "Mod+S".action = move-column-to-monitor-left; + "Mod+D".action = move-column-to-monitor-right; + "Mod+SHIFT+A".action = move-workspace-to-monitor-left; + "Mod+SHIFT+F".action = move-workspace-to-monitor-right; + + "Mod+H".action = focus-column-left; + "Mod+J".action = focus-window-or-workspace-down; + "Mod+K".action = focus-window-or-workspace-up; + "Mod+L".action = focus-column-right; + + "Mod+SHIFT+H".action = consume-or-expel-window-left; + "Mod+SHIFT+J".action = move-window-down-or-to-workspace-down; + "Mod+SHIFT+K".action = move-window-up-or-to-workspace-up; + "Mod+SHIFT+L".action = consume-or-expel-window-right; + + "Mod+BracketLeft".action = set-column-width "-10%"; + "Mod+BracketRight".action = set-column-width "+10%"; + + # "MOD+I".action = spawn-scratchpad; + }; + }; + }; + }; +} diff --git a/hosts/onizuka/host.nix b/hosts/onizuka/host.nix index e562908..5b139c5 100644 --- a/hosts/onizuka/host.nix +++ b/hosts/onizuka/host.nix @@ -15,7 +15,6 @@ sshd.enable = true; tuigreet.enable = true; - hyprland.enable = true; niri.enable = true; steam.enable = true; diff --git a/hosts/onizuka/users/pan/user.nix b/hosts/onizuka/users/pan/user.nix index 62ec37a..21abf26 100644 --- a/hosts/onizuka/users/pan/user.nix +++ b/hosts/onizuka/users/pan/user.nix @@ -1,55 +1,36 @@ { config, pkgs, ... }: { - hypr.enable = true; - hypr.monitor.details = [ - "DP-2,2560x1440@144,0x0,1" - "DP-1,2560x1440@144,-2560x0,1" - "HDMI-A-1,disable" - ]; - hypr.workspace = { - workspaces = { - "DP-2" = [ - "home" - "web" - "med" - "game" - ]; - "DP-1" = [ - "chat" - ]; - }; - scratchpad.enable = true; - defaults = { - "name:web" = [ "class:(librewolf)" ]; - "name:med" = [ "class:(librewolf),title:Picture-in-Picture" ]; - "name:chat" = [ "class:(Beeper)" ]; - "name:game" = [ "class:(lutris)" "class:(explorer.exe)" ]; + # "DP-2" = [ + # "home" + # "web" + # "med" + # "game" + # ]; + # "DP-1" = [ + # "chat" + # ]; + # RULES + # "name:web" = [ "class:(librewolf)" ]; + # "name:med" = [ "class:(librewolf),title:Picture-in-Picture" ]; + # "name:chat" = [ "class:(Beeper)" ]; + # "name:game" = [ "class:(lutris)" "class:(explorer.exe)" ]; + # OPAQUE: + # "initialTitle:^(Discord Popout)$" + # "class:^(firefox)$" + # "class:^(Gimp)$" + # "class:^(feh)$" + # "class:^(mpv)$" + # path = "${config.home.homeDirectory}/med/pix/bg.png"; + # theme = "miku"; + niri = { + enable = true; + mouse.accel = -0.53; + outputs = { + "DP-1".mode = { width = 2560; height = 1440; refresh = 144.000; }; + "DP-2".mode = { width = 2560; height = 1440; refresh = 144.000; }; }; }; - hypr.windows.opaque = [ - "initialTitle:^(Discord Popout)$" - "class:^(firefox)$" - "class:^(Gimp)$" - "class:^(feh)$" - "class:^(mpv)$" - ]; - hypr.background = { - enable = true; - path = "${config.home.homeDirectory}/med/pix/bg.png"; - }; - hypr.cursor = { - enable = true; - theme = "miku"; - }; - hypr = { - screenshot.enable = true; - mouse.sensitivity = -0.52; - polkit.enable = true; - master.mfact = 0.53; - xwayland.videobridge.enable = true; - }; - rofi.enable = true; timer.enableHourly = true; timer.enableQuarterly = true; @@ -117,7 +98,5 @@ lutgen # LUT generator prismlauncher # Minecraft launcher jdk8 # For playing older minecraft - zoom-us # Zoom - musescore ]; } diff --git a/nixosModules/services/displaymanager/service.nix b/nixosModules/services/displaymanager/service.nix index 1110828..92f2d75 100644 --- a/nixosModules/services/displaymanager/service.nix +++ b/nixosModules/services/displaymanager/service.nix @@ -6,15 +6,19 @@ }; config = lib.mkIf config.tuigreet.enable { - services.greetd = { + services.greetd = let + wm = + if config.hyprland.enable then "Hyprland" + else (if config.niri.enable then "niri" else null); + in { enable = true; package = pkgs.greetd.tuigreet; settings = { terminal = { vt = 2; }; - default_session = lib.mkIf config.hyprland.enable { - command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time --cmd Hyprland"; + default_session = lib.mkIf (wm != null) { + command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time --cmd ${wm}"; user = "greeter"; }; }; diff --git a/nixosModules/services/waylandcompositors/service.nix b/nixosModules/services/hyprland/service.nix similarity index 100% rename from nixosModules/services/waylandcompositors/service.nix rename to nixosModules/services/hyprland/service.nix diff --git a/nixosModules/services/niri/service.nix b/nixosModules/services/niri/service.nix new file mode 100644 index 0000000..2b9d8e8 --- /dev/null +++ b/nixosModules/services/niri/service.nix @@ -0,0 +1,16 @@ +{ inputs, config, lib, ... }: + +{ + + options.niri = { + enable = lib.mkEnableOption "enables niri"; + }; + + imports = [ + inputs.niri.nixosModules.niri + ]; + + config = lib.mkIf config.niri.enable { + programs.niri.enable = true; + }; +} From 2cde55691b216956142846587b07a57701190020 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 22 May 2025 09:04:33 -0700 Subject: [PATCH 319/412] Fish, add nix-your-shell to fish --- hmModules/apps/fish/app.nix | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/hmModules/apps/fish/app.nix b/hmModules/apps/fish/app.nix index 0b00897..8c9c680 100644 --- a/hmModules/apps/fish/app.nix +++ b/hmModules/apps/fish/app.nix @@ -1,4 +1,4 @@ -{ config, lib, ... }: +{ config, lib, pkgs, ... }: let functionModule = with lib.types; submodule { options = { @@ -21,6 +21,9 @@ in { config = lib.mkIf config.fish.enable { programs.fish = { enable = true; + interactiveShellInit = '' + ${pkgs.nix-your-shell}/bin/nix-your-shell fish | source + ''; functions = { fish_greeting = ""; fish_prompt = '' From 630a73117aada8be3fa90c0108394b80dc747d95 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 22 May 2025 09:04:33 -0700 Subject: [PATCH 320/412] Fish, add nix-your-shell to fish --- hmModules/apps/fish/app.nix | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/hmModules/apps/fish/app.nix b/hmModules/apps/fish/app.nix index 0b00897..8c9c680 100644 --- a/hmModules/apps/fish/app.nix +++ b/hmModules/apps/fish/app.nix @@ -1,4 +1,4 @@ -{ config, lib, ... }: +{ config, lib, pkgs, ... }: let functionModule = with lib.types; submodule { options = { @@ -21,6 +21,9 @@ in { config = lib.mkIf config.fish.enable { programs.fish = { enable = true; + interactiveShellInit = '' + ${pkgs.nix-your-shell}/bin/nix-your-shell fish | source + ''; functions = { fish_greeting = ""; fish_prompt = '' From bec3d840cb8951c96243ea180d61e809e64b88dc Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 22 May 2025 09:06:48 -0700 Subject: [PATCH 321/412] Neovim, remove default rust lint enforcement I'm sorry to say but I use 2 spaces instead of 4, and I prefer a line width of 80, not 100. For that reason I'm disabling rust linting if the language is enabled. --- hmModules/apps/neovim/app.nix | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/hmModules/apps/neovim/app.nix b/hmModules/apps/neovim/app.nix index 4a1ddfd..4ef6b51 100644 --- a/hmModules/apps/neovim/app.nix +++ b/hmModules/apps/neovim/app.nix @@ -105,9 +105,15 @@ ]); rust-pkg = lopts cfgl.rust.enable (with pkgs.vimPlugins; [ - rustaceanvim + { + plugin = rustaceanvim; + type = "lua"; + config = '' + vim.g.rust_recommended_style = 0 + ''; + } ]); - + go-pkg = lopts cfgl.go.enable (with pkgs.vimPlugins; [ go-nvim ]); From 185ee4f25d5558cc68081cae00e98d8b60b3ac49 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 22 May 2025 09:06:48 -0700 Subject: [PATCH 322/412] Neovim, remove default rust lint enforcement I'm sorry to say but I use 2 spaces instead of 4, and I prefer a line width of 80, not 100. For that reason I'm disabling rust linting if the language is enabled. --- hmModules/apps/neovim/app.nix | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/hmModules/apps/neovim/app.nix b/hmModules/apps/neovim/app.nix index 4a1ddfd..4ef6b51 100644 --- a/hmModules/apps/neovim/app.nix +++ b/hmModules/apps/neovim/app.nix @@ -105,9 +105,15 @@ ]); rust-pkg = lopts cfgl.rust.enable (with pkgs.vimPlugins; [ - rustaceanvim + { + plugin = rustaceanvim; + type = "lua"; + config = '' + vim.g.rust_recommended_style = 0 + ''; + } ]); - + go-pkg = lopts cfgl.go.enable (with pkgs.vimPlugins; [ go-nvim ]); From f6e1ff3986b359d65eaaf9dd9923b1e51c425906 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 22 May 2025 09:07:11 -0700 Subject: [PATCH 323/412] Neovim, d to peak diagnostics this helps me see longer diagnostics, and also fixes a weird terminal display error when proxy remoting to Onizuka --- hmModules/apps/neovim/options.lua | 3 +++ 1 file changed, 3 insertions(+) diff --git a/hmModules/apps/neovim/options.lua b/hmModules/apps/neovim/options.lua index dfa4906..db669e2 100644 --- a/hmModules/apps/neovim/options.lua +++ b/hmModules/apps/neovim/options.lua @@ -33,6 +33,9 @@ vim.opt.backup = false vim.opt.undofile = true vim.opt.undodir = '/home/pan/.config/nvim/undodir' +-- Error viewing +vim.keymap.set('n', 'd', function() vim.diagnostic.open_float() end) + -- Easy copy and pasting to external programs -- map "+yy -- map "+P From 05f85ea12708d548988928650b0ff28c1d48e9e3 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 22 May 2025 09:07:11 -0700 Subject: [PATCH 324/412] Neovim, d to peak diagnostics this helps me see longer diagnostics, and also fixes a weird terminal display error when proxy remoting to Onizuka --- hmModules/apps/neovim/options.lua | 3 +++ 1 file changed, 3 insertions(+) diff --git a/hmModules/apps/neovim/options.lua b/hmModules/apps/neovim/options.lua index dfa4906..db669e2 100644 --- a/hmModules/apps/neovim/options.lua +++ b/hmModules/apps/neovim/options.lua @@ -33,6 +33,9 @@ vim.opt.backup = false vim.opt.undofile = true vim.opt.undodir = '/home/pan/.config/nvim/undodir' +-- Error viewing +vim.keymap.set('n', 'd', function() vim.diagnostic.open_float() end) + -- Easy copy and pasting to external programs -- map "+yy -- map "+P From 7eac8ad44398a1d8f3a2bf4b9f132070a664d94e Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 22 May 2025 09:09:21 -0700 Subject: [PATCH 325/412] Pan@Onizuka, enable catppuccin for neovim --- hosts/onizuka/users/pan/user.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/hosts/onizuka/users/pan/user.nix b/hosts/onizuka/users/pan/user.nix index 21abf26..2efdf12 100644 --- a/hosts/onizuka/users/pan/user.nix +++ b/hosts/onizuka/users/pan/user.nix @@ -72,6 +72,7 @@ treesitter.enable = true; wiki.enable = true; }; + neovim.themes.catppuccin.enable = true; lf.enable = true; lf.hiddenfiles = [ From f4a45fc482279381a30d19aa8779543c8d56ad7d Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 22 May 2025 09:09:21 -0700 Subject: [PATCH 326/412] Pan@Onizuka, enable catppuccin for neovim --- hosts/onizuka/users/pan/user.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/hosts/onizuka/users/pan/user.nix b/hosts/onizuka/users/pan/user.nix index 21abf26..2efdf12 100644 --- a/hosts/onizuka/users/pan/user.nix +++ b/hosts/onizuka/users/pan/user.nix @@ -72,6 +72,7 @@ treesitter.enable = true; wiki.enable = true; }; + neovim.themes.catppuccin.enable = true; lf.enable = true; lf.hiddenfiles = [ From 9b4ad5096a213eb9fe404a703087529163098549 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 29 May 2025 15:36:10 -0700 Subject: [PATCH 327/412] Onizuka, enable postgres --- hosts/onizuka/host.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/hosts/onizuka/host.nix b/hosts/onizuka/host.nix index 5b139c5..c48f020 100644 --- a/hosts/onizuka/host.nix +++ b/hosts/onizuka/host.nix @@ -23,6 +23,8 @@ aagl.honkai-rail = true; input-remapper.enable = true; + postgres.enable = true; + shell.enabledShells = [ "fish" ]; shell.defaultShell = "fish"; } From 4ed79d21fccc6bdca9f9a460fbe7beb48e16a7f9 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 29 May 2025 15:36:10 -0700 Subject: [PATCH 328/412] Onizuka, enable postgres --- hosts/onizuka/host.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/hosts/onizuka/host.nix b/hosts/onizuka/host.nix index 5b139c5..c48f020 100644 --- a/hosts/onizuka/host.nix +++ b/hosts/onizuka/host.nix @@ -23,6 +23,8 @@ aagl.honkai-rail = true; input-remapper.enable = true; + postgres.enable = true; + shell.enabledShells = [ "fish" ]; shell.defaultShell = "fish"; } From 27f8479346f2607631705cb98d4b03ea7303d33d Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 10 Jun 2025 12:49:00 -0700 Subject: [PATCH 329/412] Flake update 2025-06-10 --- flake.lock | 166 ++++++++++++++++++++++++++--------------------------- 1 file changed, 83 insertions(+), 83 deletions(-) diff --git a/flake.lock b/flake.lock index 3ce7a51..fefbabe 100644 --- a/flake.lock +++ b/flake.lock @@ -6,11 +6,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1744234873, - "narHash": "sha256-lQOQNEU1z4/oVBpWDjTXidMdelaafNR3jecj6n0hCIU=", + "lastModified": 1749488107, + "narHash": "sha256-b7Vx4b4YZ+Mjsoywc7mns4v16puVYE0GoSaBC6RETlE=", "owner": "ezKEa", "repo": "aagl-gtk-on-nix", - "rev": "8f45b51942618a16e2027a67f054400a32a4b534", + "rev": "1fe0479fc693d8ce96b5c1902ab29e70d8724ba2", "type": "github" }, "original": { @@ -58,11 +58,11 @@ ] }, "locked": { - "lastModified": 1744289235, - "narHash": "sha256-ZFkHLdimtFzQACsVVyZkZlfYdj4iNy3PkzXfrwmlse8=", + "lastModified": 1749155310, + "narHash": "sha256-t0HfHg/1+TbSra5s6nNM0o4tnb3uqWedShSpZXsUMYY=", "owner": "hyprwm", "repo": "aquamarine", - "rev": "c8282f4982b56dfa5e9b9f659809da93f8d37e7a", + "rev": "94981cf75a9f11da0b6dd6a1abbd7c50a36ab2d3", "type": "github" }, "original": { @@ -95,11 +95,11 @@ "flake-compat": { "flake": false, "locked": { - "lastModified": 1733328505, - "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=", + "lastModified": 1747046372, + "narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=", "owner": "edolstra", "repo": "flake-compat", - "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec", + "rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885", "type": "github" }, "original": { @@ -184,11 +184,11 @@ "nixpkgs": "nixpkgs_3" }, "locked": { - "lastModified": 1745024268, - "narHash": "sha256-bcVWOqJ1sDgHmwNvPrdJrF4H659rq7nno1w632BToas=", + "lastModified": 1749526396, + "narHash": "sha256-UL9F76abAk87llXOrcQRjhd5OaOclUd6MIltsqcUZmo=", "owner": "nix-community", "repo": "home-manager", - "rev": "991a4804720669220f7cbba078a2a27e2496eb69", + "rev": "427c96044f11a5da50faf6adaf38c9fa47e6d044", "type": "github" }, "original": { @@ -213,11 +213,11 @@ ] }, "locked": { - "lastModified": 1742215578, - "narHash": "sha256-zfs71PXVVPEe56WEyNi2TJQPs0wabU4WAlq0XV7GcdE=", + "lastModified": 1749155331, + "narHash": "sha256-XR9fsI0zwLiFWfqi/pdS/VD+YNorKb3XIykgTg4l1nA=", "owner": "hyprwm", "repo": "hyprcursor", - "rev": "2fd36421c21aa87e2fe3bee11067540ae612f719", + "rev": "45fcc10b4c282746d93ec406a740c43b48b4ef80", "type": "github" }, "original": { @@ -242,11 +242,11 @@ ] }, "locked": { - "lastModified": 1743953322, - "narHash": "sha256-prQ5JKopXtzCMX2eT3dXbaVvGmzjMRE2bXStQDdazpM=", + "lastModified": 1749238452, + "narHash": "sha256-8qiKEWcxUrjpUpK+WyFNg/72C8rp70LUuyTD23T+SdQ=", "owner": "hyprwm", "repo": "hyprgraphics", - "rev": "9d7f2687c84c729afbc3b13f7937655570f2978d", + "rev": "c7225d73755a6c4c7c72f4d4f3925ea426e325a8", "type": "github" }, "original": { @@ -271,11 +271,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1745018190, - "narHash": "sha256-A+qY3YZp9/J6EDaRsCxbfAm6yBJuPtBRnn7pu4HituQ=", + "lastModified": 1749540031, + "narHash": "sha256-11k6hq/4Tao2PNBFQpSNTlFFKmKGswL17caKuZIE0sM=", "ref": "refs/heads/main", - "rev": "f48ee7a3d17810c9a0bf229fc3131e15b09ef179", - "revCount": 6008, + "rev": "6bdb1f413e4c592f73d91bef33dfb202503ef7ab", + "revCount": 6177, "type": "git", "url": "https://github.com/hyprwm/Hyprland" }, @@ -289,11 +289,11 @@ "nixpkgs": "nixpkgs_5" }, "locked": { - "lastModified": 1743417258, - "narHash": "sha256-YItzk1pj8Kz+b7VlC9zN1pSZ6CuX35asYy3HuMQ3lBQ=", + "lastModified": 1747572947, + "narHash": "sha256-PMQoXbfmWPuXnF8EaWqRmvTvl7+WFUrDVgufFRPgOM4=", "owner": "hyprwm", "repo": "contrib", - "rev": "bc2ad24e0b2e66c3e164994c4897cd94a933fd10", + "rev": "910dad4c5755c1735d30da10c96d9086aa2a608d", "type": "github" }, "original": { @@ -314,11 +314,11 @@ ] }, "locked": { - "lastModified": 1743714874, - "narHash": "sha256-yt8F7NhMFCFHUHy/lNjH/pjZyIDFNk52Q4tivQ31WFo=", + "lastModified": 1749046714, + "narHash": "sha256-kymV5FMnddYGI+UjwIw8ceDjdeg7ToDVjbHCvUlhn14=", "owner": "hyprwm", "repo": "hyprland-protocols", - "rev": "3a5c2bda1c1a4e55cc1330c782547695a93f05b2", + "rev": "613878cb6f459c5e323aaafe1e6f388ac8a36330", "type": "github" }, "original": { @@ -346,11 +346,11 @@ ] }, "locked": { - "lastModified": 1737634706, - "narHash": "sha256-nGCibkfsXz7ARx5R+SnisRtMq21IQIhazp6viBU8I/A=", + "lastModified": 1749154592, + "narHash": "sha256-DO7z5CeT/ddSGDEnK9mAXm1qlGL47L3VAHLlLXoCjhE=", "owner": "hyprwm", "repo": "hyprland-qt-support", - "rev": "8810df502cdee755993cb803eba7b23f189db795", + "rev": "4c8053c3c888138a30c3a6c45c2e45f5484f2074", "type": "github" }, "original": { @@ -382,11 +382,11 @@ ] }, "locked": { - "lastModified": 1739048983, - "narHash": "sha256-REhTcXq4qs3B3cCDtLlYDz0GZvmsBSh947Ub6pQWGTQ=", + "lastModified": 1749155776, + "narHash": "sha256-t1PM0wxQLQwv2F2AW23uA7pm5giwmcgYEWbNIRct9r4=", "owner": "hyprwm", "repo": "hyprland-qtutils", - "rev": "3504a293c8f8db4127cb0f7cfc1a318ffb4316f8", + "rev": "396e8aa1c06274835b69da7f9a015fff9a9b7522", "type": "github" }, "original": { @@ -411,11 +411,11 @@ ] }, "locked": { - "lastModified": 1744468525, - "narHash": "sha256-9HySx+EtsbbKlZDlY+naqqOV679VdxP6x6fP3wxDXJk=", + "lastModified": 1749145882, + "narHash": "sha256-qr0KXeczF8Sma3Ae7+dR2NHhvG7YeLBJv19W4oMu6ZE=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "f1000c54d266e6e4e9d646df0774fac5b8a652df", + "rev": "1bfb84f54d50c7ae6558c794d3cfd5f6a7e6e676", "type": "github" }, "original": { @@ -436,11 +436,11 @@ ] }, "locked": { - "lastModified": 1743950287, - "narHash": "sha256-/6IAEWyb8gC/NKZElxiHChkouiUOrVYNq9YqG0Pzm4Y=", + "lastModified": 1749135356, + "narHash": "sha256-Q8mAKMDsFbCEuq7zoSlcTuxgbIBVhfIYpX0RjE32PS0=", "owner": "hyprwm", "repo": "hyprutils", - "rev": "f2dc70e448b994cef627a157ee340135bd68fbc6", + "rev": "e36db00dfb3a3d3fdcc4069cb292ff60d2699ccb", "type": "github" }, "original": { @@ -461,11 +461,11 @@ ] }, "locked": { - "lastModified": 1739870480, - "narHash": "sha256-SiDN5BGxa/1hAsqhgJsS03C3t2QrLgBT8u+ENJ0Qzwc=", + "lastModified": 1749145760, + "narHash": "sha256-IHaGWpGrv7seFWdw/1A+wHtTsPlOGIKMrk1TUIYJEFI=", "owner": "hyprwm", "repo": "hyprwayland-scanner", - "rev": "206367a08dc5ac4ba7ad31bdca391d098082e64b", + "rev": "817918315ea016cc2d94004bfb3223b5fd9dfcc6", "type": "github" }, "original": { @@ -517,11 +517,11 @@ "xwayland-satellite-unstable": "xwayland-satellite-unstable" }, "locked": { - "lastModified": 1744991948, - "narHash": "sha256-f4xKjzY64l6e28YExcf/V8aLYzBzDdjNI7ZZJGBBz3Y=", + "lastModified": 1749567948, + "narHash": "sha256-v+94gQWNxlr/iNmI81i0iSHK8ZP10jeWtf4FqdJaS68=", "owner": "sodiboo", "repo": "niri-flake", - "rev": "a70acecb35de8941bac791c82d8e214d4be70567", + "rev": "c05ef2200a89709ddf87d3bf939b21837e3383cb", "type": "github" }, "original": { @@ -550,11 +550,11 @@ "niri-unstable": { "flake": false, "locked": { - "lastModified": 1744878694, - "narHash": "sha256-e3jPdRQmlgeWwDTC/wnvKgIy4Ga8KZYoxUPQ8PCNktM=", + "lastModified": 1749564212, + "narHash": "sha256-bfA6nBTtCR3WUapgKXd6WqHQFp9vmzAaUyv6qjBmvYE=", "owner": "YaLTeR", "repo": "niri", - "rev": "7884d3bfea810740fe2ca7021b102af0f049ccae", + "rev": "0407ac5e4ce67255388d7ed8d85ffdbe14ec99ab", "type": "github" }, "original": { @@ -565,11 +565,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1743315132, - "narHash": "sha256-6hl6L/tRnwubHcA4pfUUtk542wn2Om+D4UnDhlDW9BE=", + "lastModified": 1748460289, + "narHash": "sha256-7doLyJBzCllvqX4gszYtmZUToxKvMUrg45EUWaUYmBg=", "owner": "nixos", "repo": "nixpkgs", - "rev": "52faf482a3889b7619003c0daec593a1912fddc1", + "rev": "96ec055edbe5ee227f28cdbc3f1ddf1df5965102", "type": "github" }, "original": { @@ -581,16 +581,16 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1744440957, - "narHash": "sha256-FHlSkNqFmPxPJvy+6fNLaNeWnF1lZSgqVCl/eWaJRc4=", + "lastModified": 1749494155, + "narHash": "sha256-FG4DEYBpROupu758beabUk9lhrblSf5hnv84v1TLqMc=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "26d499fc9f1d567283d5d56fcf367edd815dba1d", + "rev": "88331c17ba434359491e8d5889cce872464052c2", "type": "github" }, "original": { "owner": "NixOS", - "ref": "nixos-24.11", + "ref": "nixos-25.05", "repo": "nixpkgs", "type": "github" } @@ -613,11 +613,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1744463964, - "narHash": "sha256-LWqduOgLHCFxiTNYi3Uj5Lgz0SR+Xhw3kr/3Xd0GPTM=", + "lastModified": 1749143949, + "narHash": "sha256-QuUtALJpVrPnPeozlUG/y+oIMSLdptHxb3GK6cpSVhA=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "2631b0b7abcea6e640ce31cd78ea58910d31e650", + "rev": "d3d2d80a2191a73d1e86456a751b83aa13085d7d", "type": "github" }, "original": { @@ -629,11 +629,11 @@ }, "nixpkgs_4": { "locked": { - "lastModified": 1744932701, - "narHash": "sha256-fusHbZCyv126cyArUwwKrLdCkgVAIaa/fQJYFlCEqiU=", + "lastModified": 1749143949, + "narHash": "sha256-QuUtALJpVrPnPeozlUG/y+oIMSLdptHxb3GK6cpSVhA=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "b024ced1aac25639f8ca8fdfc2f8c4fbd66c48ef", + "rev": "d3d2d80a2191a73d1e86456a751b83aa13085d7d", "type": "github" }, "original": { @@ -677,11 +677,11 @@ }, "nixpkgs_7": { "locked": { - "lastModified": 1744932701, - "narHash": "sha256-fusHbZCyv126cyArUwwKrLdCkgVAIaa/fQJYFlCEqiU=", + "lastModified": 1749285348, + "narHash": "sha256-frdhQvPbmDYaScPFiCnfdh3B/Vh81Uuoo0w5TkWmmjU=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "b024ced1aac25639f8ca8fdfc2f8c4fbd66c48ef", + "rev": "3e3afe5174c561dee0df6f2c2b2236990146329f", "type": "github" }, "original": { @@ -693,11 +693,11 @@ }, "nixpkgs_8": { "locked": { - "lastModified": 1744932701, - "narHash": "sha256-fusHbZCyv126cyArUwwKrLdCkgVAIaa/fQJYFlCEqiU=", + "lastModified": 1749285348, + "narHash": "sha256-frdhQvPbmDYaScPFiCnfdh3B/Vh81Uuoo0w5TkWmmjU=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "b024ced1aac25639f8ca8fdfc2f8c4fbd66c48ef", + "rev": "3e3afe5174c561dee0df6f2c2b2236990146329f", "type": "github" }, "original": { @@ -708,11 +708,11 @@ }, "nixpkgs_9": { "locked": { - "lastModified": 1744502386, - "narHash": "sha256-QAd1L37eU7ktL2WeLLLTmI6P9moz9+a/ONO8qNBYJgM=", + "lastModified": 1744868846, + "narHash": "sha256-5RJTdUHDmj12Qsv7XOhuospjAjATNiTMElplWnJE9Hs=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "f6db44a8daa59c40ae41ba6e5823ec77fe0d2124", + "rev": "ebe4301cbd8f81c4f8d3244b3632338bbeb6d49c", "type": "github" }, "original": { @@ -732,11 +732,11 @@ ] }, "locked": { - "lastModified": 1742649964, - "narHash": "sha256-DwOTp7nvfi8mRfuL1escHDXabVXFGT1VlPD1JHrtrco=", + "lastModified": 1747372754, + "narHash": "sha256-2Y53NGIX2vxfie1rOW0Qb86vjRZ7ngizoo+bnXU9D9k=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "dcf5072734cb576d2b0c59b2ac44f5050b5eac82", + "rev": "80479b6ec16fefd9c1db3ea13aeb038c60530f46", "type": "github" }, "original": { @@ -763,11 +763,11 @@ "nixpkgs": "nixpkgs_9" }, "locked": { - "lastModified": 1744669848, - "narHash": "sha256-pXyanHLUzLNd3MX9vsWG+6Z2hTU8niyphWstYEP3/GU=", + "lastModified": 1747603214, + "narHash": "sha256-lAblXm0VwifYCJ/ILPXJwlz0qNY07DDYdLD+9H+Wc8o=", "owner": "Mic92", "repo": "sops-nix", - "rev": "61154300d945f0b147b30d24ddcafa159148026a", + "rev": "8d215e1c981be3aa37e47aeabd4e61bb069548fd", "type": "github" }, "original": { @@ -834,11 +834,11 @@ ] }, "locked": { - "lastModified": 1744644585, - "narHash": "sha256-p0D/e4J6Sv6GSb+9u8OQcVHSE2gPNYB5ygIfGDyEiXQ=", + "lastModified": 1749155346, + "narHash": "sha256-KIkJu3zF8MF3DuGwzAmo3Ww9wsWXolwV30SjJRTAxYE=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "be6771e754345f18244fb00aae5c9e5ab21ccc26", + "rev": "44bf29f1df45786098920c655af523535a9191ae", "type": "github" }, "original": { @@ -867,11 +867,11 @@ "xwayland-satellite-unstable": { "flake": false, "locked": { - "lastModified": 1744860839, - "narHash": "sha256-m/p0wFYey7zqlf5yEJ3g/h+4ZNPkjPsGiMZVJ09aWWw=", + "lastModified": 1749315541, + "narHash": "sha256-bEik1BfVOFnWvtOrcOHluos/edJ8f+G2y1QySbt/0Ak=", "owner": "Supreeeme", "repo": "xwayland-satellite", - "rev": "2b5288b4b9ad2481a033e9c3cc1205108323e7d9", + "rev": "da2ecb5be816de35e2efe23a408a1c49fe8b11ba", "type": "github" }, "original": { From 8cce89424bce8951bc945a7bd4c3c1e039117f8c Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 10 Jun 2025 12:49:00 -0700 Subject: [PATCH 330/412] Flake update 2025-06-10 --- flake.lock | 166 ++++++++++++++++++++++++++--------------------------- 1 file changed, 83 insertions(+), 83 deletions(-) diff --git a/flake.lock b/flake.lock index 3ce7a51..fefbabe 100644 --- a/flake.lock +++ b/flake.lock @@ -6,11 +6,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1744234873, - "narHash": "sha256-lQOQNEU1z4/oVBpWDjTXidMdelaafNR3jecj6n0hCIU=", + "lastModified": 1749488107, + "narHash": "sha256-b7Vx4b4YZ+Mjsoywc7mns4v16puVYE0GoSaBC6RETlE=", "owner": "ezKEa", "repo": "aagl-gtk-on-nix", - "rev": "8f45b51942618a16e2027a67f054400a32a4b534", + "rev": "1fe0479fc693d8ce96b5c1902ab29e70d8724ba2", "type": "github" }, "original": { @@ -58,11 +58,11 @@ ] }, "locked": { - "lastModified": 1744289235, - "narHash": "sha256-ZFkHLdimtFzQACsVVyZkZlfYdj4iNy3PkzXfrwmlse8=", + "lastModified": 1749155310, + "narHash": "sha256-t0HfHg/1+TbSra5s6nNM0o4tnb3uqWedShSpZXsUMYY=", "owner": "hyprwm", "repo": "aquamarine", - "rev": "c8282f4982b56dfa5e9b9f659809da93f8d37e7a", + "rev": "94981cf75a9f11da0b6dd6a1abbd7c50a36ab2d3", "type": "github" }, "original": { @@ -95,11 +95,11 @@ "flake-compat": { "flake": false, "locked": { - "lastModified": 1733328505, - "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=", + "lastModified": 1747046372, + "narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=", "owner": "edolstra", "repo": "flake-compat", - "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec", + "rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885", "type": "github" }, "original": { @@ -184,11 +184,11 @@ "nixpkgs": "nixpkgs_3" }, "locked": { - "lastModified": 1745024268, - "narHash": "sha256-bcVWOqJ1sDgHmwNvPrdJrF4H659rq7nno1w632BToas=", + "lastModified": 1749526396, + "narHash": "sha256-UL9F76abAk87llXOrcQRjhd5OaOclUd6MIltsqcUZmo=", "owner": "nix-community", "repo": "home-manager", - "rev": "991a4804720669220f7cbba078a2a27e2496eb69", + "rev": "427c96044f11a5da50faf6adaf38c9fa47e6d044", "type": "github" }, "original": { @@ -213,11 +213,11 @@ ] }, "locked": { - "lastModified": 1742215578, - "narHash": "sha256-zfs71PXVVPEe56WEyNi2TJQPs0wabU4WAlq0XV7GcdE=", + "lastModified": 1749155331, + "narHash": "sha256-XR9fsI0zwLiFWfqi/pdS/VD+YNorKb3XIykgTg4l1nA=", "owner": "hyprwm", "repo": "hyprcursor", - "rev": "2fd36421c21aa87e2fe3bee11067540ae612f719", + "rev": "45fcc10b4c282746d93ec406a740c43b48b4ef80", "type": "github" }, "original": { @@ -242,11 +242,11 @@ ] }, "locked": { - "lastModified": 1743953322, - "narHash": "sha256-prQ5JKopXtzCMX2eT3dXbaVvGmzjMRE2bXStQDdazpM=", + "lastModified": 1749238452, + "narHash": "sha256-8qiKEWcxUrjpUpK+WyFNg/72C8rp70LUuyTD23T+SdQ=", "owner": "hyprwm", "repo": "hyprgraphics", - "rev": "9d7f2687c84c729afbc3b13f7937655570f2978d", + "rev": "c7225d73755a6c4c7c72f4d4f3925ea426e325a8", "type": "github" }, "original": { @@ -271,11 +271,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1745018190, - "narHash": "sha256-A+qY3YZp9/J6EDaRsCxbfAm6yBJuPtBRnn7pu4HituQ=", + "lastModified": 1749540031, + "narHash": "sha256-11k6hq/4Tao2PNBFQpSNTlFFKmKGswL17caKuZIE0sM=", "ref": "refs/heads/main", - "rev": "f48ee7a3d17810c9a0bf229fc3131e15b09ef179", - "revCount": 6008, + "rev": "6bdb1f413e4c592f73d91bef33dfb202503ef7ab", + "revCount": 6177, "type": "git", "url": "https://github.com/hyprwm/Hyprland" }, @@ -289,11 +289,11 @@ "nixpkgs": "nixpkgs_5" }, "locked": { - "lastModified": 1743417258, - "narHash": "sha256-YItzk1pj8Kz+b7VlC9zN1pSZ6CuX35asYy3HuMQ3lBQ=", + "lastModified": 1747572947, + "narHash": "sha256-PMQoXbfmWPuXnF8EaWqRmvTvl7+WFUrDVgufFRPgOM4=", "owner": "hyprwm", "repo": "contrib", - "rev": "bc2ad24e0b2e66c3e164994c4897cd94a933fd10", + "rev": "910dad4c5755c1735d30da10c96d9086aa2a608d", "type": "github" }, "original": { @@ -314,11 +314,11 @@ ] }, "locked": { - "lastModified": 1743714874, - "narHash": "sha256-yt8F7NhMFCFHUHy/lNjH/pjZyIDFNk52Q4tivQ31WFo=", + "lastModified": 1749046714, + "narHash": "sha256-kymV5FMnddYGI+UjwIw8ceDjdeg7ToDVjbHCvUlhn14=", "owner": "hyprwm", "repo": "hyprland-protocols", - "rev": "3a5c2bda1c1a4e55cc1330c782547695a93f05b2", + "rev": "613878cb6f459c5e323aaafe1e6f388ac8a36330", "type": "github" }, "original": { @@ -346,11 +346,11 @@ ] }, "locked": { - "lastModified": 1737634706, - "narHash": "sha256-nGCibkfsXz7ARx5R+SnisRtMq21IQIhazp6viBU8I/A=", + "lastModified": 1749154592, + "narHash": "sha256-DO7z5CeT/ddSGDEnK9mAXm1qlGL47L3VAHLlLXoCjhE=", "owner": "hyprwm", "repo": "hyprland-qt-support", - "rev": "8810df502cdee755993cb803eba7b23f189db795", + "rev": "4c8053c3c888138a30c3a6c45c2e45f5484f2074", "type": "github" }, "original": { @@ -382,11 +382,11 @@ ] }, "locked": { - "lastModified": 1739048983, - "narHash": "sha256-REhTcXq4qs3B3cCDtLlYDz0GZvmsBSh947Ub6pQWGTQ=", + "lastModified": 1749155776, + "narHash": "sha256-t1PM0wxQLQwv2F2AW23uA7pm5giwmcgYEWbNIRct9r4=", "owner": "hyprwm", "repo": "hyprland-qtutils", - "rev": "3504a293c8f8db4127cb0f7cfc1a318ffb4316f8", + "rev": "396e8aa1c06274835b69da7f9a015fff9a9b7522", "type": "github" }, "original": { @@ -411,11 +411,11 @@ ] }, "locked": { - "lastModified": 1744468525, - "narHash": "sha256-9HySx+EtsbbKlZDlY+naqqOV679VdxP6x6fP3wxDXJk=", + "lastModified": 1749145882, + "narHash": "sha256-qr0KXeczF8Sma3Ae7+dR2NHhvG7YeLBJv19W4oMu6ZE=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "f1000c54d266e6e4e9d646df0774fac5b8a652df", + "rev": "1bfb84f54d50c7ae6558c794d3cfd5f6a7e6e676", "type": "github" }, "original": { @@ -436,11 +436,11 @@ ] }, "locked": { - "lastModified": 1743950287, - "narHash": "sha256-/6IAEWyb8gC/NKZElxiHChkouiUOrVYNq9YqG0Pzm4Y=", + "lastModified": 1749135356, + "narHash": "sha256-Q8mAKMDsFbCEuq7zoSlcTuxgbIBVhfIYpX0RjE32PS0=", "owner": "hyprwm", "repo": "hyprutils", - "rev": "f2dc70e448b994cef627a157ee340135bd68fbc6", + "rev": "e36db00dfb3a3d3fdcc4069cb292ff60d2699ccb", "type": "github" }, "original": { @@ -461,11 +461,11 @@ ] }, "locked": { - "lastModified": 1739870480, - "narHash": "sha256-SiDN5BGxa/1hAsqhgJsS03C3t2QrLgBT8u+ENJ0Qzwc=", + "lastModified": 1749145760, + "narHash": "sha256-IHaGWpGrv7seFWdw/1A+wHtTsPlOGIKMrk1TUIYJEFI=", "owner": "hyprwm", "repo": "hyprwayland-scanner", - "rev": "206367a08dc5ac4ba7ad31bdca391d098082e64b", + "rev": "817918315ea016cc2d94004bfb3223b5fd9dfcc6", "type": "github" }, "original": { @@ -517,11 +517,11 @@ "xwayland-satellite-unstable": "xwayland-satellite-unstable" }, "locked": { - "lastModified": 1744991948, - "narHash": "sha256-f4xKjzY64l6e28YExcf/V8aLYzBzDdjNI7ZZJGBBz3Y=", + "lastModified": 1749567948, + "narHash": "sha256-v+94gQWNxlr/iNmI81i0iSHK8ZP10jeWtf4FqdJaS68=", "owner": "sodiboo", "repo": "niri-flake", - "rev": "a70acecb35de8941bac791c82d8e214d4be70567", + "rev": "c05ef2200a89709ddf87d3bf939b21837e3383cb", "type": "github" }, "original": { @@ -550,11 +550,11 @@ "niri-unstable": { "flake": false, "locked": { - "lastModified": 1744878694, - "narHash": "sha256-e3jPdRQmlgeWwDTC/wnvKgIy4Ga8KZYoxUPQ8PCNktM=", + "lastModified": 1749564212, + "narHash": "sha256-bfA6nBTtCR3WUapgKXd6WqHQFp9vmzAaUyv6qjBmvYE=", "owner": "YaLTeR", "repo": "niri", - "rev": "7884d3bfea810740fe2ca7021b102af0f049ccae", + "rev": "0407ac5e4ce67255388d7ed8d85ffdbe14ec99ab", "type": "github" }, "original": { @@ -565,11 +565,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1743315132, - "narHash": "sha256-6hl6L/tRnwubHcA4pfUUtk542wn2Om+D4UnDhlDW9BE=", + "lastModified": 1748460289, + "narHash": "sha256-7doLyJBzCllvqX4gszYtmZUToxKvMUrg45EUWaUYmBg=", "owner": "nixos", "repo": "nixpkgs", - "rev": "52faf482a3889b7619003c0daec593a1912fddc1", + "rev": "96ec055edbe5ee227f28cdbc3f1ddf1df5965102", "type": "github" }, "original": { @@ -581,16 +581,16 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1744440957, - "narHash": "sha256-FHlSkNqFmPxPJvy+6fNLaNeWnF1lZSgqVCl/eWaJRc4=", + "lastModified": 1749494155, + "narHash": "sha256-FG4DEYBpROupu758beabUk9lhrblSf5hnv84v1TLqMc=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "26d499fc9f1d567283d5d56fcf367edd815dba1d", + "rev": "88331c17ba434359491e8d5889cce872464052c2", "type": "github" }, "original": { "owner": "NixOS", - "ref": "nixos-24.11", + "ref": "nixos-25.05", "repo": "nixpkgs", "type": "github" } @@ -613,11 +613,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1744463964, - "narHash": "sha256-LWqduOgLHCFxiTNYi3Uj5Lgz0SR+Xhw3kr/3Xd0GPTM=", + "lastModified": 1749143949, + "narHash": "sha256-QuUtALJpVrPnPeozlUG/y+oIMSLdptHxb3GK6cpSVhA=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "2631b0b7abcea6e640ce31cd78ea58910d31e650", + "rev": "d3d2d80a2191a73d1e86456a751b83aa13085d7d", "type": "github" }, "original": { @@ -629,11 +629,11 @@ }, "nixpkgs_4": { "locked": { - "lastModified": 1744932701, - "narHash": "sha256-fusHbZCyv126cyArUwwKrLdCkgVAIaa/fQJYFlCEqiU=", + "lastModified": 1749143949, + "narHash": "sha256-QuUtALJpVrPnPeozlUG/y+oIMSLdptHxb3GK6cpSVhA=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "b024ced1aac25639f8ca8fdfc2f8c4fbd66c48ef", + "rev": "d3d2d80a2191a73d1e86456a751b83aa13085d7d", "type": "github" }, "original": { @@ -677,11 +677,11 @@ }, "nixpkgs_7": { "locked": { - "lastModified": 1744932701, - "narHash": "sha256-fusHbZCyv126cyArUwwKrLdCkgVAIaa/fQJYFlCEqiU=", + "lastModified": 1749285348, + "narHash": "sha256-frdhQvPbmDYaScPFiCnfdh3B/Vh81Uuoo0w5TkWmmjU=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "b024ced1aac25639f8ca8fdfc2f8c4fbd66c48ef", + "rev": "3e3afe5174c561dee0df6f2c2b2236990146329f", "type": "github" }, "original": { @@ -693,11 +693,11 @@ }, "nixpkgs_8": { "locked": { - "lastModified": 1744932701, - "narHash": "sha256-fusHbZCyv126cyArUwwKrLdCkgVAIaa/fQJYFlCEqiU=", + "lastModified": 1749285348, + "narHash": "sha256-frdhQvPbmDYaScPFiCnfdh3B/Vh81Uuoo0w5TkWmmjU=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "b024ced1aac25639f8ca8fdfc2f8c4fbd66c48ef", + "rev": "3e3afe5174c561dee0df6f2c2b2236990146329f", "type": "github" }, "original": { @@ -708,11 +708,11 @@ }, "nixpkgs_9": { "locked": { - "lastModified": 1744502386, - "narHash": "sha256-QAd1L37eU7ktL2WeLLLTmI6P9moz9+a/ONO8qNBYJgM=", + "lastModified": 1744868846, + "narHash": "sha256-5RJTdUHDmj12Qsv7XOhuospjAjATNiTMElplWnJE9Hs=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "f6db44a8daa59c40ae41ba6e5823ec77fe0d2124", + "rev": "ebe4301cbd8f81c4f8d3244b3632338bbeb6d49c", "type": "github" }, "original": { @@ -732,11 +732,11 @@ ] }, "locked": { - "lastModified": 1742649964, - "narHash": "sha256-DwOTp7nvfi8mRfuL1escHDXabVXFGT1VlPD1JHrtrco=", + "lastModified": 1747372754, + "narHash": "sha256-2Y53NGIX2vxfie1rOW0Qb86vjRZ7ngizoo+bnXU9D9k=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "dcf5072734cb576d2b0c59b2ac44f5050b5eac82", + "rev": "80479b6ec16fefd9c1db3ea13aeb038c60530f46", "type": "github" }, "original": { @@ -763,11 +763,11 @@ "nixpkgs": "nixpkgs_9" }, "locked": { - "lastModified": 1744669848, - "narHash": "sha256-pXyanHLUzLNd3MX9vsWG+6Z2hTU8niyphWstYEP3/GU=", + "lastModified": 1747603214, + "narHash": "sha256-lAblXm0VwifYCJ/ILPXJwlz0qNY07DDYdLD+9H+Wc8o=", "owner": "Mic92", "repo": "sops-nix", - "rev": "61154300d945f0b147b30d24ddcafa159148026a", + "rev": "8d215e1c981be3aa37e47aeabd4e61bb069548fd", "type": "github" }, "original": { @@ -834,11 +834,11 @@ ] }, "locked": { - "lastModified": 1744644585, - "narHash": "sha256-p0D/e4J6Sv6GSb+9u8OQcVHSE2gPNYB5ygIfGDyEiXQ=", + "lastModified": 1749155346, + "narHash": "sha256-KIkJu3zF8MF3DuGwzAmo3Ww9wsWXolwV30SjJRTAxYE=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "be6771e754345f18244fb00aae5c9e5ab21ccc26", + "rev": "44bf29f1df45786098920c655af523535a9191ae", "type": "github" }, "original": { @@ -867,11 +867,11 @@ "xwayland-satellite-unstable": { "flake": false, "locked": { - "lastModified": 1744860839, - "narHash": "sha256-m/p0wFYey7zqlf5yEJ3g/h+4ZNPkjPsGiMZVJ09aWWw=", + "lastModified": 1749315541, + "narHash": "sha256-bEik1BfVOFnWvtOrcOHluos/edJ8f+G2y1QySbt/0Ak=", "owner": "Supreeeme", "repo": "xwayland-satellite", - "rev": "2b5288b4b9ad2481a033e9c3cc1205108323e7d9", + "rev": "da2ecb5be816de35e2efe23a408a1c49fe8b11ba", "type": "github" }, "original": { From 148cd416e96e1ffbbedec78b12eaff708b0d2d67 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 11 Jun 2025 13:48:57 -0700 Subject: [PATCH 331/412] Jibril, disable and enable many apps disable tailscale, hypr, steam; rofi, musescore, and timer notifications enable postgres, niri Hypr and niri are essentially swapped for one another. Though they are not mutually exclusive. A similar interface to shells would do good for window managers. --- hosts/jibril/host.nix | 7 ++--- hosts/jibril/users/pan/user.nix | 55 +++------------------------------ 2 files changed, 7 insertions(+), 55 deletions(-) diff --git a/hosts/jibril/host.nix b/hosts/jibril/host.nix index 2778816..efc1452 100644 --- a/hosts/jibril/host.nix +++ b/hosts/jibril/host.nix @@ -26,11 +26,10 @@ system.users.bigWheels = [ "pan" ]; tuigreet.enable = true; - hyprland.enable = true; - tailscale.enable = true; + niri.enable = true; + + postgres.enable = true; shell.enabledShells = [ "fish" ]; shell.defaultShell = "fish"; - - steam.enable = true; } diff --git a/hosts/jibril/users/pan/user.nix b/hosts/jibril/users/pan/user.nix index b915e9e..2fb9019 100644 --- a/hosts/jibril/users/pan/user.nix +++ b/hosts/jibril/users/pan/user.nix @@ -1,55 +1,12 @@ -{ config, pkgs, ... }: +{ config, ... }: { - hypr.enable = true; - hypr.monitor = { - details = [ - "eDP-2,2256x1504@60,0x0,1" - ]; - }; - hypr.workspace = { - workspaces = { - "eDP-1" = [ - "home" - "web" - "chat" - "med" - ]; - }; - scratchpad.enable = true; - defaults = { - "name:web" = [ "class:(librewolf)" ]; - "name:med" = [ "class:(librewolf),title:Picture-in-Picture" ]; - "name:chat" = [ "class:(Beeper)" ]; - }; - }; - hypr.windows.opaque = [ - "initialTitle:^(Discord Popout)$" - "class:^(firefox)$" - "class:^(Gimp)$" - "class:^(feh)$" - "class:^(mpv)$" - ]; - hypr.background = { + niri = { enable = true; - path = "${config.home.homeDirectory}/med/pix/bg.png"; + mouse.accel = -0.53; + outputs."eDP-2".mode = { width = 2256; height = 1504; refresh = 60.000; }; }; - hypr.cursor = { - enable = true; - theme = "miku"; - }; - hypr = { - screenshot.enable = true; - mouse.sensitivity = -0.52; - polkit.enable = true; - master.mfact = 0.53; - xwayland.videobridge.enable = true; - }; - # ags.enable = true; - rofi.enable = true; - timer.enableHourly = true; - timer.enableQuarterly = true; colors.enable = true; manpages.enable = true; trash.enable = true; @@ -104,8 +61,4 @@ beeper.enable = true; discord.enable = true; - extraPkgs = with pkgs; [ - # Applications - musescore - ]; } From b785f69289a83babd631339f2d9606df5b7d82fe Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 11 Jun 2025 13:48:57 -0700 Subject: [PATCH 332/412] Jibril, disable and enable many apps disable tailscale, hypr, steam; rofi, musescore, and timer notifications enable postgres, niri Hypr and niri are essentially swapped for one another. Though they are not mutually exclusive. A similar interface to shells would do good for window managers. --- hosts/jibril/host.nix | 7 ++--- hosts/jibril/users/pan/user.nix | 55 +++------------------------------ 2 files changed, 7 insertions(+), 55 deletions(-) diff --git a/hosts/jibril/host.nix b/hosts/jibril/host.nix index 2778816..efc1452 100644 --- a/hosts/jibril/host.nix +++ b/hosts/jibril/host.nix @@ -26,11 +26,10 @@ system.users.bigWheels = [ "pan" ]; tuigreet.enable = true; - hyprland.enable = true; - tailscale.enable = true; + niri.enable = true; + + postgres.enable = true; shell.enabledShells = [ "fish" ]; shell.defaultShell = "fish"; - - steam.enable = true; } diff --git a/hosts/jibril/users/pan/user.nix b/hosts/jibril/users/pan/user.nix index b915e9e..2fb9019 100644 --- a/hosts/jibril/users/pan/user.nix +++ b/hosts/jibril/users/pan/user.nix @@ -1,55 +1,12 @@ -{ config, pkgs, ... }: +{ config, ... }: { - hypr.enable = true; - hypr.monitor = { - details = [ - "eDP-2,2256x1504@60,0x0,1" - ]; - }; - hypr.workspace = { - workspaces = { - "eDP-1" = [ - "home" - "web" - "chat" - "med" - ]; - }; - scratchpad.enable = true; - defaults = { - "name:web" = [ "class:(librewolf)" ]; - "name:med" = [ "class:(librewolf),title:Picture-in-Picture" ]; - "name:chat" = [ "class:(Beeper)" ]; - }; - }; - hypr.windows.opaque = [ - "initialTitle:^(Discord Popout)$" - "class:^(firefox)$" - "class:^(Gimp)$" - "class:^(feh)$" - "class:^(mpv)$" - ]; - hypr.background = { + niri = { enable = true; - path = "${config.home.homeDirectory}/med/pix/bg.png"; + mouse.accel = -0.53; + outputs."eDP-2".mode = { width = 2256; height = 1504; refresh = 60.000; }; }; - hypr.cursor = { - enable = true; - theme = "miku"; - }; - hypr = { - screenshot.enable = true; - mouse.sensitivity = -0.52; - polkit.enable = true; - master.mfact = 0.53; - xwayland.videobridge.enable = true; - }; - # ags.enable = true; - rofi.enable = true; - timer.enableHourly = true; - timer.enableQuarterly = true; colors.enable = true; manpages.enable = true; trash.enable = true; @@ -104,8 +61,4 @@ beeper.enable = true; discord.enable = true; - extraPkgs = with pkgs; [ - # Applications - musescore - ]; } From 385eab27ba8633ac251263a4a2c5e4641fe45772 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 10 Jul 2025 12:05:57 -0700 Subject: [PATCH 333/412] Ssh, longer timeouts --- nixosModules/services/ssh/service.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/nixosModules/services/ssh/service.nix b/nixosModules/services/ssh/service.nix index 4537b0d..addf235 100644 --- a/nixosModules/services/ssh/service.nix +++ b/nixosModules/services/ssh/service.nix @@ -14,6 +14,8 @@ enable = true; ports = [ config.sshd.port ]; settings = { + ClientAliveInterval = 60; + ClientAliveCountMax = 3; PasswordAuthentication = false; PermitRootLogin = "no"; }; From e50723afa2c92ece6db73764da3d594a9c634a3a Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 10 Jul 2025 12:05:57 -0700 Subject: [PATCH 334/412] Ssh, longer timeouts --- nixosModules/services/ssh/service.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/nixosModules/services/ssh/service.nix b/nixosModules/services/ssh/service.nix index 4537b0d..addf235 100644 --- a/nixosModules/services/ssh/service.nix +++ b/nixosModules/services/ssh/service.nix @@ -14,6 +14,8 @@ enable = true; ports = [ config.sshd.port ]; settings = { + ClientAliveInterval = 60; + ClientAliveCountMax = 3; PasswordAuthentication = false; PermitRootLogin = "no"; }; From 717b6e5c8e76b4c87cb520bf101ef22ee120b0d7 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 9 Jul 2025 19:32:34 -0700 Subject: [PATCH 335/412] Headscale, initialization --- hosts/juri/host.nix | 10 ++++++++ nixosModules/services/headscale/service.nix | 26 +++++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 nixosModules/services/headscale/service.nix diff --git a/hosts/juri/host.nix b/hosts/juri/host.nix index 8a016b6..4f30a2f 100644 --- a/hosts/juri/host.nix +++ b/hosts/juri/host.nix @@ -36,6 +36,11 @@ in { reverse_proxy :${builtins.toString config.forgejo.server.port} ''; }; + "ginko.woach.me" = { + extraConfig = '' + reverse_proxy :${builtins.toString config.headscale.server.port} + ''; + }; }; }; @@ -56,6 +61,11 @@ in { }; }; + headscale = { + enable = true; + server.domain = "ginko.woach.me"; + }; + postgres.enable = true; shell.enabledShells = [ "fish" ]; diff --git a/nixosModules/services/headscale/service.nix b/nixosModules/services/headscale/service.nix new file mode 100644 index 0000000..12fbad7 --- /dev/null +++ b/nixosModules/services/headscale/service.nix @@ -0,0 +1,26 @@ +{ config, lib, ... }: + +{ + options.headscale = { + enable = lib.mkEnableOption "Enable headscale"; + server = { + port = lib.mkOption { default = 7204; }; + domain = lib.mkOption { type = lib.types.str; }; + }; + }; + + config = lib.mkIf config.headscale.enable { + networking.firewall.allowedUDPPorts = [ 3478 ]; + services.headscale = { + enable = true; + port = config.headscale.server.port; + settings = { + server_url = "https://${config.headscale.server.domain}"; + dns = { + base_domain = "connect.claris"; + override_local_dns = false; + }; + }; + }; + }; +} From df31b5cd129775c9ca934f456fc47f0b0ec2c4d4 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 9 Jul 2025 19:32:34 -0700 Subject: [PATCH 336/412] Headscale, initialization --- hosts/juri/host.nix | 10 ++++++++ nixosModules/services/headscale/service.nix | 26 +++++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 nixosModules/services/headscale/service.nix diff --git a/hosts/juri/host.nix b/hosts/juri/host.nix index 8a016b6..4f30a2f 100644 --- a/hosts/juri/host.nix +++ b/hosts/juri/host.nix @@ -36,6 +36,11 @@ in { reverse_proxy :${builtins.toString config.forgejo.server.port} ''; }; + "ginko.woach.me" = { + extraConfig = '' + reverse_proxy :${builtins.toString config.headscale.server.port} + ''; + }; }; }; @@ -56,6 +61,11 @@ in { }; }; + headscale = { + enable = true; + server.domain = "ginko.woach.me"; + }; + postgres.enable = true; shell.enabledShells = [ "fish" ]; diff --git a/nixosModules/services/headscale/service.nix b/nixosModules/services/headscale/service.nix new file mode 100644 index 0000000..12fbad7 --- /dev/null +++ b/nixosModules/services/headscale/service.nix @@ -0,0 +1,26 @@ +{ config, lib, ... }: + +{ + options.headscale = { + enable = lib.mkEnableOption "Enable headscale"; + server = { + port = lib.mkOption { default = 7204; }; + domain = lib.mkOption { type = lib.types.str; }; + }; + }; + + config = lib.mkIf config.headscale.enable { + networking.firewall.allowedUDPPorts = [ 3478 ]; + services.headscale = { + enable = true; + port = config.headscale.server.port; + settings = { + server_url = "https://${config.headscale.server.domain}"; + dns = { + base_domain = "connect.claris"; + override_local_dns = false; + }; + }; + }; + }; +} From f124e0550dbe4a0e4646675942d94180d847bff9 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 10 Jul 2025 12:02:31 -0700 Subject: [PATCH 337/412] Tailscale, Move to service, enable on Juri & Onizuka --- hosts/juri/host.nix | 1 + hosts/onizuka/host.nix | 1 + .../tailscale/app.nix => services/tailscale/service.nix} | 4 ++-- 3 files changed, 4 insertions(+), 2 deletions(-) rename nixosModules/{apps/tailscale/app.nix => services/tailscale/service.nix} (60%) diff --git a/hosts/juri/host.nix b/hosts/juri/host.nix index 4f30a2f..192639b 100644 --- a/hosts/juri/host.nix +++ b/hosts/juri/host.nix @@ -71,5 +71,6 @@ in { shell.enabledShells = [ "fish" ]; shell.defaultShell = "fish"; + tailscale.enable = true; sshd.enable = true; } diff --git a/hosts/onizuka/host.nix b/hosts/onizuka/host.nix index c48f020..d2dbc49 100644 --- a/hosts/onizuka/host.nix +++ b/hosts/onizuka/host.nix @@ -13,6 +13,7 @@ system.users.bigWheels = [ "pan" ]; sshd.enable = true; + tailscale.enable = true; tuigreet.enable = true; niri.enable = true; diff --git a/nixosModules/apps/tailscale/app.nix b/nixosModules/services/tailscale/service.nix similarity index 60% rename from nixosModules/apps/tailscale/app.nix rename to nixosModules/services/tailscale/service.nix index 37dcc9f..cd94ad8 100644 --- a/nixosModules/apps/tailscale/app.nix +++ b/nixosModules/services/tailscale/service.nix @@ -1,8 +1,8 @@ -{ config, lib, ... }: +{ config, pkgs, lib, ... }: { options.tailscale = { - enable = lib.mkEnableOption "Enables tailscale"; + enable = lib.mkEnableOption "enables tailscale"; }; config = lib.mkIf config.tailscale.enable { From ee25fb915d4f36520d154a8bc9c6bdc6a740fa08 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 10 Jul 2025 12:02:31 -0700 Subject: [PATCH 338/412] Tailscale, Move to service, enable on Juri & Onizuka --- hosts/juri/host.nix | 1 + hosts/onizuka/host.nix | 1 + .../tailscale/app.nix => services/tailscale/service.nix} | 4 ++-- 3 files changed, 4 insertions(+), 2 deletions(-) rename nixosModules/{apps/tailscale/app.nix => services/tailscale/service.nix} (60%) diff --git a/hosts/juri/host.nix b/hosts/juri/host.nix index 4f30a2f..192639b 100644 --- a/hosts/juri/host.nix +++ b/hosts/juri/host.nix @@ -71,5 +71,6 @@ in { shell.enabledShells = [ "fish" ]; shell.defaultShell = "fish"; + tailscale.enable = true; sshd.enable = true; } diff --git a/hosts/onizuka/host.nix b/hosts/onizuka/host.nix index c48f020..d2dbc49 100644 --- a/hosts/onizuka/host.nix +++ b/hosts/onizuka/host.nix @@ -13,6 +13,7 @@ system.users.bigWheels = [ "pan" ]; sshd.enable = true; + tailscale.enable = true; tuigreet.enable = true; niri.enable = true; diff --git a/nixosModules/apps/tailscale/app.nix b/nixosModules/services/tailscale/service.nix similarity index 60% rename from nixosModules/apps/tailscale/app.nix rename to nixosModules/services/tailscale/service.nix index 37dcc9f..cd94ad8 100644 --- a/nixosModules/apps/tailscale/app.nix +++ b/nixosModules/services/tailscale/service.nix @@ -1,8 +1,8 @@ -{ config, lib, ... }: +{ config, pkgs, lib, ... }: { options.tailscale = { - enable = lib.mkEnableOption "Enables tailscale"; + enable = lib.mkEnableOption "enables tailscale"; }; config = lib.mkIf config.tailscale.enable { From 357dd65441616414b0fe5a33742760308860da92 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 10 Jul 2025 12:03:07 -0700 Subject: [PATCH 339/412] Flake update 2025-07-10 --- flake.lock | 179 +++++++++++++++++++++++++++++------------------------ 1 file changed, 98 insertions(+), 81 deletions(-) diff --git a/flake.lock b/flake.lock index fefbabe..a51df4d 100644 --- a/flake.lock +++ b/flake.lock @@ -6,11 +6,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1749488107, - "narHash": "sha256-b7Vx4b4YZ+Mjsoywc7mns4v16puVYE0GoSaBC6RETlE=", + "lastModified": 1750597689, + "narHash": "sha256-3ComII0BkmdohISrshICQiAB6TU+VHHIRnWK0ckA0/s=", "owner": "ezKEa", "repo": "aagl-gtk-on-nix", - "rev": "1fe0479fc693d8ce96b5c1902ab29e70d8724ba2", + "rev": "ec2ec4ec3f908ed9b125ea4afd52627bed60f183", "type": "github" }, "original": { @@ -22,14 +22,15 @@ "ags": { "inputs": { "astal": "astal", + "gnim": "gnim", "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1744557573, - "narHash": "sha256-XAyj0iDuI51BytJ1PwN53uLpzTDdznPDQFG4RwihlTQ=", + "lastModified": 1751930350, + "narHash": "sha256-hBIrzyrwG3XjeNyzVNWKDX+yYVlpwAqf9ovgF7qecug=", "owner": "Aylur", "repo": "ags", - "rev": "3ed9737bdbc8fc7a7c7ceef2165c9109f336bff6", + "rev": "22f37ccb0db58d9d8a11ad0054ab20ecfad005ad", "type": "github" }, "original": { @@ -58,11 +59,11 @@ ] }, "locked": { - "lastModified": 1749155310, - "narHash": "sha256-t0HfHg/1+TbSra5s6nNM0o4tnb3uqWedShSpZXsUMYY=", + "lastModified": 1751740947, + "narHash": "sha256-35040CHH7P3JGmhGVfEb2oJHL/A5mI2IXumhkxrBnao=", "owner": "hyprwm", "repo": "aquamarine", - "rev": "94981cf75a9f11da0b6dd6a1abbd7c50a36ab2d3", + "rev": "dfc1db15a08c4cd234288f66e1199c653495301f", "type": "github" }, "original": { @@ -79,11 +80,11 @@ ] }, "locked": { - "lastModified": 1742571008, - "narHash": "sha256-5WgfJAeBpxiKbTR/gJvxrGYfqQRge5aUDcGKmU1YZ1Q=", + "lastModified": 1751126708, + "narHash": "sha256-AodIKw7TmI7rHVcOfEsO82stupMYIMVQeLAUQfVxnkU=", "owner": "aylur", "repo": "astal", - "rev": "dc0e5d37abe9424c53dcbd2506a4886ffee6296e", + "rev": "ac90f09385a2295da9fdc108aaba4a317aaeacc7", "type": "github" }, "original": { @@ -179,16 +180,32 @@ "type": "github" } }, + "gnim": { + "flake": false, + "locked": { + "lastModified": 1751928958, + "narHash": "sha256-vQY2L+Hnp6F1MHFa3UbMft1goGw3iODI5M+96Z7P+9Q=", + "owner": "aylur", + "repo": "gnim", + "rev": "9bffa83f52f711b13e3c139454623a9aea4f5552", + "type": "github" + }, + "original": { + "owner": "aylur", + "repo": "gnim", + "type": "github" + } + }, "home-manager": { "inputs": { "nixpkgs": "nixpkgs_3" }, "locked": { - "lastModified": 1749526396, - "narHash": "sha256-UL9F76abAk87llXOrcQRjhd5OaOclUd6MIltsqcUZmo=", + "lastModified": 1752093218, + "narHash": "sha256-+3rXu8ewcNDi65/2mKkdSGrivQs5zEZVp5aYszXC0d0=", "owner": "nix-community", "repo": "home-manager", - "rev": "427c96044f11a5da50faf6adaf38c9fa47e6d044", + "rev": "206ed3c71418b52e176f16f58805c96e84555320", "type": "github" }, "original": { @@ -242,11 +259,11 @@ ] }, "locked": { - "lastModified": 1749238452, - "narHash": "sha256-8qiKEWcxUrjpUpK+WyFNg/72C8rp70LUuyTD23T+SdQ=", + "lastModified": 1751808145, + "narHash": "sha256-OXgL0XaKMmfX2rRQkt9SkJw+QNfv0jExlySt1D6O72g=", "owner": "hyprwm", "repo": "hyprgraphics", - "rev": "c7225d73755a6c4c7c72f4d4f3925ea426e325a8", + "rev": "b841473a0bd4a1a74a0b64f1ec2ab199035c349f", "type": "github" }, "original": { @@ -271,11 +288,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1749540031, - "narHash": "sha256-11k6hq/4Tao2PNBFQpSNTlFFKmKGswL17caKuZIE0sM=", + "lastModified": 1752149340, + "narHash": "sha256-DJc2ROpttbP6FHcXwWpmK7EB2cpVsP/LmXjEr8RWcO8=", "ref": "refs/heads/main", - "rev": "6bdb1f413e4c592f73d91bef33dfb202503ef7ab", - "revCount": 6177, + "rev": "b5433bb75324a95dd27eb5492141565466c2cdd6", + "revCount": 6265, "type": "git", "url": "https://github.com/hyprwm/Hyprland" }, @@ -289,11 +306,11 @@ "nixpkgs": "nixpkgs_5" }, "locked": { - "lastModified": 1747572947, - "narHash": "sha256-PMQoXbfmWPuXnF8EaWqRmvTvl7+WFUrDVgufFRPgOM4=", + "lastModified": 1752069516, + "narHash": "sha256-dyzDJvt8IVgHJVmpnw1mueHHSLYnChW1XMkwz9WUBZ8=", "owner": "hyprwm", "repo": "contrib", - "rev": "910dad4c5755c1735d30da10c96d9086aa2a608d", + "rev": "34d0c01910552b873a07c96921ef70e32bf369a2", "type": "github" }, "original": { @@ -382,11 +399,11 @@ ] }, "locked": { - "lastModified": 1749155776, - "narHash": "sha256-t1PM0wxQLQwv2F2AW23uA7pm5giwmcgYEWbNIRct9r4=", + "lastModified": 1750371812, + "narHash": "sha256-D868K1dVEACw17elVxRgXC6hOxY+54wIEjURztDWLk8=", "owner": "hyprwm", "repo": "hyprland-qtutils", - "rev": "396e8aa1c06274835b69da7f9a015fff9a9b7522", + "rev": "b13c7481e37856f322177010bdf75fccacd1adc8", "type": "github" }, "original": { @@ -411,11 +428,11 @@ ] }, "locked": { - "lastModified": 1749145882, - "narHash": "sha256-qr0KXeczF8Sma3Ae7+dR2NHhvG7YeLBJv19W4oMu6ZE=", + "lastModified": 1750371198, + "narHash": "sha256-/iuJ1paQOBoSLqHflRNNGyroqfF/yvPNurxzcCT0cAE=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "1bfb84f54d50c7ae6558c794d3cfd5f6a7e6e676", + "rev": "cee01452bca58d6cadb3224e21e370de8bc20f0b", "type": "github" }, "original": { @@ -436,11 +453,11 @@ ] }, "locked": { - "lastModified": 1749135356, - "narHash": "sha256-Q8mAKMDsFbCEuq7zoSlcTuxgbIBVhfIYpX0RjE32PS0=", + "lastModified": 1751888065, + "narHash": "sha256-F2SV9WGqgtRsXIdUrl3sRe0wXlQD+kRRZcSfbepjPJY=", "owner": "hyprwm", "repo": "hyprutils", - "rev": "e36db00dfb3a3d3fdcc4069cb292ff60d2699ccb", + "rev": "a8229739cf36d159001cfc203871917b83fdf917", "type": "github" }, "original": { @@ -461,11 +478,11 @@ ] }, "locked": { - "lastModified": 1749145760, - "narHash": "sha256-IHaGWpGrv7seFWdw/1A+wHtTsPlOGIKMrk1TUIYJEFI=", + "lastModified": 1751881472, + "narHash": "sha256-meB0SnXbwIe2trD041MLKEv6R7NZ759QwBcVIhlSBfE=", "owner": "hyprwm", "repo": "hyprwayland-scanner", - "rev": "817918315ea016cc2d94004bfb3223b5fd9dfcc6", + "rev": "8fb426b3e5452fd9169453fd6c10f8c14ca37120", "type": "github" }, "original": { @@ -517,11 +534,11 @@ "xwayland-satellite-unstable": "xwayland-satellite-unstable" }, "locked": { - "lastModified": 1749567948, - "narHash": "sha256-v+94gQWNxlr/iNmI81i0iSHK8ZP10jeWtf4FqdJaS68=", + "lastModified": 1752078530, + "narHash": "sha256-TrRmlYdhWcadWvBpDjB9Xlry4uT4ZUIO46d+o5tjtCQ=", "owner": "sodiboo", "repo": "niri-flake", - "rev": "c05ef2200a89709ddf87d3bf939b21837e3383cb", + "rev": "d231d92313192d4d0c78d6ef04167fed9dee87cf", "type": "github" }, "original": { @@ -533,16 +550,16 @@ "niri-stable": { "flake": false, "locked": { - "lastModified": 1740117926, - "narHash": "sha256-mTTHA0RAaQcdYe+9A3Jx77cmmyLFHmRoZdd8RpWa+m8=", + "lastModified": 1748151941, + "narHash": "sha256-z4viQZLgC2bIJ3VrzQnR+q2F3gAOEQpU1H5xHtX/2fs=", "owner": "YaLTeR", "repo": "niri", - "rev": "b94a5db8790339cf9134873d8b490be69e02ac71", + "rev": "8ba57fcf25d2fc9565131684a839d58703f1dae7", "type": "github" }, "original": { "owner": "YaLTeR", - "ref": "v25.02", + "ref": "v25.05.1", "repo": "niri", "type": "github" } @@ -550,11 +567,11 @@ "niri-unstable": { "flake": false, "locked": { - "lastModified": 1749564212, - "narHash": "sha256-bfA6nBTtCR3WUapgKXd6WqHQFp9vmzAaUyv6qjBmvYE=", + "lastModified": 1750791124, + "narHash": "sha256-F5iVU/hjoSHSSe0gllxm0PcAaseEtGNanYK5Ha3k2Tg=", "owner": "YaLTeR", "repo": "niri", - "rev": "0407ac5e4ce67255388d7ed8d85ffdbe14ec99ab", + "rev": "37458d94b288945f6cfbd3c5c233f634d59f246c", "type": "github" }, "original": { @@ -581,11 +598,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1749494155, - "narHash": "sha256-FG4DEYBpROupu758beabUk9lhrblSf5hnv84v1TLqMc=", + "lastModified": 1751943650, + "narHash": "sha256-7orTnNqkGGru8Je6Un6mq1T8YVVU/O5kyW4+f9C1mZQ=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "88331c17ba434359491e8d5889cce872464052c2", + "rev": "88983d4b665fb491861005137ce2b11a9f89f203", "type": "github" }, "original": { @@ -597,11 +614,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1743583204, - "narHash": "sha256-F7n4+KOIfWrwoQjXrL2wD9RhFYLs2/GGe/MQY1sSdlE=", + "lastModified": 1751792365, + "narHash": "sha256-J1kI6oAj25IG4EdVlg2hQz8NZTBNYvIS0l4wpr9KcUo=", "owner": "nixos", "repo": "nixpkgs", - "rev": "2c8d3f48d33929642c1c12cd243df4cc7d2ce434", + "rev": "1fd8bada0b6117e6c7eb54aad5813023eed37ccb", "type": "github" }, "original": { @@ -613,11 +630,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1749143949, - "narHash": "sha256-QuUtALJpVrPnPeozlUG/y+oIMSLdptHxb3GK6cpSVhA=", + "lastModified": 1751637120, + "narHash": "sha256-xVNy/XopSfIG9c46nRmPaKfH1Gn/56vQ8++xWA8itO4=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "d3d2d80a2191a73d1e86456a751b83aa13085d7d", + "rev": "5c724ed1388e53cc231ed98330a60eb2f7be4be3", "type": "github" }, "original": { @@ -629,11 +646,11 @@ }, "nixpkgs_4": { "locked": { - "lastModified": 1749143949, - "narHash": "sha256-QuUtALJpVrPnPeozlUG/y+oIMSLdptHxb3GK6cpSVhA=", + "lastModified": 1751792365, + "narHash": "sha256-J1kI6oAj25IG4EdVlg2hQz8NZTBNYvIS0l4wpr9KcUo=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "d3d2d80a2191a73d1e86456a751b83aa13085d7d", + "rev": "1fd8bada0b6117e6c7eb54aad5813023eed37ccb", "type": "github" }, "original": { @@ -677,11 +694,11 @@ }, "nixpkgs_7": { "locked": { - "lastModified": 1749285348, - "narHash": "sha256-frdhQvPbmDYaScPFiCnfdh3B/Vh81Uuoo0w5TkWmmjU=", + "lastModified": 1751984180, + "narHash": "sha256-LwWRsENAZJKUdD3SpLluwDmdXY9F45ZEgCb0X+xgOL0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "3e3afe5174c561dee0df6f2c2b2236990146329f", + "rev": "9807714d6944a957c2e036f84b0ff8caf9930bc0", "type": "github" }, "original": { @@ -693,11 +710,11 @@ }, "nixpkgs_8": { "locked": { - "lastModified": 1749285348, - "narHash": "sha256-frdhQvPbmDYaScPFiCnfdh3B/Vh81Uuoo0w5TkWmmjU=", + "lastModified": 1751984180, + "narHash": "sha256-LwWRsENAZJKUdD3SpLluwDmdXY9F45ZEgCb0X+xgOL0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "3e3afe5174c561dee0df6f2c2b2236990146329f", + "rev": "9807714d6944a957c2e036f84b0ff8caf9930bc0", "type": "github" }, "original": { @@ -732,11 +749,11 @@ ] }, "locked": { - "lastModified": 1747372754, - "narHash": "sha256-2Y53NGIX2vxfie1rOW0Qb86vjRZ7ngizoo+bnXU9D9k=", + "lastModified": 1750779888, + "narHash": "sha256-wibppH3g/E2lxU43ZQHC5yA/7kIKLGxVEnsnVK1BtRg=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "80479b6ec16fefd9c1db3ea13aeb038c60530f46", + "rev": "16ec914f6fb6f599ce988427d9d94efddf25fe6d", "type": "github" }, "original": { @@ -763,11 +780,11 @@ "nixpkgs": "nixpkgs_9" }, "locked": { - "lastModified": 1747603214, - "narHash": "sha256-lAblXm0VwifYCJ/ILPXJwlz0qNY07DDYdLD+9H+Wc8o=", + "lastModified": 1751606940, + "narHash": "sha256-KrDPXobG7DFKTOteqdSVeL1bMVitDcy7otpVZWDE6MA=", "owner": "Mic92", "repo": "sops-nix", - "rev": "8d215e1c981be3aa37e47aeabd4e61bb069548fd", + "rev": "3633fc4acf03f43b260244d94c71e9e14a2f6e0d", "type": "github" }, "original": { @@ -834,11 +851,11 @@ ] }, "locked": { - "lastModified": 1749155346, - "narHash": "sha256-KIkJu3zF8MF3DuGwzAmo3Ww9wsWXolwV30SjJRTAxYE=", + "lastModified": 1751300244, + "narHash": "sha256-PFuv1TZVYvQhha0ac53E3YgdtmLShrN0t4T6xqHl0jE=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "44bf29f1df45786098920c655af523535a9191ae", + "rev": "6115f3fdcb2c1a57b4a80a69f3c797e47607b90a", "type": "github" }, "original": { @@ -850,16 +867,16 @@ "xwayland-satellite-stable": { "flake": false, "locked": { - "lastModified": 1739246919, - "narHash": "sha256-/hBM43/Gd0/tW+egrhlWgOIISeJxEs2uAOIYVpfDKeU=", + "lastModified": 1748488455, + "narHash": "sha256-IiLr1alzKFIy5tGGpDlabQbe6LV1c9ABvkH6T5WmyRI=", "owner": "Supreeeme", "repo": "xwayland-satellite", - "rev": "44590a416d4a3e8220e19e29e0b6efe64a80315d", + "rev": "3ba30b149f9eb2bbf42cf4758d2158ca8cceef73", "type": "github" }, "original": { "owner": "Supreeeme", - "ref": "v0.5.1", + "ref": "v0.6", "repo": "xwayland-satellite", "type": "github" } @@ -867,11 +884,11 @@ "xwayland-satellite-unstable": { "flake": false, "locked": { - "lastModified": 1749315541, - "narHash": "sha256-bEik1BfVOFnWvtOrcOHluos/edJ8f+G2y1QySbt/0Ak=", + "lastModified": 1751228685, + "narHash": "sha256-MENtauGBhJ+kDeFaawvWGXaFG3Il6qQzjaP0RmtfM0k=", "owner": "Supreeeme", "repo": "xwayland-satellite", - "rev": "da2ecb5be816de35e2efe23a408a1c49fe8b11ba", + "rev": "557ebeb616e03d5e4a8049862bbbd1f02c6f020b", "type": "github" }, "original": { From 626ee553e320ec2fea0d7b8ebf7a2ae34a3d2227 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 10 Jul 2025 12:03:07 -0700 Subject: [PATCH 340/412] Flake update 2025-07-10 --- flake.lock | 179 +++++++++++++++++++++++++++++------------------------ 1 file changed, 98 insertions(+), 81 deletions(-) diff --git a/flake.lock b/flake.lock index fefbabe..a51df4d 100644 --- a/flake.lock +++ b/flake.lock @@ -6,11 +6,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1749488107, - "narHash": "sha256-b7Vx4b4YZ+Mjsoywc7mns4v16puVYE0GoSaBC6RETlE=", + "lastModified": 1750597689, + "narHash": "sha256-3ComII0BkmdohISrshICQiAB6TU+VHHIRnWK0ckA0/s=", "owner": "ezKEa", "repo": "aagl-gtk-on-nix", - "rev": "1fe0479fc693d8ce96b5c1902ab29e70d8724ba2", + "rev": "ec2ec4ec3f908ed9b125ea4afd52627bed60f183", "type": "github" }, "original": { @@ -22,14 +22,15 @@ "ags": { "inputs": { "astal": "astal", + "gnim": "gnim", "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1744557573, - "narHash": "sha256-XAyj0iDuI51BytJ1PwN53uLpzTDdznPDQFG4RwihlTQ=", + "lastModified": 1751930350, + "narHash": "sha256-hBIrzyrwG3XjeNyzVNWKDX+yYVlpwAqf9ovgF7qecug=", "owner": "Aylur", "repo": "ags", - "rev": "3ed9737bdbc8fc7a7c7ceef2165c9109f336bff6", + "rev": "22f37ccb0db58d9d8a11ad0054ab20ecfad005ad", "type": "github" }, "original": { @@ -58,11 +59,11 @@ ] }, "locked": { - "lastModified": 1749155310, - "narHash": "sha256-t0HfHg/1+TbSra5s6nNM0o4tnb3uqWedShSpZXsUMYY=", + "lastModified": 1751740947, + "narHash": "sha256-35040CHH7P3JGmhGVfEb2oJHL/A5mI2IXumhkxrBnao=", "owner": "hyprwm", "repo": "aquamarine", - "rev": "94981cf75a9f11da0b6dd6a1abbd7c50a36ab2d3", + "rev": "dfc1db15a08c4cd234288f66e1199c653495301f", "type": "github" }, "original": { @@ -79,11 +80,11 @@ ] }, "locked": { - "lastModified": 1742571008, - "narHash": "sha256-5WgfJAeBpxiKbTR/gJvxrGYfqQRge5aUDcGKmU1YZ1Q=", + "lastModified": 1751126708, + "narHash": "sha256-AodIKw7TmI7rHVcOfEsO82stupMYIMVQeLAUQfVxnkU=", "owner": "aylur", "repo": "astal", - "rev": "dc0e5d37abe9424c53dcbd2506a4886ffee6296e", + "rev": "ac90f09385a2295da9fdc108aaba4a317aaeacc7", "type": "github" }, "original": { @@ -179,16 +180,32 @@ "type": "github" } }, + "gnim": { + "flake": false, + "locked": { + "lastModified": 1751928958, + "narHash": "sha256-vQY2L+Hnp6F1MHFa3UbMft1goGw3iODI5M+96Z7P+9Q=", + "owner": "aylur", + "repo": "gnim", + "rev": "9bffa83f52f711b13e3c139454623a9aea4f5552", + "type": "github" + }, + "original": { + "owner": "aylur", + "repo": "gnim", + "type": "github" + } + }, "home-manager": { "inputs": { "nixpkgs": "nixpkgs_3" }, "locked": { - "lastModified": 1749526396, - "narHash": "sha256-UL9F76abAk87llXOrcQRjhd5OaOclUd6MIltsqcUZmo=", + "lastModified": 1752093218, + "narHash": "sha256-+3rXu8ewcNDi65/2mKkdSGrivQs5zEZVp5aYszXC0d0=", "owner": "nix-community", "repo": "home-manager", - "rev": "427c96044f11a5da50faf6adaf38c9fa47e6d044", + "rev": "206ed3c71418b52e176f16f58805c96e84555320", "type": "github" }, "original": { @@ -242,11 +259,11 @@ ] }, "locked": { - "lastModified": 1749238452, - "narHash": "sha256-8qiKEWcxUrjpUpK+WyFNg/72C8rp70LUuyTD23T+SdQ=", + "lastModified": 1751808145, + "narHash": "sha256-OXgL0XaKMmfX2rRQkt9SkJw+QNfv0jExlySt1D6O72g=", "owner": "hyprwm", "repo": "hyprgraphics", - "rev": "c7225d73755a6c4c7c72f4d4f3925ea426e325a8", + "rev": "b841473a0bd4a1a74a0b64f1ec2ab199035c349f", "type": "github" }, "original": { @@ -271,11 +288,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1749540031, - "narHash": "sha256-11k6hq/4Tao2PNBFQpSNTlFFKmKGswL17caKuZIE0sM=", + "lastModified": 1752149340, + "narHash": "sha256-DJc2ROpttbP6FHcXwWpmK7EB2cpVsP/LmXjEr8RWcO8=", "ref": "refs/heads/main", - "rev": "6bdb1f413e4c592f73d91bef33dfb202503ef7ab", - "revCount": 6177, + "rev": "b5433bb75324a95dd27eb5492141565466c2cdd6", + "revCount": 6265, "type": "git", "url": "https://github.com/hyprwm/Hyprland" }, @@ -289,11 +306,11 @@ "nixpkgs": "nixpkgs_5" }, "locked": { - "lastModified": 1747572947, - "narHash": "sha256-PMQoXbfmWPuXnF8EaWqRmvTvl7+WFUrDVgufFRPgOM4=", + "lastModified": 1752069516, + "narHash": "sha256-dyzDJvt8IVgHJVmpnw1mueHHSLYnChW1XMkwz9WUBZ8=", "owner": "hyprwm", "repo": "contrib", - "rev": "910dad4c5755c1735d30da10c96d9086aa2a608d", + "rev": "34d0c01910552b873a07c96921ef70e32bf369a2", "type": "github" }, "original": { @@ -382,11 +399,11 @@ ] }, "locked": { - "lastModified": 1749155776, - "narHash": "sha256-t1PM0wxQLQwv2F2AW23uA7pm5giwmcgYEWbNIRct9r4=", + "lastModified": 1750371812, + "narHash": "sha256-D868K1dVEACw17elVxRgXC6hOxY+54wIEjURztDWLk8=", "owner": "hyprwm", "repo": "hyprland-qtutils", - "rev": "396e8aa1c06274835b69da7f9a015fff9a9b7522", + "rev": "b13c7481e37856f322177010bdf75fccacd1adc8", "type": "github" }, "original": { @@ -411,11 +428,11 @@ ] }, "locked": { - "lastModified": 1749145882, - "narHash": "sha256-qr0KXeczF8Sma3Ae7+dR2NHhvG7YeLBJv19W4oMu6ZE=", + "lastModified": 1750371198, + "narHash": "sha256-/iuJ1paQOBoSLqHflRNNGyroqfF/yvPNurxzcCT0cAE=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "1bfb84f54d50c7ae6558c794d3cfd5f6a7e6e676", + "rev": "cee01452bca58d6cadb3224e21e370de8bc20f0b", "type": "github" }, "original": { @@ -436,11 +453,11 @@ ] }, "locked": { - "lastModified": 1749135356, - "narHash": "sha256-Q8mAKMDsFbCEuq7zoSlcTuxgbIBVhfIYpX0RjE32PS0=", + "lastModified": 1751888065, + "narHash": "sha256-F2SV9WGqgtRsXIdUrl3sRe0wXlQD+kRRZcSfbepjPJY=", "owner": "hyprwm", "repo": "hyprutils", - "rev": "e36db00dfb3a3d3fdcc4069cb292ff60d2699ccb", + "rev": "a8229739cf36d159001cfc203871917b83fdf917", "type": "github" }, "original": { @@ -461,11 +478,11 @@ ] }, "locked": { - "lastModified": 1749145760, - "narHash": "sha256-IHaGWpGrv7seFWdw/1A+wHtTsPlOGIKMrk1TUIYJEFI=", + "lastModified": 1751881472, + "narHash": "sha256-meB0SnXbwIe2trD041MLKEv6R7NZ759QwBcVIhlSBfE=", "owner": "hyprwm", "repo": "hyprwayland-scanner", - "rev": "817918315ea016cc2d94004bfb3223b5fd9dfcc6", + "rev": "8fb426b3e5452fd9169453fd6c10f8c14ca37120", "type": "github" }, "original": { @@ -517,11 +534,11 @@ "xwayland-satellite-unstable": "xwayland-satellite-unstable" }, "locked": { - "lastModified": 1749567948, - "narHash": "sha256-v+94gQWNxlr/iNmI81i0iSHK8ZP10jeWtf4FqdJaS68=", + "lastModified": 1752078530, + "narHash": "sha256-TrRmlYdhWcadWvBpDjB9Xlry4uT4ZUIO46d+o5tjtCQ=", "owner": "sodiboo", "repo": "niri-flake", - "rev": "c05ef2200a89709ddf87d3bf939b21837e3383cb", + "rev": "d231d92313192d4d0c78d6ef04167fed9dee87cf", "type": "github" }, "original": { @@ -533,16 +550,16 @@ "niri-stable": { "flake": false, "locked": { - "lastModified": 1740117926, - "narHash": "sha256-mTTHA0RAaQcdYe+9A3Jx77cmmyLFHmRoZdd8RpWa+m8=", + "lastModified": 1748151941, + "narHash": "sha256-z4viQZLgC2bIJ3VrzQnR+q2F3gAOEQpU1H5xHtX/2fs=", "owner": "YaLTeR", "repo": "niri", - "rev": "b94a5db8790339cf9134873d8b490be69e02ac71", + "rev": "8ba57fcf25d2fc9565131684a839d58703f1dae7", "type": "github" }, "original": { "owner": "YaLTeR", - "ref": "v25.02", + "ref": "v25.05.1", "repo": "niri", "type": "github" } @@ -550,11 +567,11 @@ "niri-unstable": { "flake": false, "locked": { - "lastModified": 1749564212, - "narHash": "sha256-bfA6nBTtCR3WUapgKXd6WqHQFp9vmzAaUyv6qjBmvYE=", + "lastModified": 1750791124, + "narHash": "sha256-F5iVU/hjoSHSSe0gllxm0PcAaseEtGNanYK5Ha3k2Tg=", "owner": "YaLTeR", "repo": "niri", - "rev": "0407ac5e4ce67255388d7ed8d85ffdbe14ec99ab", + "rev": "37458d94b288945f6cfbd3c5c233f634d59f246c", "type": "github" }, "original": { @@ -581,11 +598,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1749494155, - "narHash": "sha256-FG4DEYBpROupu758beabUk9lhrblSf5hnv84v1TLqMc=", + "lastModified": 1751943650, + "narHash": "sha256-7orTnNqkGGru8Je6Un6mq1T8YVVU/O5kyW4+f9C1mZQ=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "88331c17ba434359491e8d5889cce872464052c2", + "rev": "88983d4b665fb491861005137ce2b11a9f89f203", "type": "github" }, "original": { @@ -597,11 +614,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1743583204, - "narHash": "sha256-F7n4+KOIfWrwoQjXrL2wD9RhFYLs2/GGe/MQY1sSdlE=", + "lastModified": 1751792365, + "narHash": "sha256-J1kI6oAj25IG4EdVlg2hQz8NZTBNYvIS0l4wpr9KcUo=", "owner": "nixos", "repo": "nixpkgs", - "rev": "2c8d3f48d33929642c1c12cd243df4cc7d2ce434", + "rev": "1fd8bada0b6117e6c7eb54aad5813023eed37ccb", "type": "github" }, "original": { @@ -613,11 +630,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1749143949, - "narHash": "sha256-QuUtALJpVrPnPeozlUG/y+oIMSLdptHxb3GK6cpSVhA=", + "lastModified": 1751637120, + "narHash": "sha256-xVNy/XopSfIG9c46nRmPaKfH1Gn/56vQ8++xWA8itO4=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "d3d2d80a2191a73d1e86456a751b83aa13085d7d", + "rev": "5c724ed1388e53cc231ed98330a60eb2f7be4be3", "type": "github" }, "original": { @@ -629,11 +646,11 @@ }, "nixpkgs_4": { "locked": { - "lastModified": 1749143949, - "narHash": "sha256-QuUtALJpVrPnPeozlUG/y+oIMSLdptHxb3GK6cpSVhA=", + "lastModified": 1751792365, + "narHash": "sha256-J1kI6oAj25IG4EdVlg2hQz8NZTBNYvIS0l4wpr9KcUo=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "d3d2d80a2191a73d1e86456a751b83aa13085d7d", + "rev": "1fd8bada0b6117e6c7eb54aad5813023eed37ccb", "type": "github" }, "original": { @@ -677,11 +694,11 @@ }, "nixpkgs_7": { "locked": { - "lastModified": 1749285348, - "narHash": "sha256-frdhQvPbmDYaScPFiCnfdh3B/Vh81Uuoo0w5TkWmmjU=", + "lastModified": 1751984180, + "narHash": "sha256-LwWRsENAZJKUdD3SpLluwDmdXY9F45ZEgCb0X+xgOL0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "3e3afe5174c561dee0df6f2c2b2236990146329f", + "rev": "9807714d6944a957c2e036f84b0ff8caf9930bc0", "type": "github" }, "original": { @@ -693,11 +710,11 @@ }, "nixpkgs_8": { "locked": { - "lastModified": 1749285348, - "narHash": "sha256-frdhQvPbmDYaScPFiCnfdh3B/Vh81Uuoo0w5TkWmmjU=", + "lastModified": 1751984180, + "narHash": "sha256-LwWRsENAZJKUdD3SpLluwDmdXY9F45ZEgCb0X+xgOL0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "3e3afe5174c561dee0df6f2c2b2236990146329f", + "rev": "9807714d6944a957c2e036f84b0ff8caf9930bc0", "type": "github" }, "original": { @@ -732,11 +749,11 @@ ] }, "locked": { - "lastModified": 1747372754, - "narHash": "sha256-2Y53NGIX2vxfie1rOW0Qb86vjRZ7ngizoo+bnXU9D9k=", + "lastModified": 1750779888, + "narHash": "sha256-wibppH3g/E2lxU43ZQHC5yA/7kIKLGxVEnsnVK1BtRg=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "80479b6ec16fefd9c1db3ea13aeb038c60530f46", + "rev": "16ec914f6fb6f599ce988427d9d94efddf25fe6d", "type": "github" }, "original": { @@ -763,11 +780,11 @@ "nixpkgs": "nixpkgs_9" }, "locked": { - "lastModified": 1747603214, - "narHash": "sha256-lAblXm0VwifYCJ/ILPXJwlz0qNY07DDYdLD+9H+Wc8o=", + "lastModified": 1751606940, + "narHash": "sha256-KrDPXobG7DFKTOteqdSVeL1bMVitDcy7otpVZWDE6MA=", "owner": "Mic92", "repo": "sops-nix", - "rev": "8d215e1c981be3aa37e47aeabd4e61bb069548fd", + "rev": "3633fc4acf03f43b260244d94c71e9e14a2f6e0d", "type": "github" }, "original": { @@ -834,11 +851,11 @@ ] }, "locked": { - "lastModified": 1749155346, - "narHash": "sha256-KIkJu3zF8MF3DuGwzAmo3Ww9wsWXolwV30SjJRTAxYE=", + "lastModified": 1751300244, + "narHash": "sha256-PFuv1TZVYvQhha0ac53E3YgdtmLShrN0t4T6xqHl0jE=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "44bf29f1df45786098920c655af523535a9191ae", + "rev": "6115f3fdcb2c1a57b4a80a69f3c797e47607b90a", "type": "github" }, "original": { @@ -850,16 +867,16 @@ "xwayland-satellite-stable": { "flake": false, "locked": { - "lastModified": 1739246919, - "narHash": "sha256-/hBM43/Gd0/tW+egrhlWgOIISeJxEs2uAOIYVpfDKeU=", + "lastModified": 1748488455, + "narHash": "sha256-IiLr1alzKFIy5tGGpDlabQbe6LV1c9ABvkH6T5WmyRI=", "owner": "Supreeeme", "repo": "xwayland-satellite", - "rev": "44590a416d4a3e8220e19e29e0b6efe64a80315d", + "rev": "3ba30b149f9eb2bbf42cf4758d2158ca8cceef73", "type": "github" }, "original": { "owner": "Supreeeme", - "ref": "v0.5.1", + "ref": "v0.6", "repo": "xwayland-satellite", "type": "github" } @@ -867,11 +884,11 @@ "xwayland-satellite-unstable": { "flake": false, "locked": { - "lastModified": 1749315541, - "narHash": "sha256-bEik1BfVOFnWvtOrcOHluos/edJ8f+G2y1QySbt/0Ak=", + "lastModified": 1751228685, + "narHash": "sha256-MENtauGBhJ+kDeFaawvWGXaFG3Il6qQzjaP0RmtfM0k=", "owner": "Supreeeme", "repo": "xwayland-satellite", - "rev": "da2ecb5be816de35e2efe23a408a1c49fe8b11ba", + "rev": "557ebeb616e03d5e4a8049862bbbd1f02c6f020b", "type": "github" }, "original": { From f648219d1273a72cf3dd21cf446c88be5bcd6a8d Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 10 Jul 2025 12:16:39 -0700 Subject: [PATCH 341/412] Ssh, change default port to 22 --- nixosModules/services/ssh/service.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixosModules/services/ssh/service.nix b/nixosModules/services/ssh/service.nix index addf235..43c8991 100644 --- a/nixosModules/services/ssh/service.nix +++ b/nixosModules/services/ssh/service.nix @@ -4,7 +4,7 @@ options.sshd = { enable = lib.mkEnableOption "Enables ssh daemon"; port = lib.mkOption { - default = 922; + default = 22; type = lib.types.port; }; }; From eb533ddd8349b89504ddc6f6aed35d0542f3f4ac Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 10 Jul 2025 12:16:39 -0700 Subject: [PATCH 342/412] Ssh, change default port to 22 --- nixosModules/services/ssh/service.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixosModules/services/ssh/service.nix b/nixosModules/services/ssh/service.nix index addf235..43c8991 100644 --- a/nixosModules/services/ssh/service.nix +++ b/nixosModules/services/ssh/service.nix @@ -4,7 +4,7 @@ options.sshd = { enable = lib.mkEnableOption "Enables ssh daemon"; port = lib.mkOption { - default = 922; + default = 22; type = lib.types.port; }; }; From 8896fc46fdc9806a606268c603ff937760f05c13 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 1 Jul 2025 10:44:39 -0700 Subject: [PATCH 343/412] Neovim, add typescript support --- hmModules/apps/neovim/app.nix | 15 +++++++++++++-- hmModules/apps/neovim/plugin/treesitter.nix | 1 + hosts/onizuka/users/pan/user.nix | 1 + 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/hmModules/apps/neovim/app.nix b/hmModules/apps/neovim/app.nix index 4ef6b51..d655103 100644 --- a/hmModules/apps/neovim/app.nix +++ b/hmModules/apps/neovim/app.nix @@ -8,6 +8,7 @@ go.enable = lib.mkEnableOption "Enables go support"; nix.enable = lib.mkEnableOption "Enables nix support"; rust.enable = lib.mkEnableOption "Enables rust support"; + typescript.enable = lib.mkEnableOption "Enables typescript support"; }; themes = { catppuccin.enable = lib.mkEnableOption "Enables catppuccin theme"; @@ -118,6 +119,16 @@ go-nvim ]); + typescript-pkg = lopts cfgl.typescript.enable (with pkgs.vimPlugins; [ + { + plugin = typescript-tools-nvim; + type = "lua"; + config = '' + require("typescript-tools").setup {} + ''; + } + ]); + catppuccin-pkg = lopts cfgt.catppuccin.enable (with pkgs.vimPlugins; [ { plugin = catppuccin-nvim; @@ -151,8 +162,8 @@ ''; } ]); - in comments ++ fugitive ++ luasnip-pkg ++ lualine ++ - nix-pkg ++ rust-pkg ++ go-pkg ++ wiki ++ catppuccin-pkg; + in comments ++ fugitive ++ luasnip-pkg ++ lualine ++ nix-pkg ++ rust-pkg + ++ go-pkg ++ wiki ++ catppuccin-pkg ++ typescript-pkg; }; }; } diff --git a/hmModules/apps/neovim/plugin/treesitter.nix b/hmModules/apps/neovim/plugin/treesitter.nix index d1e9fe3..a6bb8c0 100644 --- a/hmModules/apps/neovim/plugin/treesitter.nix +++ b/hmModules/apps/neovim/plugin/treesitter.nix @@ -25,6 +25,7 @@ in { p.tree-sitter-go p.tree-sitter-nix p.tree-sitter-rust + p.tree-sitter-typescript ]; in with pkgs.vimPlugins; [ { diff --git a/hosts/onizuka/users/pan/user.nix b/hosts/onizuka/users/pan/user.nix index 2efdf12..bc112d7 100644 --- a/hosts/onizuka/users/pan/user.nix +++ b/hosts/onizuka/users/pan/user.nix @@ -58,6 +58,7 @@ c.enable = true; nix.enable = true; rust.enable = true; + typescript.enable = true; }; neovim.plugins = { comments.enable = true; From 2d262b0fbafed28b681dcb054c9af044e4234a1d Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 1 Jul 2025 10:44:39 -0700 Subject: [PATCH 344/412] Neovim, add typescript support --- hmModules/apps/neovim/app.nix | 15 +++++++++++++-- hmModules/apps/neovim/plugin/treesitter.nix | 1 + hosts/onizuka/users/pan/user.nix | 1 + 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/hmModules/apps/neovim/app.nix b/hmModules/apps/neovim/app.nix index 4ef6b51..d655103 100644 --- a/hmModules/apps/neovim/app.nix +++ b/hmModules/apps/neovim/app.nix @@ -8,6 +8,7 @@ go.enable = lib.mkEnableOption "Enables go support"; nix.enable = lib.mkEnableOption "Enables nix support"; rust.enable = lib.mkEnableOption "Enables rust support"; + typescript.enable = lib.mkEnableOption "Enables typescript support"; }; themes = { catppuccin.enable = lib.mkEnableOption "Enables catppuccin theme"; @@ -118,6 +119,16 @@ go-nvim ]); + typescript-pkg = lopts cfgl.typescript.enable (with pkgs.vimPlugins; [ + { + plugin = typescript-tools-nvim; + type = "lua"; + config = '' + require("typescript-tools").setup {} + ''; + } + ]); + catppuccin-pkg = lopts cfgt.catppuccin.enable (with pkgs.vimPlugins; [ { plugin = catppuccin-nvim; @@ -151,8 +162,8 @@ ''; } ]); - in comments ++ fugitive ++ luasnip-pkg ++ lualine ++ - nix-pkg ++ rust-pkg ++ go-pkg ++ wiki ++ catppuccin-pkg; + in comments ++ fugitive ++ luasnip-pkg ++ lualine ++ nix-pkg ++ rust-pkg + ++ go-pkg ++ wiki ++ catppuccin-pkg ++ typescript-pkg; }; }; } diff --git a/hmModules/apps/neovim/plugin/treesitter.nix b/hmModules/apps/neovim/plugin/treesitter.nix index d1e9fe3..a6bb8c0 100644 --- a/hmModules/apps/neovim/plugin/treesitter.nix +++ b/hmModules/apps/neovim/plugin/treesitter.nix @@ -25,6 +25,7 @@ in { p.tree-sitter-go p.tree-sitter-nix p.tree-sitter-rust + p.tree-sitter-typescript ]; in with pkgs.vimPlugins; [ { diff --git a/hosts/onizuka/users/pan/user.nix b/hosts/onizuka/users/pan/user.nix index 2efdf12..bc112d7 100644 --- a/hosts/onizuka/users/pan/user.nix +++ b/hosts/onizuka/users/pan/user.nix @@ -58,6 +58,7 @@ c.enable = true; nix.enable = true; rust.enable = true; + typescript.enable = true; }; neovim.plugins = { comments.enable = true; From bdb1ba2249708cae18adf31847b71ddac87b2d67 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 16 Jul 2025 10:12:24 -0700 Subject: [PATCH 345/412] Juri, add an account for May --- hosts/juri/users/badtz/user.nix | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 hosts/juri/users/badtz/user.nix diff --git a/hosts/juri/users/badtz/user.nix b/hosts/juri/users/badtz/user.nix new file mode 100644 index 0000000..5972fdb --- /dev/null +++ b/hosts/juri/users/badtz/user.nix @@ -0,0 +1,10 @@ +{ config, pkgs, ... }: + +{ + fish.enable = true; + git = { + enable = true; + username = "Badtz"; + email = "may@badtz.dev"; + }; +} From 9e8f82f3aee22e21ceb8b44b39cf25e29628e84c Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 16 Jul 2025 10:12:24 -0700 Subject: [PATCH 346/412] Juri, add an account for May --- hosts/juri/users/badtz/user.nix | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 hosts/juri/users/badtz/user.nix diff --git a/hosts/juri/users/badtz/user.nix b/hosts/juri/users/badtz/user.nix new file mode 100644 index 0000000..5972fdb --- /dev/null +++ b/hosts/juri/users/badtz/user.nix @@ -0,0 +1,10 @@ +{ config, pkgs, ... }: + +{ + fish.enable = true; + git = { + enable = true; + username = "Badtz"; + email = "may@badtz.dev"; + }; +} From 863101b6f6c6887db37389c9f03b232e440d2a47 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 4 Aug 2025 18:19:58 -0700 Subject: [PATCH 347/412] Syncthing, HM and Nixos Module --- hmModules/services/syncthing/service.nix | 63 ++++++++++++++++++++ hosts/juri/host.nix | 19 +++++- hosts/onizuka/users/pan/user.nix | 8 +++ nixosModules/services/syncthing/service.nix | 64 +++++++++++++++++++++ 4 files changed, 152 insertions(+), 2 deletions(-) create mode 100644 hmModules/services/syncthing/service.nix create mode 100644 nixosModules/services/syncthing/service.nix diff --git a/hmModules/services/syncthing/service.nix b/hmModules/services/syncthing/service.nix new file mode 100644 index 0000000..31a3ff9 --- /dev/null +++ b/hmModules/services/syncthing/service.nix @@ -0,0 +1,63 @@ +{ config, lib, ... }: + +{ + options.syncthing = { + enable = lib.mkEnableOption "Enables Syncthing service"; + + devices = lib.mkOption { + type = lib.types.attrsOf (lib.types.submodule { + options = { + id = lib.mkOption { + type = lib.types.str; + description = "Device ID"; + }; + addresses = lib.mkOption { + type = lib.types.listOf lib.types.str; + default = [ "dynamic" ]; + description = "List of device addresses"; + }; + }; + }); + default = {}; + description = "Syncthing devices"; + }; + + folders = lib.mkOption { + type = lib.types.attrsOf (lib.types.submodule { + options = { + path = lib.mkOption { + type = lib.types.path; + description = "Path to folder"; + }; + devices = lib.mkOption { + type = lib.types.listOf lib.types.str; + default = []; + description = "List of device names to share with"; + }; + }; + }); + default = {}; + description = "Syncthing folders"; + }; + }; + + config = lib.mkIf config.syncthing.enable { + services.syncthing = { + enable = true; + overrideDevices = true; + overrideFolders = true; + + settings = { + devices = lib.mapAttrs (name: device: { + id = device.id; + addresses = device.addresses; + }) config.syncthing.devices; + + folders = lib.mapAttrs (name: folder: { + path = folder.path; + devices = folder.devices; + }) config.syncthing.folders; + }; + }; + }; +} diff --git a/hosts/juri/host.nix b/hosts/juri/host.nix index 192639b..be01321 100644 --- a/hosts/juri/host.nix +++ b/hosts/juri/host.nix @@ -3,8 +3,7 @@ let email = "admin@woach.me"; in { imports = [ - ./hardware.nix - ]; + ./hardware.nix ]; system.stateVersion = "24.11"; system.timezone = "America/Los_Angeles"; system.users.bigWheels = [ "pan" ]; @@ -66,6 +65,22 @@ in { server.domain = "ginko.woach.me"; }; + syncthing = { + enable = true; + devices = { + "homura".id = "NEP24DB-DVXAHTZ-TCCNREQ-Q5TSC7K-ZXPWC4L-5ELGKQX-4I2P47O-2FT5QAU"; + "onizuka".id = "5S6QMND-MHD2HYR-DR6KQD4-6AWJTRL-FQUCR7W-FD2KBT3-AF6RE6R-F47KBQC"; + }; + + folders = { + "wiki" = { + path = "/var/lib/wiki"; + devices = [ "homura" "onizuka" ]; + }; + }; + }; + systemd.tmpfiles.rules = [ "d /var/lib/wiki 0755 syncthing syncthing -" ]; + postgres.enable = true; shell.enabledShells = [ "fish" ]; diff --git a/hosts/onizuka/users/pan/user.nix b/hosts/onizuka/users/pan/user.nix index bc112d7..0867c8f 100644 --- a/hosts/onizuka/users/pan/user.nix +++ b/hosts/onizuka/users/pan/user.nix @@ -48,6 +48,14 @@ ssh.enable = true; librewolf.enable = true; librewolf.make_default = true; + syncthing = { + enable = true; + devices."juri".id = "HAUUSTK-W2YD6MV-DL2T2MV-XSHSFSC-IA6P6GY-B62IC27-YKHVQLX-374FRAO"; + folders."wiki" = { + path = "${config.xdg.userDirs.documents}/neowiki"; + devices = [ "juri" ]; + }; + }; mpv.enable = true; zathura.enable = true; diff --git a/nixosModules/services/syncthing/service.nix b/nixosModules/services/syncthing/service.nix new file mode 100644 index 0000000..803fd3d --- /dev/null +++ b/nixosModules/services/syncthing/service.nix @@ -0,0 +1,64 @@ +{ config, lib, ... }: + +{ + options.syncthing = { + enable = lib.mkEnableOption "Enables Syncthing service"; + + devices = lib.mkOption { + type = lib.types.attrsOf (lib.types.submodule { + options = { + id = lib.mkOption { + type = lib.types.str; + description = "Device ID"; + }; + addresses = lib.mkOption { + type = lib.types.listOf lib.types.str; + default = [ "dynamic" ]; + description = "List of device addresses"; + }; + }; + }); + default = {}; + description = "Syncthing devices"; + }; + + folders = lib.mkOption { + type = lib.types.attrsOf (lib.types.submodule { + options = { + path = lib.mkOption { + type = lib.types.path; + description = "Path to folder"; + }; + devices = lib.mkOption { + type = lib.types.listOf lib.types.str; + default = []; + description = "List of device names to share with"; + }; + }; + }); + default = {}; + description = "Syncthing folders"; + }; + }; + + config = lib.mkIf config.syncthing.enable { + services.syncthing = { + enable = true; + openDefaultPorts = true; + overrideDevices = true; + overrideFolders = true; + + settings = { + devices = lib.mapAttrs (name: device: { + id = device.id; + addresses = device.addresses; + }) config.syncthing.devices; + + folders = lib.mapAttrs (name: folder: { + path = folder.path; + devices = folder.devices; + }) config.syncthing.folders; + }; + }; + }; +} From c6f2ddf33c2e4ae87f4021f011f367080eff580f Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 4 Aug 2025 18:19:58 -0700 Subject: [PATCH 348/412] Syncthing, HM and Nixos Module --- hmModules/services/syncthing/service.nix | 63 ++++++++++++++++++++ hosts/juri/host.nix | 19 +++++- hosts/onizuka/users/pan/user.nix | 8 +++ nixosModules/services/syncthing/service.nix | 64 +++++++++++++++++++++ 4 files changed, 152 insertions(+), 2 deletions(-) create mode 100644 hmModules/services/syncthing/service.nix create mode 100644 nixosModules/services/syncthing/service.nix diff --git a/hmModules/services/syncthing/service.nix b/hmModules/services/syncthing/service.nix new file mode 100644 index 0000000..31a3ff9 --- /dev/null +++ b/hmModules/services/syncthing/service.nix @@ -0,0 +1,63 @@ +{ config, lib, ... }: + +{ + options.syncthing = { + enable = lib.mkEnableOption "Enables Syncthing service"; + + devices = lib.mkOption { + type = lib.types.attrsOf (lib.types.submodule { + options = { + id = lib.mkOption { + type = lib.types.str; + description = "Device ID"; + }; + addresses = lib.mkOption { + type = lib.types.listOf lib.types.str; + default = [ "dynamic" ]; + description = "List of device addresses"; + }; + }; + }); + default = {}; + description = "Syncthing devices"; + }; + + folders = lib.mkOption { + type = lib.types.attrsOf (lib.types.submodule { + options = { + path = lib.mkOption { + type = lib.types.path; + description = "Path to folder"; + }; + devices = lib.mkOption { + type = lib.types.listOf lib.types.str; + default = []; + description = "List of device names to share with"; + }; + }; + }); + default = {}; + description = "Syncthing folders"; + }; + }; + + config = lib.mkIf config.syncthing.enable { + services.syncthing = { + enable = true; + overrideDevices = true; + overrideFolders = true; + + settings = { + devices = lib.mapAttrs (name: device: { + id = device.id; + addresses = device.addresses; + }) config.syncthing.devices; + + folders = lib.mapAttrs (name: folder: { + path = folder.path; + devices = folder.devices; + }) config.syncthing.folders; + }; + }; + }; +} diff --git a/hosts/juri/host.nix b/hosts/juri/host.nix index 192639b..be01321 100644 --- a/hosts/juri/host.nix +++ b/hosts/juri/host.nix @@ -3,8 +3,7 @@ let email = "admin@woach.me"; in { imports = [ - ./hardware.nix - ]; + ./hardware.nix ]; system.stateVersion = "24.11"; system.timezone = "America/Los_Angeles"; system.users.bigWheels = [ "pan" ]; @@ -66,6 +65,22 @@ in { server.domain = "ginko.woach.me"; }; + syncthing = { + enable = true; + devices = { + "homura".id = "NEP24DB-DVXAHTZ-TCCNREQ-Q5TSC7K-ZXPWC4L-5ELGKQX-4I2P47O-2FT5QAU"; + "onizuka".id = "5S6QMND-MHD2HYR-DR6KQD4-6AWJTRL-FQUCR7W-FD2KBT3-AF6RE6R-F47KBQC"; + }; + + folders = { + "wiki" = { + path = "/var/lib/wiki"; + devices = [ "homura" "onizuka" ]; + }; + }; + }; + systemd.tmpfiles.rules = [ "d /var/lib/wiki 0755 syncthing syncthing -" ]; + postgres.enable = true; shell.enabledShells = [ "fish" ]; diff --git a/hosts/onizuka/users/pan/user.nix b/hosts/onizuka/users/pan/user.nix index bc112d7..0867c8f 100644 --- a/hosts/onizuka/users/pan/user.nix +++ b/hosts/onizuka/users/pan/user.nix @@ -48,6 +48,14 @@ ssh.enable = true; librewolf.enable = true; librewolf.make_default = true; + syncthing = { + enable = true; + devices."juri".id = "HAUUSTK-W2YD6MV-DL2T2MV-XSHSFSC-IA6P6GY-B62IC27-YKHVQLX-374FRAO"; + folders."wiki" = { + path = "${config.xdg.userDirs.documents}/neowiki"; + devices = [ "juri" ]; + }; + }; mpv.enable = true; zathura.enable = true; diff --git a/nixosModules/services/syncthing/service.nix b/nixosModules/services/syncthing/service.nix new file mode 100644 index 0000000..803fd3d --- /dev/null +++ b/nixosModules/services/syncthing/service.nix @@ -0,0 +1,64 @@ +{ config, lib, ... }: + +{ + options.syncthing = { + enable = lib.mkEnableOption "Enables Syncthing service"; + + devices = lib.mkOption { + type = lib.types.attrsOf (lib.types.submodule { + options = { + id = lib.mkOption { + type = lib.types.str; + description = "Device ID"; + }; + addresses = lib.mkOption { + type = lib.types.listOf lib.types.str; + default = [ "dynamic" ]; + description = "List of device addresses"; + }; + }; + }); + default = {}; + description = "Syncthing devices"; + }; + + folders = lib.mkOption { + type = lib.types.attrsOf (lib.types.submodule { + options = { + path = lib.mkOption { + type = lib.types.path; + description = "Path to folder"; + }; + devices = lib.mkOption { + type = lib.types.listOf lib.types.str; + default = []; + description = "List of device names to share with"; + }; + }; + }); + default = {}; + description = "Syncthing folders"; + }; + }; + + config = lib.mkIf config.syncthing.enable { + services.syncthing = { + enable = true; + openDefaultPorts = true; + overrideDevices = true; + overrideFolders = true; + + settings = { + devices = lib.mapAttrs (name: device: { + id = device.id; + addresses = device.addresses; + }) config.syncthing.devices; + + folders = lib.mapAttrs (name: folder: { + path = folder.path; + devices = folder.devices; + }) config.syncthing.folders; + }; + }; + }; +} From e1d54a68502aebb6f2f6929e17858573565d6083 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 7 Aug 2025 21:06:20 -0700 Subject: [PATCH 349/412] Flake update 2025-08-07 --- flake.lock | 261 ++++++++++++++++++++++++++++++----------------------- 1 file changed, 148 insertions(+), 113 deletions(-) diff --git a/flake.lock b/flake.lock index a51df4d..b2c06f6 100644 --- a/flake.lock +++ b/flake.lock @@ -3,14 +3,15 @@ "aagl": { "inputs": { "flake-compat": "flake-compat", - "nixpkgs": "nixpkgs" + "nixpkgs": "nixpkgs", + "rust-overlay": "rust-overlay" }, "locked": { - "lastModified": 1750597689, - "narHash": "sha256-3ComII0BkmdohISrshICQiAB6TU+VHHIRnWK0ckA0/s=", + "lastModified": 1754582951, + "narHash": "sha256-QivorP/1+7P4O6oEdrs6RFo9PptbX6ajBdvYifhzJc0=", "owner": "ezKEa", "repo": "aagl-gtk-on-nix", - "rev": "ec2ec4ec3f908ed9b125ea4afd52627bed60f183", + "rev": "13cb81238ebbd0eeddb465c962413a0f795baa44", "type": "github" }, "original": { @@ -23,14 +24,14 @@ "inputs": { "astal": "astal", "gnim": "gnim", - "nixpkgs": "nixpkgs_2" + "nixpkgs": "nixpkgs_3" }, "locked": { - "lastModified": 1751930350, - "narHash": "sha256-hBIrzyrwG3XjeNyzVNWKDX+yYVlpwAqf9ovgF7qecug=", + "lastModified": 1754487835, + "narHash": "sha256-GRCkm7a1odlN3hHR1iBIxwmBPWAw1CDOnOdpmZGSKkQ=", "owner": "Aylur", "repo": "ags", - "rev": "22f37ccb0db58d9d8a11ad0054ab20ecfad005ad", + "rev": "8e91fcd52b807f576a794ccc9533bdf720ef5af7", "type": "github" }, "original": { @@ -59,11 +60,11 @@ ] }, "locked": { - "lastModified": 1751740947, - "narHash": "sha256-35040CHH7P3JGmhGVfEb2oJHL/A5mI2IXumhkxrBnao=", + "lastModified": 1753216019, + "narHash": "sha256-zik7WISrR1ks2l6T1MZqZHb/OqroHdJnSnAehkE0kCk=", "owner": "hyprwm", "repo": "aquamarine", - "rev": "dfc1db15a08c4cd234288f66e1199c653495301f", + "rev": "be166e11d86ba4186db93e10c54a141058bdce49", "type": "github" }, "original": { @@ -80,11 +81,11 @@ ] }, "locked": { - "lastModified": 1751126708, - "narHash": "sha256-AodIKw7TmI7rHVcOfEsO82stupMYIMVQeLAUQfVxnkU=", + "lastModified": 1752404970, + "narHash": "sha256-XULTToDUkIshNXEO+YP2mAHdQv8bxWDvKjbamBfOC8E=", "owner": "aylur", "repo": "astal", - "rev": "ac90f09385a2295da9fdc108aaba4a317aaeacc7", + "rev": "2c5eb54f39e1710c6e2c80915a240978beb3269a", "type": "github" }, "original": { @@ -183,11 +184,11 @@ "gnim": { "flake": false, "locked": { - "lastModified": 1751928958, - "narHash": "sha256-vQY2L+Hnp6F1MHFa3UbMft1goGw3iODI5M+96Z7P+9Q=", + "lastModified": 1753090800, + "narHash": "sha256-6sS6KHong2cMGn+6xJwjiizZzwu2XUmp++DtiKZhFMU=", "owner": "aylur", "repo": "gnim", - "rev": "9bffa83f52f711b13e3c139454623a9aea4f5552", + "rev": "2f58f8444c4cb8fefeab7a9901a33e99cfa92457", "type": "github" }, "original": { @@ -198,14 +199,14 @@ }, "home-manager": { "inputs": { - "nixpkgs": "nixpkgs_3" + "nixpkgs": "nixpkgs_4" }, "locked": { - "lastModified": 1752093218, - "narHash": "sha256-+3rXu8ewcNDi65/2mKkdSGrivQs5zEZVp5aYszXC0d0=", + "lastModified": 1754613544, + "narHash": "sha256-ueR1mGX4I4DWfDRRxxMphbKDNisDeMPMusN72VV1+cc=", "owner": "nix-community", "repo": "home-manager", - "rev": "206ed3c71418b52e176f16f58805c96e84555320", + "rev": "cc2fa2331aebf9661d22bb507d362b39852ac73f", "type": "github" }, "original": { @@ -230,11 +231,11 @@ ] }, "locked": { - "lastModified": 1749155331, - "narHash": "sha256-XR9fsI0zwLiFWfqi/pdS/VD+YNorKb3XIykgTg4l1nA=", + "lastModified": 1753964049, + "narHash": "sha256-lIqabfBY7z/OANxHoPeIrDJrFyYy9jAM4GQLzZ2feCM=", "owner": "hyprwm", "repo": "hyprcursor", - "rev": "45fcc10b4c282746d93ec406a740c43b48b4ef80", + "rev": "44e91d467bdad8dcf8bbd2ac7cf49972540980a5", "type": "github" }, "original": { @@ -259,11 +260,11 @@ ] }, "locked": { - "lastModified": 1751808145, - "narHash": "sha256-OXgL0XaKMmfX2rRQkt9SkJw+QNfv0jExlySt1D6O72g=", + "lastModified": 1752149140, + "narHash": "sha256-gbh1HL98Fdqu0jJIWN4OJQN7Kkth7+rbkFpSZLm/62A=", "owner": "hyprwm", "repo": "hyprgraphics", - "rev": "b841473a0bd4a1a74a0b64f1ec2ab199035c349f", + "rev": "340494a38b5ec453dfc542c6226481f736cc8a9a", "type": "github" }, "original": { @@ -282,17 +283,17 @@ "hyprlang": "hyprlang", "hyprutils": "hyprutils", "hyprwayland-scanner": "hyprwayland-scanner", - "nixpkgs": "nixpkgs_4", + "nixpkgs": "nixpkgs_5", "pre-commit-hooks": "pre-commit-hooks", "systems": "systems", "xdph": "xdph" }, "locked": { - "lastModified": 1752149340, - "narHash": "sha256-DJc2ROpttbP6FHcXwWpmK7EB2cpVsP/LmXjEr8RWcO8=", + "lastModified": 1754583328, + "narHash": "sha256-UyM03UZbu5MMil/iz1dSQv1BlfmzlfGdAZcE9ZV5DwY=", "ref": "refs/heads/main", - "rev": "b5433bb75324a95dd27eb5492141565466c2cdd6", - "revCount": 6265, + "rev": "afbd8796859775a50687daacb254cdd1ba22328f", + "revCount": 6354, "type": "git", "url": "https://github.com/hyprwm/Hyprland" }, @@ -303,14 +304,14 @@ }, "hyprland-contrib": { "inputs": { - "nixpkgs": "nixpkgs_5" + "nixpkgs": "nixpkgs_6" }, "locked": { - "lastModified": 1752069516, - "narHash": "sha256-dyzDJvt8IVgHJVmpnw1mueHHSLYnChW1XMkwz9WUBZ8=", + "lastModified": 1753252360, + "narHash": "sha256-PFAJoEqQWMlo1J+yZb+4HixmhbRVmmNl58e/AkLYDDI=", "owner": "hyprwm", "repo": "contrib", - "rev": "34d0c01910552b873a07c96921ef70e32bf369a2", + "rev": "6839b23345b71db17cd408373de4f5605bf589b8", "type": "github" }, "original": { @@ -399,11 +400,11 @@ ] }, "locked": { - "lastModified": 1750371812, - "narHash": "sha256-D868K1dVEACw17elVxRgXC6hOxY+54wIEjURztDWLk8=", + "lastModified": 1753819801, + "narHash": "sha256-tHe6XeNeVeKapkNM3tcjW4RuD+tB2iwwoogWJOtsqTI=", "owner": "hyprwm", "repo": "hyprland-qtutils", - "rev": "b13c7481e37856f322177010bdf75fccacd1adc8", + "rev": "b308a818b9dcaa7ab8ccab891c1b84ebde2152bc", "type": "github" }, "original": { @@ -428,11 +429,11 @@ ] }, "locked": { - "lastModified": 1750371198, - "narHash": "sha256-/iuJ1paQOBoSLqHflRNNGyroqfF/yvPNurxzcCT0cAE=", + "lastModified": 1753622892, + "narHash": "sha256-0K+A+gmOI8IklSg5It1nyRNv0kCNL51duwnhUO/B8JA=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "cee01452bca58d6cadb3224e21e370de8bc20f0b", + "rev": "23f0debd2003f17bd65f851cd3f930cff8a8c809", "type": "github" }, "original": { @@ -453,11 +454,11 @@ ] }, "locked": { - "lastModified": 1751888065, - "narHash": "sha256-F2SV9WGqgtRsXIdUrl3sRe0wXlQD+kRRZcSfbepjPJY=", + "lastModified": 1753800567, + "narHash": "sha256-W0xgXsaqGa/5/7IBzKNhf0+23MqGPymYYfqT7ECqeTE=", "owner": "hyprwm", "repo": "hyprutils", - "rev": "a8229739cf36d159001cfc203871917b83fdf917", + "rev": "c65d41d4f4e6ded6fdb9d508a73e2fe90e55cdf7", "type": "github" }, "original": { @@ -478,11 +479,11 @@ ] }, "locked": { - "lastModified": 1751881472, - "narHash": "sha256-meB0SnXbwIe2trD041MLKEv6R7NZ759QwBcVIhlSBfE=", + "lastModified": 1751897909, + "narHash": "sha256-FnhBENxihITZldThvbO7883PdXC/2dzW4eiNvtoV5Ao=", "owner": "hyprwm", "repo": "hyprwayland-scanner", - "rev": "8fb426b3e5452fd9169453fd6c10f8c14ca37120", + "rev": "fcca0c61f988a9d092cbb33e906775014c61579d", "type": "github" }, "original": { @@ -510,7 +511,7 @@ "flake-utils": "flake-utils", "flakey-profile": "flakey-profile", "lix": "lix", - "nixpkgs": "nixpkgs_6" + "nixpkgs": "nixpkgs_7" }, "locked": { "lastModified": 1732605668, @@ -528,17 +529,17 @@ "inputs": { "niri-stable": "niri-stable", "niri-unstable": "niri-unstable", - "nixpkgs": "nixpkgs_7", + "nixpkgs": "nixpkgs_8", "nixpkgs-stable": "nixpkgs-stable", "xwayland-satellite-stable": "xwayland-satellite-stable", "xwayland-satellite-unstable": "xwayland-satellite-unstable" }, "locked": { - "lastModified": 1752078530, - "narHash": "sha256-TrRmlYdhWcadWvBpDjB9Xlry4uT4ZUIO46d+o5tjtCQ=", + "lastModified": 1754593792, + "narHash": "sha256-ufYmw5vGCUuMdLb8A4MkDKzaXUqlReu7A0wn9EbQ5do=", "owner": "sodiboo", "repo": "niri-flake", - "rev": "d231d92313192d4d0c78d6ef04167fed9dee87cf", + "rev": "e76792be7533a57d1420b9cdfe3efa4690a650f0", "type": "github" }, "original": { @@ -567,11 +568,11 @@ "niri-unstable": { "flake": false, "locked": { - "lastModified": 1750791124, - "narHash": "sha256-F5iVU/hjoSHSSe0gllxm0PcAaseEtGNanYK5Ha3k2Tg=", + "lastModified": 1754589971, + "narHash": "sha256-gu0lWJbDkHs6+V9KHXwQHtZ2Hp72FxOjy3YisJ3qj9k=", "owner": "YaLTeR", "repo": "niri", - "rev": "37458d94b288945f6cfbd3c5c233f634d59f246c", + "rev": "f74d83dccaa6e8fffb38c304dd5d1eae07b87d24", "type": "github" }, "original": { @@ -582,11 +583,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1748460289, - "narHash": "sha256-7doLyJBzCllvqX4gszYtmZUToxKvMUrg45EUWaUYmBg=", + "lastModified": 1754498491, + "narHash": "sha256-erbiH2agUTD0Z30xcVSFcDHzkRvkRXOQ3lb887bcVrs=", "owner": "nixos", "repo": "nixpkgs", - "rev": "96ec055edbe5ee227f28cdbc3f1ddf1df5965102", + "rev": "c2ae88e026f9525daf89587f3cbee584b92b6134", "type": "github" }, "original": { @@ -598,11 +599,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1751943650, - "narHash": "sha256-7orTnNqkGGru8Je6Un6mq1T8YVVU/O5kyW4+f9C1mZQ=", + "lastModified": 1754292888, + "narHash": "sha256-1ziydHSiDuSnaiPzCQh1mRFBsM2d2yRX9I+5OPGEmIE=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "88983d4b665fb491861005137ce2b11a9f89f203", + "rev": "ce01daebf8489ba97bd1609d185ea276efdeb121", "type": "github" }, "original": { @@ -612,33 +613,49 @@ "type": "github" } }, - "nixpkgs_2": { + "nixpkgs_10": { "locked": { - "lastModified": 1751792365, - "narHash": "sha256-J1kI6oAj25IG4EdVlg2hQz8NZTBNYvIS0l4wpr9KcUo=", - "owner": "nixos", + "lastModified": 1744868846, + "narHash": "sha256-5RJTdUHDmj12Qsv7XOhuospjAjATNiTMElplWnJE9Hs=", + "owner": "NixOS", "repo": "nixpkgs", - "rev": "1fd8bada0b6117e6c7eb54aad5813023eed37ccb", + "rev": "ebe4301cbd8f81c4f8d3244b3632338bbeb6d49c", "type": "github" }, "original": { - "owner": "nixos", - "ref": "nixos-unstable", + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1744536153, + "narHash": "sha256-awS2zRgF4uTwrOKwwiJcByDzDOdo3Q1rPZbiHQg/N38=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "18dd725c29603f582cf1900e0d25f9f1063dbf11", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", "repo": "nixpkgs", "type": "github" } }, "nixpkgs_3": { "locked": { - "lastModified": 1751637120, - "narHash": "sha256-xVNy/XopSfIG9c46nRmPaKfH1Gn/56vQ8++xWA8itO4=", - "owner": "NixOS", + "lastModified": 1753694789, + "narHash": "sha256-cKgvtz6fKuK1Xr5LQW/zOUiAC0oSQoA9nOISB0pJZqM=", + "owner": "nixos", "repo": "nixpkgs", - "rev": "5c724ed1388e53cc231ed98330a60eb2f7be4be3", + "rev": "dc9637876d0dcc8c9e5e22986b857632effeb727", "type": "github" }, "original": { - "owner": "NixOS", + "owner": "nixos", "ref": "nixos-unstable", "repo": "nixpkgs", "type": "github" @@ -646,11 +663,11 @@ }, "nixpkgs_4": { "locked": { - "lastModified": 1751792365, - "narHash": "sha256-J1kI6oAj25IG4EdVlg2hQz8NZTBNYvIS0l4wpr9KcUo=", + "lastModified": 1754214453, + "narHash": "sha256-Q/I2xJn/j1wpkGhWkQnm20nShYnG7TI99foDBpXm1SY=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "1fd8bada0b6117e6c7eb54aad5813023eed37ccb", + "rev": "5b09dc45f24cf32316283e62aec81ffee3c3e376", "type": "github" }, "original": { @@ -661,6 +678,22 @@ } }, "nixpkgs_5": { + "locked": { + "lastModified": 1753939845, + "narHash": "sha256-K2ViRJfdVGE8tpJejs8Qpvvejks1+A4GQej/lBk5y7I=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "94def634a20494ee057c76998843c015909d6311", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_6": { "locked": { "lastModified": 1712163089, "narHash": "sha256-Um+8kTIrC19vD4/lUCN9/cU9kcOsD1O1m+axJqQPyMM=", @@ -676,7 +709,7 @@ "type": "github" } }, - "nixpkgs_6": { + "nixpkgs_7": { "locked": { "lastModified": 1729070438, "narHash": "sha256-KOTTUfPkugH52avUvXGxvWy8ibKKj4genodIYUED+Kc=", @@ -692,13 +725,13 @@ "type": "github" } }, - "nixpkgs_7": { + "nixpkgs_8": { "locked": { - "lastModified": 1751984180, - "narHash": "sha256-LwWRsENAZJKUdD3SpLluwDmdXY9F45ZEgCb0X+xgOL0=", + "lastModified": 1754498491, + "narHash": "sha256-erbiH2agUTD0Z30xcVSFcDHzkRvkRXOQ3lb887bcVrs=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "9807714d6944a957c2e036f84b0ff8caf9930bc0", + "rev": "c2ae88e026f9525daf89587f3cbee584b92b6134", "type": "github" }, "original": { @@ -708,13 +741,13 @@ "type": "github" } }, - "nixpkgs_8": { + "nixpkgs_9": { "locked": { - "lastModified": 1751984180, - "narHash": "sha256-LwWRsENAZJKUdD3SpLluwDmdXY9F45ZEgCb0X+xgOL0=", + "lastModified": 1754498491, + "narHash": "sha256-erbiH2agUTD0Z30xcVSFcDHzkRvkRXOQ3lb887bcVrs=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "9807714d6944a957c2e036f84b0ff8caf9930bc0", + "rev": "c2ae88e026f9525daf89587f3cbee584b92b6134", "type": "github" }, "original": { @@ -723,22 +756,6 @@ "type": "indirect" } }, - "nixpkgs_9": { - "locked": { - "lastModified": 1744868846, - "narHash": "sha256-5RJTdUHDmj12Qsv7XOhuospjAjATNiTMElplWnJE9Hs=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "ebe4301cbd8f81c4f8d3244b3632338bbeb6d49c", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixpkgs-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, "pre-commit-hooks": { "inputs": { "flake-compat": "flake-compat_2", @@ -771,20 +788,38 @@ "hyprland-contrib": "hyprland-contrib", "lix-module": "lix-module", "niri": "niri", - "nixpkgs": "nixpkgs_8", + "nixpkgs": "nixpkgs_9", "sops-nix": "sops-nix" } }, + "rust-overlay": { + "inputs": { + "nixpkgs": "nixpkgs_2" + }, + "locked": { + "lastModified": 1754575663, + "narHash": "sha256-afOx8AG0KYtw7mlt6s6ahBBy7eEHZwws3iCRoiuRQS4=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "6db0fb0e9cec2e9729dc52bf4898e6c135bb8a0f", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, "sops-nix": { "inputs": { - "nixpkgs": "nixpkgs_9" + "nixpkgs": "nixpkgs_10" }, "locked": { - "lastModified": 1751606940, - "narHash": "sha256-KrDPXobG7DFKTOteqdSVeL1bMVitDcy7otpVZWDE6MA=", + "lastModified": 1754328224, + "narHash": "sha256-glPK8DF329/dXtosV7YSzRlF4n35WDjaVwdOMEoEXHA=", "owner": "Mic92", "repo": "sops-nix", - "rev": "3633fc4acf03f43b260244d94c71e9e14a2f6e0d", + "rev": "49021900e69812ba7ddb9e40f9170218a7eca9f4", "type": "github" }, "original": { @@ -851,11 +886,11 @@ ] }, "locked": { - "lastModified": 1751300244, - "narHash": "sha256-PFuv1TZVYvQhha0ac53E3YgdtmLShrN0t4T6xqHl0jE=", + "lastModified": 1753633878, + "narHash": "sha256-js2sLRtsOUA/aT10OCDaTjO80yplqwOIaLUqEe0nMx0=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "6115f3fdcb2c1a57b4a80a69f3c797e47607b90a", + "rev": "371b96bd11ad2006ed4f21229dbd1be69bed3e8a", "type": "github" }, "original": { @@ -884,11 +919,11 @@ "xwayland-satellite-unstable": { "flake": false, "locked": { - "lastModified": 1751228685, - "narHash": "sha256-MENtauGBhJ+kDeFaawvWGXaFG3Il6qQzjaP0RmtfM0k=", + "lastModified": 1754533920, + "narHash": "sha256-fCZ68Yud1sUCq6UNXj0SDyiBgVA8gJUE+14ZFGsFJG8=", "owner": "Supreeeme", "repo": "xwayland-satellite", - "rev": "557ebeb616e03d5e4a8049862bbbd1f02c6f020b", + "rev": "e0d1dad25a158551ab58547b2ece4b7d5a19929c", "type": "github" }, "original": { From 275c8db081728cebc5c57a6ceabb397ab9ba1a1b Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 7 Aug 2025 21:06:20 -0700 Subject: [PATCH 350/412] Flake update 2025-08-07 --- flake.lock | 261 ++++++++++++++++++++++++++++++----------------------- 1 file changed, 148 insertions(+), 113 deletions(-) diff --git a/flake.lock b/flake.lock index a51df4d..b2c06f6 100644 --- a/flake.lock +++ b/flake.lock @@ -3,14 +3,15 @@ "aagl": { "inputs": { "flake-compat": "flake-compat", - "nixpkgs": "nixpkgs" + "nixpkgs": "nixpkgs", + "rust-overlay": "rust-overlay" }, "locked": { - "lastModified": 1750597689, - "narHash": "sha256-3ComII0BkmdohISrshICQiAB6TU+VHHIRnWK0ckA0/s=", + "lastModified": 1754582951, + "narHash": "sha256-QivorP/1+7P4O6oEdrs6RFo9PptbX6ajBdvYifhzJc0=", "owner": "ezKEa", "repo": "aagl-gtk-on-nix", - "rev": "ec2ec4ec3f908ed9b125ea4afd52627bed60f183", + "rev": "13cb81238ebbd0eeddb465c962413a0f795baa44", "type": "github" }, "original": { @@ -23,14 +24,14 @@ "inputs": { "astal": "astal", "gnim": "gnim", - "nixpkgs": "nixpkgs_2" + "nixpkgs": "nixpkgs_3" }, "locked": { - "lastModified": 1751930350, - "narHash": "sha256-hBIrzyrwG3XjeNyzVNWKDX+yYVlpwAqf9ovgF7qecug=", + "lastModified": 1754487835, + "narHash": "sha256-GRCkm7a1odlN3hHR1iBIxwmBPWAw1CDOnOdpmZGSKkQ=", "owner": "Aylur", "repo": "ags", - "rev": "22f37ccb0db58d9d8a11ad0054ab20ecfad005ad", + "rev": "8e91fcd52b807f576a794ccc9533bdf720ef5af7", "type": "github" }, "original": { @@ -59,11 +60,11 @@ ] }, "locked": { - "lastModified": 1751740947, - "narHash": "sha256-35040CHH7P3JGmhGVfEb2oJHL/A5mI2IXumhkxrBnao=", + "lastModified": 1753216019, + "narHash": "sha256-zik7WISrR1ks2l6T1MZqZHb/OqroHdJnSnAehkE0kCk=", "owner": "hyprwm", "repo": "aquamarine", - "rev": "dfc1db15a08c4cd234288f66e1199c653495301f", + "rev": "be166e11d86ba4186db93e10c54a141058bdce49", "type": "github" }, "original": { @@ -80,11 +81,11 @@ ] }, "locked": { - "lastModified": 1751126708, - "narHash": "sha256-AodIKw7TmI7rHVcOfEsO82stupMYIMVQeLAUQfVxnkU=", + "lastModified": 1752404970, + "narHash": "sha256-XULTToDUkIshNXEO+YP2mAHdQv8bxWDvKjbamBfOC8E=", "owner": "aylur", "repo": "astal", - "rev": "ac90f09385a2295da9fdc108aaba4a317aaeacc7", + "rev": "2c5eb54f39e1710c6e2c80915a240978beb3269a", "type": "github" }, "original": { @@ -183,11 +184,11 @@ "gnim": { "flake": false, "locked": { - "lastModified": 1751928958, - "narHash": "sha256-vQY2L+Hnp6F1MHFa3UbMft1goGw3iODI5M+96Z7P+9Q=", + "lastModified": 1753090800, + "narHash": "sha256-6sS6KHong2cMGn+6xJwjiizZzwu2XUmp++DtiKZhFMU=", "owner": "aylur", "repo": "gnim", - "rev": "9bffa83f52f711b13e3c139454623a9aea4f5552", + "rev": "2f58f8444c4cb8fefeab7a9901a33e99cfa92457", "type": "github" }, "original": { @@ -198,14 +199,14 @@ }, "home-manager": { "inputs": { - "nixpkgs": "nixpkgs_3" + "nixpkgs": "nixpkgs_4" }, "locked": { - "lastModified": 1752093218, - "narHash": "sha256-+3rXu8ewcNDi65/2mKkdSGrivQs5zEZVp5aYszXC0d0=", + "lastModified": 1754613544, + "narHash": "sha256-ueR1mGX4I4DWfDRRxxMphbKDNisDeMPMusN72VV1+cc=", "owner": "nix-community", "repo": "home-manager", - "rev": "206ed3c71418b52e176f16f58805c96e84555320", + "rev": "cc2fa2331aebf9661d22bb507d362b39852ac73f", "type": "github" }, "original": { @@ -230,11 +231,11 @@ ] }, "locked": { - "lastModified": 1749155331, - "narHash": "sha256-XR9fsI0zwLiFWfqi/pdS/VD+YNorKb3XIykgTg4l1nA=", + "lastModified": 1753964049, + "narHash": "sha256-lIqabfBY7z/OANxHoPeIrDJrFyYy9jAM4GQLzZ2feCM=", "owner": "hyprwm", "repo": "hyprcursor", - "rev": "45fcc10b4c282746d93ec406a740c43b48b4ef80", + "rev": "44e91d467bdad8dcf8bbd2ac7cf49972540980a5", "type": "github" }, "original": { @@ -259,11 +260,11 @@ ] }, "locked": { - "lastModified": 1751808145, - "narHash": "sha256-OXgL0XaKMmfX2rRQkt9SkJw+QNfv0jExlySt1D6O72g=", + "lastModified": 1752149140, + "narHash": "sha256-gbh1HL98Fdqu0jJIWN4OJQN7Kkth7+rbkFpSZLm/62A=", "owner": "hyprwm", "repo": "hyprgraphics", - "rev": "b841473a0bd4a1a74a0b64f1ec2ab199035c349f", + "rev": "340494a38b5ec453dfc542c6226481f736cc8a9a", "type": "github" }, "original": { @@ -282,17 +283,17 @@ "hyprlang": "hyprlang", "hyprutils": "hyprutils", "hyprwayland-scanner": "hyprwayland-scanner", - "nixpkgs": "nixpkgs_4", + "nixpkgs": "nixpkgs_5", "pre-commit-hooks": "pre-commit-hooks", "systems": "systems", "xdph": "xdph" }, "locked": { - "lastModified": 1752149340, - "narHash": "sha256-DJc2ROpttbP6FHcXwWpmK7EB2cpVsP/LmXjEr8RWcO8=", + "lastModified": 1754583328, + "narHash": "sha256-UyM03UZbu5MMil/iz1dSQv1BlfmzlfGdAZcE9ZV5DwY=", "ref": "refs/heads/main", - "rev": "b5433bb75324a95dd27eb5492141565466c2cdd6", - "revCount": 6265, + "rev": "afbd8796859775a50687daacb254cdd1ba22328f", + "revCount": 6354, "type": "git", "url": "https://github.com/hyprwm/Hyprland" }, @@ -303,14 +304,14 @@ }, "hyprland-contrib": { "inputs": { - "nixpkgs": "nixpkgs_5" + "nixpkgs": "nixpkgs_6" }, "locked": { - "lastModified": 1752069516, - "narHash": "sha256-dyzDJvt8IVgHJVmpnw1mueHHSLYnChW1XMkwz9WUBZ8=", + "lastModified": 1753252360, + "narHash": "sha256-PFAJoEqQWMlo1J+yZb+4HixmhbRVmmNl58e/AkLYDDI=", "owner": "hyprwm", "repo": "contrib", - "rev": "34d0c01910552b873a07c96921ef70e32bf369a2", + "rev": "6839b23345b71db17cd408373de4f5605bf589b8", "type": "github" }, "original": { @@ -399,11 +400,11 @@ ] }, "locked": { - "lastModified": 1750371812, - "narHash": "sha256-D868K1dVEACw17elVxRgXC6hOxY+54wIEjURztDWLk8=", + "lastModified": 1753819801, + "narHash": "sha256-tHe6XeNeVeKapkNM3tcjW4RuD+tB2iwwoogWJOtsqTI=", "owner": "hyprwm", "repo": "hyprland-qtutils", - "rev": "b13c7481e37856f322177010bdf75fccacd1adc8", + "rev": "b308a818b9dcaa7ab8ccab891c1b84ebde2152bc", "type": "github" }, "original": { @@ -428,11 +429,11 @@ ] }, "locked": { - "lastModified": 1750371198, - "narHash": "sha256-/iuJ1paQOBoSLqHflRNNGyroqfF/yvPNurxzcCT0cAE=", + "lastModified": 1753622892, + "narHash": "sha256-0K+A+gmOI8IklSg5It1nyRNv0kCNL51duwnhUO/B8JA=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "cee01452bca58d6cadb3224e21e370de8bc20f0b", + "rev": "23f0debd2003f17bd65f851cd3f930cff8a8c809", "type": "github" }, "original": { @@ -453,11 +454,11 @@ ] }, "locked": { - "lastModified": 1751888065, - "narHash": "sha256-F2SV9WGqgtRsXIdUrl3sRe0wXlQD+kRRZcSfbepjPJY=", + "lastModified": 1753800567, + "narHash": "sha256-W0xgXsaqGa/5/7IBzKNhf0+23MqGPymYYfqT7ECqeTE=", "owner": "hyprwm", "repo": "hyprutils", - "rev": "a8229739cf36d159001cfc203871917b83fdf917", + "rev": "c65d41d4f4e6ded6fdb9d508a73e2fe90e55cdf7", "type": "github" }, "original": { @@ -478,11 +479,11 @@ ] }, "locked": { - "lastModified": 1751881472, - "narHash": "sha256-meB0SnXbwIe2trD041MLKEv6R7NZ759QwBcVIhlSBfE=", + "lastModified": 1751897909, + "narHash": "sha256-FnhBENxihITZldThvbO7883PdXC/2dzW4eiNvtoV5Ao=", "owner": "hyprwm", "repo": "hyprwayland-scanner", - "rev": "8fb426b3e5452fd9169453fd6c10f8c14ca37120", + "rev": "fcca0c61f988a9d092cbb33e906775014c61579d", "type": "github" }, "original": { @@ -510,7 +511,7 @@ "flake-utils": "flake-utils", "flakey-profile": "flakey-profile", "lix": "lix", - "nixpkgs": "nixpkgs_6" + "nixpkgs": "nixpkgs_7" }, "locked": { "lastModified": 1732605668, @@ -528,17 +529,17 @@ "inputs": { "niri-stable": "niri-stable", "niri-unstable": "niri-unstable", - "nixpkgs": "nixpkgs_7", + "nixpkgs": "nixpkgs_8", "nixpkgs-stable": "nixpkgs-stable", "xwayland-satellite-stable": "xwayland-satellite-stable", "xwayland-satellite-unstable": "xwayland-satellite-unstable" }, "locked": { - "lastModified": 1752078530, - "narHash": "sha256-TrRmlYdhWcadWvBpDjB9Xlry4uT4ZUIO46d+o5tjtCQ=", + "lastModified": 1754593792, + "narHash": "sha256-ufYmw5vGCUuMdLb8A4MkDKzaXUqlReu7A0wn9EbQ5do=", "owner": "sodiboo", "repo": "niri-flake", - "rev": "d231d92313192d4d0c78d6ef04167fed9dee87cf", + "rev": "e76792be7533a57d1420b9cdfe3efa4690a650f0", "type": "github" }, "original": { @@ -567,11 +568,11 @@ "niri-unstable": { "flake": false, "locked": { - "lastModified": 1750791124, - "narHash": "sha256-F5iVU/hjoSHSSe0gllxm0PcAaseEtGNanYK5Ha3k2Tg=", + "lastModified": 1754589971, + "narHash": "sha256-gu0lWJbDkHs6+V9KHXwQHtZ2Hp72FxOjy3YisJ3qj9k=", "owner": "YaLTeR", "repo": "niri", - "rev": "37458d94b288945f6cfbd3c5c233f634d59f246c", + "rev": "f74d83dccaa6e8fffb38c304dd5d1eae07b87d24", "type": "github" }, "original": { @@ -582,11 +583,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1748460289, - "narHash": "sha256-7doLyJBzCllvqX4gszYtmZUToxKvMUrg45EUWaUYmBg=", + "lastModified": 1754498491, + "narHash": "sha256-erbiH2agUTD0Z30xcVSFcDHzkRvkRXOQ3lb887bcVrs=", "owner": "nixos", "repo": "nixpkgs", - "rev": "96ec055edbe5ee227f28cdbc3f1ddf1df5965102", + "rev": "c2ae88e026f9525daf89587f3cbee584b92b6134", "type": "github" }, "original": { @@ -598,11 +599,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1751943650, - "narHash": "sha256-7orTnNqkGGru8Je6Un6mq1T8YVVU/O5kyW4+f9C1mZQ=", + "lastModified": 1754292888, + "narHash": "sha256-1ziydHSiDuSnaiPzCQh1mRFBsM2d2yRX9I+5OPGEmIE=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "88983d4b665fb491861005137ce2b11a9f89f203", + "rev": "ce01daebf8489ba97bd1609d185ea276efdeb121", "type": "github" }, "original": { @@ -612,33 +613,49 @@ "type": "github" } }, - "nixpkgs_2": { + "nixpkgs_10": { "locked": { - "lastModified": 1751792365, - "narHash": "sha256-J1kI6oAj25IG4EdVlg2hQz8NZTBNYvIS0l4wpr9KcUo=", - "owner": "nixos", + "lastModified": 1744868846, + "narHash": "sha256-5RJTdUHDmj12Qsv7XOhuospjAjATNiTMElplWnJE9Hs=", + "owner": "NixOS", "repo": "nixpkgs", - "rev": "1fd8bada0b6117e6c7eb54aad5813023eed37ccb", + "rev": "ebe4301cbd8f81c4f8d3244b3632338bbeb6d49c", "type": "github" }, "original": { - "owner": "nixos", - "ref": "nixos-unstable", + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1744536153, + "narHash": "sha256-awS2zRgF4uTwrOKwwiJcByDzDOdo3Q1rPZbiHQg/N38=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "18dd725c29603f582cf1900e0d25f9f1063dbf11", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", "repo": "nixpkgs", "type": "github" } }, "nixpkgs_3": { "locked": { - "lastModified": 1751637120, - "narHash": "sha256-xVNy/XopSfIG9c46nRmPaKfH1Gn/56vQ8++xWA8itO4=", - "owner": "NixOS", + "lastModified": 1753694789, + "narHash": "sha256-cKgvtz6fKuK1Xr5LQW/zOUiAC0oSQoA9nOISB0pJZqM=", + "owner": "nixos", "repo": "nixpkgs", - "rev": "5c724ed1388e53cc231ed98330a60eb2f7be4be3", + "rev": "dc9637876d0dcc8c9e5e22986b857632effeb727", "type": "github" }, "original": { - "owner": "NixOS", + "owner": "nixos", "ref": "nixos-unstable", "repo": "nixpkgs", "type": "github" @@ -646,11 +663,11 @@ }, "nixpkgs_4": { "locked": { - "lastModified": 1751792365, - "narHash": "sha256-J1kI6oAj25IG4EdVlg2hQz8NZTBNYvIS0l4wpr9KcUo=", + "lastModified": 1754214453, + "narHash": "sha256-Q/I2xJn/j1wpkGhWkQnm20nShYnG7TI99foDBpXm1SY=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "1fd8bada0b6117e6c7eb54aad5813023eed37ccb", + "rev": "5b09dc45f24cf32316283e62aec81ffee3c3e376", "type": "github" }, "original": { @@ -661,6 +678,22 @@ } }, "nixpkgs_5": { + "locked": { + "lastModified": 1753939845, + "narHash": "sha256-K2ViRJfdVGE8tpJejs8Qpvvejks1+A4GQej/lBk5y7I=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "94def634a20494ee057c76998843c015909d6311", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_6": { "locked": { "lastModified": 1712163089, "narHash": "sha256-Um+8kTIrC19vD4/lUCN9/cU9kcOsD1O1m+axJqQPyMM=", @@ -676,7 +709,7 @@ "type": "github" } }, - "nixpkgs_6": { + "nixpkgs_7": { "locked": { "lastModified": 1729070438, "narHash": "sha256-KOTTUfPkugH52avUvXGxvWy8ibKKj4genodIYUED+Kc=", @@ -692,13 +725,13 @@ "type": "github" } }, - "nixpkgs_7": { + "nixpkgs_8": { "locked": { - "lastModified": 1751984180, - "narHash": "sha256-LwWRsENAZJKUdD3SpLluwDmdXY9F45ZEgCb0X+xgOL0=", + "lastModified": 1754498491, + "narHash": "sha256-erbiH2agUTD0Z30xcVSFcDHzkRvkRXOQ3lb887bcVrs=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "9807714d6944a957c2e036f84b0ff8caf9930bc0", + "rev": "c2ae88e026f9525daf89587f3cbee584b92b6134", "type": "github" }, "original": { @@ -708,13 +741,13 @@ "type": "github" } }, - "nixpkgs_8": { + "nixpkgs_9": { "locked": { - "lastModified": 1751984180, - "narHash": "sha256-LwWRsENAZJKUdD3SpLluwDmdXY9F45ZEgCb0X+xgOL0=", + "lastModified": 1754498491, + "narHash": "sha256-erbiH2agUTD0Z30xcVSFcDHzkRvkRXOQ3lb887bcVrs=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "9807714d6944a957c2e036f84b0ff8caf9930bc0", + "rev": "c2ae88e026f9525daf89587f3cbee584b92b6134", "type": "github" }, "original": { @@ -723,22 +756,6 @@ "type": "indirect" } }, - "nixpkgs_9": { - "locked": { - "lastModified": 1744868846, - "narHash": "sha256-5RJTdUHDmj12Qsv7XOhuospjAjATNiTMElplWnJE9Hs=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "ebe4301cbd8f81c4f8d3244b3632338bbeb6d49c", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixpkgs-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, "pre-commit-hooks": { "inputs": { "flake-compat": "flake-compat_2", @@ -771,20 +788,38 @@ "hyprland-contrib": "hyprland-contrib", "lix-module": "lix-module", "niri": "niri", - "nixpkgs": "nixpkgs_8", + "nixpkgs": "nixpkgs_9", "sops-nix": "sops-nix" } }, + "rust-overlay": { + "inputs": { + "nixpkgs": "nixpkgs_2" + }, + "locked": { + "lastModified": 1754575663, + "narHash": "sha256-afOx8AG0KYtw7mlt6s6ahBBy7eEHZwws3iCRoiuRQS4=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "6db0fb0e9cec2e9729dc52bf4898e6c135bb8a0f", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, "sops-nix": { "inputs": { - "nixpkgs": "nixpkgs_9" + "nixpkgs": "nixpkgs_10" }, "locked": { - "lastModified": 1751606940, - "narHash": "sha256-KrDPXobG7DFKTOteqdSVeL1bMVitDcy7otpVZWDE6MA=", + "lastModified": 1754328224, + "narHash": "sha256-glPK8DF329/dXtosV7YSzRlF4n35WDjaVwdOMEoEXHA=", "owner": "Mic92", "repo": "sops-nix", - "rev": "3633fc4acf03f43b260244d94c71e9e14a2f6e0d", + "rev": "49021900e69812ba7ddb9e40f9170218a7eca9f4", "type": "github" }, "original": { @@ -851,11 +886,11 @@ ] }, "locked": { - "lastModified": 1751300244, - "narHash": "sha256-PFuv1TZVYvQhha0ac53E3YgdtmLShrN0t4T6xqHl0jE=", + "lastModified": 1753633878, + "narHash": "sha256-js2sLRtsOUA/aT10OCDaTjO80yplqwOIaLUqEe0nMx0=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "6115f3fdcb2c1a57b4a80a69f3c797e47607b90a", + "rev": "371b96bd11ad2006ed4f21229dbd1be69bed3e8a", "type": "github" }, "original": { @@ -884,11 +919,11 @@ "xwayland-satellite-unstable": { "flake": false, "locked": { - "lastModified": 1751228685, - "narHash": "sha256-MENtauGBhJ+kDeFaawvWGXaFG3Il6qQzjaP0RmtfM0k=", + "lastModified": 1754533920, + "narHash": "sha256-fCZ68Yud1sUCq6UNXj0SDyiBgVA8gJUE+14ZFGsFJG8=", "owner": "Supreeeme", "repo": "xwayland-satellite", - "rev": "557ebeb616e03d5e4a8049862bbbd1f02c6f020b", + "rev": "e0d1dad25a158551ab58547b2ece4b7d5a19929c", "type": "github" }, "original": { From 991c4aae0a71b2f8fe4f2458e5ebddad34ae4233 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 11 Aug 2025 09:15:01 -0700 Subject: [PATCH 351/412] Syncthing, add kobayashi to wiki --- hosts/juri/host.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hosts/juri/host.nix b/hosts/juri/host.nix index be01321..f7a1ab2 100644 --- a/hosts/juri/host.nix +++ b/hosts/juri/host.nix @@ -70,12 +70,13 @@ in { devices = { "homura".id = "NEP24DB-DVXAHTZ-TCCNREQ-Q5TSC7K-ZXPWC4L-5ELGKQX-4I2P47O-2FT5QAU"; "onizuka".id = "5S6QMND-MHD2HYR-DR6KQD4-6AWJTRL-FQUCR7W-FD2KBT3-AF6RE6R-F47KBQC"; + "kobayashi".id = "4JPJHO4-RZHZZYE-ZUDFCZ4-KLBTMLJ-CNZBWWB-NTESYNA-X3EDAZ6-OMKHQAT"; }; folders = { "wiki" = { path = "/var/lib/wiki"; - devices = [ "homura" "onizuka" ]; + devices = [ "homura" "onizuka" "kobayashi" ]; }; }; }; From a89ad00002ffdc33c9922dbfb0bff57f38f01aa2 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 11 Aug 2025 09:15:01 -0700 Subject: [PATCH 352/412] Syncthing, add kobayashi to wiki --- hosts/juri/host.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hosts/juri/host.nix b/hosts/juri/host.nix index be01321..f7a1ab2 100644 --- a/hosts/juri/host.nix +++ b/hosts/juri/host.nix @@ -70,12 +70,13 @@ in { devices = { "homura".id = "NEP24DB-DVXAHTZ-TCCNREQ-Q5TSC7K-ZXPWC4L-5ELGKQX-4I2P47O-2FT5QAU"; "onizuka".id = "5S6QMND-MHD2HYR-DR6KQD4-6AWJTRL-FQUCR7W-FD2KBT3-AF6RE6R-F47KBQC"; + "kobayashi".id = "4JPJHO4-RZHZZYE-ZUDFCZ4-KLBTMLJ-CNZBWWB-NTESYNA-X3EDAZ6-OMKHQAT"; }; folders = { "wiki" = { path = "/var/lib/wiki"; - devices = [ "homura" "onizuka" ]; + devices = [ "homura" "onizuka" "kobayashi" ]; }; }; }; From 78a0ccb71a424c8061dbc69825b27a99b33adef2 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Fri, 5 Sep 2025 20:31:36 -0700 Subject: [PATCH 353/412] Flake update 2025-09-05 --- flake.lock | 173 ++++++++++++++++++++++++----------------------------- 1 file changed, 78 insertions(+), 95 deletions(-) diff --git a/flake.lock b/flake.lock index b2c06f6..d6589ec 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ "rust-overlay": "rust-overlay" }, "locked": { - "lastModified": 1754582951, - "narHash": "sha256-QivorP/1+7P4O6oEdrs6RFo9PptbX6ajBdvYifhzJc0=", + "lastModified": 1755609725, + "narHash": "sha256-r0Y5VDxpiA1AJy02VkmeCNudZ8/JJR1OP3ldtfce0ls=", "owner": "ezKEa", "repo": "aagl-gtk-on-nix", - "rev": "13cb81238ebbd0eeddb465c962413a0f795baa44", + "rev": "7566a0bcc55dbfaeb28791c06aa02060cf5bd0bf", "type": "github" }, "original": { @@ -23,15 +23,14 @@ "ags": { "inputs": { "astal": "astal", - "gnim": "gnim", "nixpkgs": "nixpkgs_3" }, "locked": { - "lastModified": 1754487835, - "narHash": "sha256-GRCkm7a1odlN3hHR1iBIxwmBPWAw1CDOnOdpmZGSKkQ=", + "lastModified": 1756679577, + "narHash": "sha256-pkfftqE2CxVN6nKDZvlNdBxIkb/x5ch4wVfwZMYNGCM=", "owner": "Aylur", "repo": "ags", - "rev": "8e91fcd52b807f576a794ccc9533bdf720ef5af7", + "rev": "04d51ac4082af3ec47e8a803417a1a55b75151d7", "type": "github" }, "original": { @@ -60,11 +59,11 @@ ] }, "locked": { - "lastModified": 1753216019, - "narHash": "sha256-zik7WISrR1ks2l6T1MZqZHb/OqroHdJnSnAehkE0kCk=", + "lastModified": 1755946532, + "narHash": "sha256-POePremlUY5GyA1zfbtic6XLxDaQcqHN6l+bIxdT5gc=", "owner": "hyprwm", "repo": "aquamarine", - "rev": "be166e11d86ba4186db93e10c54a141058bdce49", + "rev": "81584dae2df6ac79f6b6dae0ecb7705e95129ada", "type": "github" }, "original": { @@ -81,11 +80,11 @@ ] }, "locked": { - "lastModified": 1752404970, - "narHash": "sha256-XULTToDUkIshNXEO+YP2mAHdQv8bxWDvKjbamBfOC8E=", + "lastModified": 1756474652, + "narHash": "sha256-iiBU6itpEqE0spXeNJ3uJTfioSyKYjt5bNepykpDXTE=", "owner": "aylur", "repo": "astal", - "rev": "2c5eb54f39e1710c6e2c80915a240978beb3269a", + "rev": "20bd8318e4136fbd3d4eb2d64dbabc3acbc915dd", "type": "github" }, "original": { @@ -113,11 +112,11 @@ "flake-compat_2": { "flake": false, "locked": { - "lastModified": 1696426674, - "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "lastModified": 1747046372, + "narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=", "owner": "edolstra", "repo": "flake-compat", - "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885", "type": "github" }, "original": { @@ -181,32 +180,16 @@ "type": "github" } }, - "gnim": { - "flake": false, - "locked": { - "lastModified": 1753090800, - "narHash": "sha256-6sS6KHong2cMGn+6xJwjiizZzwu2XUmp++DtiKZhFMU=", - "owner": "aylur", - "repo": "gnim", - "rev": "2f58f8444c4cb8fefeab7a9901a33e99cfa92457", - "type": "github" - }, - "original": { - "owner": "aylur", - "repo": "gnim", - "type": "github" - } - }, "home-manager": { "inputs": { "nixpkgs": "nixpkgs_4" }, "locked": { - "lastModified": 1754613544, - "narHash": "sha256-ueR1mGX4I4DWfDRRxxMphbKDNisDeMPMusN72VV1+cc=", + "lastModified": 1757075491, + "narHash": "sha256-a+NMGl5tcvm+hyfSG2DlVPa8nZLpsumuRj1FfcKb2mQ=", "owner": "nix-community", "repo": "home-manager", - "rev": "cc2fa2331aebf9661d22bb507d362b39852ac73f", + "rev": "f56bf065f9abedc7bc15e1f2454aa5c8edabaacf", "type": "github" }, "original": { @@ -260,11 +243,11 @@ ] }, "locked": { - "lastModified": 1752149140, - "narHash": "sha256-gbh1HL98Fdqu0jJIWN4OJQN7Kkth7+rbkFpSZLm/62A=", + "lastModified": 1755678602, + "narHash": "sha256-uEC5O/NIUNs1zmc1aH1+G3GRACbODjk2iS0ET5hXtuk=", "owner": "hyprwm", "repo": "hyprgraphics", - "rev": "340494a38b5ec453dfc542c6226481f736cc8a9a", + "rev": "157cc52065a104fc3b8fa542ae648b992421d1c7", "type": "github" }, "original": { @@ -289,11 +272,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1754583328, - "narHash": "sha256-UyM03UZbu5MMil/iz1dSQv1BlfmzlfGdAZcE9ZV5DwY=", + "lastModified": 1756977414, + "narHash": "sha256-Hz5S4fILpYd1smWDZ+uLYjHgW22v6JS/04j15I4cFZE=", "ref": "refs/heads/main", - "rev": "afbd8796859775a50687daacb254cdd1ba22328f", - "revCount": 6354, + "rev": "4e785d12a91117cd5b255052799d1a051d9976c0", + "revCount": 6409, "type": "git", "url": "https://github.com/hyprwm/Hyprland" }, @@ -307,11 +290,11 @@ "nixpkgs": "nixpkgs_6" }, "locked": { - "lastModified": 1753252360, - "narHash": "sha256-PFAJoEqQWMlo1J+yZb+4HixmhbRVmmNl58e/AkLYDDI=", + "lastModified": 1755680610, + "narHash": "sha256-g7/g5o0spemkZCzPa8I21RgCmN0Kv41B5z9Z5HQWraY=", "owner": "hyprwm", "repo": "contrib", - "rev": "6839b23345b71db17cd408373de4f5605bf589b8", + "rev": "04721247f417256ca96acf28cdfe946cf1006263", "type": "github" }, "original": { @@ -454,11 +437,11 @@ ] }, "locked": { - "lastModified": 1753800567, - "narHash": "sha256-W0xgXsaqGa/5/7IBzKNhf0+23MqGPymYYfqT7ECqeTE=", + "lastModified": 1756117388, + "narHash": "sha256-oRDel6pNl/T2tI+nc/USU9ZP9w08dxtl7hiZxa0C/Wc=", "owner": "hyprwm", "repo": "hyprutils", - "rev": "c65d41d4f4e6ded6fdb9d508a73e2fe90e55cdf7", + "rev": "b2ae3204845f5f2f79b4703b441252d8ad2ecfd0", "type": "github" }, "original": { @@ -479,11 +462,11 @@ ] }, "locked": { - "lastModified": 1751897909, - "narHash": "sha256-FnhBENxihITZldThvbO7883PdXC/2dzW4eiNvtoV5Ao=", + "lastModified": 1755184602, + "narHash": "sha256-RCBQN8xuADB0LEgaKbfRqwm6CdyopE1xIEhNc67FAbw=", "owner": "hyprwm", "repo": "hyprwayland-scanner", - "rev": "fcca0c61f988a9d092cbb33e906775014c61579d", + "rev": "b3b0f1f40ae09d4447c20608e5a4faf8bf3c492d", "type": "github" }, "original": { @@ -535,11 +518,11 @@ "xwayland-satellite-unstable": "xwayland-satellite-unstable" }, "locked": { - "lastModified": 1754593792, - "narHash": "sha256-ufYmw5vGCUuMdLb8A4MkDKzaXUqlReu7A0wn9EbQ5do=", + "lastModified": 1757071535, + "narHash": "sha256-I3ppQKxd2oxQfwMCW04TSWnIwp5an5kTMY+tx0W8jaA=", "owner": "sodiboo", "repo": "niri-flake", - "rev": "e76792be7533a57d1420b9cdfe3efa4690a650f0", + "rev": "efa08fc58d7da5be64cfebc52b7dc44bf8d19ba9", "type": "github" }, "original": { @@ -551,16 +534,16 @@ "niri-stable": { "flake": false, "locked": { - "lastModified": 1748151941, - "narHash": "sha256-z4viQZLgC2bIJ3VrzQnR+q2F3gAOEQpU1H5xHtX/2fs=", + "lastModified": 1756556321, + "narHash": "sha256-RLD89dfjN0RVO86C/Mot0T7aduCygPGaYbog566F0Qo=", "owner": "YaLTeR", "repo": "niri", - "rev": "8ba57fcf25d2fc9565131684a839d58703f1dae7", + "rev": "01be0e65f4eb91a9cd624ac0b76aaeab765c7294", "type": "github" }, "original": { "owner": "YaLTeR", - "ref": "v25.05.1", + "ref": "v25.08", "repo": "niri", "type": "github" } @@ -568,11 +551,11 @@ "niri-unstable": { "flake": false, "locked": { - "lastModified": 1754589971, - "narHash": "sha256-gu0lWJbDkHs6+V9KHXwQHtZ2Hp72FxOjy3YisJ3qj9k=", + "lastModified": 1756926064, + "narHash": "sha256-5/1vyFRLvJWxhBgpPaV2orC0pjSgIny6JM6+joLyZok=", "owner": "YaLTeR", "repo": "niri", - "rev": "f74d83dccaa6e8fffb38c304dd5d1eae07b87d24", + "rev": "c69464c1288789020d9a086f86c970a7dc49b8c7", "type": "github" }, "original": { @@ -599,11 +582,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1754292888, - "narHash": "sha256-1ziydHSiDuSnaiPzCQh1mRFBsM2d2yRX9I+5OPGEmIE=", + "lastModified": 1757020766, + "narHash": "sha256-PLoSjHRa2bUbi1x9HoXgTx2AiuzNXs54c8omhadyvp0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "ce01daebf8489ba97bd1609d185ea276efdeb121", + "rev": "fe83bbdde2ccdc2cb9573aa846abe8363f79a97a", "type": "github" }, "original": { @@ -647,11 +630,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1753694789, - "narHash": "sha256-cKgvtz6fKuK1Xr5LQW/zOUiAC0oSQoA9nOISB0pJZqM=", + "lastModified": 1756542300, + "narHash": "sha256-tlOn88coG5fzdyqz6R93SQL5Gpq+m/DsWpekNFhqPQk=", "owner": "nixos", "repo": "nixpkgs", - "rev": "dc9637876d0dcc8c9e5e22986b857632effeb727", + "rev": "d7600c775f877cd87b4f5a831c28aa94137377aa", "type": "github" }, "original": { @@ -663,11 +646,11 @@ }, "nixpkgs_4": { "locked": { - "lastModified": 1754214453, - "narHash": "sha256-Q/I2xJn/j1wpkGhWkQnm20nShYnG7TI99foDBpXm1SY=", + "lastModified": 1756542300, + "narHash": "sha256-tlOn88coG5fzdyqz6R93SQL5Gpq+m/DsWpekNFhqPQk=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "5b09dc45f24cf32316283e62aec81ffee3c3e376", + "rev": "d7600c775f877cd87b4f5a831c28aa94137377aa", "type": "github" }, "original": { @@ -679,11 +662,11 @@ }, "nixpkgs_5": { "locked": { - "lastModified": 1753939845, - "narHash": "sha256-K2ViRJfdVGE8tpJejs8Qpvvejks1+A4GQej/lBk5y7I=", + "lastModified": 1756266583, + "narHash": "sha256-cr748nSmpfvnhqSXPiCfUPxRz2FJnvf/RjJGvFfaCsM=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "94def634a20494ee057c76998843c015909d6311", + "rev": "8a6d5427d99ec71c64f0b93d45778c889005d9c2", "type": "github" }, "original": { @@ -727,11 +710,11 @@ }, "nixpkgs_8": { "locked": { - "lastModified": 1754498491, - "narHash": "sha256-erbiH2agUTD0Z30xcVSFcDHzkRvkRXOQ3lb887bcVrs=", + "lastModified": 1756787288, + "narHash": "sha256-rw/PHa1cqiePdBxhF66V7R+WAP8WekQ0mCDG4CFqT8Y=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "c2ae88e026f9525daf89587f3cbee584b92b6134", + "rev": "d0fc30899600b9b3466ddb260fd83deb486c32f1", "type": "github" }, "original": { @@ -743,11 +726,11 @@ }, "nixpkgs_9": { "locked": { - "lastModified": 1754498491, - "narHash": "sha256-erbiH2agUTD0Z30xcVSFcDHzkRvkRXOQ3lb887bcVrs=", + "lastModified": 1756787288, + "narHash": "sha256-rw/PHa1cqiePdBxhF66V7R+WAP8WekQ0mCDG4CFqT8Y=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "c2ae88e026f9525daf89587f3cbee584b92b6134", + "rev": "d0fc30899600b9b3466ddb260fd83deb486c32f1", "type": "github" }, "original": { @@ -766,11 +749,11 @@ ] }, "locked": { - "lastModified": 1750779888, - "narHash": "sha256-wibppH3g/E2lxU43ZQHC5yA/7kIKLGxVEnsnVK1BtRg=", + "lastModified": 1755960406, + "narHash": "sha256-RF7j6C1TmSTK9tYWO6CdEMtg6XZaUKcvZwOCD2SICZs=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "16ec914f6fb6f599ce988427d9d94efddf25fe6d", + "rev": "e891a93b193fcaf2fc8012d890dc7f0befe86ec2", "type": "github" }, "original": { @@ -815,11 +798,11 @@ "nixpkgs": "nixpkgs_10" }, "locked": { - "lastModified": 1754328224, - "narHash": "sha256-glPK8DF329/dXtosV7YSzRlF4n35WDjaVwdOMEoEXHA=", + "lastModified": 1754988908, + "narHash": "sha256-t+voe2961vCgrzPFtZxha0/kmFSHFobzF00sT8p9h0U=", "owner": "Mic92", "repo": "sops-nix", - "rev": "49021900e69812ba7ddb9e40f9170218a7eca9f4", + "rev": "3223c7a92724b5d804e9988c6b447a0d09017d48", "type": "github" }, "original": { @@ -886,11 +869,11 @@ ] }, "locked": { - "lastModified": 1753633878, - "narHash": "sha256-js2sLRtsOUA/aT10OCDaTjO80yplqwOIaLUqEe0nMx0=", + "lastModified": 1755354946, + "narHash": "sha256-zdov5f/GcoLQc9qYIS1dUTqtJMeDqmBmo59PAxze6e4=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "371b96bd11ad2006ed4f21229dbd1be69bed3e8a", + "rev": "a10726d6a8d0ef1a0c645378f983b6278c42eaa0", "type": "github" }, "original": { @@ -902,16 +885,16 @@ "xwayland-satellite-stable": { "flake": false, "locked": { - "lastModified": 1748488455, - "narHash": "sha256-IiLr1alzKFIy5tGGpDlabQbe6LV1c9ABvkH6T5WmyRI=", + "lastModified": 1755491097, + "narHash": "sha256-m+9tUfsmBeF2Gn4HWa6vSITZ4Gz1eA1F5Kh62B0N4oE=", "owner": "Supreeeme", "repo": "xwayland-satellite", - "rev": "3ba30b149f9eb2bbf42cf4758d2158ca8cceef73", + "rev": "388d291e82ffbc73be18169d39470f340707edaa", "type": "github" }, "original": { "owner": "Supreeeme", - "ref": "v0.6", + "ref": "v0.7", "repo": "xwayland-satellite", "type": "github" } @@ -919,11 +902,11 @@ "xwayland-satellite-unstable": { "flake": false, "locked": { - "lastModified": 1754533920, - "narHash": "sha256-fCZ68Yud1sUCq6UNXj0SDyiBgVA8gJUE+14ZFGsFJG8=", + "lastModified": 1756869116, + "narHash": "sha256-SGcqX3amLH4xiA+dwF2Fu2mt1O8zHc60v0+NEZGDJhw=", "owner": "Supreeeme", "repo": "xwayland-satellite", - "rev": "e0d1dad25a158551ab58547b2ece4b7d5a19929c", + "rev": "41e865c8d35468c67b991ef5a245a98b3e44108c", "type": "github" }, "original": { From ad8fa80f961fca8ec2bc8b43c705e37a9c9cd956 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Fri, 5 Sep 2025 20:31:36 -0700 Subject: [PATCH 354/412] Flake update 2025-09-05 --- flake.lock | 173 ++++++++++++++++++++++++----------------------------- 1 file changed, 78 insertions(+), 95 deletions(-) diff --git a/flake.lock b/flake.lock index b2c06f6..d6589ec 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ "rust-overlay": "rust-overlay" }, "locked": { - "lastModified": 1754582951, - "narHash": "sha256-QivorP/1+7P4O6oEdrs6RFo9PptbX6ajBdvYifhzJc0=", + "lastModified": 1755609725, + "narHash": "sha256-r0Y5VDxpiA1AJy02VkmeCNudZ8/JJR1OP3ldtfce0ls=", "owner": "ezKEa", "repo": "aagl-gtk-on-nix", - "rev": "13cb81238ebbd0eeddb465c962413a0f795baa44", + "rev": "7566a0bcc55dbfaeb28791c06aa02060cf5bd0bf", "type": "github" }, "original": { @@ -23,15 +23,14 @@ "ags": { "inputs": { "astal": "astal", - "gnim": "gnim", "nixpkgs": "nixpkgs_3" }, "locked": { - "lastModified": 1754487835, - "narHash": "sha256-GRCkm7a1odlN3hHR1iBIxwmBPWAw1CDOnOdpmZGSKkQ=", + "lastModified": 1756679577, + "narHash": "sha256-pkfftqE2CxVN6nKDZvlNdBxIkb/x5ch4wVfwZMYNGCM=", "owner": "Aylur", "repo": "ags", - "rev": "8e91fcd52b807f576a794ccc9533bdf720ef5af7", + "rev": "04d51ac4082af3ec47e8a803417a1a55b75151d7", "type": "github" }, "original": { @@ -60,11 +59,11 @@ ] }, "locked": { - "lastModified": 1753216019, - "narHash": "sha256-zik7WISrR1ks2l6T1MZqZHb/OqroHdJnSnAehkE0kCk=", + "lastModified": 1755946532, + "narHash": "sha256-POePremlUY5GyA1zfbtic6XLxDaQcqHN6l+bIxdT5gc=", "owner": "hyprwm", "repo": "aquamarine", - "rev": "be166e11d86ba4186db93e10c54a141058bdce49", + "rev": "81584dae2df6ac79f6b6dae0ecb7705e95129ada", "type": "github" }, "original": { @@ -81,11 +80,11 @@ ] }, "locked": { - "lastModified": 1752404970, - "narHash": "sha256-XULTToDUkIshNXEO+YP2mAHdQv8bxWDvKjbamBfOC8E=", + "lastModified": 1756474652, + "narHash": "sha256-iiBU6itpEqE0spXeNJ3uJTfioSyKYjt5bNepykpDXTE=", "owner": "aylur", "repo": "astal", - "rev": "2c5eb54f39e1710c6e2c80915a240978beb3269a", + "rev": "20bd8318e4136fbd3d4eb2d64dbabc3acbc915dd", "type": "github" }, "original": { @@ -113,11 +112,11 @@ "flake-compat_2": { "flake": false, "locked": { - "lastModified": 1696426674, - "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "lastModified": 1747046372, + "narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=", "owner": "edolstra", "repo": "flake-compat", - "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885", "type": "github" }, "original": { @@ -181,32 +180,16 @@ "type": "github" } }, - "gnim": { - "flake": false, - "locked": { - "lastModified": 1753090800, - "narHash": "sha256-6sS6KHong2cMGn+6xJwjiizZzwu2XUmp++DtiKZhFMU=", - "owner": "aylur", - "repo": "gnim", - "rev": "2f58f8444c4cb8fefeab7a9901a33e99cfa92457", - "type": "github" - }, - "original": { - "owner": "aylur", - "repo": "gnim", - "type": "github" - } - }, "home-manager": { "inputs": { "nixpkgs": "nixpkgs_4" }, "locked": { - "lastModified": 1754613544, - "narHash": "sha256-ueR1mGX4I4DWfDRRxxMphbKDNisDeMPMusN72VV1+cc=", + "lastModified": 1757075491, + "narHash": "sha256-a+NMGl5tcvm+hyfSG2DlVPa8nZLpsumuRj1FfcKb2mQ=", "owner": "nix-community", "repo": "home-manager", - "rev": "cc2fa2331aebf9661d22bb507d362b39852ac73f", + "rev": "f56bf065f9abedc7bc15e1f2454aa5c8edabaacf", "type": "github" }, "original": { @@ -260,11 +243,11 @@ ] }, "locked": { - "lastModified": 1752149140, - "narHash": "sha256-gbh1HL98Fdqu0jJIWN4OJQN7Kkth7+rbkFpSZLm/62A=", + "lastModified": 1755678602, + "narHash": "sha256-uEC5O/NIUNs1zmc1aH1+G3GRACbODjk2iS0ET5hXtuk=", "owner": "hyprwm", "repo": "hyprgraphics", - "rev": "340494a38b5ec453dfc542c6226481f736cc8a9a", + "rev": "157cc52065a104fc3b8fa542ae648b992421d1c7", "type": "github" }, "original": { @@ -289,11 +272,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1754583328, - "narHash": "sha256-UyM03UZbu5MMil/iz1dSQv1BlfmzlfGdAZcE9ZV5DwY=", + "lastModified": 1756977414, + "narHash": "sha256-Hz5S4fILpYd1smWDZ+uLYjHgW22v6JS/04j15I4cFZE=", "ref": "refs/heads/main", - "rev": "afbd8796859775a50687daacb254cdd1ba22328f", - "revCount": 6354, + "rev": "4e785d12a91117cd5b255052799d1a051d9976c0", + "revCount": 6409, "type": "git", "url": "https://github.com/hyprwm/Hyprland" }, @@ -307,11 +290,11 @@ "nixpkgs": "nixpkgs_6" }, "locked": { - "lastModified": 1753252360, - "narHash": "sha256-PFAJoEqQWMlo1J+yZb+4HixmhbRVmmNl58e/AkLYDDI=", + "lastModified": 1755680610, + "narHash": "sha256-g7/g5o0spemkZCzPa8I21RgCmN0Kv41B5z9Z5HQWraY=", "owner": "hyprwm", "repo": "contrib", - "rev": "6839b23345b71db17cd408373de4f5605bf589b8", + "rev": "04721247f417256ca96acf28cdfe946cf1006263", "type": "github" }, "original": { @@ -454,11 +437,11 @@ ] }, "locked": { - "lastModified": 1753800567, - "narHash": "sha256-W0xgXsaqGa/5/7IBzKNhf0+23MqGPymYYfqT7ECqeTE=", + "lastModified": 1756117388, + "narHash": "sha256-oRDel6pNl/T2tI+nc/USU9ZP9w08dxtl7hiZxa0C/Wc=", "owner": "hyprwm", "repo": "hyprutils", - "rev": "c65d41d4f4e6ded6fdb9d508a73e2fe90e55cdf7", + "rev": "b2ae3204845f5f2f79b4703b441252d8ad2ecfd0", "type": "github" }, "original": { @@ -479,11 +462,11 @@ ] }, "locked": { - "lastModified": 1751897909, - "narHash": "sha256-FnhBENxihITZldThvbO7883PdXC/2dzW4eiNvtoV5Ao=", + "lastModified": 1755184602, + "narHash": "sha256-RCBQN8xuADB0LEgaKbfRqwm6CdyopE1xIEhNc67FAbw=", "owner": "hyprwm", "repo": "hyprwayland-scanner", - "rev": "fcca0c61f988a9d092cbb33e906775014c61579d", + "rev": "b3b0f1f40ae09d4447c20608e5a4faf8bf3c492d", "type": "github" }, "original": { @@ -535,11 +518,11 @@ "xwayland-satellite-unstable": "xwayland-satellite-unstable" }, "locked": { - "lastModified": 1754593792, - "narHash": "sha256-ufYmw5vGCUuMdLb8A4MkDKzaXUqlReu7A0wn9EbQ5do=", + "lastModified": 1757071535, + "narHash": "sha256-I3ppQKxd2oxQfwMCW04TSWnIwp5an5kTMY+tx0W8jaA=", "owner": "sodiboo", "repo": "niri-flake", - "rev": "e76792be7533a57d1420b9cdfe3efa4690a650f0", + "rev": "efa08fc58d7da5be64cfebc52b7dc44bf8d19ba9", "type": "github" }, "original": { @@ -551,16 +534,16 @@ "niri-stable": { "flake": false, "locked": { - "lastModified": 1748151941, - "narHash": "sha256-z4viQZLgC2bIJ3VrzQnR+q2F3gAOEQpU1H5xHtX/2fs=", + "lastModified": 1756556321, + "narHash": "sha256-RLD89dfjN0RVO86C/Mot0T7aduCygPGaYbog566F0Qo=", "owner": "YaLTeR", "repo": "niri", - "rev": "8ba57fcf25d2fc9565131684a839d58703f1dae7", + "rev": "01be0e65f4eb91a9cd624ac0b76aaeab765c7294", "type": "github" }, "original": { "owner": "YaLTeR", - "ref": "v25.05.1", + "ref": "v25.08", "repo": "niri", "type": "github" } @@ -568,11 +551,11 @@ "niri-unstable": { "flake": false, "locked": { - "lastModified": 1754589971, - "narHash": "sha256-gu0lWJbDkHs6+V9KHXwQHtZ2Hp72FxOjy3YisJ3qj9k=", + "lastModified": 1756926064, + "narHash": "sha256-5/1vyFRLvJWxhBgpPaV2orC0pjSgIny6JM6+joLyZok=", "owner": "YaLTeR", "repo": "niri", - "rev": "f74d83dccaa6e8fffb38c304dd5d1eae07b87d24", + "rev": "c69464c1288789020d9a086f86c970a7dc49b8c7", "type": "github" }, "original": { @@ -599,11 +582,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1754292888, - "narHash": "sha256-1ziydHSiDuSnaiPzCQh1mRFBsM2d2yRX9I+5OPGEmIE=", + "lastModified": 1757020766, + "narHash": "sha256-PLoSjHRa2bUbi1x9HoXgTx2AiuzNXs54c8omhadyvp0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "ce01daebf8489ba97bd1609d185ea276efdeb121", + "rev": "fe83bbdde2ccdc2cb9573aa846abe8363f79a97a", "type": "github" }, "original": { @@ -647,11 +630,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1753694789, - "narHash": "sha256-cKgvtz6fKuK1Xr5LQW/zOUiAC0oSQoA9nOISB0pJZqM=", + "lastModified": 1756542300, + "narHash": "sha256-tlOn88coG5fzdyqz6R93SQL5Gpq+m/DsWpekNFhqPQk=", "owner": "nixos", "repo": "nixpkgs", - "rev": "dc9637876d0dcc8c9e5e22986b857632effeb727", + "rev": "d7600c775f877cd87b4f5a831c28aa94137377aa", "type": "github" }, "original": { @@ -663,11 +646,11 @@ }, "nixpkgs_4": { "locked": { - "lastModified": 1754214453, - "narHash": "sha256-Q/I2xJn/j1wpkGhWkQnm20nShYnG7TI99foDBpXm1SY=", + "lastModified": 1756542300, + "narHash": "sha256-tlOn88coG5fzdyqz6R93SQL5Gpq+m/DsWpekNFhqPQk=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "5b09dc45f24cf32316283e62aec81ffee3c3e376", + "rev": "d7600c775f877cd87b4f5a831c28aa94137377aa", "type": "github" }, "original": { @@ -679,11 +662,11 @@ }, "nixpkgs_5": { "locked": { - "lastModified": 1753939845, - "narHash": "sha256-K2ViRJfdVGE8tpJejs8Qpvvejks1+A4GQej/lBk5y7I=", + "lastModified": 1756266583, + "narHash": "sha256-cr748nSmpfvnhqSXPiCfUPxRz2FJnvf/RjJGvFfaCsM=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "94def634a20494ee057c76998843c015909d6311", + "rev": "8a6d5427d99ec71c64f0b93d45778c889005d9c2", "type": "github" }, "original": { @@ -727,11 +710,11 @@ }, "nixpkgs_8": { "locked": { - "lastModified": 1754498491, - "narHash": "sha256-erbiH2agUTD0Z30xcVSFcDHzkRvkRXOQ3lb887bcVrs=", + "lastModified": 1756787288, + "narHash": "sha256-rw/PHa1cqiePdBxhF66V7R+WAP8WekQ0mCDG4CFqT8Y=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "c2ae88e026f9525daf89587f3cbee584b92b6134", + "rev": "d0fc30899600b9b3466ddb260fd83deb486c32f1", "type": "github" }, "original": { @@ -743,11 +726,11 @@ }, "nixpkgs_9": { "locked": { - "lastModified": 1754498491, - "narHash": "sha256-erbiH2agUTD0Z30xcVSFcDHzkRvkRXOQ3lb887bcVrs=", + "lastModified": 1756787288, + "narHash": "sha256-rw/PHa1cqiePdBxhF66V7R+WAP8WekQ0mCDG4CFqT8Y=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "c2ae88e026f9525daf89587f3cbee584b92b6134", + "rev": "d0fc30899600b9b3466ddb260fd83deb486c32f1", "type": "github" }, "original": { @@ -766,11 +749,11 @@ ] }, "locked": { - "lastModified": 1750779888, - "narHash": "sha256-wibppH3g/E2lxU43ZQHC5yA/7kIKLGxVEnsnVK1BtRg=", + "lastModified": 1755960406, + "narHash": "sha256-RF7j6C1TmSTK9tYWO6CdEMtg6XZaUKcvZwOCD2SICZs=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "16ec914f6fb6f599ce988427d9d94efddf25fe6d", + "rev": "e891a93b193fcaf2fc8012d890dc7f0befe86ec2", "type": "github" }, "original": { @@ -815,11 +798,11 @@ "nixpkgs": "nixpkgs_10" }, "locked": { - "lastModified": 1754328224, - "narHash": "sha256-glPK8DF329/dXtosV7YSzRlF4n35WDjaVwdOMEoEXHA=", + "lastModified": 1754988908, + "narHash": "sha256-t+voe2961vCgrzPFtZxha0/kmFSHFobzF00sT8p9h0U=", "owner": "Mic92", "repo": "sops-nix", - "rev": "49021900e69812ba7ddb9e40f9170218a7eca9f4", + "rev": "3223c7a92724b5d804e9988c6b447a0d09017d48", "type": "github" }, "original": { @@ -886,11 +869,11 @@ ] }, "locked": { - "lastModified": 1753633878, - "narHash": "sha256-js2sLRtsOUA/aT10OCDaTjO80yplqwOIaLUqEe0nMx0=", + "lastModified": 1755354946, + "narHash": "sha256-zdov5f/GcoLQc9qYIS1dUTqtJMeDqmBmo59PAxze6e4=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "371b96bd11ad2006ed4f21229dbd1be69bed3e8a", + "rev": "a10726d6a8d0ef1a0c645378f983b6278c42eaa0", "type": "github" }, "original": { @@ -902,16 +885,16 @@ "xwayland-satellite-stable": { "flake": false, "locked": { - "lastModified": 1748488455, - "narHash": "sha256-IiLr1alzKFIy5tGGpDlabQbe6LV1c9ABvkH6T5WmyRI=", + "lastModified": 1755491097, + "narHash": "sha256-m+9tUfsmBeF2Gn4HWa6vSITZ4Gz1eA1F5Kh62B0N4oE=", "owner": "Supreeeme", "repo": "xwayland-satellite", - "rev": "3ba30b149f9eb2bbf42cf4758d2158ca8cceef73", + "rev": "388d291e82ffbc73be18169d39470f340707edaa", "type": "github" }, "original": { "owner": "Supreeeme", - "ref": "v0.6", + "ref": "v0.7", "repo": "xwayland-satellite", "type": "github" } @@ -919,11 +902,11 @@ "xwayland-satellite-unstable": { "flake": false, "locked": { - "lastModified": 1754533920, - "narHash": "sha256-fCZ68Yud1sUCq6UNXj0SDyiBgVA8gJUE+14ZFGsFJG8=", + "lastModified": 1756869116, + "narHash": "sha256-SGcqX3amLH4xiA+dwF2Fu2mt1O8zHc60v0+NEZGDJhw=", "owner": "Supreeeme", "repo": "xwayland-satellite", - "rev": "e0d1dad25a158551ab58547b2ece4b7d5a19929c", + "rev": "41e865c8d35468c67b991ef5a245a98b3e44108c", "type": "github" }, "original": { From 3a49fecf1dfb3f6e4c48d10d847f4c0325fe88bb Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 15 Sep 2025 09:15:39 -0700 Subject: [PATCH 355/412] Syncthing, add jibril to wiki --- hosts/juri/host.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hosts/juri/host.nix b/hosts/juri/host.nix index f7a1ab2..96c2110 100644 --- a/hosts/juri/host.nix +++ b/hosts/juri/host.nix @@ -71,12 +71,13 @@ in { "homura".id = "NEP24DB-DVXAHTZ-TCCNREQ-Q5TSC7K-ZXPWC4L-5ELGKQX-4I2P47O-2FT5QAU"; "onizuka".id = "5S6QMND-MHD2HYR-DR6KQD4-6AWJTRL-FQUCR7W-FD2KBT3-AF6RE6R-F47KBQC"; "kobayashi".id = "4JPJHO4-RZHZZYE-ZUDFCZ4-KLBTMLJ-CNZBWWB-NTESYNA-X3EDAZ6-OMKHQAT"; + "jibril".id = "EWGTILX-AJPLRZ7-UNGM3DJ-5EXGBTB-SHEZKMB-7A6QSER-H6O73FH-JSXCZQL"; }; folders = { "wiki" = { path = "/var/lib/wiki"; - devices = [ "homura" "onizuka" "kobayashi" ]; + devices = [ "homura" "onizuka" "kobayashi" "jibril" ]; }; }; }; From 9b5623e2b36f9c3ff876f91023e117226b45e212 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 15 Sep 2025 09:15:39 -0700 Subject: [PATCH 356/412] Syncthing, add jibril to wiki --- hosts/juri/host.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hosts/juri/host.nix b/hosts/juri/host.nix index f7a1ab2..96c2110 100644 --- a/hosts/juri/host.nix +++ b/hosts/juri/host.nix @@ -71,12 +71,13 @@ in { "homura".id = "NEP24DB-DVXAHTZ-TCCNREQ-Q5TSC7K-ZXPWC4L-5ELGKQX-4I2P47O-2FT5QAU"; "onizuka".id = "5S6QMND-MHD2HYR-DR6KQD4-6AWJTRL-FQUCR7W-FD2KBT3-AF6RE6R-F47KBQC"; "kobayashi".id = "4JPJHO4-RZHZZYE-ZUDFCZ4-KLBTMLJ-CNZBWWB-NTESYNA-X3EDAZ6-OMKHQAT"; + "jibril".id = "EWGTILX-AJPLRZ7-UNGM3DJ-5EXGBTB-SHEZKMB-7A6QSER-H6O73FH-JSXCZQL"; }; folders = { "wiki" = { path = "/var/lib/wiki"; - devices = [ "homura" "onizuka" "kobayashi" ]; + devices = [ "homura" "onizuka" "kobayashi" "jibril" ]; }; }; }; From 0ce82962bba78aecdb77403f3184478e20155126 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 26 Aug 2025 08:54:57 -0700 Subject: [PATCH 357/412] OSAuto, add extraPkgs option to OS --- nixosModules/automatic/default.nix | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/nixosModules/automatic/default.nix b/nixosModules/automatic/default.nix index 7a680f6..2f80ace 100644 --- a/nixosModules/automatic/default.nix +++ b/nixosModules/automatic/default.nix @@ -1,12 +1,13 @@ { config, pkgs, lib, hostname, usernameList, ... }: { - options = { - system.timezone = lib.mkOption { default = "America/Los_Angeles"; }; - system.extraFonts = lib.mkOption { default = []; }; - system.isNonEFI = lib.mkEnableOption + options.system = { + timezone = lib.mkOption { default = "America/Los_Angeles"; }; + extraFonts = lib.mkOption { default = []; }; + extraPkgs = lib.mkOption { default = []; }; + isNonEFI = lib.mkEnableOption "Enable if you are running a non-EFI system"; - system.users.bigWheels = lib.mkOption { default = []; }; + users.bigWheels = lib.mkOption { default = []; }; }; config = lib.mkMerge [ @@ -33,7 +34,7 @@ git neovim xdg-user-dirs - ]; + ] ++ config.system.extraPkgs; # XDG Compliance nix.settings.use-xdg-base-directories = true; From 16fb91b82f08330c0b2e87d34306dbd047700a19 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 26 Aug 2025 08:54:57 -0700 Subject: [PATCH 358/412] OSAuto, add extraPkgs option to OS --- nixosModules/automatic/default.nix | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/nixosModules/automatic/default.nix b/nixosModules/automatic/default.nix index 7a680f6..2f80ace 100644 --- a/nixosModules/automatic/default.nix +++ b/nixosModules/automatic/default.nix @@ -1,12 +1,13 @@ { config, pkgs, lib, hostname, usernameList, ... }: { - options = { - system.timezone = lib.mkOption { default = "America/Los_Angeles"; }; - system.extraFonts = lib.mkOption { default = []; }; - system.isNonEFI = lib.mkEnableOption + options.system = { + timezone = lib.mkOption { default = "America/Los_Angeles"; }; + extraFonts = lib.mkOption { default = []; }; + extraPkgs = lib.mkOption { default = []; }; + isNonEFI = lib.mkEnableOption "Enable if you are running a non-EFI system"; - system.users.bigWheels = lib.mkOption { default = []; }; + users.bigWheels = lib.mkOption { default = []; }; }; config = lib.mkMerge [ @@ -33,7 +34,7 @@ git neovim xdg-user-dirs - ]; + ] ++ config.system.extraPkgs; # XDG Compliance nix.settings.use-xdg-base-directories = true; From 641e226f9bbff3a4d33448c421186ad4b8259ae3 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 26 Aug 2025 08:55:51 -0700 Subject: [PATCH 359/412] Fava, setup service; enable for Juri --- hosts/juri/host.nix | 5 +++ nixosModules/services/fava/service.nix | 45 ++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 nixosModules/services/fava/service.nix diff --git a/hosts/juri/host.nix b/hosts/juri/host.nix index 96c2110..9ca4456 100644 --- a/hosts/juri/host.nix +++ b/hosts/juri/host.nix @@ -65,6 +65,11 @@ in { server.domain = "ginko.woach.me"; }; + fava = { + enable = true; + port = "5128"; + }; + syncthing = { enable = true; devices = { diff --git a/nixosModules/services/fava/service.nix b/nixosModules/services/fava/service.nix new file mode 100644 index 0000000..12ea6c2 --- /dev/null +++ b/nixosModules/services/fava/service.nix @@ -0,0 +1,45 @@ +{ config, pkgs, lib, ... }: + +{ + options.fava = { + enable = lib.mkEnableOption "Enables fava double entry accounting"; + ledgerFile = lib.mkOption { default = "/var/lib/fava/ledger.beancount"; }; + port = lib.mkOption { default = "5000"; }; + host = lib.mkOption { default = "localhost"; }; + }; + + config = lib.mkIf config.fava.enable { + systemd.services.fava = { + description = "Fava"; + after = [ "network-online.target" ]; + wants = [ "network-online.target" ]; + wantedBy = [ "multi-user.target" ]; + serviceConfig = { + ExecStart = "${pkgs.fava}/bin/fava --port ${config.fava.port} --host ${config.fava.host} ${config.fava.ledgerFile}"; + Type = "simple"; + User = "fava"; + Group = "fava"; + Restart = "on-failure"; + RestartSec = "5s"; + NoNewPrivileges = true; + PrivateTmp = true; + PrivateDevices = true; + ProtectHome = true; + ProtectSystem = "full"; + ReadWriteDirectories = "/var/lib/fava"; + }; + }; + + users.users.fava = { + home = "/var/lib/fava"; + createHome = true; + isSystemUser = true; + group = "fava"; + }; + users.groups.fava = {}; + + system.extraPkgs = [ + pkgs.beancount + ]; + }; +} From 20665da1099b098bb02b71ed429160e7c8991ebf Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 26 Aug 2025 08:55:51 -0700 Subject: [PATCH 360/412] Fava, setup service; enable for Juri --- hosts/juri/host.nix | 5 +++ nixosModules/services/fava/service.nix | 45 ++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 nixosModules/services/fava/service.nix diff --git a/hosts/juri/host.nix b/hosts/juri/host.nix index 96c2110..9ca4456 100644 --- a/hosts/juri/host.nix +++ b/hosts/juri/host.nix @@ -65,6 +65,11 @@ in { server.domain = "ginko.woach.me"; }; + fava = { + enable = true; + port = "5128"; + }; + syncthing = { enable = true; devices = { diff --git a/nixosModules/services/fava/service.nix b/nixosModules/services/fava/service.nix new file mode 100644 index 0000000..12ea6c2 --- /dev/null +++ b/nixosModules/services/fava/service.nix @@ -0,0 +1,45 @@ +{ config, pkgs, lib, ... }: + +{ + options.fava = { + enable = lib.mkEnableOption "Enables fava double entry accounting"; + ledgerFile = lib.mkOption { default = "/var/lib/fava/ledger.beancount"; }; + port = lib.mkOption { default = "5000"; }; + host = lib.mkOption { default = "localhost"; }; + }; + + config = lib.mkIf config.fava.enable { + systemd.services.fava = { + description = "Fava"; + after = [ "network-online.target" ]; + wants = [ "network-online.target" ]; + wantedBy = [ "multi-user.target" ]; + serviceConfig = { + ExecStart = "${pkgs.fava}/bin/fava --port ${config.fava.port} --host ${config.fava.host} ${config.fava.ledgerFile}"; + Type = "simple"; + User = "fava"; + Group = "fava"; + Restart = "on-failure"; + RestartSec = "5s"; + NoNewPrivileges = true; + PrivateTmp = true; + PrivateDevices = true; + ProtectHome = true; + ProtectSystem = "full"; + ReadWriteDirectories = "/var/lib/fava"; + }; + }; + + users.users.fava = { + home = "/var/lib/fava"; + createHome = true; + isSystemUser = true; + group = "fava"; + }; + users.groups.fava = {}; + + system.extraPkgs = [ + pkgs.beancount + ]; + }; +} From 1de1ba027b416f02e690993a102efe65dcb4d84e Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 15 Sep 2025 10:42:36 -0700 Subject: [PATCH 361/412] Pds, change pds to bluesky-pds --- nixosModules/services/pds/service.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nixosModules/services/pds/service.nix b/nixosModules/services/pds/service.nix index 500179e..d72ef24 100644 --- a/nixosModules/services/pds/service.nix +++ b/nixosModules/services/pds/service.nix @@ -2,14 +2,14 @@ { options.pds = { - enable = lib.mkEnableOption "Enables atproto Personal Data Server"; + enable = lib.mkEnableOption "Enables atproto (blueksy) Personal Data Server"; hostname = lib.mkOption { type = lib.types.str; }; adminEmail = lib.mkOption { type = lib.types.str; }; environmentFile = lib.mkOption { type = lib.types.path; }; }; config = lib.mkIf config.pds.enable { - services.pds = { + services.bluesky-pds = { enable = true; environmentFiles = [ config.pds.environmentFile ]; settings = { From be4f8308e99680584f2fdf0016e1c9cb2cdde3a3 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 15 Sep 2025 10:42:36 -0700 Subject: [PATCH 362/412] Pds, change pds to bluesky-pds --- nixosModules/services/pds/service.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nixosModules/services/pds/service.nix b/nixosModules/services/pds/service.nix index 500179e..d72ef24 100644 --- a/nixosModules/services/pds/service.nix +++ b/nixosModules/services/pds/service.nix @@ -2,14 +2,14 @@ { options.pds = { - enable = lib.mkEnableOption "Enables atproto Personal Data Server"; + enable = lib.mkEnableOption "Enables atproto (blueksy) Personal Data Server"; hostname = lib.mkOption { type = lib.types.str; }; adminEmail = lib.mkOption { type = lib.types.str; }; environmentFile = lib.mkOption { type = lib.types.path; }; }; config = lib.mkIf config.pds.enable { - services.pds = { + services.bluesky-pds = { enable = true; environmentFiles = [ config.pds.environmentFile ]; settings = { From a2939e561334679090000daea1f34483395dbdb3 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 15 Sep 2025 11:29:52 -0700 Subject: [PATCH 363/412] Fava, change ledgers to list --- nixosModules/services/fava/service.nix | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/nixosModules/services/fava/service.nix b/nixosModules/services/fava/service.nix index 12ea6c2..f43930f 100644 --- a/nixosModules/services/fava/service.nix +++ b/nixosModules/services/fava/service.nix @@ -3,9 +3,12 @@ { options.fava = { enable = lib.mkEnableOption "Enables fava double entry accounting"; - ledgerFile = lib.mkOption { default = "/var/lib/fava/ledger.beancount"; }; + ledgerFiles = lib.mkOption { + default = ["/var/lib/fava/ledger.beancount"]; + }; port = lib.mkOption { default = "5000"; }; host = lib.mkOption { default = "localhost"; }; + favaHome = lib.mkOption { default = "/var/lib/fava"; }; }; config = lib.mkIf config.fava.enable { @@ -15,7 +18,13 @@ wants = [ "network-online.target" ]; wantedBy = [ "multi-user.target" ]; serviceConfig = { - ExecStart = "${pkgs.fava}/bin/fava --port ${config.fava.port} --host ${config.fava.host} ${config.fava.ledgerFile}"; + ExecStart = with config.fava; let + command = lib.concatStringsSep " " ([ + "${pkgs.fava}/bin/fava" + "--port ${port}" + "--host ${host}" + ] ++ ["--"] ++ ledgerFiles); + in command; Type = "simple"; User = "fava"; Group = "fava"; @@ -26,12 +35,12 @@ PrivateDevices = true; ProtectHome = true; ProtectSystem = "full"; - ReadWriteDirectories = "/var/lib/fava"; + ReadWriteDirectories = config.fava.favaHome; }; }; users.users.fava = { - home = "/var/lib/fava"; + home = config.fava.favaHome; createHome = true; isSystemUser = true; group = "fava"; From 6779c7cc7859d0e9527d339a1cf114f8b9f188fc Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 15 Sep 2025 11:29:52 -0700 Subject: [PATCH 364/412] Fava, change ledgers to list --- nixosModules/services/fava/service.nix | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/nixosModules/services/fava/service.nix b/nixosModules/services/fava/service.nix index 12ea6c2..f43930f 100644 --- a/nixosModules/services/fava/service.nix +++ b/nixosModules/services/fava/service.nix @@ -3,9 +3,12 @@ { options.fava = { enable = lib.mkEnableOption "Enables fava double entry accounting"; - ledgerFile = lib.mkOption { default = "/var/lib/fava/ledger.beancount"; }; + ledgerFiles = lib.mkOption { + default = ["/var/lib/fava/ledger.beancount"]; + }; port = lib.mkOption { default = "5000"; }; host = lib.mkOption { default = "localhost"; }; + favaHome = lib.mkOption { default = "/var/lib/fava"; }; }; config = lib.mkIf config.fava.enable { @@ -15,7 +18,13 @@ wants = [ "network-online.target" ]; wantedBy = [ "multi-user.target" ]; serviceConfig = { - ExecStart = "${pkgs.fava}/bin/fava --port ${config.fava.port} --host ${config.fava.host} ${config.fava.ledgerFile}"; + ExecStart = with config.fava; let + command = lib.concatStringsSep " " ([ + "${pkgs.fava}/bin/fava" + "--port ${port}" + "--host ${host}" + ] ++ ["--"] ++ ledgerFiles); + in command; Type = "simple"; User = "fava"; Group = "fava"; @@ -26,12 +35,12 @@ PrivateDevices = true; ProtectHome = true; ProtectSystem = "full"; - ReadWriteDirectories = "/var/lib/fava"; + ReadWriteDirectories = config.fava.favaHome; }; }; users.users.fava = { - home = "/var/lib/fava"; + home = config.fava.favaHome; createHome = true; isSystemUser = true; group = "fava"; From 5c996e0885d2786f65bdb00d8bcd3b62bfc1f110 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 16 Sep 2025 17:35:34 -0700 Subject: [PATCH 365/412] Fava, change port to number; open port --- hosts/juri/host.nix | 2 +- nixosModules/services/fava/service.nix | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/hosts/juri/host.nix b/hosts/juri/host.nix index 9ca4456..57c9a47 100644 --- a/hosts/juri/host.nix +++ b/hosts/juri/host.nix @@ -67,7 +67,7 @@ in { fava = { enable = true; - port = "5128"; + port = 5128; }; syncthing = { diff --git a/nixosModules/services/fava/service.nix b/nixosModules/services/fava/service.nix index f43930f..b8bee8f 100644 --- a/nixosModules/services/fava/service.nix +++ b/nixosModules/services/fava/service.nix @@ -6,7 +6,7 @@ ledgerFiles = lib.mkOption { default = ["/var/lib/fava/ledger.beancount"]; }; - port = lib.mkOption { default = "5000"; }; + port = lib.mkOption { default = 5000; }; host = lib.mkOption { default = "localhost"; }; favaHome = lib.mkOption { default = "/var/lib/fava"; }; }; @@ -21,7 +21,7 @@ ExecStart = with config.fava; let command = lib.concatStringsSep " " ([ "${pkgs.fava}/bin/fava" - "--port ${port}" + "--port ${builtins.toString port}" "--host ${host}" ] ++ ["--"] ++ ledgerFiles); in command; @@ -39,6 +39,8 @@ }; }; + networking.firewall.allowedTCPPorts = [ config.fava.port ]; + users.users.fava = { home = config.fava.favaHome; createHome = true; From 0d7d23e3ac2aa95f13f9bebb271f1a42fee1b434 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 16 Sep 2025 17:35:34 -0700 Subject: [PATCH 366/412] Fava, change port to number; open port --- hosts/juri/host.nix | 2 +- nixosModules/services/fava/service.nix | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/hosts/juri/host.nix b/hosts/juri/host.nix index 9ca4456..57c9a47 100644 --- a/hosts/juri/host.nix +++ b/hosts/juri/host.nix @@ -67,7 +67,7 @@ in { fava = { enable = true; - port = "5128"; + port = 5128; }; syncthing = { diff --git a/nixosModules/services/fava/service.nix b/nixosModules/services/fava/service.nix index f43930f..b8bee8f 100644 --- a/nixosModules/services/fava/service.nix +++ b/nixosModules/services/fava/service.nix @@ -6,7 +6,7 @@ ledgerFiles = lib.mkOption { default = ["/var/lib/fava/ledger.beancount"]; }; - port = lib.mkOption { default = "5000"; }; + port = lib.mkOption { default = 5000; }; host = lib.mkOption { default = "localhost"; }; favaHome = lib.mkOption { default = "/var/lib/fava"; }; }; @@ -21,7 +21,7 @@ ExecStart = with config.fava; let command = lib.concatStringsSep " " ([ "${pkgs.fava}/bin/fava" - "--port ${port}" + "--port ${builtins.toString port}" "--host ${host}" ] ++ ["--"] ++ ledgerFiles); in command; @@ -39,6 +39,8 @@ }; }; + networking.firewall.allowedTCPPorts = [ config.fava.port ]; + users.users.fava = { home = config.fava.favaHome; createHome = true; From ec38f08e3ce0667a84fbbba8a9f090183090c6f8 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 16 Sep 2025 18:30:10 -0700 Subject: [PATCH 367/412] Onizuka, vertical second monitor --- hosts/onizuka/users/pan/user.nix | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/hosts/onizuka/users/pan/user.nix b/hosts/onizuka/users/pan/user.nix index 0867c8f..b6bb28e 100644 --- a/hosts/onizuka/users/pan/user.nix +++ b/hosts/onizuka/users/pan/user.nix @@ -27,8 +27,15 @@ enable = true; mouse.accel = -0.53; outputs = { - "DP-1".mode = { width = 2560; height = 1440; refresh = 144.000; }; - "DP-2".mode = { width = 2560; height = 1440; refresh = 144.000; }; + "DP-1" = { + position = { x = 2560; y = -100; }; + mode = { width = 2560; height = 1440; refresh = 144.000; }; + transform.rotation = 270; + }; + "DP-2" = { + position = { x = 0; y = 0; }; + mode = { width = 2560; height = 1440; refresh = 144.000; }; + }; }; }; From 70471d28ecaef5c86e497629b4d8fa5848433bc2 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 16 Sep 2025 18:30:10 -0700 Subject: [PATCH 368/412] Onizuka, vertical second monitor --- hosts/onizuka/users/pan/user.nix | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/hosts/onizuka/users/pan/user.nix b/hosts/onizuka/users/pan/user.nix index 0867c8f..b6bb28e 100644 --- a/hosts/onizuka/users/pan/user.nix +++ b/hosts/onizuka/users/pan/user.nix @@ -27,8 +27,15 @@ enable = true; mouse.accel = -0.53; outputs = { - "DP-1".mode = { width = 2560; height = 1440; refresh = 144.000; }; - "DP-2".mode = { width = 2560; height = 1440; refresh = 144.000; }; + "DP-1" = { + position = { x = 2560; y = -100; }; + mode = { width = 2560; height = 1440; refresh = 144.000; }; + transform.rotation = 270; + }; + "DP-2" = { + position = { x = 0; y = 0; }; + mode = { width = 2560; height = 1440; refresh = 144.000; }; + }; }; }; From 41e952efafa82f62d4d879927786eb2da14919ce Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 16 Sep 2025 18:30:23 -0700 Subject: [PATCH 369/412] Onizuka, update extra packages --- hosts/onizuka/users/pan/user.nix | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/hosts/onizuka/users/pan/user.nix b/hosts/onizuka/users/pan/user.nix index b6bb28e..7a03bfb 100644 --- a/hosts/onizuka/users/pan/user.nix +++ b/hosts/onizuka/users/pan/user.nix @@ -110,10 +110,8 @@ lutris.enable = true; extraPkgs = with pkgs; [ - # Applications - ani-cli # Easy anime player - lutgen # LUT generator - prismlauncher # Minecraft launcher - jdk8 # For playing older minecraft + # Applications + logseq + claude-code ]; } From 6cea0f23b4788f40d490dd0f0ac6c415864dc4e3 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 16 Sep 2025 18:30:23 -0700 Subject: [PATCH 370/412] Onizuka, update extra packages --- hosts/onizuka/users/pan/user.nix | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/hosts/onizuka/users/pan/user.nix b/hosts/onizuka/users/pan/user.nix index b6bb28e..7a03bfb 100644 --- a/hosts/onizuka/users/pan/user.nix +++ b/hosts/onizuka/users/pan/user.nix @@ -110,10 +110,8 @@ lutris.enable = true; extraPkgs = with pkgs; [ - # Applications - ani-cli # Easy anime player - lutgen # LUT generator - prismlauncher # Minecraft launcher - jdk8 # For playing older minecraft + # Applications + logseq + claude-code ]; } From 0447a25a772df444d5db6739dcd214af765d724f Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 16 Sep 2025 18:30:47 -0700 Subject: [PATCH 371/412] Greetd, switch to direct packages --- nixosModules/services/displaymanager/service.nix | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/nixosModules/services/displaymanager/service.nix b/nixosModules/services/displaymanager/service.nix index 92f2d75..57a95b3 100644 --- a/nixosModules/services/displaymanager/service.nix +++ b/nixosModules/services/displaymanager/service.nix @@ -12,13 +12,10 @@ else (if config.niri.enable then "niri" else null); in { enable = true; - package = pkgs.greetd.tuigreet; + package = pkgs.tuigreet; settings = { - terminal = { - vt = 2; - }; default_session = lib.mkIf (wm != null) { - command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time --cmd ${wm}"; + command = "${pkgs.tuigreet}/bin/tuigreet --time --cmd ${wm}"; user = "greeter"; }; }; From e2224157946e1bc7d5c5f34f78ac55c91e9cd70b Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 16 Sep 2025 18:30:47 -0700 Subject: [PATCH 372/412] Greetd, switch to direct packages --- nixosModules/services/displaymanager/service.nix | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/nixosModules/services/displaymanager/service.nix b/nixosModules/services/displaymanager/service.nix index 92f2d75..57a95b3 100644 --- a/nixosModules/services/displaymanager/service.nix +++ b/nixosModules/services/displaymanager/service.nix @@ -12,13 +12,10 @@ else (if config.niri.enable then "niri" else null); in { enable = true; - package = pkgs.greetd.tuigreet; + package = pkgs.tuigreet; settings = { - terminal = { - vt = 2; - }; default_session = lib.mkIf (wm != null) { - command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time --cmd ${wm}"; + command = "${pkgs.tuigreet}/bin/tuigreet --time --cmd ${wm}"; user = "greeter"; }; }; From 1e8981007438ec76008de356683d065a5940f0fa Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 16 Sep 2025 18:45:24 -0700 Subject: [PATCH 373/412] Caddy, DNS Challenges; Headscale, Magic_dns Changed to using Porkbun DNS Challenges for Caddy. This enables wildcard certificates. Documentation - https://caddyserver.com/docs/caddyfile/patterns#wildcard-certificates - https://caddyserver.com/docs/automatic-https#dns-challenge Changed headscale to use a domain I own instead of the beautiful madoka OP. --- hosts/juri/host.nix | 8 ++++++++ hosts/juri/secrets.yaml | 12 ++++-------- nixosModules/services/caddy/service.nix | 14 ++++++++++++++ nixosModules/services/headscale/service.nix | 2 +- 4 files changed, 27 insertions(+), 9 deletions(-) diff --git a/hosts/juri/host.nix b/hosts/juri/host.nix index 57c9a47..9f908bf 100644 --- a/hosts/juri/host.nix +++ b/hosts/juri/host.nix @@ -17,12 +17,14 @@ in { forgejoPassword = { owner = "forgejo"; }; + caddyApi = {}; }; }; caddy = { enable = true; adminEmail = email; + environmentFile = config.sops.secrets.caddyApi.path; vhosts = { "juri.woach.me" = { extraConfig = '' @@ -39,6 +41,12 @@ in { extraConfig = '' reverse_proxy :${builtins.toString config.headscale.server.port} ''; + serverAliases = [ "*.dns.ginko.woach.me" ]; + }; + "juri.${config.services.headscale.settings.dns.base_domain}" = { + extraConfig = '' + reverse_proxy :${builtins.toString config.fava.port} + ''; }; }; }; diff --git a/hosts/juri/secrets.yaml b/hosts/juri/secrets.yaml index 6800ced..145fe69 100644 --- a/hosts/juri/secrets.yaml +++ b/hosts/juri/secrets.yaml @@ -1,10 +1,7 @@ pdsEnv: ENC[AES256_GCM,data:W1kKvcntrBOSgo7gLxwO8A9ZkWjkRWfUDZUMy5YNvhzqYS5xBPGL4QEcknWtQaVfaZklnO/+Gr5JEq/qgU2nIEY3xazfjYl4MNkZBhuwI20RwZB9voVubzHbPwjLtZbNTXRMa7BzO6a3ieSudKWAMP0dumG3/+wHtTYOM6lxUBfpw51+lNikc7kLqI+lzys0jC37ajP0/cm/U644BD0ozSSF289CLtXSkLt8sgHvA1ci8M+wEEq4aJ0JTVs98m0E7Udaride4tjLelESx3hPdoVzBIEa,iv:sQiYE//UGGA2qPfbM9//FcKEued6t8ORiKW8kfzLtz0=,tag:Fj+CzBgL8MH/6FLnUadIPQ==,type:str] forgejoPassword: ENC[AES256_GCM,data:cQJJbf07v4HngeSYE2TwTcAx8WY=,iv:533TO2MfJVop93U4T7yIIiu6i4swDtduFuu79ZzFYFU=,tag:Pz5u/NqOSTKz2zFNzNLY5w==,type:str] +caddyApi: ENC[AES256_GCM,data:mWb/pMr1cxbz6K2ZQkV3AF93/GtIPZyYrJfDDbisK3GhMlWOVZNWDzw7cC/e+1w5aSxeGmOAE13eETVpV9q8W2Bjg8IADn/4j8Su90LxAr+U77pVoF0gUvv1CagEXM8myx+GgaAG80xIeSUNUMOMsgUhJTBoaMrVpHDEPREsa9XyRzEB4X3uQnKx4tUNcUqGSUu5wvMfXDF7rNzJhkVEfE6i,iv:h5QLei1PcZUc4djaqbId9VFv8Rr2dTa7CNowxZVlRUA=,tag:nBfyFVU/fBboswcVsGKL4A==,type:str] sops: - kms: [] - gcp_kms: [] - azure_kv: [] - hc_vault: [] age: - recipient: age1ey3wr2wnkgny3dfgvnyrf0cptwzr7s5x464p2y9ya58lpay8lfrsds3y68 enc: | @@ -33,8 +30,7 @@ sops: N3NhMHp3V1ppclQvWTIxNkM5RjhRV0EKl8goB9tCl0BGi4jN7Fzuh0Ajm146x2Hu vesj+ENu2E9II3OeYuBndD+Y4x2zugIpzNOPg1V8zkarJOf7R/sXEw== -----END AGE ENCRYPTED FILE----- - lastmodified: "2025-03-24T19:31:53Z" - mac: ENC[AES256_GCM,data:5FVSw5wMXRl4qZQmD4yS7g/9qztaveDiU7mgifiOhOBqQrtvv5I/V7rkb5nKew+N3vKmg4vpWBL4kFxsQvWekAPT+ToNED4XhB5H5wZ/RyXga0CU0PMKWtGdEKdyjs4cIZjfScclW0ONgaSkv6XtCLj1V+ukPY3WBI3/2jnf6dA=,iv:7p1qEG1+E7SNLv64/aqjm1ppF4jQ/5h+Z5iHzd8sGDA=,tag:hG59vDcqha1MQf+kN1jguw==,type:str] - pgp: [] + lastmodified: "2025-09-17T01:49:06Z" + mac: ENC[AES256_GCM,data:THEyH3KP9VVFiP7NAPn693dolWIWByb3wSjwC9QLSTe3cgdJbFqa5GvVzFa6xM1ue/GYStMwYIZt0+3LP5Wz5B2KWNy2ljvgFXjzlDHxSOzkWi3/yP9fnuRyf0vujW2Q0ltkXMleyKSisZCD87FjuUz1J9LBYQP64e0mhyB5jL4=,iv:WUDt4AusjrQVhDFk/XSohBlmxjp6Dp6EoMe08yQ0RYg=,tag:LC2j1Bvgo7h29O9mmgIFCw==,type:str] unencrypted_suffix: _unencrypted - version: 3.9.4 + version: 3.10.2 diff --git a/nixosModules/services/caddy/service.nix b/nixosModules/services/caddy/service.nix index b07fa3c..429340c 100644 --- a/nixosModules/services/caddy/service.nix +++ b/nixosModules/services/caddy/service.nix @@ -5,14 +5,28 @@ enable = lib.mkEnableOption "Enables caddy webserver"; vhosts = lib.mkOption {}; adminEmail = lib.mkOption { type = lib.types.str; }; + environmentFile = lib.mkOption {}; }; config = lib.mkIf config.caddy.enable { networking.firewall.allowedTCPPorts = [ 80 443 ]; services.caddy = { enable = true; + globalConfig = '' + acme_dns porkbun { + api_key {$APIKEY} + api_secret_key {$APISECRETKEY} + } + ''; + package = pkgs.caddy.withPlugins { + plugins = [ "github.com/caddy-dns/porkbun@v0.3.1" ]; + hash = "sha256-PUHu+KPywdJMuPLHPtQhUaw3Cv1pED5XQ1MOzlT/6h4="; + }; virtualHosts = config.caddy.vhosts; email = config.caddy.adminEmail; }; + systemd.services.caddy.serviceConfig.EnvironmentFile = [ + config.caddy.environmentFile + ]; }; } diff --git a/nixosModules/services/headscale/service.nix b/nixosModules/services/headscale/service.nix index 12fbad7..4f692f1 100644 --- a/nixosModules/services/headscale/service.nix +++ b/nixosModules/services/headscale/service.nix @@ -17,7 +17,7 @@ settings = { server_url = "https://${config.headscale.server.domain}"; dns = { - base_domain = "connect.claris"; + base_domain = "dns.${config.headscale.server.domain}"; override_local_dns = false; }; }; From f84166cf7253712c77bc8d603aeb6a3b26f8b834 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 16 Sep 2025 18:45:24 -0700 Subject: [PATCH 374/412] Caddy, DNS Challenges; Headscale, Magic_dns Changed to using Porkbun DNS Challenges for Caddy. This enables wildcard certificates. Documentation - https://caddyserver.com/docs/caddyfile/patterns#wildcard-certificates - https://caddyserver.com/docs/automatic-https#dns-challenge Changed headscale to use a domain I own instead of the beautiful madoka OP. --- hosts/juri/host.nix | 8 ++++++++ hosts/juri/secrets.yaml | 12 ++++-------- nixosModules/services/caddy/service.nix | 14 ++++++++++++++ nixosModules/services/headscale/service.nix | 2 +- 4 files changed, 27 insertions(+), 9 deletions(-) diff --git a/hosts/juri/host.nix b/hosts/juri/host.nix index 57c9a47..9f908bf 100644 --- a/hosts/juri/host.nix +++ b/hosts/juri/host.nix @@ -17,12 +17,14 @@ in { forgejoPassword = { owner = "forgejo"; }; + caddyApi = {}; }; }; caddy = { enable = true; adminEmail = email; + environmentFile = config.sops.secrets.caddyApi.path; vhosts = { "juri.woach.me" = { extraConfig = '' @@ -39,6 +41,12 @@ in { extraConfig = '' reverse_proxy :${builtins.toString config.headscale.server.port} ''; + serverAliases = [ "*.dns.ginko.woach.me" ]; + }; + "juri.${config.services.headscale.settings.dns.base_domain}" = { + extraConfig = '' + reverse_proxy :${builtins.toString config.fava.port} + ''; }; }; }; diff --git a/hosts/juri/secrets.yaml b/hosts/juri/secrets.yaml index 6800ced..145fe69 100644 --- a/hosts/juri/secrets.yaml +++ b/hosts/juri/secrets.yaml @@ -1,10 +1,7 @@ pdsEnv: ENC[AES256_GCM,data:W1kKvcntrBOSgo7gLxwO8A9ZkWjkRWfUDZUMy5YNvhzqYS5xBPGL4QEcknWtQaVfaZklnO/+Gr5JEq/qgU2nIEY3xazfjYl4MNkZBhuwI20RwZB9voVubzHbPwjLtZbNTXRMa7BzO6a3ieSudKWAMP0dumG3/+wHtTYOM6lxUBfpw51+lNikc7kLqI+lzys0jC37ajP0/cm/U644BD0ozSSF289CLtXSkLt8sgHvA1ci8M+wEEq4aJ0JTVs98m0E7Udaride4tjLelESx3hPdoVzBIEa,iv:sQiYE//UGGA2qPfbM9//FcKEued6t8ORiKW8kfzLtz0=,tag:Fj+CzBgL8MH/6FLnUadIPQ==,type:str] forgejoPassword: ENC[AES256_GCM,data:cQJJbf07v4HngeSYE2TwTcAx8WY=,iv:533TO2MfJVop93U4T7yIIiu6i4swDtduFuu79ZzFYFU=,tag:Pz5u/NqOSTKz2zFNzNLY5w==,type:str] +caddyApi: ENC[AES256_GCM,data:mWb/pMr1cxbz6K2ZQkV3AF93/GtIPZyYrJfDDbisK3GhMlWOVZNWDzw7cC/e+1w5aSxeGmOAE13eETVpV9q8W2Bjg8IADn/4j8Su90LxAr+U77pVoF0gUvv1CagEXM8myx+GgaAG80xIeSUNUMOMsgUhJTBoaMrVpHDEPREsa9XyRzEB4X3uQnKx4tUNcUqGSUu5wvMfXDF7rNzJhkVEfE6i,iv:h5QLei1PcZUc4djaqbId9VFv8Rr2dTa7CNowxZVlRUA=,tag:nBfyFVU/fBboswcVsGKL4A==,type:str] sops: - kms: [] - gcp_kms: [] - azure_kv: [] - hc_vault: [] age: - recipient: age1ey3wr2wnkgny3dfgvnyrf0cptwzr7s5x464p2y9ya58lpay8lfrsds3y68 enc: | @@ -33,8 +30,7 @@ sops: N3NhMHp3V1ppclQvWTIxNkM5RjhRV0EKl8goB9tCl0BGi4jN7Fzuh0Ajm146x2Hu vesj+ENu2E9II3OeYuBndD+Y4x2zugIpzNOPg1V8zkarJOf7R/sXEw== -----END AGE ENCRYPTED FILE----- - lastmodified: "2025-03-24T19:31:53Z" - mac: ENC[AES256_GCM,data:5FVSw5wMXRl4qZQmD4yS7g/9qztaveDiU7mgifiOhOBqQrtvv5I/V7rkb5nKew+N3vKmg4vpWBL4kFxsQvWekAPT+ToNED4XhB5H5wZ/RyXga0CU0PMKWtGdEKdyjs4cIZjfScclW0ONgaSkv6XtCLj1V+ukPY3WBI3/2jnf6dA=,iv:7p1qEG1+E7SNLv64/aqjm1ppF4jQ/5h+Z5iHzd8sGDA=,tag:hG59vDcqha1MQf+kN1jguw==,type:str] - pgp: [] + lastmodified: "2025-09-17T01:49:06Z" + mac: ENC[AES256_GCM,data:THEyH3KP9VVFiP7NAPn693dolWIWByb3wSjwC9QLSTe3cgdJbFqa5GvVzFa6xM1ue/GYStMwYIZt0+3LP5Wz5B2KWNy2ljvgFXjzlDHxSOzkWi3/yP9fnuRyf0vujW2Q0ltkXMleyKSisZCD87FjuUz1J9LBYQP64e0mhyB5jL4=,iv:WUDt4AusjrQVhDFk/XSohBlmxjp6Dp6EoMe08yQ0RYg=,tag:LC2j1Bvgo7h29O9mmgIFCw==,type:str] unencrypted_suffix: _unencrypted - version: 3.9.4 + version: 3.10.2 diff --git a/nixosModules/services/caddy/service.nix b/nixosModules/services/caddy/service.nix index b07fa3c..429340c 100644 --- a/nixosModules/services/caddy/service.nix +++ b/nixosModules/services/caddy/service.nix @@ -5,14 +5,28 @@ enable = lib.mkEnableOption "Enables caddy webserver"; vhosts = lib.mkOption {}; adminEmail = lib.mkOption { type = lib.types.str; }; + environmentFile = lib.mkOption {}; }; config = lib.mkIf config.caddy.enable { networking.firewall.allowedTCPPorts = [ 80 443 ]; services.caddy = { enable = true; + globalConfig = '' + acme_dns porkbun { + api_key {$APIKEY} + api_secret_key {$APISECRETKEY} + } + ''; + package = pkgs.caddy.withPlugins { + plugins = [ "github.com/caddy-dns/porkbun@v0.3.1" ]; + hash = "sha256-PUHu+KPywdJMuPLHPtQhUaw3Cv1pED5XQ1MOzlT/6h4="; + }; virtualHosts = config.caddy.vhosts; email = config.caddy.adminEmail; }; + systemd.services.caddy.serviceConfig.EnvironmentFile = [ + config.caddy.environmentFile + ]; }; } diff --git a/nixosModules/services/headscale/service.nix b/nixosModules/services/headscale/service.nix index 12fbad7..4f692f1 100644 --- a/nixosModules/services/headscale/service.nix +++ b/nixosModules/services/headscale/service.nix @@ -17,7 +17,7 @@ settings = { server_url = "https://${config.headscale.server.domain}"; dns = { - base_domain = "connect.claris"; + base_domain = "dns.${config.headscale.server.domain}"; override_local_dns = false; }; }; From 5bddc3384b68e51ec27eb74d1cf63f582053f38a Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 5 Nov 2025 08:27:13 -0800 Subject: [PATCH 375/412] Flake update 2025-11-05 & Niri fix --- flake.lock | 170 ++++++++++++------------ hmModules/apps/git/app.nix | 10 +- hmModules/apps/lf/app.nix | 2 +- hmModules/apps/niri/app.nix | 4 +- nixosModules/services/caddy/service.nix | 2 +- 5 files changed, 95 insertions(+), 93 deletions(-) diff --git a/flake.lock b/flake.lock index d6589ec..50598c2 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ "rust-overlay": "rust-overlay" }, "locked": { - "lastModified": 1755609725, - "narHash": "sha256-r0Y5VDxpiA1AJy02VkmeCNudZ8/JJR1OP3ldtfce0ls=", + "lastModified": 1762188647, + "narHash": "sha256-OAXK4p7WIYUcp8xx9m0RZUpV6XUDEhkoM4efI8dzPiU=", "owner": "ezKEa", "repo": "aagl-gtk-on-nix", - "rev": "7566a0bcc55dbfaeb28791c06aa02060cf5bd0bf", + "rev": "1172be1377bc65581004f4d5927b58c5c7d96639", "type": "github" }, "original": { @@ -26,11 +26,11 @@ "nixpkgs": "nixpkgs_3" }, "locked": { - "lastModified": 1756679577, - "narHash": "sha256-pkfftqE2CxVN6nKDZvlNdBxIkb/x5ch4wVfwZMYNGCM=", + "lastModified": 1762046771, + "narHash": "sha256-baVZvZZN0t9F3fvVhxmQA1/oNykXGd/YhlF19JqCLc8=", "owner": "Aylur", "repo": "ags", - "rev": "04d51ac4082af3ec47e8a803417a1a55b75151d7", + "rev": "fe13af2daec716226ccdb3158606a8577853e0ff", "type": "github" }, "original": { @@ -59,11 +59,11 @@ ] }, "locked": { - "lastModified": 1755946532, - "narHash": "sha256-POePremlUY5GyA1zfbtic6XLxDaQcqHN6l+bIxdT5gc=", + "lastModified": 1761420899, + "narHash": "sha256-kxGCip6GNbcbNWKu4J2iKbNYfFTS8Zbjg9CWp0zmFoM=", "owner": "hyprwm", "repo": "aquamarine", - "rev": "81584dae2df6ac79f6b6dae0ecb7705e95129ada", + "rev": "62479232aae42c1ef09c2c027c8cfd91df060897", "type": "github" }, "original": { @@ -80,11 +80,11 @@ ] }, "locked": { - "lastModified": 1756474652, - "narHash": "sha256-iiBU6itpEqE0spXeNJ3uJTfioSyKYjt5bNepykpDXTE=", + "lastModified": 1762012522, + "narHash": "sha256-ncEN4OVFM5M9VFc4oR3gOI5K8r99GcYxtU+Cf4Z8pbs=", "owner": "aylur", "repo": "astal", - "rev": "20bd8318e4136fbd3d4eb2d64dbabc3acbc915dd", + "rev": "671d4229c798834190a50fb8b8d8addd19b529e9", "type": "github" }, "original": { @@ -96,11 +96,11 @@ "flake-compat": { "flake": false, "locked": { - "lastModified": 1747046372, - "narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=", + "lastModified": 1761588595, + "narHash": "sha256-XKUZz9zewJNUj46b4AJdiRZJAvSZ0Dqj2BNfXvFlJC4=", "owner": "edolstra", "repo": "flake-compat", - "rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885", + "rev": "f387cd2afec9419c8ee37694406ca490c3f34ee5", "type": "github" }, "original": { @@ -185,11 +185,11 @@ "nixpkgs": "nixpkgs_4" }, "locked": { - "lastModified": 1757075491, - "narHash": "sha256-a+NMGl5tcvm+hyfSG2DlVPa8nZLpsumuRj1FfcKb2mQ=", + "lastModified": 1762351818, + "narHash": "sha256-0ptUDbYwxv1kk/uzEX4+NJjY2e16MaAhtzAOJ6K0TG0=", "owner": "nix-community", "repo": "home-manager", - "rev": "f56bf065f9abedc7bc15e1f2454aa5c8edabaacf", + "rev": "b959c67241cae17fc9e4ee7eaf13dfa8512477ea", "type": "github" }, "original": { @@ -243,11 +243,11 @@ ] }, "locked": { - "lastModified": 1755678602, - "narHash": "sha256-uEC5O/NIUNs1zmc1aH1+G3GRACbODjk2iS0ET5hXtuk=", + "lastModified": 1760445448, + "narHash": "sha256-fXGjL6dw31FPFRrmIemzGiNSlfvEJTJNsmadZi+qNhI=", "owner": "hyprwm", "repo": "hyprgraphics", - "rev": "157cc52065a104fc3b8fa542ae648b992421d1c7", + "rev": "50fb9f069219f338a11cf0bcccb9e58357d67757", "type": "github" }, "original": { @@ -272,11 +272,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1756977414, - "narHash": "sha256-Hz5S4fILpYd1smWDZ+uLYjHgW22v6JS/04j15I4cFZE=", + "lastModified": 1762269308, + "narHash": "sha256-3fTMnF1E7BsZ7NlmFmPo6+SRFm4FELP45IDLHcGLZ1s=", "ref": "refs/heads/main", - "rev": "4e785d12a91117cd5b255052799d1a051d9976c0", - "revCount": 6409, + "rev": "46b71eda6423cc9c3b19cb310c3344e81ac624c5", + "revCount": 6551, "type": "git", "url": "https://github.com/hyprwm/Hyprland" }, @@ -290,11 +290,11 @@ "nixpkgs": "nixpkgs_6" }, "locked": { - "lastModified": 1755680610, - "narHash": "sha256-g7/g5o0spemkZCzPa8I21RgCmN0Kv41B5z9Z5HQWraY=", + "lastModified": 1759613406, + "narHash": "sha256-PzgQJydp+RlKvwDi807pXPlURdIAVqLppZDga3DwPqg=", "owner": "hyprwm", "repo": "contrib", - "rev": "04721247f417256ca96acf28cdfe946cf1006263", + "rev": "32e1a75b65553daefb419f0906ce19e04815aa3a", "type": "github" }, "original": { @@ -315,11 +315,11 @@ ] }, "locked": { - "lastModified": 1749046714, - "narHash": "sha256-kymV5FMnddYGI+UjwIw8ceDjdeg7ToDVjbHCvUlhn14=", + "lastModified": 1759610243, + "narHash": "sha256-+KEVnKBe8wz+a6dTLq8YDcF3UrhQElwsYJaVaHXJtoI=", "owner": "hyprwm", "repo": "hyprland-protocols", - "rev": "613878cb6f459c5e323aaafe1e6f388ac8a36330", + "rev": "bd153e76f751f150a09328dbdeb5e4fab9d23622", "type": "github" }, "original": { @@ -383,11 +383,11 @@ ] }, "locked": { - "lastModified": 1753819801, - "narHash": "sha256-tHe6XeNeVeKapkNM3tcjW4RuD+tB2iwwoogWJOtsqTI=", + "lastModified": 1759080228, + "narHash": "sha256-RgDoAja0T1hnF0pTc56xPfLfFOO8Utol2iITwYbUhTk=", "owner": "hyprwm", "repo": "hyprland-qtutils", - "rev": "b308a818b9dcaa7ab8ccab891c1b84ebde2152bc", + "rev": "629b15c19fa4082e4ce6be09fdb89e8c3312aed7", "type": "github" }, "original": { @@ -412,11 +412,11 @@ ] }, "locked": { - "lastModified": 1753622892, - "narHash": "sha256-0K+A+gmOI8IklSg5It1nyRNv0kCNL51duwnhUO/B8JA=", + "lastModified": 1758927902, + "narHash": "sha256-LZgMds7M94+vuMql2bERQ6LiFFdhgsEFezE4Vn+Ys3A=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "23f0debd2003f17bd65f851cd3f930cff8a8c809", + "rev": "4dafa28d4f79877d67a7d1a654cddccf8ebf15da", "type": "github" }, "original": { @@ -437,11 +437,11 @@ ] }, "locked": { - "lastModified": 1756117388, - "narHash": "sha256-oRDel6pNl/T2tI+nc/USU9ZP9w08dxtl7hiZxa0C/Wc=", + "lastModified": 1762208756, + "narHash": "sha256-hC1jb4tdjFfEuU18KQiMgz5XPAO+d5SfbjAUS7haLl4=", "owner": "hyprwm", "repo": "hyprutils", - "rev": "b2ae3204845f5f2f79b4703b441252d8ad2ecfd0", + "rev": "164a30b3d8b3174a32ac7326782476f1188e6118", "type": "github" }, "original": { @@ -518,11 +518,11 @@ "xwayland-satellite-unstable": "xwayland-satellite-unstable" }, "locked": { - "lastModified": 1757071535, - "narHash": "sha256-I3ppQKxd2oxQfwMCW04TSWnIwp5an5kTMY+tx0W8jaA=", + "lastModified": 1762341801, + "narHash": "sha256-zx7UxreMz646qikxw+So7eGRQeWccKFZxuMvJowJuFs=", "owner": "sodiboo", "repo": "niri-flake", - "rev": "efa08fc58d7da5be64cfebc52b7dc44bf8d19ba9", + "rev": "20aadad64b8b8cbebc71371713c141d91d7f8172", "type": "github" }, "original": { @@ -551,11 +551,11 @@ "niri-unstable": { "flake": false, "locked": { - "lastModified": 1756926064, - "narHash": "sha256-5/1vyFRLvJWxhBgpPaV2orC0pjSgIny6JM6+joLyZok=", + "lastModified": 1762146685, + "narHash": "sha256-anRlNG6t7esBbF1+ALDeathVBSclA0PEL52Vo0WnN5g=", "owner": "YaLTeR", "repo": "niri", - "rev": "c69464c1288789020d9a086f86c970a7dc49b8c7", + "rev": "a2ca2b3c866bc781b12c334a9f949b3db6d7c943", "type": "github" }, "original": { @@ -566,11 +566,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1754498491, - "narHash": "sha256-erbiH2agUTD0Z30xcVSFcDHzkRvkRXOQ3lb887bcVrs=", + "lastModified": 1761672384, + "narHash": "sha256-o9KF3DJL7g7iYMZq9SWgfS1BFlNbsm6xplRjVlOCkXI=", "owner": "nixos", "repo": "nixpkgs", - "rev": "c2ae88e026f9525daf89587f3cbee584b92b6134", + "rev": "08dacfca559e1d7da38f3cf05f1f45ee9bfd213c", "type": "github" }, "original": { @@ -582,11 +582,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1757020766, - "narHash": "sha256-PLoSjHRa2bUbi1x9HoXgTx2AiuzNXs54c8omhadyvp0=", + "lastModified": 1762233356, + "narHash": "sha256-cGS3lLTYusbEP/IJIWGgnkzIl+FA5xDvtiHyjalGr4k=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "fe83bbdde2ccdc2cb9573aa846abe8363f79a97a", + "rev": "ca534a76c4afb2bdc07b681dbc11b453bab21af8", "type": "github" }, "original": { @@ -598,11 +598,11 @@ }, "nixpkgs_10": { "locked": { - "lastModified": 1744868846, - "narHash": "sha256-5RJTdUHDmj12Qsv7XOhuospjAjATNiTMElplWnJE9Hs=", + "lastModified": 1760596604, + "narHash": "sha256-J/i5K6AAz/y5dBePHQOuzC7MbhyTOKsd/GLezSbEFiM=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "ebe4301cbd8f81c4f8d3244b3632338bbeb6d49c", + "rev": "3cbe716e2346710d6e1f7c559363d14e11c32a43", "type": "github" }, "original": { @@ -630,11 +630,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1756542300, - "narHash": "sha256-tlOn88coG5fzdyqz6R93SQL5Gpq+m/DsWpekNFhqPQk=", + "lastModified": 1761907660, + "narHash": "sha256-kJ8lIZsiPOmbkJypG+B5sReDXSD1KGu2VEPNqhRa/ew=", "owner": "nixos", "repo": "nixpkgs", - "rev": "d7600c775f877cd87b4f5a831c28aa94137377aa", + "rev": "2fb006b87f04c4d3bdf08cfdbc7fab9c13d94a15", "type": "github" }, "original": { @@ -646,11 +646,11 @@ }, "nixpkgs_4": { "locked": { - "lastModified": 1756542300, - "narHash": "sha256-tlOn88coG5fzdyqz6R93SQL5Gpq+m/DsWpekNFhqPQk=", + "lastModified": 1762111121, + "narHash": "sha256-4vhDuZ7OZaZmKKrnDpxLZZpGIJvAeMtK6FKLJYUtAdw=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "d7600c775f877cd87b4f5a831c28aa94137377aa", + "rev": "b3d51a0365f6695e7dd5cdf3e180604530ed33b4", "type": "github" }, "original": { @@ -662,11 +662,11 @@ }, "nixpkgs_5": { "locked": { - "lastModified": 1756266583, - "narHash": "sha256-cr748nSmpfvnhqSXPiCfUPxRz2FJnvf/RjJGvFfaCsM=", + "lastModified": 1762111121, + "narHash": "sha256-4vhDuZ7OZaZmKKrnDpxLZZpGIJvAeMtK6FKLJYUtAdw=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "8a6d5427d99ec71c64f0b93d45778c889005d9c2", + "rev": "b3d51a0365f6695e7dd5cdf3e180604530ed33b4", "type": "github" }, "original": { @@ -710,11 +710,11 @@ }, "nixpkgs_8": { "locked": { - "lastModified": 1756787288, - "narHash": "sha256-rw/PHa1cqiePdBxhF66V7R+WAP8WekQ0mCDG4CFqT8Y=", + "lastModified": 1762111121, + "narHash": "sha256-4vhDuZ7OZaZmKKrnDpxLZZpGIJvAeMtK6FKLJYUtAdw=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "d0fc30899600b9b3466ddb260fd83deb486c32f1", + "rev": "b3d51a0365f6695e7dd5cdf3e180604530ed33b4", "type": "github" }, "original": { @@ -726,11 +726,11 @@ }, "nixpkgs_9": { "locked": { - "lastModified": 1756787288, - "narHash": "sha256-rw/PHa1cqiePdBxhF66V7R+WAP8WekQ0mCDG4CFqT8Y=", + "lastModified": 1762111121, + "narHash": "sha256-4vhDuZ7OZaZmKKrnDpxLZZpGIJvAeMtK6FKLJYUtAdw=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "d0fc30899600b9b3466ddb260fd83deb486c32f1", + "rev": "b3d51a0365f6695e7dd5cdf3e180604530ed33b4", "type": "github" }, "original": { @@ -749,11 +749,11 @@ ] }, "locked": { - "lastModified": 1755960406, - "narHash": "sha256-RF7j6C1TmSTK9tYWO6CdEMtg6XZaUKcvZwOCD2SICZs=", + "lastModified": 1760663237, + "narHash": "sha256-BflA6U4AM1bzuRMR8QqzPXqh8sWVCNDzOdsxXEguJIc=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "e891a93b193fcaf2fc8012d890dc7f0befe86ec2", + "rev": "ca5b894d3e3e151ffc1db040b6ce4dcc75d31c37", "type": "github" }, "original": { @@ -780,11 +780,11 @@ "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1754575663, - "narHash": "sha256-afOx8AG0KYtw7mlt6s6ahBBy7eEHZwws3iCRoiuRQS4=", + "lastModified": 1761791894, + "narHash": "sha256-myRIDh+PxaREz+z9LzbqBJF+SnTFJwkthKDX9zMyddY=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "6db0fb0e9cec2e9729dc52bf4898e6c135bb8a0f", + "rev": "59c45eb69d9222a4362673141e00ff77842cd219", "type": "github" }, "original": { @@ -798,11 +798,11 @@ "nixpkgs": "nixpkgs_10" }, "locked": { - "lastModified": 1754988908, - "narHash": "sha256-t+voe2961vCgrzPFtZxha0/kmFSHFobzF00sT8p9h0U=", + "lastModified": 1760998189, + "narHash": "sha256-ee2e1/AeGL5X8oy/HXsZQvZnae6XfEVdstGopKucYLY=", "owner": "Mic92", "repo": "sops-nix", - "rev": "3223c7a92724b5d804e9988c6b447a0d09017d48", + "rev": "5a7d18b5c55642df5c432aadb757140edfeb70b3", "type": "github" }, "original": { @@ -869,11 +869,11 @@ ] }, "locked": { - "lastModified": 1755354946, - "narHash": "sha256-zdov5f/GcoLQc9qYIS1dUTqtJMeDqmBmo59PAxze6e4=", + "lastModified": 1761431178, + "narHash": "sha256-xzjC1CV3+wpUQKNF+GnadnkeGUCJX+vgaWIZsnz9tzI=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "a10726d6a8d0ef1a0c645378f983b6278c42eaa0", + "rev": "4b8801228ff958d028f588f0c2b911dbf32297f9", "type": "github" }, "original": { @@ -902,11 +902,11 @@ "xwayland-satellite-unstable": { "flake": false, "locked": { - "lastModified": 1756869116, - "narHash": "sha256-SGcqX3amLH4xiA+dwF2Fu2mt1O8zHc60v0+NEZGDJhw=", + "lastModified": 1762302024, + "narHash": "sha256-F+4W0J5r7fbEl+VmATFqAA5+4dFSNAmLJB7tAtrTIkY=", "owner": "Supreeeme", "repo": "xwayland-satellite", - "rev": "41e865c8d35468c67b991ef5a245a98b3e44108c", + "rev": "53b6072bd995b5b4017999cf247f9eb6660c72a2", "type": "github" }, "original": { diff --git a/hmModules/apps/git/app.nix b/hmModules/apps/git/app.nix index 569ee14..bd98b70 100644 --- a/hmModules/apps/git/app.nix +++ b/hmModules/apps/git/app.nix @@ -12,10 +12,12 @@ config = lib.mkIf config.git.enable { programs.git = { enable = true; - userName = config.git.username; - userEmail = config.git.email; - extraConfig = { - user.signingkey = "${config.home.homeDirectory}/.ssh/id_ed25519.pub"; + settings = { + user = { + name = config.git.username; + email = config.git.email; + signingkey = "${config.home.homeDirectory}/.ssh/id_ed25519.pub"; + }; gpg.format = "ssh"; commit.gpgSign = "true"; tag.gpgSign = "true"; diff --git a/hmModules/apps/lf/app.nix b/hmModules/apps/lf/app.nix index f4ff3da..25a3b89 100644 --- a/hmModules/apps/lf/app.nix +++ b/hmModules/apps/lf/app.nix @@ -33,7 +33,7 @@ relativenumber = true; }; commands = { - dragon-out = ''%${pkgs.xdragon}/bin/xdragon -a -x "$fx"''; + dragon-out = ''%${pkgs.dragon-drop}/bin/dragon -a -x "$fx"''; trash = lib.mkIf config.trash.enable '' %${pkgs.trash-cli}/bin/trash "$fx" ''; diff --git a/hmModules/apps/niri/app.nix b/hmModules/apps/niri/app.nix index 2b84d94..ae70ea9 100644 --- a/hmModules/apps/niri/app.nix +++ b/hmModules/apps/niri/app.nix @@ -53,8 +53,8 @@ binds = with config.lib.niri.actions; { "Mod+Return".action= spawn "${config.defaultApps.terminal}"; "Mod+Shift+Return".action = spawn "${pkgs.fuzzel}/bin/fuzzel"; - "Mod+P".action = screenshot; - "Mod+Shift+P".action = screenshot-window; + "Mod+P".action.screenshot = []; + "Mod+Shift+P".action.screenshot-window = []; "Mod+Tab".action = switch-preset-column-width; "Mod+Shift+Q".action = quit; diff --git a/nixosModules/services/caddy/service.nix b/nixosModules/services/caddy/service.nix index 429340c..ee722b3 100644 --- a/nixosModules/services/caddy/service.nix +++ b/nixosModules/services/caddy/service.nix @@ -20,7 +20,7 @@ ''; package = pkgs.caddy.withPlugins { plugins = [ "github.com/caddy-dns/porkbun@v0.3.1" ]; - hash = "sha256-PUHu+KPywdJMuPLHPtQhUaw3Cv1pED5XQ1MOzlT/6h4="; + hash = "sha256-j/GODingW5BhfjQRajinivX/9zpiLGgyxvAjX0+amRU="; }; virtualHosts = config.caddy.vhosts; email = config.caddy.adminEmail; From a299b45725586505afecec6135919eb8155465b4 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 5 Nov 2025 08:27:13 -0800 Subject: [PATCH 376/412] Flake update 2025-11-05 & Niri fix --- flake.lock | 170 ++++++++++++------------ hmModules/apps/git/app.nix | 10 +- hmModules/apps/lf/app.nix | 2 +- hmModules/apps/niri/app.nix | 4 +- nixosModules/services/caddy/service.nix | 2 +- 5 files changed, 95 insertions(+), 93 deletions(-) diff --git a/flake.lock b/flake.lock index d6589ec..50598c2 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ "rust-overlay": "rust-overlay" }, "locked": { - "lastModified": 1755609725, - "narHash": "sha256-r0Y5VDxpiA1AJy02VkmeCNudZ8/JJR1OP3ldtfce0ls=", + "lastModified": 1762188647, + "narHash": "sha256-OAXK4p7WIYUcp8xx9m0RZUpV6XUDEhkoM4efI8dzPiU=", "owner": "ezKEa", "repo": "aagl-gtk-on-nix", - "rev": "7566a0bcc55dbfaeb28791c06aa02060cf5bd0bf", + "rev": "1172be1377bc65581004f4d5927b58c5c7d96639", "type": "github" }, "original": { @@ -26,11 +26,11 @@ "nixpkgs": "nixpkgs_3" }, "locked": { - "lastModified": 1756679577, - "narHash": "sha256-pkfftqE2CxVN6nKDZvlNdBxIkb/x5ch4wVfwZMYNGCM=", + "lastModified": 1762046771, + "narHash": "sha256-baVZvZZN0t9F3fvVhxmQA1/oNykXGd/YhlF19JqCLc8=", "owner": "Aylur", "repo": "ags", - "rev": "04d51ac4082af3ec47e8a803417a1a55b75151d7", + "rev": "fe13af2daec716226ccdb3158606a8577853e0ff", "type": "github" }, "original": { @@ -59,11 +59,11 @@ ] }, "locked": { - "lastModified": 1755946532, - "narHash": "sha256-POePremlUY5GyA1zfbtic6XLxDaQcqHN6l+bIxdT5gc=", + "lastModified": 1761420899, + "narHash": "sha256-kxGCip6GNbcbNWKu4J2iKbNYfFTS8Zbjg9CWp0zmFoM=", "owner": "hyprwm", "repo": "aquamarine", - "rev": "81584dae2df6ac79f6b6dae0ecb7705e95129ada", + "rev": "62479232aae42c1ef09c2c027c8cfd91df060897", "type": "github" }, "original": { @@ -80,11 +80,11 @@ ] }, "locked": { - "lastModified": 1756474652, - "narHash": "sha256-iiBU6itpEqE0spXeNJ3uJTfioSyKYjt5bNepykpDXTE=", + "lastModified": 1762012522, + "narHash": "sha256-ncEN4OVFM5M9VFc4oR3gOI5K8r99GcYxtU+Cf4Z8pbs=", "owner": "aylur", "repo": "astal", - "rev": "20bd8318e4136fbd3d4eb2d64dbabc3acbc915dd", + "rev": "671d4229c798834190a50fb8b8d8addd19b529e9", "type": "github" }, "original": { @@ -96,11 +96,11 @@ "flake-compat": { "flake": false, "locked": { - "lastModified": 1747046372, - "narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=", + "lastModified": 1761588595, + "narHash": "sha256-XKUZz9zewJNUj46b4AJdiRZJAvSZ0Dqj2BNfXvFlJC4=", "owner": "edolstra", "repo": "flake-compat", - "rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885", + "rev": "f387cd2afec9419c8ee37694406ca490c3f34ee5", "type": "github" }, "original": { @@ -185,11 +185,11 @@ "nixpkgs": "nixpkgs_4" }, "locked": { - "lastModified": 1757075491, - "narHash": "sha256-a+NMGl5tcvm+hyfSG2DlVPa8nZLpsumuRj1FfcKb2mQ=", + "lastModified": 1762351818, + "narHash": "sha256-0ptUDbYwxv1kk/uzEX4+NJjY2e16MaAhtzAOJ6K0TG0=", "owner": "nix-community", "repo": "home-manager", - "rev": "f56bf065f9abedc7bc15e1f2454aa5c8edabaacf", + "rev": "b959c67241cae17fc9e4ee7eaf13dfa8512477ea", "type": "github" }, "original": { @@ -243,11 +243,11 @@ ] }, "locked": { - "lastModified": 1755678602, - "narHash": "sha256-uEC5O/NIUNs1zmc1aH1+G3GRACbODjk2iS0ET5hXtuk=", + "lastModified": 1760445448, + "narHash": "sha256-fXGjL6dw31FPFRrmIemzGiNSlfvEJTJNsmadZi+qNhI=", "owner": "hyprwm", "repo": "hyprgraphics", - "rev": "157cc52065a104fc3b8fa542ae648b992421d1c7", + "rev": "50fb9f069219f338a11cf0bcccb9e58357d67757", "type": "github" }, "original": { @@ -272,11 +272,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1756977414, - "narHash": "sha256-Hz5S4fILpYd1smWDZ+uLYjHgW22v6JS/04j15I4cFZE=", + "lastModified": 1762269308, + "narHash": "sha256-3fTMnF1E7BsZ7NlmFmPo6+SRFm4FELP45IDLHcGLZ1s=", "ref": "refs/heads/main", - "rev": "4e785d12a91117cd5b255052799d1a051d9976c0", - "revCount": 6409, + "rev": "46b71eda6423cc9c3b19cb310c3344e81ac624c5", + "revCount": 6551, "type": "git", "url": "https://github.com/hyprwm/Hyprland" }, @@ -290,11 +290,11 @@ "nixpkgs": "nixpkgs_6" }, "locked": { - "lastModified": 1755680610, - "narHash": "sha256-g7/g5o0spemkZCzPa8I21RgCmN0Kv41B5z9Z5HQWraY=", + "lastModified": 1759613406, + "narHash": "sha256-PzgQJydp+RlKvwDi807pXPlURdIAVqLppZDga3DwPqg=", "owner": "hyprwm", "repo": "contrib", - "rev": "04721247f417256ca96acf28cdfe946cf1006263", + "rev": "32e1a75b65553daefb419f0906ce19e04815aa3a", "type": "github" }, "original": { @@ -315,11 +315,11 @@ ] }, "locked": { - "lastModified": 1749046714, - "narHash": "sha256-kymV5FMnddYGI+UjwIw8ceDjdeg7ToDVjbHCvUlhn14=", + "lastModified": 1759610243, + "narHash": "sha256-+KEVnKBe8wz+a6dTLq8YDcF3UrhQElwsYJaVaHXJtoI=", "owner": "hyprwm", "repo": "hyprland-protocols", - "rev": "613878cb6f459c5e323aaafe1e6f388ac8a36330", + "rev": "bd153e76f751f150a09328dbdeb5e4fab9d23622", "type": "github" }, "original": { @@ -383,11 +383,11 @@ ] }, "locked": { - "lastModified": 1753819801, - "narHash": "sha256-tHe6XeNeVeKapkNM3tcjW4RuD+tB2iwwoogWJOtsqTI=", + "lastModified": 1759080228, + "narHash": "sha256-RgDoAja0T1hnF0pTc56xPfLfFOO8Utol2iITwYbUhTk=", "owner": "hyprwm", "repo": "hyprland-qtutils", - "rev": "b308a818b9dcaa7ab8ccab891c1b84ebde2152bc", + "rev": "629b15c19fa4082e4ce6be09fdb89e8c3312aed7", "type": "github" }, "original": { @@ -412,11 +412,11 @@ ] }, "locked": { - "lastModified": 1753622892, - "narHash": "sha256-0K+A+gmOI8IklSg5It1nyRNv0kCNL51duwnhUO/B8JA=", + "lastModified": 1758927902, + "narHash": "sha256-LZgMds7M94+vuMql2bERQ6LiFFdhgsEFezE4Vn+Ys3A=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "23f0debd2003f17bd65f851cd3f930cff8a8c809", + "rev": "4dafa28d4f79877d67a7d1a654cddccf8ebf15da", "type": "github" }, "original": { @@ -437,11 +437,11 @@ ] }, "locked": { - "lastModified": 1756117388, - "narHash": "sha256-oRDel6pNl/T2tI+nc/USU9ZP9w08dxtl7hiZxa0C/Wc=", + "lastModified": 1762208756, + "narHash": "sha256-hC1jb4tdjFfEuU18KQiMgz5XPAO+d5SfbjAUS7haLl4=", "owner": "hyprwm", "repo": "hyprutils", - "rev": "b2ae3204845f5f2f79b4703b441252d8ad2ecfd0", + "rev": "164a30b3d8b3174a32ac7326782476f1188e6118", "type": "github" }, "original": { @@ -518,11 +518,11 @@ "xwayland-satellite-unstable": "xwayland-satellite-unstable" }, "locked": { - "lastModified": 1757071535, - "narHash": "sha256-I3ppQKxd2oxQfwMCW04TSWnIwp5an5kTMY+tx0W8jaA=", + "lastModified": 1762341801, + "narHash": "sha256-zx7UxreMz646qikxw+So7eGRQeWccKFZxuMvJowJuFs=", "owner": "sodiboo", "repo": "niri-flake", - "rev": "efa08fc58d7da5be64cfebc52b7dc44bf8d19ba9", + "rev": "20aadad64b8b8cbebc71371713c141d91d7f8172", "type": "github" }, "original": { @@ -551,11 +551,11 @@ "niri-unstable": { "flake": false, "locked": { - "lastModified": 1756926064, - "narHash": "sha256-5/1vyFRLvJWxhBgpPaV2orC0pjSgIny6JM6+joLyZok=", + "lastModified": 1762146685, + "narHash": "sha256-anRlNG6t7esBbF1+ALDeathVBSclA0PEL52Vo0WnN5g=", "owner": "YaLTeR", "repo": "niri", - "rev": "c69464c1288789020d9a086f86c970a7dc49b8c7", + "rev": "a2ca2b3c866bc781b12c334a9f949b3db6d7c943", "type": "github" }, "original": { @@ -566,11 +566,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1754498491, - "narHash": "sha256-erbiH2agUTD0Z30xcVSFcDHzkRvkRXOQ3lb887bcVrs=", + "lastModified": 1761672384, + "narHash": "sha256-o9KF3DJL7g7iYMZq9SWgfS1BFlNbsm6xplRjVlOCkXI=", "owner": "nixos", "repo": "nixpkgs", - "rev": "c2ae88e026f9525daf89587f3cbee584b92b6134", + "rev": "08dacfca559e1d7da38f3cf05f1f45ee9bfd213c", "type": "github" }, "original": { @@ -582,11 +582,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1757020766, - "narHash": "sha256-PLoSjHRa2bUbi1x9HoXgTx2AiuzNXs54c8omhadyvp0=", + "lastModified": 1762233356, + "narHash": "sha256-cGS3lLTYusbEP/IJIWGgnkzIl+FA5xDvtiHyjalGr4k=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "fe83bbdde2ccdc2cb9573aa846abe8363f79a97a", + "rev": "ca534a76c4afb2bdc07b681dbc11b453bab21af8", "type": "github" }, "original": { @@ -598,11 +598,11 @@ }, "nixpkgs_10": { "locked": { - "lastModified": 1744868846, - "narHash": "sha256-5RJTdUHDmj12Qsv7XOhuospjAjATNiTMElplWnJE9Hs=", + "lastModified": 1760596604, + "narHash": "sha256-J/i5K6AAz/y5dBePHQOuzC7MbhyTOKsd/GLezSbEFiM=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "ebe4301cbd8f81c4f8d3244b3632338bbeb6d49c", + "rev": "3cbe716e2346710d6e1f7c559363d14e11c32a43", "type": "github" }, "original": { @@ -630,11 +630,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1756542300, - "narHash": "sha256-tlOn88coG5fzdyqz6R93SQL5Gpq+m/DsWpekNFhqPQk=", + "lastModified": 1761907660, + "narHash": "sha256-kJ8lIZsiPOmbkJypG+B5sReDXSD1KGu2VEPNqhRa/ew=", "owner": "nixos", "repo": "nixpkgs", - "rev": "d7600c775f877cd87b4f5a831c28aa94137377aa", + "rev": "2fb006b87f04c4d3bdf08cfdbc7fab9c13d94a15", "type": "github" }, "original": { @@ -646,11 +646,11 @@ }, "nixpkgs_4": { "locked": { - "lastModified": 1756542300, - "narHash": "sha256-tlOn88coG5fzdyqz6R93SQL5Gpq+m/DsWpekNFhqPQk=", + "lastModified": 1762111121, + "narHash": "sha256-4vhDuZ7OZaZmKKrnDpxLZZpGIJvAeMtK6FKLJYUtAdw=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "d7600c775f877cd87b4f5a831c28aa94137377aa", + "rev": "b3d51a0365f6695e7dd5cdf3e180604530ed33b4", "type": "github" }, "original": { @@ -662,11 +662,11 @@ }, "nixpkgs_5": { "locked": { - "lastModified": 1756266583, - "narHash": "sha256-cr748nSmpfvnhqSXPiCfUPxRz2FJnvf/RjJGvFfaCsM=", + "lastModified": 1762111121, + "narHash": "sha256-4vhDuZ7OZaZmKKrnDpxLZZpGIJvAeMtK6FKLJYUtAdw=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "8a6d5427d99ec71c64f0b93d45778c889005d9c2", + "rev": "b3d51a0365f6695e7dd5cdf3e180604530ed33b4", "type": "github" }, "original": { @@ -710,11 +710,11 @@ }, "nixpkgs_8": { "locked": { - "lastModified": 1756787288, - "narHash": "sha256-rw/PHa1cqiePdBxhF66V7R+WAP8WekQ0mCDG4CFqT8Y=", + "lastModified": 1762111121, + "narHash": "sha256-4vhDuZ7OZaZmKKrnDpxLZZpGIJvAeMtK6FKLJYUtAdw=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "d0fc30899600b9b3466ddb260fd83deb486c32f1", + "rev": "b3d51a0365f6695e7dd5cdf3e180604530ed33b4", "type": "github" }, "original": { @@ -726,11 +726,11 @@ }, "nixpkgs_9": { "locked": { - "lastModified": 1756787288, - "narHash": "sha256-rw/PHa1cqiePdBxhF66V7R+WAP8WekQ0mCDG4CFqT8Y=", + "lastModified": 1762111121, + "narHash": "sha256-4vhDuZ7OZaZmKKrnDpxLZZpGIJvAeMtK6FKLJYUtAdw=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "d0fc30899600b9b3466ddb260fd83deb486c32f1", + "rev": "b3d51a0365f6695e7dd5cdf3e180604530ed33b4", "type": "github" }, "original": { @@ -749,11 +749,11 @@ ] }, "locked": { - "lastModified": 1755960406, - "narHash": "sha256-RF7j6C1TmSTK9tYWO6CdEMtg6XZaUKcvZwOCD2SICZs=", + "lastModified": 1760663237, + "narHash": "sha256-BflA6U4AM1bzuRMR8QqzPXqh8sWVCNDzOdsxXEguJIc=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "e891a93b193fcaf2fc8012d890dc7f0befe86ec2", + "rev": "ca5b894d3e3e151ffc1db040b6ce4dcc75d31c37", "type": "github" }, "original": { @@ -780,11 +780,11 @@ "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1754575663, - "narHash": "sha256-afOx8AG0KYtw7mlt6s6ahBBy7eEHZwws3iCRoiuRQS4=", + "lastModified": 1761791894, + "narHash": "sha256-myRIDh+PxaREz+z9LzbqBJF+SnTFJwkthKDX9zMyddY=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "6db0fb0e9cec2e9729dc52bf4898e6c135bb8a0f", + "rev": "59c45eb69d9222a4362673141e00ff77842cd219", "type": "github" }, "original": { @@ -798,11 +798,11 @@ "nixpkgs": "nixpkgs_10" }, "locked": { - "lastModified": 1754988908, - "narHash": "sha256-t+voe2961vCgrzPFtZxha0/kmFSHFobzF00sT8p9h0U=", + "lastModified": 1760998189, + "narHash": "sha256-ee2e1/AeGL5X8oy/HXsZQvZnae6XfEVdstGopKucYLY=", "owner": "Mic92", "repo": "sops-nix", - "rev": "3223c7a92724b5d804e9988c6b447a0d09017d48", + "rev": "5a7d18b5c55642df5c432aadb757140edfeb70b3", "type": "github" }, "original": { @@ -869,11 +869,11 @@ ] }, "locked": { - "lastModified": 1755354946, - "narHash": "sha256-zdov5f/GcoLQc9qYIS1dUTqtJMeDqmBmo59PAxze6e4=", + "lastModified": 1761431178, + "narHash": "sha256-xzjC1CV3+wpUQKNF+GnadnkeGUCJX+vgaWIZsnz9tzI=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "a10726d6a8d0ef1a0c645378f983b6278c42eaa0", + "rev": "4b8801228ff958d028f588f0c2b911dbf32297f9", "type": "github" }, "original": { @@ -902,11 +902,11 @@ "xwayland-satellite-unstable": { "flake": false, "locked": { - "lastModified": 1756869116, - "narHash": "sha256-SGcqX3amLH4xiA+dwF2Fu2mt1O8zHc60v0+NEZGDJhw=", + "lastModified": 1762302024, + "narHash": "sha256-F+4W0J5r7fbEl+VmATFqAA5+4dFSNAmLJB7tAtrTIkY=", "owner": "Supreeeme", "repo": "xwayland-satellite", - "rev": "41e865c8d35468c67b991ef5a245a98b3e44108c", + "rev": "53b6072bd995b5b4017999cf247f9eb6660c72a2", "type": "github" }, "original": { diff --git a/hmModules/apps/git/app.nix b/hmModules/apps/git/app.nix index 569ee14..bd98b70 100644 --- a/hmModules/apps/git/app.nix +++ b/hmModules/apps/git/app.nix @@ -12,10 +12,12 @@ config = lib.mkIf config.git.enable { programs.git = { enable = true; - userName = config.git.username; - userEmail = config.git.email; - extraConfig = { - user.signingkey = "${config.home.homeDirectory}/.ssh/id_ed25519.pub"; + settings = { + user = { + name = config.git.username; + email = config.git.email; + signingkey = "${config.home.homeDirectory}/.ssh/id_ed25519.pub"; + }; gpg.format = "ssh"; commit.gpgSign = "true"; tag.gpgSign = "true"; diff --git a/hmModules/apps/lf/app.nix b/hmModules/apps/lf/app.nix index f4ff3da..25a3b89 100644 --- a/hmModules/apps/lf/app.nix +++ b/hmModules/apps/lf/app.nix @@ -33,7 +33,7 @@ relativenumber = true; }; commands = { - dragon-out = ''%${pkgs.xdragon}/bin/xdragon -a -x "$fx"''; + dragon-out = ''%${pkgs.dragon-drop}/bin/dragon -a -x "$fx"''; trash = lib.mkIf config.trash.enable '' %${pkgs.trash-cli}/bin/trash "$fx" ''; diff --git a/hmModules/apps/niri/app.nix b/hmModules/apps/niri/app.nix index 2b84d94..ae70ea9 100644 --- a/hmModules/apps/niri/app.nix +++ b/hmModules/apps/niri/app.nix @@ -53,8 +53,8 @@ binds = with config.lib.niri.actions; { "Mod+Return".action= spawn "${config.defaultApps.terminal}"; "Mod+Shift+Return".action = spawn "${pkgs.fuzzel}/bin/fuzzel"; - "Mod+P".action = screenshot; - "Mod+Shift+P".action = screenshot-window; + "Mod+P".action.screenshot = []; + "Mod+Shift+P".action.screenshot-window = []; "Mod+Tab".action = switch-preset-column-width; "Mod+Shift+Q".action = quit; diff --git a/nixosModules/services/caddy/service.nix b/nixosModules/services/caddy/service.nix index 429340c..ee722b3 100644 --- a/nixosModules/services/caddy/service.nix +++ b/nixosModules/services/caddy/service.nix @@ -20,7 +20,7 @@ ''; package = pkgs.caddy.withPlugins { plugins = [ "github.com/caddy-dns/porkbun@v0.3.1" ]; - hash = "sha256-PUHu+KPywdJMuPLHPtQhUaw3Cv1pED5XQ1MOzlT/6h4="; + hash = "sha256-j/GODingW5BhfjQRajinivX/9zpiLGgyxvAjX0+amRU="; }; virtualHosts = config.caddy.vhosts; email = config.caddy.adminEmail; From 98ad425b0182d182527c99b1a6c19bb8a005e2a7 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 19 Nov 2025 09:18:38 -0800 Subject: [PATCH 377/412] Gitignore, add result directory --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index e69de29..b2be92b 100644 --- a/.gitignore +++ b/.gitignore @@ -0,0 +1 @@ +result From af94d1780225f0604575f799f92c39452577b43d Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 19 Nov 2025 09:18:38 -0800 Subject: [PATCH 378/412] Gitignore, add result directory --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index e69de29..b2be92b 100644 --- a/.gitignore +++ b/.gitignore @@ -0,0 +1 @@ +result From 7340d694f88e1b61adcc5b6b5c313649af5392f5 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 19 Nov 2025 09:19:43 -0800 Subject: [PATCH 379/412] Flake, flake-part+easy-host, remove unused inputs IF YOU ARE NOT ME: I would not use this configuration. In the past I would feel confident telling you to drop in your own host and be off to the races, but right now users are in a state which required hard coding some of my nominal preferences. Read on for more specifics Completely refactors the flake.nix part of the repo. This removes my strange legacy code for directory-based hosts+users in favor of using easy-host and flake-parts. As a result of this some specialArgs were lost, namely the list of users and the username being passed. I think this is the right way to go in the short term, but it has lead to some hardcoded values. Namely "pan" is created as a user regardless of configuration In tandem with this is the deprecation of some modules which had inputs in flake which I wasn't using. I'm sure there is a better way to do this, but I didn't like downloading and caching them every time when I knew I wasn't using them. I'm currently very unhappy with the users part of this change, but that wasn't the goal of this branch. I will revisit in a larger commit. --- flake.lock | 773 ++---------------- flake.nix | 159 ++-- hmModules/apps/hypr/app.nix | 436 +++++----- hmModules/apps/lf/app.nix | 2 +- hmModules/automatic/default.nix | 10 +- hmModules/services/widgets/ags/default.nix | 39 +- hosts/jibril/{host.nix => default.nix} | 0 hosts/juri/{host.nix => default.nix} | 0 hosts/juri/users/badtz/user.nix | 10 - hosts/onizuka/{host.nix => default.nix} | 2 - nixosModules/apps/animelauncher/app.nix | 27 +- nixosModules/automatic/default.nix | 5 +- nixosModules/services/caddy/service.nix | 2 +- nixosModules/services/hyprland/service.nix | 24 +- .../pan/user.nix => users/jibril/default.nix | 0 .../pan/user.nix => users/juri/default.nix | 0 .../pan/user.nix => users/onizuka/default.nix | 0 17 files changed, 428 insertions(+), 1061 deletions(-) rename hosts/jibril/{host.nix => default.nix} (100%) rename hosts/juri/{host.nix => default.nix} (100%) delete mode 100644 hosts/juri/users/badtz/user.nix rename hosts/onizuka/{host.nix => default.nix} (91%) rename hosts/jibril/users/pan/user.nix => users/jibril/default.nix (100%) rename hosts/juri/users/pan/user.nix => users/juri/default.nix (100%) rename hosts/onizuka/users/pan/user.nix => users/onizuka/default.nix (100%) diff --git a/flake.lock b/flake.lock index 50598c2..0e7d694 100644 --- a/flake.lock +++ b/flake.lock @@ -1,140 +1,50 @@ { "nodes": { - "aagl": { - "inputs": { - "flake-compat": "flake-compat", - "nixpkgs": "nixpkgs", - "rust-overlay": "rust-overlay" - }, + "easy-hosts": { "locked": { - "lastModified": 1762188647, - "narHash": "sha256-OAXK4p7WIYUcp8xx9m0RZUpV6XUDEhkoM4efI8dzPiU=", - "owner": "ezKEa", - "repo": "aagl-gtk-on-nix", - "rev": "1172be1377bc65581004f4d5927b58c5c7d96639", + "lastModified": 1755470564, + "narHash": "sha256-KB1ZryVDoQcbIsItOf4WtxkHhh3ppj+XwMpSnt/2QHc=", + "owner": "tgirlcloud", + "repo": "easy-hosts", + "rev": "d0422bc7b3db26268982aa15d07e60370e76ee1d", "type": "github" }, "original": { - "owner": "ezKEa", - "repo": "aagl-gtk-on-nix", + "owner": "tgirlcloud", + "repo": "easy-hosts", "type": "github" } }, - "ags": { + "flake-parts": { "inputs": { - "astal": "astal", - "nixpkgs": "nixpkgs_3" - }, - "locked": { - "lastModified": 1762046771, - "narHash": "sha256-baVZvZZN0t9F3fvVhxmQA1/oNykXGd/YhlF19JqCLc8=", - "owner": "Aylur", - "repo": "ags", - "rev": "fe13af2daec716226ccdb3158606a8577853e0ff", - "type": "github" - }, - "original": { - "owner": "Aylur", - "repo": "ags", - "type": "github" - } - }, - "aquamarine": { - "inputs": { - "hyprutils": [ - "hyprland", - "hyprutils" - ], - "hyprwayland-scanner": [ - "hyprland", - "hyprwayland-scanner" - ], - "nixpkgs": [ - "hyprland", - "nixpkgs" - ], - "systems": [ - "hyprland", - "systems" - ] - }, - "locked": { - "lastModified": 1761420899, - "narHash": "sha256-kxGCip6GNbcbNWKu4J2iKbNYfFTS8Zbjg9CWp0zmFoM=", - "owner": "hyprwm", - "repo": "aquamarine", - "rev": "62479232aae42c1ef09c2c027c8cfd91df060897", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "aquamarine", - "type": "github" - } - }, - "astal": { - "inputs": { - "nixpkgs": [ - "ags", + "nixpkgs-lib": [ "nixpkgs" ] }, "locked": { - "lastModified": 1762012522, - "narHash": "sha256-ncEN4OVFM5M9VFc4oR3gOI5K8r99GcYxtU+Cf4Z8pbs=", - "owner": "aylur", - "repo": "astal", - "rev": "671d4229c798834190a50fb8b8d8addd19b529e9", + "lastModified": 1762980239, + "narHash": "sha256-8oNVE8TrD19ulHinjaqONf9QWCKK+w4url56cdStMpM=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "52a2caecc898d0b46b2b905f058ccc5081f842da", "type": "github" }, "original": { - "owner": "aylur", - "repo": "astal", - "type": "github" - } - }, - "flake-compat": { - "flake": false, - "locked": { - "lastModified": 1761588595, - "narHash": "sha256-XKUZz9zewJNUj46b4AJdiRZJAvSZ0Dqj2BNfXvFlJC4=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "f387cd2afec9419c8ee37694406ca490c3f34ee5", - "type": "github" - }, - "original": { - "owner": "edolstra", - "repo": "flake-compat", - "type": "github" - } - }, - "flake-compat_2": { - "flake": false, - "locked": { - "lastModified": 1747046372, - "narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885", - "type": "github" - }, - "original": { - "owner": "edolstra", - "repo": "flake-compat", + "owner": "hercules-ci", + "repo": "flake-parts", "type": "github" } }, "flake-utils": { "inputs": { - "systems": "systems_2" + "systems": "systems" }, "locked": { - "lastModified": 1726560853, - "narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=", + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", "owner": "numtide", "repo": "flake-utils", - "rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", "type": "github" }, "original": { @@ -158,38 +68,18 @@ "type": "github" } }, - "gitignore": { - "inputs": { - "nixpkgs": [ - "hyprland", - "pre-commit-hooks", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1709087332, - "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", - "owner": "hercules-ci", - "repo": "gitignore.nix", - "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", - "type": "github" - }, - "original": { - "owner": "hercules-ci", - "repo": "gitignore.nix", - "type": "github" - } - }, "home-manager": { "inputs": { - "nixpkgs": "nixpkgs_4" + "nixpkgs": [ + "nixpkgs" + ] }, "locked": { - "lastModified": 1762351818, - "narHash": "sha256-0ptUDbYwxv1kk/uzEX4+NJjY2e16MaAhtzAOJ6K0TG0=", + "lastModified": 1763416652, + "narHash": "sha256-8EBEEvtzQ11LCxpQHMNEBQAGtQiCu/pqP9zSovDSbNM=", "owner": "nix-community", "repo": "home-manager", - "rev": "b959c67241cae17fc9e4ee7eaf13dfa8512477ea", + "rev": "ea164b7c9ccdc2321379c2ff78fd4317b4c41312", "type": "github" }, "original": { @@ -198,331 +88,60 @@ "type": "github" } }, - "hyprcursor": { - "inputs": { - "hyprlang": [ - "hyprland", - "hyprlang" - ], - "nixpkgs": [ - "hyprland", - "nixpkgs" - ], - "systems": [ - "hyprland", - "systems" - ] - }, - "locked": { - "lastModified": 1753964049, - "narHash": "sha256-lIqabfBY7z/OANxHoPeIrDJrFyYy9jAM4GQLzZ2feCM=", - "owner": "hyprwm", - "repo": "hyprcursor", - "rev": "44e91d467bdad8dcf8bbd2ac7cf49972540980a5", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "hyprcursor", - "type": "github" - } - }, - "hyprgraphics": { - "inputs": { - "hyprutils": [ - "hyprland", - "hyprutils" - ], - "nixpkgs": [ - "hyprland", - "nixpkgs" - ], - "systems": [ - "hyprland", - "systems" - ] - }, - "locked": { - "lastModified": 1760445448, - "narHash": "sha256-fXGjL6dw31FPFRrmIemzGiNSlfvEJTJNsmadZi+qNhI=", - "owner": "hyprwm", - "repo": "hyprgraphics", - "rev": "50fb9f069219f338a11cf0bcccb9e58357d67757", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "hyprgraphics", - "type": "github" - } - }, - "hyprland": { - "inputs": { - "aquamarine": "aquamarine", - "hyprcursor": "hyprcursor", - "hyprgraphics": "hyprgraphics", - "hyprland-protocols": "hyprland-protocols", - "hyprland-qtutils": "hyprland-qtutils", - "hyprlang": "hyprlang", - "hyprutils": "hyprutils", - "hyprwayland-scanner": "hyprwayland-scanner", - "nixpkgs": "nixpkgs_5", - "pre-commit-hooks": "pre-commit-hooks", - "systems": "systems", - "xdph": "xdph" - }, - "locked": { - "lastModified": 1762269308, - "narHash": "sha256-3fTMnF1E7BsZ7NlmFmPo6+SRFm4FELP45IDLHcGLZ1s=", - "ref": "refs/heads/main", - "rev": "46b71eda6423cc9c3b19cb310c3344e81ac624c5", - "revCount": 6551, - "type": "git", - "url": "https://github.com/hyprwm/Hyprland" - }, - "original": { - "type": "git", - "url": "https://github.com/hyprwm/Hyprland" - } - }, - "hyprland-contrib": { - "inputs": { - "nixpkgs": "nixpkgs_6" - }, - "locked": { - "lastModified": 1759613406, - "narHash": "sha256-PzgQJydp+RlKvwDi807pXPlURdIAVqLppZDga3DwPqg=", - "owner": "hyprwm", - "repo": "contrib", - "rev": "32e1a75b65553daefb419f0906ce19e04815aa3a", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "contrib", - "type": "github" - } - }, - "hyprland-protocols": { - "inputs": { - "nixpkgs": [ - "hyprland", - "nixpkgs" - ], - "systems": [ - "hyprland", - "systems" - ] - }, - "locked": { - "lastModified": 1759610243, - "narHash": "sha256-+KEVnKBe8wz+a6dTLq8YDcF3UrhQElwsYJaVaHXJtoI=", - "owner": "hyprwm", - "repo": "hyprland-protocols", - "rev": "bd153e76f751f150a09328dbdeb5e4fab9d23622", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "hyprland-protocols", - "type": "github" - } - }, - "hyprland-qt-support": { - "inputs": { - "hyprlang": [ - "hyprland", - "hyprland-qtutils", - "hyprlang" - ], - "nixpkgs": [ - "hyprland", - "hyprland-qtutils", - "nixpkgs" - ], - "systems": [ - "hyprland", - "hyprland-qtutils", - "systems" - ] - }, - "locked": { - "lastModified": 1749154592, - "narHash": "sha256-DO7z5CeT/ddSGDEnK9mAXm1qlGL47L3VAHLlLXoCjhE=", - "owner": "hyprwm", - "repo": "hyprland-qt-support", - "rev": "4c8053c3c888138a30c3a6c45c2e45f5484f2074", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "hyprland-qt-support", - "type": "github" - } - }, - "hyprland-qtutils": { - "inputs": { - "hyprland-qt-support": "hyprland-qt-support", - "hyprlang": [ - "hyprland", - "hyprlang" - ], - "hyprutils": [ - "hyprland", - "hyprland-qtutils", - "hyprlang", - "hyprutils" - ], - "nixpkgs": [ - "hyprland", - "nixpkgs" - ], - "systems": [ - "hyprland", - "systems" - ] - }, - "locked": { - "lastModified": 1759080228, - "narHash": "sha256-RgDoAja0T1hnF0pTc56xPfLfFOO8Utol2iITwYbUhTk=", - "owner": "hyprwm", - "repo": "hyprland-qtutils", - "rev": "629b15c19fa4082e4ce6be09fdb89e8c3312aed7", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "hyprland-qtutils", - "type": "github" - } - }, - "hyprlang": { - "inputs": { - "hyprutils": [ - "hyprland", - "hyprutils" - ], - "nixpkgs": [ - "hyprland", - "nixpkgs" - ], - "systems": [ - "hyprland", - "systems" - ] - }, - "locked": { - "lastModified": 1758927902, - "narHash": "sha256-LZgMds7M94+vuMql2bERQ6LiFFdhgsEFezE4Vn+Ys3A=", - "owner": "hyprwm", - "repo": "hyprlang", - "rev": "4dafa28d4f79877d67a7d1a654cddccf8ebf15da", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "hyprlang", - "type": "github" - } - }, - "hyprutils": { - "inputs": { - "nixpkgs": [ - "hyprland", - "nixpkgs" - ], - "systems": [ - "hyprland", - "systems" - ] - }, - "locked": { - "lastModified": 1762208756, - "narHash": "sha256-hC1jb4tdjFfEuU18KQiMgz5XPAO+d5SfbjAUS7haLl4=", - "owner": "hyprwm", - "repo": "hyprutils", - "rev": "164a30b3d8b3174a32ac7326782476f1188e6118", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "hyprutils", - "type": "github" - } - }, - "hyprwayland-scanner": { - "inputs": { - "nixpkgs": [ - "hyprland", - "nixpkgs" - ], - "systems": [ - "hyprland", - "systems" - ] - }, - "locked": { - "lastModified": 1755184602, - "narHash": "sha256-RCBQN8xuADB0LEgaKbfRqwm6CdyopE1xIEhNc67FAbw=", - "owner": "hyprwm", - "repo": "hyprwayland-scanner", - "rev": "b3b0f1f40ae09d4447c20608e5a4faf8bf3c492d", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "hyprwayland-scanner", - "type": "github" - } - }, "lix": { "flake": false, "locked": { - "lastModified": 1729298361, - "narHash": "sha256-hiGtfzxFkDc9TSYsb96Whg0vnqBVV7CUxyscZNhed0U=", - "rev": "ad9d06f7838a25beec425ff406fe68721fef73be", + "lastModified": 1763570812, + "narHash": "sha256-A42G8ulTZ1MFCR0VsLF21CoKi0XKGUYwtVBHGm5mFgQ=", + "rev": "f3b2f3496bd6d346cba475d0ba152a9d3a83dec7", "type": "tarball", - "url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/ad9d06f7838a25beec425ff406fe68721fef73be.tar.gz?rev=ad9d06f7838a25beec425ff406fe68721fef73be" + "url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/f3b2f3496bd6d346cba475d0ba152a9d3a83dec7.tar.gz" }, "original": { "type": "tarball", - "url": "https://git.lix.systems/lix-project/lix/archive/2.91.1.tar.gz" + "url": "https://git.lix.systems/lix-project/lix/archive/main.tar.gz" } }, "lix-module": { "inputs": { "flake-utils": "flake-utils", "flakey-profile": "flakey-profile", - "lix": "lix", - "nixpkgs": "nixpkgs_7" + "lix": [ + "lix" + ], + "nixpkgs": [ + "nixpkgs" + ] }, "locked": { - "lastModified": 1732605668, - "narHash": "sha256-DN5/166jhiiAW0Uw6nueXaGTueVxhfZISAkoxasmz/g=", - "rev": "f19bd752910bbe3a861c9cad269bd078689d50fe", + "lastModified": 1763435414, + "narHash": "sha256-i2467FddWfd19q5Qoj+1/BAeg6LZmM5m4mYGRSQn/as=", + "rev": "192c92b603731fbc1bade6c1b18c8d8a0086f703", "type": "tarball", - "url": "https://git.lix.systems/api/v1/repos/lix-project/nixos-module/archive/f19bd752910bbe3a861c9cad269bd078689d50fe.tar.gz" + "url": "https://git.lix.systems/api/v1/repos/lix-project/nixos-module/archive/192c92b603731fbc1bade6c1b18c8d8a0086f703.tar.gz" }, "original": { "type": "tarball", - "url": "https://git.lix.systems/lix-project/nixos-module/archive/2.91.1-2.tar.gz" + "url": "https://git.lix.systems/lix-project/nixos-module/archive/main.tar.gz" } }, "niri": { "inputs": { "niri-stable": "niri-stable", "niri-unstable": "niri-unstable", - "nixpkgs": "nixpkgs_8", + "nixpkgs": [ + "nixpkgs" + ], "nixpkgs-stable": "nixpkgs-stable", "xwayland-satellite-stable": "xwayland-satellite-stable", "xwayland-satellite-unstable": "xwayland-satellite-unstable" }, "locked": { - "lastModified": 1762341801, - "narHash": "sha256-zx7UxreMz646qikxw+So7eGRQeWccKFZxuMvJowJuFs=", + "lastModified": 1763538184, + "narHash": "sha256-6umNY06L6ZUjinthjVZIwyWyAjxOXSPhXfY0U1CVTWw=", "owner": "sodiboo", "repo": "niri-flake", - "rev": "20aadad64b8b8cbebc71371713c141d91d7f8172", + "rev": "85a16f400641eed912431efcec16f12e2100d46a", "type": "github" }, "original": { @@ -551,11 +170,11 @@ "niri-unstable": { "flake": false, "locked": { - "lastModified": 1762146685, - "narHash": "sha256-anRlNG6t7esBbF1+ALDeathVBSclA0PEL52Vo0WnN5g=", + "lastModified": 1763531615, + "narHash": "sha256-cMi8tz+0+gWtlYqVnyMv7phOeQ0/4WmzZ/lxCyraUVw=", "owner": "YaLTeR", "repo": "niri", - "rev": "a2ca2b3c866bc781b12c334a9f949b3db6d7c943", + "rev": "c722634c269ae97a5ea185691bcd0b8c73a600e5", "type": "github" }, "original": { @@ -566,27 +185,24 @@ }, "nixpkgs": { "locked": { - "lastModified": 1761672384, - "narHash": "sha256-o9KF3DJL7g7iYMZq9SWgfS1BFlNbsm6xplRjVlOCkXI=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "08dacfca559e1d7da38f3cf05f1f45ee9bfd213c", - "type": "github" + "lastModified": 1763464769, + "narHash": "sha256-mU85VDFRIgKGq1EhT71bLjhvjJ5yuMEe0Ip1kwCbR80=", + "rev": "6f374686605df381de8541c072038472a5ea2e2d", + "type": "tarball", + "url": "https://releases.nixos.org/nixpkgs/nixpkgs-25.11pre898015.6f374686605d/nixexprs.tar.xz" }, "original": { - "owner": "nixos", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" + "type": "tarball", + "url": "https://channels.nixos.org/nixpkgs-unstable/nixexprs.tar.xz" } }, "nixpkgs-stable": { "locked": { - "lastModified": 1762233356, - "narHash": "sha256-cGS3lLTYusbEP/IJIWGgnkzIl+FA5xDvtiHyjalGr4k=", + "lastModified": 1763334038, + "narHash": "sha256-LBVOyaH6NFzQ3X/c6vfMZ9k4SV2ofhpxeL9YnhHNJQQ=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "ca534a76c4afb2bdc07b681dbc11b453bab21af8", + "rev": "4c8cdd5b1a630e8f72c9dd9bf582b1afb3127d2c", "type": "github" }, "original": { @@ -596,213 +212,30 @@ "type": "github" } }, - "nixpkgs_10": { - "locked": { - "lastModified": 1760596604, - "narHash": "sha256-J/i5K6AAz/y5dBePHQOuzC7MbhyTOKsd/GLezSbEFiM=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "3cbe716e2346710d6e1f7c559363d14e11c32a43", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixpkgs-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_2": { - "locked": { - "lastModified": 1744536153, - "narHash": "sha256-awS2zRgF4uTwrOKwwiJcByDzDOdo3Q1rPZbiHQg/N38=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "18dd725c29603f582cf1900e0d25f9f1063dbf11", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixpkgs-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_3": { - "locked": { - "lastModified": 1761907660, - "narHash": "sha256-kJ8lIZsiPOmbkJypG+B5sReDXSD1KGu2VEPNqhRa/ew=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "2fb006b87f04c4d3bdf08cfdbc7fab9c13d94a15", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_4": { - "locked": { - "lastModified": 1762111121, - "narHash": "sha256-4vhDuZ7OZaZmKKrnDpxLZZpGIJvAeMtK6FKLJYUtAdw=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "b3d51a0365f6695e7dd5cdf3e180604530ed33b4", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_5": { - "locked": { - "lastModified": 1762111121, - "narHash": "sha256-4vhDuZ7OZaZmKKrnDpxLZZpGIJvAeMtK6FKLJYUtAdw=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "b3d51a0365f6695e7dd5cdf3e180604530ed33b4", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_6": { - "locked": { - "lastModified": 1712163089, - "narHash": "sha256-Um+8kTIrC19vD4/lUCN9/cU9kcOsD1O1m+axJqQPyMM=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "fd281bd6b7d3e32ddfa399853946f782553163b5", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_7": { - "locked": { - "lastModified": 1729070438, - "narHash": "sha256-KOTTUfPkugH52avUvXGxvWy8ibKKj4genodIYUED+Kc=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "5785b6bb5eaae44e627d541023034e1601455827", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_8": { - "locked": { - "lastModified": 1762111121, - "narHash": "sha256-4vhDuZ7OZaZmKKrnDpxLZZpGIJvAeMtK6FKLJYUtAdw=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "b3d51a0365f6695e7dd5cdf3e180604530ed33b4", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_9": { - "locked": { - "lastModified": 1762111121, - "narHash": "sha256-4vhDuZ7OZaZmKKrnDpxLZZpGIJvAeMtK6FKLJYUtAdw=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "b3d51a0365f6695e7dd5cdf3e180604530ed33b4", - "type": "github" - }, - "original": { - "id": "nixpkgs", - "ref": "nixos-unstable", - "type": "indirect" - } - }, - "pre-commit-hooks": { - "inputs": { - "flake-compat": "flake-compat_2", - "gitignore": "gitignore", - "nixpkgs": [ - "hyprland", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1760663237, - "narHash": "sha256-BflA6U4AM1bzuRMR8QqzPXqh8sWVCNDzOdsxXEguJIc=", - "owner": "cachix", - "repo": "git-hooks.nix", - "rev": "ca5b894d3e3e151ffc1db040b6ce4dcc75d31c37", - "type": "github" - }, - "original": { - "owner": "cachix", - "repo": "git-hooks.nix", - "type": "github" - } - }, "root": { "inputs": { - "aagl": "aagl", - "ags": "ags", + "easy-hosts": "easy-hosts", + "flake-parts": "flake-parts", "home-manager": "home-manager", - "hyprland": "hyprland", - "hyprland-contrib": "hyprland-contrib", + "lix": "lix", "lix-module": "lix-module", "niri": "niri", - "nixpkgs": "nixpkgs_9", + "nixpkgs": "nixpkgs", "sops-nix": "sops-nix" } }, - "rust-overlay": { - "inputs": { - "nixpkgs": "nixpkgs_2" - }, - "locked": { - "lastModified": 1761791894, - "narHash": "sha256-myRIDh+PxaREz+z9LzbqBJF+SnTFJwkthKDX9zMyddY=", - "owner": "oxalica", - "repo": "rust-overlay", - "rev": "59c45eb69d9222a4362673141e00ff77842cd219", - "type": "github" - }, - "original": { - "owner": "oxalica", - "repo": "rust-overlay", - "type": "github" - } - }, "sops-nix": { "inputs": { - "nixpkgs": "nixpkgs_10" + "nixpkgs": [ + "nixpkgs" + ] }, "locked": { - "lastModified": 1760998189, - "narHash": "sha256-ee2e1/AeGL5X8oy/HXsZQvZnae6XfEVdstGopKucYLY=", + "lastModified": 1763509310, + "narHash": "sha256-s2WzTAD3vJtPACBCZXezNUMTG/wC6SFsU9DxazB9wDI=", "owner": "Mic92", "repo": "sops-nix", - "rev": "5a7d18b5c55642df5c432aadb757140edfeb70b3", + "rev": "3ee33c0ed7c5aa61b4e10484d2ebdbdc98afb03e", "type": "github" }, "original": { @@ -812,21 +245,6 @@ } }, "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_2": { "locked": { "lastModified": 1681028828, "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", @@ -841,47 +259,6 @@ "type": "github" } }, - "xdph": { - "inputs": { - "hyprland-protocols": [ - "hyprland", - "hyprland-protocols" - ], - "hyprlang": [ - "hyprland", - "hyprlang" - ], - "hyprutils": [ - "hyprland", - "hyprutils" - ], - "hyprwayland-scanner": [ - "hyprland", - "hyprwayland-scanner" - ], - "nixpkgs": [ - "hyprland", - "nixpkgs" - ], - "systems": [ - "hyprland", - "systems" - ] - }, - "locked": { - "lastModified": 1761431178, - "narHash": "sha256-xzjC1CV3+wpUQKNF+GnadnkeGUCJX+vgaWIZsnz9tzI=", - "owner": "hyprwm", - "repo": "xdg-desktop-portal-hyprland", - "rev": "4b8801228ff958d028f588f0c2b911dbf32297f9", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "xdg-desktop-portal-hyprland", - "type": "github" - } - }, "xwayland-satellite-stable": { "flake": false, "locked": { @@ -902,11 +279,11 @@ "xwayland-satellite-unstable": { "flake": false, "locked": { - "lastModified": 1762302024, - "narHash": "sha256-F+4W0J5r7fbEl+VmATFqAA5+4dFSNAmLJB7tAtrTIkY=", + "lastModified": 1762747449, + "narHash": "sha256-Z1TKiux8K09a93w4PFDFsj8HFugXNy3iCC3Z8MpR5Rk=", "owner": "Supreeeme", "repo": "xwayland-satellite", - "rev": "53b6072bd995b5b4017999cf247f9eb6660c72a2", + "rev": "6338574bc5c036487486acde264f38f39ea15fad", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index eeb4bd0..37dafc1 100644 --- a/flake.nix +++ b/flake.nix @@ -1,94 +1,89 @@ { - inputs = { - nixpkgs.url = "nixpkgs/nixos-unstable"; + outputs = inputs: inputs.flake-parts.lib.mkFlake { inherit inputs; } { + imports = with inputs; [ + easy-hosts.flakeModule + home-manager.flakeModules.home-manager + ]; - home-manager.url = "github:nix-community/home-manager"; + systems = [ "x86_64-linux" ]; + easy-hosts = { + autoConstruct = true; + path = ./hosts; + onlySystem = "x86_64-nixos"; - lix-module.url = "https://git.lix.systems/lix-project/nixos-module/archive/2.91.1-2.tar.gz"; + shared = { + modules = [ + inputs.lix-module.nixosModules.default + ./nixosModules + ]; + }; + }; - hyprland.url = "git+https://github.com/hyprwm/Hyprland"; - hyprland-contrib.url = "github:hyprwm/contrib"; - - niri.url = "github:sodiboo/niri-flake"; - - sops-nix.url = "github:Mic92/sops-nix"; - ags.url = "github:Aylur/ags"; - aagl.url = "github:ezKEa/aagl-gtk-on-nix"; + flake = { + homeConfigurations = let + userConfig = system: extraModules: + inputs.home-manager.lib.homeManagerConfiguration { + extraSpecialArgs = { inherit inputs; }; + pkgs = inputs.nixpkgs.legacyPackages.${system}; + modules = [ ./hmModules ] ++ extraModules; + }; + in { + "pan@juri" = userConfig "x86_64-linux" [ ./users/juri ]; + "pan@jibril" = userConfig "x86_64-linux" [ ./users/jibril ]; + "pan@onizuka" = userConfig "x86_64-linux" [ ./users/onizuka ]; + }; + }; }; - outputs = { self, home-manager, nixpkgs, lix-module, ... }@inputs: let - system = "x86_64-linux"; - pkgs = nixpkgs.legacyPackages.${system}; - fs = pkgs.lib.fileset; - st = pkgs.lib.strings; - as = pkgs.lib.attrsets; + inputs = { + # Save data with this url. Source: + # at://did:plc:mojgntlezho4qt7uvcfkdndg/app.bsky.feed.post/3loogwsoqok2w + # cid: bafyreidhuuxs3cuabneygtxir65hnd7hvy4hwj5rwrylpwmp7jhxciasve + nixpkgs.url = "https://channels.nixos.org/nixpkgs-unstable/nixexprs.tar.xz"; - hosts = let - hostFilter = { name, ...}: name == "host.nix"; - hostPaths = fs.toList (fs.fileFilter hostFilter ./hosts); - # Assumes dir structure is start_of_path/hosts/hostname/host.nix - extractHostName = path: builtins.unsafeDiscardStringContext ( - st.removeSuffix "/host.nix" ( - builtins.elemAt (st.splitString "/hosts/" path) 1 - ) - ); - in builtins.listToAttrs (map (path: { - value = path; - name = extractHostName path; - }) hostPaths); - - users = let - userFilter = { name, ...}: name == "user.nix"; - userPaths = fs.toList (fs.fileFilter userFilter ./hosts); - in builtins.listToAttrs (map (path: let - dirsAndFiles = st.splitString "/" path; - dAFLength = builtins.length dirsAndFiles; - # Assumes dir structure is start_of_path/hosts/hostname/users/username/user.nix - hostname = builtins.unsafeDiscardStringContext ( - builtins.elemAt dirsAndFiles (dAFLength - 4)); - username = builtins.unsafeDiscardStringContext ( - builtins.elemAt dirsAndFiles (dAFLength - 2)); - in { - name = username + "@" + hostname; - value = path; - } - ) userPaths); - - userConfig = usernameAtHostname: userpath: home-manager.lib.homeManagerConfiguration { - inherit pkgs; - extraSpecialArgs = { - inherit inputs; - inherit usernameAtHostname; - }; - modules = [ - ./hmModules - userpath - ]; + home-manager = { + type = "github"; + owner = "nix-community"; + repo = "home-manager"; + inputs.nixpkgs.follows = "nixpkgs"; }; - hostConfig = hostname: hostpath: nixpkgs.lib.nixosSystem { - specialArgs = let - hostFilteredUsers = as.filterAttrs ( - name: value: let - userHostname = builtins.elemAt (st.splitString "@" name) 1; - in userHostname == hostname - ) users; - - hostUsers = as.mapAttrsToList ( - name: value: builtins.elemAt (st.splitString "@" name) 0 - ) hostFilteredUsers; - in { - inherit inputs; - inherit hostname; - "usernameList" = hostUsers; - }; - modules = [ - ./nixosModules - hostpath - ]; + flake-parts = { + type = "github"; + owner = "hercules-ci"; + repo = "flake-parts"; + inputs.nixpkgs-lib.follows = "nixpkgs"; + }; + + easy-hosts = { + type = "github"; + owner = "tgirlcloud"; + repo = "easy-hosts"; + }; + + lix = { + url = "https://git.lix.systems/lix-project/lix/archive/main.tar.gz"; + flake = false; + }; + + lix-module = { + url = "https://git.lix.systems/lix-project/nixos-module/archive/main.tar.gz"; + inputs.nixpkgs.follows = "nixpkgs"; + inputs.lix.follows = "lix"; + }; + + niri = { + type = "github"; + owner = "sodiboo"; + repo = "niri-flake"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + sops-nix = { + type = "github"; + owner = "Mic92"; + repo = "sops-nix"; + inputs.nixpkgs.follows = "nixpkgs"; }; - in { - nixosConfigurations = builtins.mapAttrs (name: path: hostConfig name path) hosts; - homeConfigurations = builtins.mapAttrs (name: path: userConfig name path) users; }; } diff --git a/hmModules/apps/hypr/app.nix b/hmModules/apps/hypr/app.nix index 85e7b6f..8bdc848 100644 --- a/hmModules/apps/hypr/app.nix +++ b/hmModules/apps/hypr/app.nix @@ -1,5 +1,5 @@ -{ config, inputs, pkgs, lib, ... }: -let rootPath = ./.; in +{ config, lib, ... }: +# let rootPath = ./.; in { options.hypr = { enable = lib.mkEnableOption "Enables hyprland"; @@ -34,220 +34,224 @@ let rootPath = ./.; in polkit.enable = lib.mkEnableOption "Enables polkit agent"; screenshot.enable = lib.mkEnableOption "Enables Screenshotting"; }; + + config.warnings = lib.mkIf config.hypr.enable ['' + hypr.* has been deprecated to allow the removal of hyprland from flake inputs. + '']; - imports = [ inputs.hyprland.homeManagerModules.default ]; + # imports = [ inputs.hyprland.homeManagerModules.default ]; - config = let - lopts = lib.lists.optionals; - in { - nix.settings = { - substituters = ["https://hyprland.cachix.org"]; - trusted-public-keys = ["hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="]; - }; - } // lib.mkIf config.hypr.enable { - wayland.windowManager.hyprland = let - mod = config.hypr.mod_key; - # p-s = let - # chw = config.hypr.workspace; - # findDefaultWs = id: if (builtins.hasAttr id chw.workspaces) - # then (builtins.head (builtins.getAttr id chw.workspaces)) - # else ""; - # in with config.hypr.workspace; lib.mkIf primary-secondary.enable { - # primaryWs = findDefaultWs primary-secondary.primary; - # secondaryWs = findDefaultWs primary-secondary.secondary; - # }; - in { - enable = true; - settings = { - monitor = config.hypr.monitor.details; - workspace = let - wsMonitor = monitor: wrksps: map (ws: - if ws == (builtins.head wrksps) - then "name:"+ws+", monitor:"+monitor+", persistent:true, default:true" - else "name:"+ws+", monitor:"+monitor+", persistent:true" - ) wrksps; - makeRules = wsAttr: builtins.concatLists (builtins.attrValues ( - builtins.mapAttrs wsMonitor wsAttr - )); - in makeRules config.hypr.workspace.workspaces - ++ [ - "w[t1], gapsout:0, gapsin:0" - "w[tg1], gapsout:0, gapsin:0" - "f[1], gapsout:0, gapsin:0" - ] - ++ lopts config.hypr.workspace.scratchpad.enable [ - "special:scratch, on-created-empty: [float; size 50% 50%; center] ${config.defaultApps.terminal}" - ]; - input = { - accel_profile = "flat"; - sensitivity = config.hypr.mouse.sensitivity; - }; - general = { - gaps_in = 3; - gaps_out = 3; - border_size = 2; - "col.active_border" = "rgb(F5C2E7)"; - "col.inactive_border" = "rgb(1E1D2F)"; - layout = "master"; - }; - decoration = { - rounding = 2; - blur = { - enabled = true; - size = 12; - passes = 2; - special = true; - }; - }; - animation = [ - "windows, 1, 4, default, popin 50%" - "windowsOut, 1, 4, default, popin 50%" - "windowsMove, 1, 3, default" - "border, 1, 3, default" - "fade, 1, 3, default" - "workspaces, 1, 3, default" - ]; - master = { - mfact = config.hypr.master.mfact; - }; - misc = { - focus_on_activate = true; - }; - - exec-once = lopts config.hypr.polkit.enable [ - "${pkgs.kdePackages.polkit-kde-agent-1}/bin/libexec/polkit-kde-authentication-agent-1" - ] ++ lopts config.hypr.background.enable [ - "${pkgs.swww}/bin/swww-daemon" - "${pkgs.swww}/bin/swww img ${config.hypr.background.path}" - ] ++ lopts config.ags.enable [ - "ags" - ] ++ lopts config.beeper.enable [ - "[workspace name:chat silent] Beeper" - ]; - - env = with config.hypr; [ - # "HYPR_MON_PRIMARY, ${workspace.primary-secondary.primary}" - # "HYPR_MON_SECONDARY, ${workspace.primary-secondary.secondary}" - "HYPR_WORK_DB, ${config.xdg.cacheHome}/hypr/workspace.db" - ] ++ lopts cursor.enable [ - "HYPRCURSOR_THEME,${cursor.theme}" - "HYPRCURSOR_SIZE,${cursor.size}" - ] ++ lopts config.nvidia.enable [ - "LIBVA_DRIVER_NAME,nvidia" - "XDG_SESSION_TYPE,wayland" - "GBM_BACKEND,nvidia-drm" - "__GLX_VENDOR_LIBRARY_NAME,nvidia" - "WLR_RENDERER_ALLOW_SOFTWARE,1" - "WLR_DRM_DEVICES,/dev/dri/card1" - ]; - - windowrulev2 = let - workspaceDefaults = wsname: applist: map ( - app: "workspace " + wsname + ", " + app - ) applist; - allDefault = wsAttr: builtins.concatLists (builtins.attrValues ( - builtins.mapAttrs workspaceDefaults wsAttr - )); - in allDefault config.hypr.workspace.defaults - ++ [ - "bordersize 0, floating:0, onworkspace:w[t1]" - "rounding 0, floating:0, onworkspace:w[t1]" - "bordersize 0, floating:0, onworkspace:w[tg1]" - "rounding 0, floating:0, onworkspace:w[tg1]" - "bordersize 0, floating:0, onworkspace:f[1]" - "rounding 0, floating:0, onworkspace:f[1]" - ] - ++ lopts config.hypr.xwayland.videobridge.enable [ - "opacity 0.0 override 0.0 override,class:^(xwaylandvideobridge)$" - "noanim,class:^(xwaylandvideobridge)$" - "noinitialfocus,class:^(xwaylandvideobridge)$" - "maxsize 1 1,class:^(xwaylandvideobridge)$" - "noblur,class:^(xwaylandvideobridge)$" - ] ++ map (id: "opacity 1 override, " + id) config.hypr.windows.opaque - ++ [ - "opacity 0.94 fullscreen:0" - "opacity 0.79 override, class:^(${config.defaultApps.terminal})$" - ]; - - # 1, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh home - # 2, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh web - # 3, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh med - # 4, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh game - # 5, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh etc - # _, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh hell - # TAB, exec, $XDG_CONFIG_HOME/hypr/scripts/changesecondary.xsh - # - # SHIFT, 1, movetoworkspacesilent, name:home - # SHIFT, 2, movetoworkspacesilent, name:web - # SHIFT, 3, movetoworkspacesilent, name:med - # SHIFT, 4, movetoworkspacesilent, name:game - # SHIFT, TAB, movetoworkspacesilent, r-1 - - bind = let - modPrefix = kb: if (lib.strings.hasPrefix "&" kb) - then ("${mod}" + kb) - else ("${mod}, " + kb); - in map modPrefix ([ - "Return, exec, ${config.defaultApps.terminal}" - "&SHIFT, Q, exit" - "h, focusmonitor, l" - "l, focusmonitor, r" - "j, cyclenext," - "k, cyclenext, prev" - "&SHIFT, h, movecurrentworkspacetomonitor, -1" - "&SHIFT, l, movecurrentworkspacetomonitor, +1" - "&SHIFT, j, swapnext," - "&SHIFT, k, swapnext, prev" - "c, killactive" - "f, togglefloating" - "&SHIFT, f, fullscreen" - ] ++ (let - workspaces = builtins.concatLists ( - builtins.attrValues config.hypr.workspace.workspaces); - wsBinds = with builtins; wrksps: depth: if depth > (length wrksps) - then [] - else let ws = builtins.elemAt wrksps (depth -1); in [ - "${toString depth}, workspace, name:${ws}" - "&SHIFT, ${toString depth}, movetoworkspacesilent, name:${ws}" - ] ++ wsBinds wrksps (depth + 1); - in wsBinds workspaces 1) ++ lopts config.rofi.enable [ - "&SHIFT, return, exec, ${pkgs.rofi}/bin/rofi -show run" - ] ++ lopts config.hypr.screenshot.enable [ - "P, exec, ${pkgs.grimblast}/bin/grimblast --freeze copy area" - "&SHIFT, P, exec, ${pkgs.grimblast}/bin/grimblast --freeze copysave area" - ] ++ lopts config.hypr.workspace.scratchpad.enable [ - "i, togglespecialworkspace, scratch" - ]); - - bindm = map (kb: "${mod}, " + kb) [ - "mouse:272, movewindow" - "mouse:273, movewindow" - ]; - }; - }; - - home.packages = with pkgs; [ - wlr-randr # Xrandr for wayland - wl-clipboard # Clipboard manager for wayland - ] ++ lopts config.hypr.xwayland.videobridge.enable [ - kdePackages.xwaylandvideobridge - ] ++ lopts config.hypr.cursor.enable [ - hyprcursor - ] ++ lopts config.hypr.screenshot.enable [ - hyprpicker # Colorpicker, needed for screenshot tool - inputs.hyprland-contrib.packages.${pkgs.system}.grimblast - ]; - - xdg.configFile."hypr-scripts" = { - source = rootPath + "/scripts"; - target = "hypr/scripts"; - executable = true; - }; - - xdg.dataFile."hypr-icons" = lib.mkIf config.hypr.cursor.enable { - source = rootPath + "/icons"; - target = "icons/"; - recursive = true; - }; - }; + # config = let + # lopts = lib.lists.optionals; + # in { + # nix.settings = { + # substituters = ["https://hyprland.cachix.org"]; + # trusted-public-keys = ["hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="]; + # }; + # } // lib.mkIf config.hypr.enable { + # wayland.windowManager.hyprland = let + # mod = config.hypr.mod_key; + # # p-s = let + # # chw = config.hypr.workspace; + # # findDefaultWs = id: if (builtins.hasAttr id chw.workspaces) + # # then (builtins.head (builtins.getAttr id chw.workspaces)) + # # else ""; + # # in with config.hypr.workspace; lib.mkIf primary-secondary.enable { + # # primaryWs = findDefaultWs primary-secondary.primary; + # # secondaryWs = findDefaultWs primary-secondary.secondary; + # # }; + # in { + # enable = true; + # settings = { + # monitor = config.hypr.monitor.details; + # workspace = let + # wsMonitor = monitor: wrksps: map (ws: + # if ws == (builtins.head wrksps) + # then "name:"+ws+", monitor:"+monitor+", persistent:true, default:true" + # else "name:"+ws+", monitor:"+monitor+", persistent:true" + # ) wrksps; + # makeRules = wsAttr: builtins.concatLists (builtins.attrValues ( + # builtins.mapAttrs wsMonitor wsAttr + # )); + # in makeRules config.hypr.workspace.workspaces + # ++ [ + # "w[t1], gapsout:0, gapsin:0" + # "w[tg1], gapsout:0, gapsin:0" + # "f[1], gapsout:0, gapsin:0" + # ] + # ++ lopts config.hypr.workspace.scratchpad.enable [ + # "special:scratch, on-created-empty: [float; size 50% 50%; center] ${config.defaultApps.terminal}" + # ]; + # input = { + # accel_profile = "flat"; + # sensitivity = config.hypr.mouse.sensitivity; + # }; + # general = { + # gaps_in = 3; + # gaps_out = 3; + # border_size = 2; + # "col.active_border" = "rgb(F5C2E7)"; + # "col.inactive_border" = "rgb(1E1D2F)"; + # layout = "master"; + # }; + # decoration = { + # rounding = 2; + # blur = { + # enabled = true; + # size = 12; + # passes = 2; + # special = true; + # }; + # }; + # animation = [ + # "windows, 1, 4, default, popin 50%" + # "windowsOut, 1, 4, default, popin 50%" + # "windowsMove, 1, 3, default" + # "border, 1, 3, default" + # "fade, 1, 3, default" + # "workspaces, 1, 3, default" + # ]; + # master = { + # mfact = config.hypr.master.mfact; + # }; + # misc = { + # focus_on_activate = true; + # }; + # + # exec-once = lopts config.hypr.polkit.enable [ + # "${pkgs.kdePackages.polkit-kde-agent-1}/bin/libexec/polkit-kde-authentication-agent-1" + # ] ++ lopts config.hypr.background.enable [ + # "${pkgs.swww}/bin/swww-daemon" + # "${pkgs.swww}/bin/swww img ${config.hypr.background.path}" + # ] ++ lopts config.ags.enable [ + # "ags" + # ] ++ lopts config.beeper.enable [ + # "[workspace name:chat silent] Beeper" + # ]; + # + # env = with config.hypr; [ + # # "HYPR_MON_PRIMARY, ${workspace.primary-secondary.primary}" + # # "HYPR_MON_SECONDARY, ${workspace.primary-secondary.secondary}" + # "HYPR_WORK_DB, ${config.xdg.cacheHome}/hypr/workspace.db" + # ] ++ lopts cursor.enable [ + # "HYPRCURSOR_THEME,${cursor.theme}" + # "HYPRCURSOR_SIZE,${cursor.size}" + # ] ++ lopts config.nvidia.enable [ + # "LIBVA_DRIVER_NAME,nvidia" + # "XDG_SESSION_TYPE,wayland" + # "GBM_BACKEND,nvidia-drm" + # "__GLX_VENDOR_LIBRARY_NAME,nvidia" + # "WLR_RENDERER_ALLOW_SOFTWARE,1" + # "WLR_DRM_DEVICES,/dev/dri/card1" + # ]; + # + # windowrulev2 = let + # workspaceDefaults = wsname: applist: map ( + # app: "workspace " + wsname + ", " + app + # ) applist; + # allDefault = wsAttr: builtins.concatLists (builtins.attrValues ( + # builtins.mapAttrs workspaceDefaults wsAttr + # )); + # in allDefault config.hypr.workspace.defaults + # ++ [ + # "bordersize 0, floating:0, onworkspace:w[t1]" + # "rounding 0, floating:0, onworkspace:w[t1]" + # "bordersize 0, floating:0, onworkspace:w[tg1]" + # "rounding 0, floating:0, onworkspace:w[tg1]" + # "bordersize 0, floating:0, onworkspace:f[1]" + # "rounding 0, floating:0, onworkspace:f[1]" + # ] + # ++ lopts config.hypr.xwayland.videobridge.enable [ + # "opacity 0.0 override 0.0 override,class:^(xwaylandvideobridge)$" + # "noanim,class:^(xwaylandvideobridge)$" + # "noinitialfocus,class:^(xwaylandvideobridge)$" + # "maxsize 1 1,class:^(xwaylandvideobridge)$" + # "noblur,class:^(xwaylandvideobridge)$" + # ] ++ map (id: "opacity 1 override, " + id) config.hypr.windows.opaque + # ++ [ + # "opacity 0.94 fullscreen:0" + # "opacity 0.79 override, class:^(${config.defaultApps.terminal})$" + # ]; + # + # # 1, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh home + # # 2, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh web + # # 3, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh med + # # 4, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh game + # # 5, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh etc + # # _, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh hell + # # TAB, exec, $XDG_CONFIG_HOME/hypr/scripts/changesecondary.xsh + # # + # # SHIFT, 1, movetoworkspacesilent, name:home + # # SHIFT, 2, movetoworkspacesilent, name:web + # # SHIFT, 3, movetoworkspacesilent, name:med + # # SHIFT, 4, movetoworkspacesilent, name:game + # # SHIFT, TAB, movetoworkspacesilent, r-1 + # + # bind = let + # modPrefix = kb: if (lib.strings.hasPrefix "&" kb) + # then ("${mod}" + kb) + # else ("${mod}, " + kb); + # in map modPrefix ([ + # "Return, exec, ${config.defaultApps.terminal}" + # "&SHIFT, Q, exit" + # "h, focusmonitor, l" + # "l, focusmonitor, r" + # "j, cyclenext," + # "k, cyclenext, prev" + # "&SHIFT, h, movecurrentworkspacetomonitor, -1" + # "&SHIFT, l, movecurrentworkspacetomonitor, +1" + # "&SHIFT, j, swapnext," + # "&SHIFT, k, swapnext, prev" + # "c, killactive" + # "f, togglefloating" + # "&SHIFT, f, fullscreen" + # ] ++ (let + # workspaces = builtins.concatLists ( + # builtins.attrValues config.hypr.workspace.workspaces); + # wsBinds = with builtins; wrksps: depth: if depth > (length wrksps) + # then [] + # else let ws = builtins.elemAt wrksps (depth -1); in [ + # "${toString depth}, workspace, name:${ws}" + # "&SHIFT, ${toString depth}, movetoworkspacesilent, name:${ws}" + # ] ++ wsBinds wrksps (depth + 1); + # in wsBinds workspaces 1) ++ lopts config.rofi.enable [ + # "&SHIFT, return, exec, ${pkgs.rofi}/bin/rofi -show run" + # ] ++ lopts config.hypr.screenshot.enable [ + # "P, exec, ${pkgs.grimblast}/bin/grimblast --freeze copy area" + # "&SHIFT, P, exec, ${pkgs.grimblast}/bin/grimblast --freeze copysave area" + # ] ++ lopts config.hypr.workspace.scratchpad.enable [ + # "i, togglespecialworkspace, scratch" + # ]); + # + # bindm = map (kb: "${mod}, " + kb) [ + # "mouse:272, movewindow" + # "mouse:273, movewindow" + # ]; + # }; + # }; + # + # home.packages = with pkgs; [ + # wlr-randr # Xrandr for wayland + # wl-clipboard # Clipboard manager for wayland + # ] ++ lopts config.hypr.xwayland.videobridge.enable [ + # kdePackages.xwaylandvideobridge + # ] ++ lopts config.hypr.cursor.enable [ + # hyprcursor + # ] ++ lopts config.hypr.screenshot.enable [ + # hyprpicker # Colorpicker, needed for screenshot tool + # inputs.hyprland-contrib.packages.${pkgs.system}.grimblast + # ]; + # + # xdg.configFile."hypr-scripts" = { + # source = rootPath + "/scripts"; + # target = "hypr/scripts"; + # executable = true; + # }; + # + # xdg.dataFile."hypr-icons" = lib.mkIf config.hypr.cursor.enable { + # source = rootPath + "/icons"; + # target = "icons/"; + # recursive = true; + # }; + # }; } diff --git a/hmModules/apps/lf/app.nix b/hmModules/apps/lf/app.nix index 25a3b89..ecc428e 100644 --- a/hmModules/apps/lf/app.nix +++ b/hmModules/apps/lf/app.nix @@ -33,7 +33,7 @@ relativenumber = true; }; commands = { - dragon-out = ''%${pkgs.dragon-drop}/bin/dragon -a -x "$fx"''; + dragon-out = ''%${pkgs.dragon-drop}/bin/dragon-drop -a -x "$fx"''; trash = lib.mkIf config.trash.enable '' %${pkgs.trash-cli}/bin/trash "$fx" ''; diff --git a/hmModules/automatic/default.nix b/hmModules/automatic/default.nix index f974b21..18c78ef 100644 --- a/hmModules/automatic/default.nix +++ b/hmModules/automatic/default.nix @@ -1,4 +1,4 @@ -{ config, lib, usernameAtHostname, ... }: +{ config, lib, ... }: { options = { @@ -9,17 +9,15 @@ browser = lib.mkOption { default = ""; }; }; }; - config = let - st = lib.strings; - in { + config = { # Let Home Manager install and manage itself. programs.home-manager.enable = true; nixpkgs.config.allowUnfree = true; home.stateVersion = "23.05"; home = { - username = builtins.elemAt (st.splitString "@" usernameAtHostname) 0; - homeDirectory = "/home/" + config.home.username; + username = "pan"; + homeDirectory = "/home/pan"; packages = config.extraPkgs; }; diff --git a/hmModules/services/widgets/ags/default.nix b/hmModules/services/widgets/ags/default.nix index 5d248d1..5403b1e 100644 --- a/hmModules/services/widgets/ags/default.nix +++ b/hmModules/services/widgets/ags/default.nix @@ -1,25 +1,30 @@ -{ config, inputs, pkgs, lib, ... }: +{ config, lib, ... }: { options.ags = { enable = lib.mkEnableOption "Enable ags"; }; + + config.warnings = lib.mkIf config.ags.enable ['' + ags.enable has been deprecated to allow the removal of ags from flake + inputs. + '']; - imports = [ inputs.ags.homeManagerModules.default ]; + # imports = [ inputs.ags.homeManagerModules.default ]; - config = lib.mkIf config.ags.enable { - home.packages = with pkgs; [ - libnotify # Notifications through ags - ]; - programs.ags = { - enable = true; - configDir = ./config; - - extraPackages = with pkgs; [ - gtksourceview - webkitgtk - accountsservice - ]; - }; - }; + # config = lib.mkIf config.ags.enable { + # home.packages = with pkgs; [ + # libnotify # Notifications through ags + # ]; + # programs.ags = { + # enable = true; + # configDir = ./config; + # + # extraPackages = with pkgs; [ + # gtksourceview + # webkitgtk + # accountsservice + # ]; + # }; + # }; } diff --git a/hosts/jibril/host.nix b/hosts/jibril/default.nix similarity index 100% rename from hosts/jibril/host.nix rename to hosts/jibril/default.nix diff --git a/hosts/juri/host.nix b/hosts/juri/default.nix similarity index 100% rename from hosts/juri/host.nix rename to hosts/juri/default.nix diff --git a/hosts/juri/users/badtz/user.nix b/hosts/juri/users/badtz/user.nix deleted file mode 100644 index 5972fdb..0000000 --- a/hosts/juri/users/badtz/user.nix +++ /dev/null @@ -1,10 +0,0 @@ -{ config, pkgs, ... }: - -{ - fish.enable = true; - git = { - enable = true; - username = "Badtz"; - email = "may@badtz.dev"; - }; -} diff --git a/hosts/onizuka/host.nix b/hosts/onizuka/default.nix similarity index 91% rename from hosts/onizuka/host.nix rename to hosts/onizuka/default.nix index d2dbc49..46a9717 100644 --- a/hosts/onizuka/host.nix +++ b/hosts/onizuka/default.nix @@ -20,8 +20,6 @@ steam.enable = true; steam.gamemode = true; - aagl.enable = true; - aagl.honkai-rail = true; input-remapper.enable = true; postgres.enable = true; diff --git a/nixosModules/apps/animelauncher/app.nix b/nixosModules/apps/animelauncher/app.nix index 5cf1a9b..27f1406 100644 --- a/nixosModules/apps/animelauncher/app.nix +++ b/nixosModules/apps/animelauncher/app.nix @@ -1,4 +1,4 @@ -{ config, inputs, lib, ... }: +{ config, lib, ... }: { options.aagl = { @@ -12,16 +12,21 @@ "Enables honkai 3rd impact"; }; - imports = [ inputs.aagl.nixosModules.default ]; + # imports = [ inputs.aagl.nixosModules.default ]; - config = lib.mkIf config.aagl.enable { - nix.settings = inputs.aagl.nixConfig; + config.warnings = lib.mkIf (config.aagl.enable || config.aagl.honkai-rail || + config.aagl.genshin || config.aagl.honkai-3rd) ['' + aagl.* has been deprecated to allow the removal of aagl from flake inputs. + '']; - programs.honkers-railway-launcher.enable = - lib.mkIf config.aagl.honkai-rail true; - programs.anime-game-launcher.enable = - lib.mkIf config.aagl.genshin true; - programs.honkers-launcher.enable = - lib.mkIf config.aagl.honkai-3rd true; - }; + # config = lib.mkIf config.aagl.enable { + # nix.settings = inputs.aagl.nixConfig; + # + # programs.honkers-railway-launcher.enable = + # lib.mkIf config.aagl.honkai-rail true; + # programs.anime-game-launcher.enable = + # lib.mkIf config.aagl.genshin true; + # programs.honkers-launcher.enable = + # lib.mkIf config.aagl.honkai-3rd true; + # }; } diff --git a/nixosModules/automatic/default.nix b/nixosModules/automatic/default.nix index 2f80ace..05d82c7 100644 --- a/nixosModules/automatic/default.nix +++ b/nixosModules/automatic/default.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, hostname, usernameList, ... }: +{ config, pkgs, lib, ... }: { options.system = { @@ -22,7 +22,6 @@ boot.loader.efi.canTouchEfiVariables = true; }) { - networking.hostName = hostname; system.stateVersion = lib.mkDefault "23.05"; time.timeZone = config.system.timezone; @@ -49,7 +48,7 @@ extraGroups = [ "network" ]; }; } - ) usernameList); + ) [ "pan" ]); groups = { wheel = { members = config.system.users.bigWheels; diff --git a/nixosModules/services/caddy/service.nix b/nixosModules/services/caddy/service.nix index ee722b3..eaf0965 100644 --- a/nixosModules/services/caddy/service.nix +++ b/nixosModules/services/caddy/service.nix @@ -20,7 +20,7 @@ ''; package = pkgs.caddy.withPlugins { plugins = [ "github.com/caddy-dns/porkbun@v0.3.1" ]; - hash = "sha256-j/GODingW5BhfjQRajinivX/9zpiLGgyxvAjX0+amRU="; + hash = "sha256-NlZY/EEY9TbqrMAkSHK2aGm5AjFTvpvBXV1GW1PnXCc="; }; virtualHosts = config.caddy.vhosts; email = config.caddy.adminEmail; diff --git a/nixosModules/services/hyprland/service.nix b/nixosModules/services/hyprland/service.nix index 779a8fe..3d13ac0 100644 --- a/nixosModules/services/hyprland/service.nix +++ b/nixosModules/services/hyprland/service.nix @@ -1,4 +1,4 @@ -{ inputs, config, lib, ... }: +{ config, lib, ... }: { @@ -6,18 +6,14 @@ enable = lib.mkEnableOption "Enables hyprland"; }; - imports = [ - inputs.hyprland.nixosModules.default - ]; + # imports = [ + # inputs.hyprland.nixosModules.default + # ]; - config = { - nix.settings = { - substituters = [ "https://hyprland.cachix.org" ]; - trusted-public-keys = [ - "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" - ]; - experimental-features = [ "nix-command" "flakes" ]; - }; - programs.hyprland.enable = lib.mkIf config.hyprland.enable true; - }; + config.warnings = lib.mkIf config.hyprland.enable ['' + hyprland.enable has been deprecated to allow the removal of hyprland from + flake inputs. + '']; + + # config.programs.hyprland.enable = lib.mkIf config.hyprland.enable true; } diff --git a/hosts/jibril/users/pan/user.nix b/users/jibril/default.nix similarity index 100% rename from hosts/jibril/users/pan/user.nix rename to users/jibril/default.nix diff --git a/hosts/juri/users/pan/user.nix b/users/juri/default.nix similarity index 100% rename from hosts/juri/users/pan/user.nix rename to users/juri/default.nix diff --git a/hosts/onizuka/users/pan/user.nix b/users/onizuka/default.nix similarity index 100% rename from hosts/onizuka/users/pan/user.nix rename to users/onizuka/default.nix From d84c63fe6ce8495bfbcfb9a8557c8f543ba5dcb8 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 19 Nov 2025 09:19:43 -0800 Subject: [PATCH 380/412] Flake, flake-part+easy-host, remove unused inputs IF YOU ARE NOT ME: I would not use this configuration. In the past I would feel confident telling you to drop in your own host and be off to the races, but right now users are in a state which required hard coding some of my nominal preferences. Read on for more specifics Completely refactors the flake.nix part of the repo. This removes my strange legacy code for directory-based hosts+users in favor of using easy-host and flake-parts. As a result of this some specialArgs were lost, namely the list of users and the username being passed. I think this is the right way to go in the short term, but it has lead to some hardcoded values. Namely "pan" is created as a user regardless of configuration In tandem with this is the deprecation of some modules which had inputs in flake which I wasn't using. I'm sure there is a better way to do this, but I didn't like downloading and caching them every time when I knew I wasn't using them. I'm currently very unhappy with the users part of this change, but that wasn't the goal of this branch. I will revisit in a larger commit. --- flake.lock | 773 ++---------------- flake.nix | 159 ++-- hmModules/apps/hypr/app.nix | 436 +++++----- hmModules/apps/lf/app.nix | 2 +- hmModules/automatic/default.nix | 10 +- hmModules/services/widgets/ags/default.nix | 39 +- hosts/jibril/{host.nix => default.nix} | 0 hosts/juri/{host.nix => default.nix} | 0 hosts/juri/users/badtz/user.nix | 10 - hosts/onizuka/{host.nix => default.nix} | 2 - nixosModules/apps/animelauncher/app.nix | 27 +- nixosModules/automatic/default.nix | 5 +- nixosModules/services/caddy/service.nix | 2 +- nixosModules/services/hyprland/service.nix | 24 +- .../pan/user.nix => users/jibril/default.nix | 0 .../pan/user.nix => users/juri/default.nix | 0 .../pan/user.nix => users/onizuka/default.nix | 0 17 files changed, 428 insertions(+), 1061 deletions(-) rename hosts/jibril/{host.nix => default.nix} (100%) rename hosts/juri/{host.nix => default.nix} (100%) delete mode 100644 hosts/juri/users/badtz/user.nix rename hosts/onizuka/{host.nix => default.nix} (91%) rename hosts/jibril/users/pan/user.nix => users/jibril/default.nix (100%) rename hosts/juri/users/pan/user.nix => users/juri/default.nix (100%) rename hosts/onizuka/users/pan/user.nix => users/onizuka/default.nix (100%) diff --git a/flake.lock b/flake.lock index 50598c2..0e7d694 100644 --- a/flake.lock +++ b/flake.lock @@ -1,140 +1,50 @@ { "nodes": { - "aagl": { - "inputs": { - "flake-compat": "flake-compat", - "nixpkgs": "nixpkgs", - "rust-overlay": "rust-overlay" - }, + "easy-hosts": { "locked": { - "lastModified": 1762188647, - "narHash": "sha256-OAXK4p7WIYUcp8xx9m0RZUpV6XUDEhkoM4efI8dzPiU=", - "owner": "ezKEa", - "repo": "aagl-gtk-on-nix", - "rev": "1172be1377bc65581004f4d5927b58c5c7d96639", + "lastModified": 1755470564, + "narHash": "sha256-KB1ZryVDoQcbIsItOf4WtxkHhh3ppj+XwMpSnt/2QHc=", + "owner": "tgirlcloud", + "repo": "easy-hosts", + "rev": "d0422bc7b3db26268982aa15d07e60370e76ee1d", "type": "github" }, "original": { - "owner": "ezKEa", - "repo": "aagl-gtk-on-nix", + "owner": "tgirlcloud", + "repo": "easy-hosts", "type": "github" } }, - "ags": { + "flake-parts": { "inputs": { - "astal": "astal", - "nixpkgs": "nixpkgs_3" - }, - "locked": { - "lastModified": 1762046771, - "narHash": "sha256-baVZvZZN0t9F3fvVhxmQA1/oNykXGd/YhlF19JqCLc8=", - "owner": "Aylur", - "repo": "ags", - "rev": "fe13af2daec716226ccdb3158606a8577853e0ff", - "type": "github" - }, - "original": { - "owner": "Aylur", - "repo": "ags", - "type": "github" - } - }, - "aquamarine": { - "inputs": { - "hyprutils": [ - "hyprland", - "hyprutils" - ], - "hyprwayland-scanner": [ - "hyprland", - "hyprwayland-scanner" - ], - "nixpkgs": [ - "hyprland", - "nixpkgs" - ], - "systems": [ - "hyprland", - "systems" - ] - }, - "locked": { - "lastModified": 1761420899, - "narHash": "sha256-kxGCip6GNbcbNWKu4J2iKbNYfFTS8Zbjg9CWp0zmFoM=", - "owner": "hyprwm", - "repo": "aquamarine", - "rev": "62479232aae42c1ef09c2c027c8cfd91df060897", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "aquamarine", - "type": "github" - } - }, - "astal": { - "inputs": { - "nixpkgs": [ - "ags", + "nixpkgs-lib": [ "nixpkgs" ] }, "locked": { - "lastModified": 1762012522, - "narHash": "sha256-ncEN4OVFM5M9VFc4oR3gOI5K8r99GcYxtU+Cf4Z8pbs=", - "owner": "aylur", - "repo": "astal", - "rev": "671d4229c798834190a50fb8b8d8addd19b529e9", + "lastModified": 1762980239, + "narHash": "sha256-8oNVE8TrD19ulHinjaqONf9QWCKK+w4url56cdStMpM=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "52a2caecc898d0b46b2b905f058ccc5081f842da", "type": "github" }, "original": { - "owner": "aylur", - "repo": "astal", - "type": "github" - } - }, - "flake-compat": { - "flake": false, - "locked": { - "lastModified": 1761588595, - "narHash": "sha256-XKUZz9zewJNUj46b4AJdiRZJAvSZ0Dqj2BNfXvFlJC4=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "f387cd2afec9419c8ee37694406ca490c3f34ee5", - "type": "github" - }, - "original": { - "owner": "edolstra", - "repo": "flake-compat", - "type": "github" - } - }, - "flake-compat_2": { - "flake": false, - "locked": { - "lastModified": 1747046372, - "narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885", - "type": "github" - }, - "original": { - "owner": "edolstra", - "repo": "flake-compat", + "owner": "hercules-ci", + "repo": "flake-parts", "type": "github" } }, "flake-utils": { "inputs": { - "systems": "systems_2" + "systems": "systems" }, "locked": { - "lastModified": 1726560853, - "narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=", + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", "owner": "numtide", "repo": "flake-utils", - "rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", "type": "github" }, "original": { @@ -158,38 +68,18 @@ "type": "github" } }, - "gitignore": { - "inputs": { - "nixpkgs": [ - "hyprland", - "pre-commit-hooks", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1709087332, - "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", - "owner": "hercules-ci", - "repo": "gitignore.nix", - "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", - "type": "github" - }, - "original": { - "owner": "hercules-ci", - "repo": "gitignore.nix", - "type": "github" - } - }, "home-manager": { "inputs": { - "nixpkgs": "nixpkgs_4" + "nixpkgs": [ + "nixpkgs" + ] }, "locked": { - "lastModified": 1762351818, - "narHash": "sha256-0ptUDbYwxv1kk/uzEX4+NJjY2e16MaAhtzAOJ6K0TG0=", + "lastModified": 1763416652, + "narHash": "sha256-8EBEEvtzQ11LCxpQHMNEBQAGtQiCu/pqP9zSovDSbNM=", "owner": "nix-community", "repo": "home-manager", - "rev": "b959c67241cae17fc9e4ee7eaf13dfa8512477ea", + "rev": "ea164b7c9ccdc2321379c2ff78fd4317b4c41312", "type": "github" }, "original": { @@ -198,331 +88,60 @@ "type": "github" } }, - "hyprcursor": { - "inputs": { - "hyprlang": [ - "hyprland", - "hyprlang" - ], - "nixpkgs": [ - "hyprland", - "nixpkgs" - ], - "systems": [ - "hyprland", - "systems" - ] - }, - "locked": { - "lastModified": 1753964049, - "narHash": "sha256-lIqabfBY7z/OANxHoPeIrDJrFyYy9jAM4GQLzZ2feCM=", - "owner": "hyprwm", - "repo": "hyprcursor", - "rev": "44e91d467bdad8dcf8bbd2ac7cf49972540980a5", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "hyprcursor", - "type": "github" - } - }, - "hyprgraphics": { - "inputs": { - "hyprutils": [ - "hyprland", - "hyprutils" - ], - "nixpkgs": [ - "hyprland", - "nixpkgs" - ], - "systems": [ - "hyprland", - "systems" - ] - }, - "locked": { - "lastModified": 1760445448, - "narHash": "sha256-fXGjL6dw31FPFRrmIemzGiNSlfvEJTJNsmadZi+qNhI=", - "owner": "hyprwm", - "repo": "hyprgraphics", - "rev": "50fb9f069219f338a11cf0bcccb9e58357d67757", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "hyprgraphics", - "type": "github" - } - }, - "hyprland": { - "inputs": { - "aquamarine": "aquamarine", - "hyprcursor": "hyprcursor", - "hyprgraphics": "hyprgraphics", - "hyprland-protocols": "hyprland-protocols", - "hyprland-qtutils": "hyprland-qtutils", - "hyprlang": "hyprlang", - "hyprutils": "hyprutils", - "hyprwayland-scanner": "hyprwayland-scanner", - "nixpkgs": "nixpkgs_5", - "pre-commit-hooks": "pre-commit-hooks", - "systems": "systems", - "xdph": "xdph" - }, - "locked": { - "lastModified": 1762269308, - "narHash": "sha256-3fTMnF1E7BsZ7NlmFmPo6+SRFm4FELP45IDLHcGLZ1s=", - "ref": "refs/heads/main", - "rev": "46b71eda6423cc9c3b19cb310c3344e81ac624c5", - "revCount": 6551, - "type": "git", - "url": "https://github.com/hyprwm/Hyprland" - }, - "original": { - "type": "git", - "url": "https://github.com/hyprwm/Hyprland" - } - }, - "hyprland-contrib": { - "inputs": { - "nixpkgs": "nixpkgs_6" - }, - "locked": { - "lastModified": 1759613406, - "narHash": "sha256-PzgQJydp+RlKvwDi807pXPlURdIAVqLppZDga3DwPqg=", - "owner": "hyprwm", - "repo": "contrib", - "rev": "32e1a75b65553daefb419f0906ce19e04815aa3a", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "contrib", - "type": "github" - } - }, - "hyprland-protocols": { - "inputs": { - "nixpkgs": [ - "hyprland", - "nixpkgs" - ], - "systems": [ - "hyprland", - "systems" - ] - }, - "locked": { - "lastModified": 1759610243, - "narHash": "sha256-+KEVnKBe8wz+a6dTLq8YDcF3UrhQElwsYJaVaHXJtoI=", - "owner": "hyprwm", - "repo": "hyprland-protocols", - "rev": "bd153e76f751f150a09328dbdeb5e4fab9d23622", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "hyprland-protocols", - "type": "github" - } - }, - "hyprland-qt-support": { - "inputs": { - "hyprlang": [ - "hyprland", - "hyprland-qtutils", - "hyprlang" - ], - "nixpkgs": [ - "hyprland", - "hyprland-qtutils", - "nixpkgs" - ], - "systems": [ - "hyprland", - "hyprland-qtutils", - "systems" - ] - }, - "locked": { - "lastModified": 1749154592, - "narHash": "sha256-DO7z5CeT/ddSGDEnK9mAXm1qlGL47L3VAHLlLXoCjhE=", - "owner": "hyprwm", - "repo": "hyprland-qt-support", - "rev": "4c8053c3c888138a30c3a6c45c2e45f5484f2074", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "hyprland-qt-support", - "type": "github" - } - }, - "hyprland-qtutils": { - "inputs": { - "hyprland-qt-support": "hyprland-qt-support", - "hyprlang": [ - "hyprland", - "hyprlang" - ], - "hyprutils": [ - "hyprland", - "hyprland-qtutils", - "hyprlang", - "hyprutils" - ], - "nixpkgs": [ - "hyprland", - "nixpkgs" - ], - "systems": [ - "hyprland", - "systems" - ] - }, - "locked": { - "lastModified": 1759080228, - "narHash": "sha256-RgDoAja0T1hnF0pTc56xPfLfFOO8Utol2iITwYbUhTk=", - "owner": "hyprwm", - "repo": "hyprland-qtutils", - "rev": "629b15c19fa4082e4ce6be09fdb89e8c3312aed7", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "hyprland-qtutils", - "type": "github" - } - }, - "hyprlang": { - "inputs": { - "hyprutils": [ - "hyprland", - "hyprutils" - ], - "nixpkgs": [ - "hyprland", - "nixpkgs" - ], - "systems": [ - "hyprland", - "systems" - ] - }, - "locked": { - "lastModified": 1758927902, - "narHash": "sha256-LZgMds7M94+vuMql2bERQ6LiFFdhgsEFezE4Vn+Ys3A=", - "owner": "hyprwm", - "repo": "hyprlang", - "rev": "4dafa28d4f79877d67a7d1a654cddccf8ebf15da", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "hyprlang", - "type": "github" - } - }, - "hyprutils": { - "inputs": { - "nixpkgs": [ - "hyprland", - "nixpkgs" - ], - "systems": [ - "hyprland", - "systems" - ] - }, - "locked": { - "lastModified": 1762208756, - "narHash": "sha256-hC1jb4tdjFfEuU18KQiMgz5XPAO+d5SfbjAUS7haLl4=", - "owner": "hyprwm", - "repo": "hyprutils", - "rev": "164a30b3d8b3174a32ac7326782476f1188e6118", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "hyprutils", - "type": "github" - } - }, - "hyprwayland-scanner": { - "inputs": { - "nixpkgs": [ - "hyprland", - "nixpkgs" - ], - "systems": [ - "hyprland", - "systems" - ] - }, - "locked": { - "lastModified": 1755184602, - "narHash": "sha256-RCBQN8xuADB0LEgaKbfRqwm6CdyopE1xIEhNc67FAbw=", - "owner": "hyprwm", - "repo": "hyprwayland-scanner", - "rev": "b3b0f1f40ae09d4447c20608e5a4faf8bf3c492d", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "hyprwayland-scanner", - "type": "github" - } - }, "lix": { "flake": false, "locked": { - "lastModified": 1729298361, - "narHash": "sha256-hiGtfzxFkDc9TSYsb96Whg0vnqBVV7CUxyscZNhed0U=", - "rev": "ad9d06f7838a25beec425ff406fe68721fef73be", + "lastModified": 1763570812, + "narHash": "sha256-A42G8ulTZ1MFCR0VsLF21CoKi0XKGUYwtVBHGm5mFgQ=", + "rev": "f3b2f3496bd6d346cba475d0ba152a9d3a83dec7", "type": "tarball", - "url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/ad9d06f7838a25beec425ff406fe68721fef73be.tar.gz?rev=ad9d06f7838a25beec425ff406fe68721fef73be" + "url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/f3b2f3496bd6d346cba475d0ba152a9d3a83dec7.tar.gz" }, "original": { "type": "tarball", - "url": "https://git.lix.systems/lix-project/lix/archive/2.91.1.tar.gz" + "url": "https://git.lix.systems/lix-project/lix/archive/main.tar.gz" } }, "lix-module": { "inputs": { "flake-utils": "flake-utils", "flakey-profile": "flakey-profile", - "lix": "lix", - "nixpkgs": "nixpkgs_7" + "lix": [ + "lix" + ], + "nixpkgs": [ + "nixpkgs" + ] }, "locked": { - "lastModified": 1732605668, - "narHash": "sha256-DN5/166jhiiAW0Uw6nueXaGTueVxhfZISAkoxasmz/g=", - "rev": "f19bd752910bbe3a861c9cad269bd078689d50fe", + "lastModified": 1763435414, + "narHash": "sha256-i2467FddWfd19q5Qoj+1/BAeg6LZmM5m4mYGRSQn/as=", + "rev": "192c92b603731fbc1bade6c1b18c8d8a0086f703", "type": "tarball", - "url": "https://git.lix.systems/api/v1/repos/lix-project/nixos-module/archive/f19bd752910bbe3a861c9cad269bd078689d50fe.tar.gz" + "url": "https://git.lix.systems/api/v1/repos/lix-project/nixos-module/archive/192c92b603731fbc1bade6c1b18c8d8a0086f703.tar.gz" }, "original": { "type": "tarball", - "url": "https://git.lix.systems/lix-project/nixos-module/archive/2.91.1-2.tar.gz" + "url": "https://git.lix.systems/lix-project/nixos-module/archive/main.tar.gz" } }, "niri": { "inputs": { "niri-stable": "niri-stable", "niri-unstable": "niri-unstable", - "nixpkgs": "nixpkgs_8", + "nixpkgs": [ + "nixpkgs" + ], "nixpkgs-stable": "nixpkgs-stable", "xwayland-satellite-stable": "xwayland-satellite-stable", "xwayland-satellite-unstable": "xwayland-satellite-unstable" }, "locked": { - "lastModified": 1762341801, - "narHash": "sha256-zx7UxreMz646qikxw+So7eGRQeWccKFZxuMvJowJuFs=", + "lastModified": 1763538184, + "narHash": "sha256-6umNY06L6ZUjinthjVZIwyWyAjxOXSPhXfY0U1CVTWw=", "owner": "sodiboo", "repo": "niri-flake", - "rev": "20aadad64b8b8cbebc71371713c141d91d7f8172", + "rev": "85a16f400641eed912431efcec16f12e2100d46a", "type": "github" }, "original": { @@ -551,11 +170,11 @@ "niri-unstable": { "flake": false, "locked": { - "lastModified": 1762146685, - "narHash": "sha256-anRlNG6t7esBbF1+ALDeathVBSclA0PEL52Vo0WnN5g=", + "lastModified": 1763531615, + "narHash": "sha256-cMi8tz+0+gWtlYqVnyMv7phOeQ0/4WmzZ/lxCyraUVw=", "owner": "YaLTeR", "repo": "niri", - "rev": "a2ca2b3c866bc781b12c334a9f949b3db6d7c943", + "rev": "c722634c269ae97a5ea185691bcd0b8c73a600e5", "type": "github" }, "original": { @@ -566,27 +185,24 @@ }, "nixpkgs": { "locked": { - "lastModified": 1761672384, - "narHash": "sha256-o9KF3DJL7g7iYMZq9SWgfS1BFlNbsm6xplRjVlOCkXI=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "08dacfca559e1d7da38f3cf05f1f45ee9bfd213c", - "type": "github" + "lastModified": 1763464769, + "narHash": "sha256-mU85VDFRIgKGq1EhT71bLjhvjJ5yuMEe0Ip1kwCbR80=", + "rev": "6f374686605df381de8541c072038472a5ea2e2d", + "type": "tarball", + "url": "https://releases.nixos.org/nixpkgs/nixpkgs-25.11pre898015.6f374686605d/nixexprs.tar.xz" }, "original": { - "owner": "nixos", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" + "type": "tarball", + "url": "https://channels.nixos.org/nixpkgs-unstable/nixexprs.tar.xz" } }, "nixpkgs-stable": { "locked": { - "lastModified": 1762233356, - "narHash": "sha256-cGS3lLTYusbEP/IJIWGgnkzIl+FA5xDvtiHyjalGr4k=", + "lastModified": 1763334038, + "narHash": "sha256-LBVOyaH6NFzQ3X/c6vfMZ9k4SV2ofhpxeL9YnhHNJQQ=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "ca534a76c4afb2bdc07b681dbc11b453bab21af8", + "rev": "4c8cdd5b1a630e8f72c9dd9bf582b1afb3127d2c", "type": "github" }, "original": { @@ -596,213 +212,30 @@ "type": "github" } }, - "nixpkgs_10": { - "locked": { - "lastModified": 1760596604, - "narHash": "sha256-J/i5K6AAz/y5dBePHQOuzC7MbhyTOKsd/GLezSbEFiM=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "3cbe716e2346710d6e1f7c559363d14e11c32a43", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixpkgs-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_2": { - "locked": { - "lastModified": 1744536153, - "narHash": "sha256-awS2zRgF4uTwrOKwwiJcByDzDOdo3Q1rPZbiHQg/N38=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "18dd725c29603f582cf1900e0d25f9f1063dbf11", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixpkgs-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_3": { - "locked": { - "lastModified": 1761907660, - "narHash": "sha256-kJ8lIZsiPOmbkJypG+B5sReDXSD1KGu2VEPNqhRa/ew=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "2fb006b87f04c4d3bdf08cfdbc7fab9c13d94a15", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_4": { - "locked": { - "lastModified": 1762111121, - "narHash": "sha256-4vhDuZ7OZaZmKKrnDpxLZZpGIJvAeMtK6FKLJYUtAdw=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "b3d51a0365f6695e7dd5cdf3e180604530ed33b4", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_5": { - "locked": { - "lastModified": 1762111121, - "narHash": "sha256-4vhDuZ7OZaZmKKrnDpxLZZpGIJvAeMtK6FKLJYUtAdw=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "b3d51a0365f6695e7dd5cdf3e180604530ed33b4", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_6": { - "locked": { - "lastModified": 1712163089, - "narHash": "sha256-Um+8kTIrC19vD4/lUCN9/cU9kcOsD1O1m+axJqQPyMM=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "fd281bd6b7d3e32ddfa399853946f782553163b5", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_7": { - "locked": { - "lastModified": 1729070438, - "narHash": "sha256-KOTTUfPkugH52avUvXGxvWy8ibKKj4genodIYUED+Kc=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "5785b6bb5eaae44e627d541023034e1601455827", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_8": { - "locked": { - "lastModified": 1762111121, - "narHash": "sha256-4vhDuZ7OZaZmKKrnDpxLZZpGIJvAeMtK6FKLJYUtAdw=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "b3d51a0365f6695e7dd5cdf3e180604530ed33b4", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_9": { - "locked": { - "lastModified": 1762111121, - "narHash": "sha256-4vhDuZ7OZaZmKKrnDpxLZZpGIJvAeMtK6FKLJYUtAdw=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "b3d51a0365f6695e7dd5cdf3e180604530ed33b4", - "type": "github" - }, - "original": { - "id": "nixpkgs", - "ref": "nixos-unstable", - "type": "indirect" - } - }, - "pre-commit-hooks": { - "inputs": { - "flake-compat": "flake-compat_2", - "gitignore": "gitignore", - "nixpkgs": [ - "hyprland", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1760663237, - "narHash": "sha256-BflA6U4AM1bzuRMR8QqzPXqh8sWVCNDzOdsxXEguJIc=", - "owner": "cachix", - "repo": "git-hooks.nix", - "rev": "ca5b894d3e3e151ffc1db040b6ce4dcc75d31c37", - "type": "github" - }, - "original": { - "owner": "cachix", - "repo": "git-hooks.nix", - "type": "github" - } - }, "root": { "inputs": { - "aagl": "aagl", - "ags": "ags", + "easy-hosts": "easy-hosts", + "flake-parts": "flake-parts", "home-manager": "home-manager", - "hyprland": "hyprland", - "hyprland-contrib": "hyprland-contrib", + "lix": "lix", "lix-module": "lix-module", "niri": "niri", - "nixpkgs": "nixpkgs_9", + "nixpkgs": "nixpkgs", "sops-nix": "sops-nix" } }, - "rust-overlay": { - "inputs": { - "nixpkgs": "nixpkgs_2" - }, - "locked": { - "lastModified": 1761791894, - "narHash": "sha256-myRIDh+PxaREz+z9LzbqBJF+SnTFJwkthKDX9zMyddY=", - "owner": "oxalica", - "repo": "rust-overlay", - "rev": "59c45eb69d9222a4362673141e00ff77842cd219", - "type": "github" - }, - "original": { - "owner": "oxalica", - "repo": "rust-overlay", - "type": "github" - } - }, "sops-nix": { "inputs": { - "nixpkgs": "nixpkgs_10" + "nixpkgs": [ + "nixpkgs" + ] }, "locked": { - "lastModified": 1760998189, - "narHash": "sha256-ee2e1/AeGL5X8oy/HXsZQvZnae6XfEVdstGopKucYLY=", + "lastModified": 1763509310, + "narHash": "sha256-s2WzTAD3vJtPACBCZXezNUMTG/wC6SFsU9DxazB9wDI=", "owner": "Mic92", "repo": "sops-nix", - "rev": "5a7d18b5c55642df5c432aadb757140edfeb70b3", + "rev": "3ee33c0ed7c5aa61b4e10484d2ebdbdc98afb03e", "type": "github" }, "original": { @@ -812,21 +245,6 @@ } }, "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_2": { "locked": { "lastModified": 1681028828, "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", @@ -841,47 +259,6 @@ "type": "github" } }, - "xdph": { - "inputs": { - "hyprland-protocols": [ - "hyprland", - "hyprland-protocols" - ], - "hyprlang": [ - "hyprland", - "hyprlang" - ], - "hyprutils": [ - "hyprland", - "hyprutils" - ], - "hyprwayland-scanner": [ - "hyprland", - "hyprwayland-scanner" - ], - "nixpkgs": [ - "hyprland", - "nixpkgs" - ], - "systems": [ - "hyprland", - "systems" - ] - }, - "locked": { - "lastModified": 1761431178, - "narHash": "sha256-xzjC1CV3+wpUQKNF+GnadnkeGUCJX+vgaWIZsnz9tzI=", - "owner": "hyprwm", - "repo": "xdg-desktop-portal-hyprland", - "rev": "4b8801228ff958d028f588f0c2b911dbf32297f9", - "type": "github" - }, - "original": { - "owner": "hyprwm", - "repo": "xdg-desktop-portal-hyprland", - "type": "github" - } - }, "xwayland-satellite-stable": { "flake": false, "locked": { @@ -902,11 +279,11 @@ "xwayland-satellite-unstable": { "flake": false, "locked": { - "lastModified": 1762302024, - "narHash": "sha256-F+4W0J5r7fbEl+VmATFqAA5+4dFSNAmLJB7tAtrTIkY=", + "lastModified": 1762747449, + "narHash": "sha256-Z1TKiux8K09a93w4PFDFsj8HFugXNy3iCC3Z8MpR5Rk=", "owner": "Supreeeme", "repo": "xwayland-satellite", - "rev": "53b6072bd995b5b4017999cf247f9eb6660c72a2", + "rev": "6338574bc5c036487486acde264f38f39ea15fad", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index eeb4bd0..37dafc1 100644 --- a/flake.nix +++ b/flake.nix @@ -1,94 +1,89 @@ { - inputs = { - nixpkgs.url = "nixpkgs/nixos-unstable"; + outputs = inputs: inputs.flake-parts.lib.mkFlake { inherit inputs; } { + imports = with inputs; [ + easy-hosts.flakeModule + home-manager.flakeModules.home-manager + ]; - home-manager.url = "github:nix-community/home-manager"; + systems = [ "x86_64-linux" ]; + easy-hosts = { + autoConstruct = true; + path = ./hosts; + onlySystem = "x86_64-nixos"; - lix-module.url = "https://git.lix.systems/lix-project/nixos-module/archive/2.91.1-2.tar.gz"; + shared = { + modules = [ + inputs.lix-module.nixosModules.default + ./nixosModules + ]; + }; + }; - hyprland.url = "git+https://github.com/hyprwm/Hyprland"; - hyprland-contrib.url = "github:hyprwm/contrib"; - - niri.url = "github:sodiboo/niri-flake"; - - sops-nix.url = "github:Mic92/sops-nix"; - ags.url = "github:Aylur/ags"; - aagl.url = "github:ezKEa/aagl-gtk-on-nix"; + flake = { + homeConfigurations = let + userConfig = system: extraModules: + inputs.home-manager.lib.homeManagerConfiguration { + extraSpecialArgs = { inherit inputs; }; + pkgs = inputs.nixpkgs.legacyPackages.${system}; + modules = [ ./hmModules ] ++ extraModules; + }; + in { + "pan@juri" = userConfig "x86_64-linux" [ ./users/juri ]; + "pan@jibril" = userConfig "x86_64-linux" [ ./users/jibril ]; + "pan@onizuka" = userConfig "x86_64-linux" [ ./users/onizuka ]; + }; + }; }; - outputs = { self, home-manager, nixpkgs, lix-module, ... }@inputs: let - system = "x86_64-linux"; - pkgs = nixpkgs.legacyPackages.${system}; - fs = pkgs.lib.fileset; - st = pkgs.lib.strings; - as = pkgs.lib.attrsets; + inputs = { + # Save data with this url. Source: + # at://did:plc:mojgntlezho4qt7uvcfkdndg/app.bsky.feed.post/3loogwsoqok2w + # cid: bafyreidhuuxs3cuabneygtxir65hnd7hvy4hwj5rwrylpwmp7jhxciasve + nixpkgs.url = "https://channels.nixos.org/nixpkgs-unstable/nixexprs.tar.xz"; - hosts = let - hostFilter = { name, ...}: name == "host.nix"; - hostPaths = fs.toList (fs.fileFilter hostFilter ./hosts); - # Assumes dir structure is start_of_path/hosts/hostname/host.nix - extractHostName = path: builtins.unsafeDiscardStringContext ( - st.removeSuffix "/host.nix" ( - builtins.elemAt (st.splitString "/hosts/" path) 1 - ) - ); - in builtins.listToAttrs (map (path: { - value = path; - name = extractHostName path; - }) hostPaths); - - users = let - userFilter = { name, ...}: name == "user.nix"; - userPaths = fs.toList (fs.fileFilter userFilter ./hosts); - in builtins.listToAttrs (map (path: let - dirsAndFiles = st.splitString "/" path; - dAFLength = builtins.length dirsAndFiles; - # Assumes dir structure is start_of_path/hosts/hostname/users/username/user.nix - hostname = builtins.unsafeDiscardStringContext ( - builtins.elemAt dirsAndFiles (dAFLength - 4)); - username = builtins.unsafeDiscardStringContext ( - builtins.elemAt dirsAndFiles (dAFLength - 2)); - in { - name = username + "@" + hostname; - value = path; - } - ) userPaths); - - userConfig = usernameAtHostname: userpath: home-manager.lib.homeManagerConfiguration { - inherit pkgs; - extraSpecialArgs = { - inherit inputs; - inherit usernameAtHostname; - }; - modules = [ - ./hmModules - userpath - ]; + home-manager = { + type = "github"; + owner = "nix-community"; + repo = "home-manager"; + inputs.nixpkgs.follows = "nixpkgs"; }; - hostConfig = hostname: hostpath: nixpkgs.lib.nixosSystem { - specialArgs = let - hostFilteredUsers = as.filterAttrs ( - name: value: let - userHostname = builtins.elemAt (st.splitString "@" name) 1; - in userHostname == hostname - ) users; - - hostUsers = as.mapAttrsToList ( - name: value: builtins.elemAt (st.splitString "@" name) 0 - ) hostFilteredUsers; - in { - inherit inputs; - inherit hostname; - "usernameList" = hostUsers; - }; - modules = [ - ./nixosModules - hostpath - ]; + flake-parts = { + type = "github"; + owner = "hercules-ci"; + repo = "flake-parts"; + inputs.nixpkgs-lib.follows = "nixpkgs"; + }; + + easy-hosts = { + type = "github"; + owner = "tgirlcloud"; + repo = "easy-hosts"; + }; + + lix = { + url = "https://git.lix.systems/lix-project/lix/archive/main.tar.gz"; + flake = false; + }; + + lix-module = { + url = "https://git.lix.systems/lix-project/nixos-module/archive/main.tar.gz"; + inputs.nixpkgs.follows = "nixpkgs"; + inputs.lix.follows = "lix"; + }; + + niri = { + type = "github"; + owner = "sodiboo"; + repo = "niri-flake"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + sops-nix = { + type = "github"; + owner = "Mic92"; + repo = "sops-nix"; + inputs.nixpkgs.follows = "nixpkgs"; }; - in { - nixosConfigurations = builtins.mapAttrs (name: path: hostConfig name path) hosts; - homeConfigurations = builtins.mapAttrs (name: path: userConfig name path) users; }; } diff --git a/hmModules/apps/hypr/app.nix b/hmModules/apps/hypr/app.nix index 85e7b6f..8bdc848 100644 --- a/hmModules/apps/hypr/app.nix +++ b/hmModules/apps/hypr/app.nix @@ -1,5 +1,5 @@ -{ config, inputs, pkgs, lib, ... }: -let rootPath = ./.; in +{ config, lib, ... }: +# let rootPath = ./.; in { options.hypr = { enable = lib.mkEnableOption "Enables hyprland"; @@ -34,220 +34,224 @@ let rootPath = ./.; in polkit.enable = lib.mkEnableOption "Enables polkit agent"; screenshot.enable = lib.mkEnableOption "Enables Screenshotting"; }; + + config.warnings = lib.mkIf config.hypr.enable ['' + hypr.* has been deprecated to allow the removal of hyprland from flake inputs. + '']; - imports = [ inputs.hyprland.homeManagerModules.default ]; + # imports = [ inputs.hyprland.homeManagerModules.default ]; - config = let - lopts = lib.lists.optionals; - in { - nix.settings = { - substituters = ["https://hyprland.cachix.org"]; - trusted-public-keys = ["hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="]; - }; - } // lib.mkIf config.hypr.enable { - wayland.windowManager.hyprland = let - mod = config.hypr.mod_key; - # p-s = let - # chw = config.hypr.workspace; - # findDefaultWs = id: if (builtins.hasAttr id chw.workspaces) - # then (builtins.head (builtins.getAttr id chw.workspaces)) - # else ""; - # in with config.hypr.workspace; lib.mkIf primary-secondary.enable { - # primaryWs = findDefaultWs primary-secondary.primary; - # secondaryWs = findDefaultWs primary-secondary.secondary; - # }; - in { - enable = true; - settings = { - monitor = config.hypr.monitor.details; - workspace = let - wsMonitor = monitor: wrksps: map (ws: - if ws == (builtins.head wrksps) - then "name:"+ws+", monitor:"+monitor+", persistent:true, default:true" - else "name:"+ws+", monitor:"+monitor+", persistent:true" - ) wrksps; - makeRules = wsAttr: builtins.concatLists (builtins.attrValues ( - builtins.mapAttrs wsMonitor wsAttr - )); - in makeRules config.hypr.workspace.workspaces - ++ [ - "w[t1], gapsout:0, gapsin:0" - "w[tg1], gapsout:0, gapsin:0" - "f[1], gapsout:0, gapsin:0" - ] - ++ lopts config.hypr.workspace.scratchpad.enable [ - "special:scratch, on-created-empty: [float; size 50% 50%; center] ${config.defaultApps.terminal}" - ]; - input = { - accel_profile = "flat"; - sensitivity = config.hypr.mouse.sensitivity; - }; - general = { - gaps_in = 3; - gaps_out = 3; - border_size = 2; - "col.active_border" = "rgb(F5C2E7)"; - "col.inactive_border" = "rgb(1E1D2F)"; - layout = "master"; - }; - decoration = { - rounding = 2; - blur = { - enabled = true; - size = 12; - passes = 2; - special = true; - }; - }; - animation = [ - "windows, 1, 4, default, popin 50%" - "windowsOut, 1, 4, default, popin 50%" - "windowsMove, 1, 3, default" - "border, 1, 3, default" - "fade, 1, 3, default" - "workspaces, 1, 3, default" - ]; - master = { - mfact = config.hypr.master.mfact; - }; - misc = { - focus_on_activate = true; - }; - - exec-once = lopts config.hypr.polkit.enable [ - "${pkgs.kdePackages.polkit-kde-agent-1}/bin/libexec/polkit-kde-authentication-agent-1" - ] ++ lopts config.hypr.background.enable [ - "${pkgs.swww}/bin/swww-daemon" - "${pkgs.swww}/bin/swww img ${config.hypr.background.path}" - ] ++ lopts config.ags.enable [ - "ags" - ] ++ lopts config.beeper.enable [ - "[workspace name:chat silent] Beeper" - ]; - - env = with config.hypr; [ - # "HYPR_MON_PRIMARY, ${workspace.primary-secondary.primary}" - # "HYPR_MON_SECONDARY, ${workspace.primary-secondary.secondary}" - "HYPR_WORK_DB, ${config.xdg.cacheHome}/hypr/workspace.db" - ] ++ lopts cursor.enable [ - "HYPRCURSOR_THEME,${cursor.theme}" - "HYPRCURSOR_SIZE,${cursor.size}" - ] ++ lopts config.nvidia.enable [ - "LIBVA_DRIVER_NAME,nvidia" - "XDG_SESSION_TYPE,wayland" - "GBM_BACKEND,nvidia-drm" - "__GLX_VENDOR_LIBRARY_NAME,nvidia" - "WLR_RENDERER_ALLOW_SOFTWARE,1" - "WLR_DRM_DEVICES,/dev/dri/card1" - ]; - - windowrulev2 = let - workspaceDefaults = wsname: applist: map ( - app: "workspace " + wsname + ", " + app - ) applist; - allDefault = wsAttr: builtins.concatLists (builtins.attrValues ( - builtins.mapAttrs workspaceDefaults wsAttr - )); - in allDefault config.hypr.workspace.defaults - ++ [ - "bordersize 0, floating:0, onworkspace:w[t1]" - "rounding 0, floating:0, onworkspace:w[t1]" - "bordersize 0, floating:0, onworkspace:w[tg1]" - "rounding 0, floating:0, onworkspace:w[tg1]" - "bordersize 0, floating:0, onworkspace:f[1]" - "rounding 0, floating:0, onworkspace:f[1]" - ] - ++ lopts config.hypr.xwayland.videobridge.enable [ - "opacity 0.0 override 0.0 override,class:^(xwaylandvideobridge)$" - "noanim,class:^(xwaylandvideobridge)$" - "noinitialfocus,class:^(xwaylandvideobridge)$" - "maxsize 1 1,class:^(xwaylandvideobridge)$" - "noblur,class:^(xwaylandvideobridge)$" - ] ++ map (id: "opacity 1 override, " + id) config.hypr.windows.opaque - ++ [ - "opacity 0.94 fullscreen:0" - "opacity 0.79 override, class:^(${config.defaultApps.terminal})$" - ]; - - # 1, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh home - # 2, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh web - # 3, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh med - # 4, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh game - # 5, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh etc - # _, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh hell - # TAB, exec, $XDG_CONFIG_HOME/hypr/scripts/changesecondary.xsh - # - # SHIFT, 1, movetoworkspacesilent, name:home - # SHIFT, 2, movetoworkspacesilent, name:web - # SHIFT, 3, movetoworkspacesilent, name:med - # SHIFT, 4, movetoworkspacesilent, name:game - # SHIFT, TAB, movetoworkspacesilent, r-1 - - bind = let - modPrefix = kb: if (lib.strings.hasPrefix "&" kb) - then ("${mod}" + kb) - else ("${mod}, " + kb); - in map modPrefix ([ - "Return, exec, ${config.defaultApps.terminal}" - "&SHIFT, Q, exit" - "h, focusmonitor, l" - "l, focusmonitor, r" - "j, cyclenext," - "k, cyclenext, prev" - "&SHIFT, h, movecurrentworkspacetomonitor, -1" - "&SHIFT, l, movecurrentworkspacetomonitor, +1" - "&SHIFT, j, swapnext," - "&SHIFT, k, swapnext, prev" - "c, killactive" - "f, togglefloating" - "&SHIFT, f, fullscreen" - ] ++ (let - workspaces = builtins.concatLists ( - builtins.attrValues config.hypr.workspace.workspaces); - wsBinds = with builtins; wrksps: depth: if depth > (length wrksps) - then [] - else let ws = builtins.elemAt wrksps (depth -1); in [ - "${toString depth}, workspace, name:${ws}" - "&SHIFT, ${toString depth}, movetoworkspacesilent, name:${ws}" - ] ++ wsBinds wrksps (depth + 1); - in wsBinds workspaces 1) ++ lopts config.rofi.enable [ - "&SHIFT, return, exec, ${pkgs.rofi}/bin/rofi -show run" - ] ++ lopts config.hypr.screenshot.enable [ - "P, exec, ${pkgs.grimblast}/bin/grimblast --freeze copy area" - "&SHIFT, P, exec, ${pkgs.grimblast}/bin/grimblast --freeze copysave area" - ] ++ lopts config.hypr.workspace.scratchpad.enable [ - "i, togglespecialworkspace, scratch" - ]); - - bindm = map (kb: "${mod}, " + kb) [ - "mouse:272, movewindow" - "mouse:273, movewindow" - ]; - }; - }; - - home.packages = with pkgs; [ - wlr-randr # Xrandr for wayland - wl-clipboard # Clipboard manager for wayland - ] ++ lopts config.hypr.xwayland.videobridge.enable [ - kdePackages.xwaylandvideobridge - ] ++ lopts config.hypr.cursor.enable [ - hyprcursor - ] ++ lopts config.hypr.screenshot.enable [ - hyprpicker # Colorpicker, needed for screenshot tool - inputs.hyprland-contrib.packages.${pkgs.system}.grimblast - ]; - - xdg.configFile."hypr-scripts" = { - source = rootPath + "/scripts"; - target = "hypr/scripts"; - executable = true; - }; - - xdg.dataFile."hypr-icons" = lib.mkIf config.hypr.cursor.enable { - source = rootPath + "/icons"; - target = "icons/"; - recursive = true; - }; - }; + # config = let + # lopts = lib.lists.optionals; + # in { + # nix.settings = { + # substituters = ["https://hyprland.cachix.org"]; + # trusted-public-keys = ["hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="]; + # }; + # } // lib.mkIf config.hypr.enable { + # wayland.windowManager.hyprland = let + # mod = config.hypr.mod_key; + # # p-s = let + # # chw = config.hypr.workspace; + # # findDefaultWs = id: if (builtins.hasAttr id chw.workspaces) + # # then (builtins.head (builtins.getAttr id chw.workspaces)) + # # else ""; + # # in with config.hypr.workspace; lib.mkIf primary-secondary.enable { + # # primaryWs = findDefaultWs primary-secondary.primary; + # # secondaryWs = findDefaultWs primary-secondary.secondary; + # # }; + # in { + # enable = true; + # settings = { + # monitor = config.hypr.monitor.details; + # workspace = let + # wsMonitor = monitor: wrksps: map (ws: + # if ws == (builtins.head wrksps) + # then "name:"+ws+", monitor:"+monitor+", persistent:true, default:true" + # else "name:"+ws+", monitor:"+monitor+", persistent:true" + # ) wrksps; + # makeRules = wsAttr: builtins.concatLists (builtins.attrValues ( + # builtins.mapAttrs wsMonitor wsAttr + # )); + # in makeRules config.hypr.workspace.workspaces + # ++ [ + # "w[t1], gapsout:0, gapsin:0" + # "w[tg1], gapsout:0, gapsin:0" + # "f[1], gapsout:0, gapsin:0" + # ] + # ++ lopts config.hypr.workspace.scratchpad.enable [ + # "special:scratch, on-created-empty: [float; size 50% 50%; center] ${config.defaultApps.terminal}" + # ]; + # input = { + # accel_profile = "flat"; + # sensitivity = config.hypr.mouse.sensitivity; + # }; + # general = { + # gaps_in = 3; + # gaps_out = 3; + # border_size = 2; + # "col.active_border" = "rgb(F5C2E7)"; + # "col.inactive_border" = "rgb(1E1D2F)"; + # layout = "master"; + # }; + # decoration = { + # rounding = 2; + # blur = { + # enabled = true; + # size = 12; + # passes = 2; + # special = true; + # }; + # }; + # animation = [ + # "windows, 1, 4, default, popin 50%" + # "windowsOut, 1, 4, default, popin 50%" + # "windowsMove, 1, 3, default" + # "border, 1, 3, default" + # "fade, 1, 3, default" + # "workspaces, 1, 3, default" + # ]; + # master = { + # mfact = config.hypr.master.mfact; + # }; + # misc = { + # focus_on_activate = true; + # }; + # + # exec-once = lopts config.hypr.polkit.enable [ + # "${pkgs.kdePackages.polkit-kde-agent-1}/bin/libexec/polkit-kde-authentication-agent-1" + # ] ++ lopts config.hypr.background.enable [ + # "${pkgs.swww}/bin/swww-daemon" + # "${pkgs.swww}/bin/swww img ${config.hypr.background.path}" + # ] ++ lopts config.ags.enable [ + # "ags" + # ] ++ lopts config.beeper.enable [ + # "[workspace name:chat silent] Beeper" + # ]; + # + # env = with config.hypr; [ + # # "HYPR_MON_PRIMARY, ${workspace.primary-secondary.primary}" + # # "HYPR_MON_SECONDARY, ${workspace.primary-secondary.secondary}" + # "HYPR_WORK_DB, ${config.xdg.cacheHome}/hypr/workspace.db" + # ] ++ lopts cursor.enable [ + # "HYPRCURSOR_THEME,${cursor.theme}" + # "HYPRCURSOR_SIZE,${cursor.size}" + # ] ++ lopts config.nvidia.enable [ + # "LIBVA_DRIVER_NAME,nvidia" + # "XDG_SESSION_TYPE,wayland" + # "GBM_BACKEND,nvidia-drm" + # "__GLX_VENDOR_LIBRARY_NAME,nvidia" + # "WLR_RENDERER_ALLOW_SOFTWARE,1" + # "WLR_DRM_DEVICES,/dev/dri/card1" + # ]; + # + # windowrulev2 = let + # workspaceDefaults = wsname: applist: map ( + # app: "workspace " + wsname + ", " + app + # ) applist; + # allDefault = wsAttr: builtins.concatLists (builtins.attrValues ( + # builtins.mapAttrs workspaceDefaults wsAttr + # )); + # in allDefault config.hypr.workspace.defaults + # ++ [ + # "bordersize 0, floating:0, onworkspace:w[t1]" + # "rounding 0, floating:0, onworkspace:w[t1]" + # "bordersize 0, floating:0, onworkspace:w[tg1]" + # "rounding 0, floating:0, onworkspace:w[tg1]" + # "bordersize 0, floating:0, onworkspace:f[1]" + # "rounding 0, floating:0, onworkspace:f[1]" + # ] + # ++ lopts config.hypr.xwayland.videobridge.enable [ + # "opacity 0.0 override 0.0 override,class:^(xwaylandvideobridge)$" + # "noanim,class:^(xwaylandvideobridge)$" + # "noinitialfocus,class:^(xwaylandvideobridge)$" + # "maxsize 1 1,class:^(xwaylandvideobridge)$" + # "noblur,class:^(xwaylandvideobridge)$" + # ] ++ map (id: "opacity 1 override, " + id) config.hypr.windows.opaque + # ++ [ + # "opacity 0.94 fullscreen:0" + # "opacity 0.79 override, class:^(${config.defaultApps.terminal})$" + # ]; + # + # # 1, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh home + # # 2, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh web + # # 3, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh med + # # 4, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh game + # # 5, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh etc + # # _, exec, $XDG_CONFIG_HOME/hypr/scripts/changeprimary.xsh hell + # # TAB, exec, $XDG_CONFIG_HOME/hypr/scripts/changesecondary.xsh + # # + # # SHIFT, 1, movetoworkspacesilent, name:home + # # SHIFT, 2, movetoworkspacesilent, name:web + # # SHIFT, 3, movetoworkspacesilent, name:med + # # SHIFT, 4, movetoworkspacesilent, name:game + # # SHIFT, TAB, movetoworkspacesilent, r-1 + # + # bind = let + # modPrefix = kb: if (lib.strings.hasPrefix "&" kb) + # then ("${mod}" + kb) + # else ("${mod}, " + kb); + # in map modPrefix ([ + # "Return, exec, ${config.defaultApps.terminal}" + # "&SHIFT, Q, exit" + # "h, focusmonitor, l" + # "l, focusmonitor, r" + # "j, cyclenext," + # "k, cyclenext, prev" + # "&SHIFT, h, movecurrentworkspacetomonitor, -1" + # "&SHIFT, l, movecurrentworkspacetomonitor, +1" + # "&SHIFT, j, swapnext," + # "&SHIFT, k, swapnext, prev" + # "c, killactive" + # "f, togglefloating" + # "&SHIFT, f, fullscreen" + # ] ++ (let + # workspaces = builtins.concatLists ( + # builtins.attrValues config.hypr.workspace.workspaces); + # wsBinds = with builtins; wrksps: depth: if depth > (length wrksps) + # then [] + # else let ws = builtins.elemAt wrksps (depth -1); in [ + # "${toString depth}, workspace, name:${ws}" + # "&SHIFT, ${toString depth}, movetoworkspacesilent, name:${ws}" + # ] ++ wsBinds wrksps (depth + 1); + # in wsBinds workspaces 1) ++ lopts config.rofi.enable [ + # "&SHIFT, return, exec, ${pkgs.rofi}/bin/rofi -show run" + # ] ++ lopts config.hypr.screenshot.enable [ + # "P, exec, ${pkgs.grimblast}/bin/grimblast --freeze copy area" + # "&SHIFT, P, exec, ${pkgs.grimblast}/bin/grimblast --freeze copysave area" + # ] ++ lopts config.hypr.workspace.scratchpad.enable [ + # "i, togglespecialworkspace, scratch" + # ]); + # + # bindm = map (kb: "${mod}, " + kb) [ + # "mouse:272, movewindow" + # "mouse:273, movewindow" + # ]; + # }; + # }; + # + # home.packages = with pkgs; [ + # wlr-randr # Xrandr for wayland + # wl-clipboard # Clipboard manager for wayland + # ] ++ lopts config.hypr.xwayland.videobridge.enable [ + # kdePackages.xwaylandvideobridge + # ] ++ lopts config.hypr.cursor.enable [ + # hyprcursor + # ] ++ lopts config.hypr.screenshot.enable [ + # hyprpicker # Colorpicker, needed for screenshot tool + # inputs.hyprland-contrib.packages.${pkgs.system}.grimblast + # ]; + # + # xdg.configFile."hypr-scripts" = { + # source = rootPath + "/scripts"; + # target = "hypr/scripts"; + # executable = true; + # }; + # + # xdg.dataFile."hypr-icons" = lib.mkIf config.hypr.cursor.enable { + # source = rootPath + "/icons"; + # target = "icons/"; + # recursive = true; + # }; + # }; } diff --git a/hmModules/apps/lf/app.nix b/hmModules/apps/lf/app.nix index 25a3b89..ecc428e 100644 --- a/hmModules/apps/lf/app.nix +++ b/hmModules/apps/lf/app.nix @@ -33,7 +33,7 @@ relativenumber = true; }; commands = { - dragon-out = ''%${pkgs.dragon-drop}/bin/dragon -a -x "$fx"''; + dragon-out = ''%${pkgs.dragon-drop}/bin/dragon-drop -a -x "$fx"''; trash = lib.mkIf config.trash.enable '' %${pkgs.trash-cli}/bin/trash "$fx" ''; diff --git a/hmModules/automatic/default.nix b/hmModules/automatic/default.nix index f974b21..18c78ef 100644 --- a/hmModules/automatic/default.nix +++ b/hmModules/automatic/default.nix @@ -1,4 +1,4 @@ -{ config, lib, usernameAtHostname, ... }: +{ config, lib, ... }: { options = { @@ -9,17 +9,15 @@ browser = lib.mkOption { default = ""; }; }; }; - config = let - st = lib.strings; - in { + config = { # Let Home Manager install and manage itself. programs.home-manager.enable = true; nixpkgs.config.allowUnfree = true; home.stateVersion = "23.05"; home = { - username = builtins.elemAt (st.splitString "@" usernameAtHostname) 0; - homeDirectory = "/home/" + config.home.username; + username = "pan"; + homeDirectory = "/home/pan"; packages = config.extraPkgs; }; diff --git a/hmModules/services/widgets/ags/default.nix b/hmModules/services/widgets/ags/default.nix index 5d248d1..5403b1e 100644 --- a/hmModules/services/widgets/ags/default.nix +++ b/hmModules/services/widgets/ags/default.nix @@ -1,25 +1,30 @@ -{ config, inputs, pkgs, lib, ... }: +{ config, lib, ... }: { options.ags = { enable = lib.mkEnableOption "Enable ags"; }; + + config.warnings = lib.mkIf config.ags.enable ['' + ags.enable has been deprecated to allow the removal of ags from flake + inputs. + '']; - imports = [ inputs.ags.homeManagerModules.default ]; + # imports = [ inputs.ags.homeManagerModules.default ]; - config = lib.mkIf config.ags.enable { - home.packages = with pkgs; [ - libnotify # Notifications through ags - ]; - programs.ags = { - enable = true; - configDir = ./config; - - extraPackages = with pkgs; [ - gtksourceview - webkitgtk - accountsservice - ]; - }; - }; + # config = lib.mkIf config.ags.enable { + # home.packages = with pkgs; [ + # libnotify # Notifications through ags + # ]; + # programs.ags = { + # enable = true; + # configDir = ./config; + # + # extraPackages = with pkgs; [ + # gtksourceview + # webkitgtk + # accountsservice + # ]; + # }; + # }; } diff --git a/hosts/jibril/host.nix b/hosts/jibril/default.nix similarity index 100% rename from hosts/jibril/host.nix rename to hosts/jibril/default.nix diff --git a/hosts/juri/host.nix b/hosts/juri/default.nix similarity index 100% rename from hosts/juri/host.nix rename to hosts/juri/default.nix diff --git a/hosts/juri/users/badtz/user.nix b/hosts/juri/users/badtz/user.nix deleted file mode 100644 index 5972fdb..0000000 --- a/hosts/juri/users/badtz/user.nix +++ /dev/null @@ -1,10 +0,0 @@ -{ config, pkgs, ... }: - -{ - fish.enable = true; - git = { - enable = true; - username = "Badtz"; - email = "may@badtz.dev"; - }; -} diff --git a/hosts/onizuka/host.nix b/hosts/onizuka/default.nix similarity index 91% rename from hosts/onizuka/host.nix rename to hosts/onizuka/default.nix index d2dbc49..46a9717 100644 --- a/hosts/onizuka/host.nix +++ b/hosts/onizuka/default.nix @@ -20,8 +20,6 @@ steam.enable = true; steam.gamemode = true; - aagl.enable = true; - aagl.honkai-rail = true; input-remapper.enable = true; postgres.enable = true; diff --git a/nixosModules/apps/animelauncher/app.nix b/nixosModules/apps/animelauncher/app.nix index 5cf1a9b..27f1406 100644 --- a/nixosModules/apps/animelauncher/app.nix +++ b/nixosModules/apps/animelauncher/app.nix @@ -1,4 +1,4 @@ -{ config, inputs, lib, ... }: +{ config, lib, ... }: { options.aagl = { @@ -12,16 +12,21 @@ "Enables honkai 3rd impact"; }; - imports = [ inputs.aagl.nixosModules.default ]; + # imports = [ inputs.aagl.nixosModules.default ]; - config = lib.mkIf config.aagl.enable { - nix.settings = inputs.aagl.nixConfig; + config.warnings = lib.mkIf (config.aagl.enable || config.aagl.honkai-rail || + config.aagl.genshin || config.aagl.honkai-3rd) ['' + aagl.* has been deprecated to allow the removal of aagl from flake inputs. + '']; - programs.honkers-railway-launcher.enable = - lib.mkIf config.aagl.honkai-rail true; - programs.anime-game-launcher.enable = - lib.mkIf config.aagl.genshin true; - programs.honkers-launcher.enable = - lib.mkIf config.aagl.honkai-3rd true; - }; + # config = lib.mkIf config.aagl.enable { + # nix.settings = inputs.aagl.nixConfig; + # + # programs.honkers-railway-launcher.enable = + # lib.mkIf config.aagl.honkai-rail true; + # programs.anime-game-launcher.enable = + # lib.mkIf config.aagl.genshin true; + # programs.honkers-launcher.enable = + # lib.mkIf config.aagl.honkai-3rd true; + # }; } diff --git a/nixosModules/automatic/default.nix b/nixosModules/automatic/default.nix index 2f80ace..05d82c7 100644 --- a/nixosModules/automatic/default.nix +++ b/nixosModules/automatic/default.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, hostname, usernameList, ... }: +{ config, pkgs, lib, ... }: { options.system = { @@ -22,7 +22,6 @@ boot.loader.efi.canTouchEfiVariables = true; }) { - networking.hostName = hostname; system.stateVersion = lib.mkDefault "23.05"; time.timeZone = config.system.timezone; @@ -49,7 +48,7 @@ extraGroups = [ "network" ]; }; } - ) usernameList); + ) [ "pan" ]); groups = { wheel = { members = config.system.users.bigWheels; diff --git a/nixosModules/services/caddy/service.nix b/nixosModules/services/caddy/service.nix index ee722b3..eaf0965 100644 --- a/nixosModules/services/caddy/service.nix +++ b/nixosModules/services/caddy/service.nix @@ -20,7 +20,7 @@ ''; package = pkgs.caddy.withPlugins { plugins = [ "github.com/caddy-dns/porkbun@v0.3.1" ]; - hash = "sha256-j/GODingW5BhfjQRajinivX/9zpiLGgyxvAjX0+amRU="; + hash = "sha256-NlZY/EEY9TbqrMAkSHK2aGm5AjFTvpvBXV1GW1PnXCc="; }; virtualHosts = config.caddy.vhosts; email = config.caddy.adminEmail; diff --git a/nixosModules/services/hyprland/service.nix b/nixosModules/services/hyprland/service.nix index 779a8fe..3d13ac0 100644 --- a/nixosModules/services/hyprland/service.nix +++ b/nixosModules/services/hyprland/service.nix @@ -1,4 +1,4 @@ -{ inputs, config, lib, ... }: +{ config, lib, ... }: { @@ -6,18 +6,14 @@ enable = lib.mkEnableOption "Enables hyprland"; }; - imports = [ - inputs.hyprland.nixosModules.default - ]; + # imports = [ + # inputs.hyprland.nixosModules.default + # ]; - config = { - nix.settings = { - substituters = [ "https://hyprland.cachix.org" ]; - trusted-public-keys = [ - "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" - ]; - experimental-features = [ "nix-command" "flakes" ]; - }; - programs.hyprland.enable = lib.mkIf config.hyprland.enable true; - }; + config.warnings = lib.mkIf config.hyprland.enable ['' + hyprland.enable has been deprecated to allow the removal of hyprland from + flake inputs. + '']; + + # config.programs.hyprland.enable = lib.mkIf config.hyprland.enable true; } diff --git a/hosts/jibril/users/pan/user.nix b/users/jibril/default.nix similarity index 100% rename from hosts/jibril/users/pan/user.nix rename to users/jibril/default.nix diff --git a/hosts/juri/users/pan/user.nix b/users/juri/default.nix similarity index 100% rename from hosts/juri/users/pan/user.nix rename to users/juri/default.nix diff --git a/hosts/onizuka/users/pan/user.nix b/users/onizuka/default.nix similarity index 100% rename from hosts/onizuka/users/pan/user.nix rename to users/onizuka/default.nix From c95d776b632aaee9ff7c4166aca7f901605b90c3 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 15 Dec 2025 22:49:14 -0800 Subject: [PATCH 381/412] Jibril, add tailscale --- hosts/jibril/default.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hosts/jibril/default.nix b/hosts/jibril/default.nix index efc1452..92f7e4b 100644 --- a/hosts/jibril/default.nix +++ b/hosts/jibril/default.nix @@ -27,7 +27,8 @@ tuigreet.enable = true; niri.enable = true; - + tailscale.enable = true; + postgres.enable = true; shell.enabledShells = [ "fish" ]; From 84c61750c4a5f240ef8b456f3b577de1e83644a9 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 15 Dec 2025 22:49:14 -0800 Subject: [PATCH 382/412] Jibril, add tailscale --- hosts/jibril/default.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hosts/jibril/default.nix b/hosts/jibril/default.nix index efc1452..92f7e4b 100644 --- a/hosts/jibril/default.nix +++ b/hosts/jibril/default.nix @@ -27,7 +27,8 @@ tuigreet.enable = true; niri.enable = true; - + tailscale.enable = true; + postgres.enable = true; shell.enabledShells = [ "fish" ]; From 2e808eb8b8981ebff0fae22d78027a7bb8e8d524 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 15 Dec 2025 22:49:34 -0800 Subject: [PATCH 383/412] Jibril, update Kabal internet --- hosts/jibril/networks.toml | 2 +- hosts/jibril/secrets.yaml | 13 ++++--------- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/hosts/jibril/networks.toml b/hosts/jibril/networks.toml index 860bdd1..762a2f2 100644 --- a/hosts/jibril/networks.toml +++ b/hosts/jibril/networks.toml @@ -1,4 +1,4 @@ -["TheKabal2.4"] +[Kabal] ["DropboxGuest3.0"] diff --git a/hosts/jibril/secrets.yaml b/hosts/jibril/secrets.yaml index fcde584..a1dbefb 100644 --- a/hosts/jibril/secrets.yaml +++ b/hosts/jibril/secrets.yaml @@ -1,9 +1,5 @@ -wireless: ENC[AES256_GCM,data:pQv+gdAW8W9nSEJkbXWex47iuuqgJMEELldFsmgk2Y08MDZ1ytXqlphTK/jbewD3tpz4v29fSuWamv1uZpxM2+c2zCuMVTdrhAf0i/Sjqd9CWP8NQvTDI3v8ps9REFzR7n7hywnkfOkDNwRkmavSfCxK5k9SQLNC7De6P811/Fundb9r6oeIH2OEDBkZEHw8gYndjy6cLDUE2SY/cmxRsKWhATsCLcWKOpQa86zlT9dr9nMtYVF1AN5T4JR/7QKqJ8UT4mvhAA0OEfKv0Cf3euH24vtBrv5YxwDT6tQpOABOyOy9mWLc+bXDID/HX4akeU1O6+eBSpNeRgpAcMfD6b/eqKAvDvnixHubu9GemVspmeoA/91i5B70u3kjm0EKup7KLXCp5RutLnLRczDPdfbCB7bEipeRyF8P+UCuhQ==,iv:WN7mGyHpaMDdLRpFGyDUQ2D9a0t/rucfyKroJYqaHPs=,tag:7KTzBEt30nqCJclDgiWuKg==,type:str] +wireless: ENC[AES256_GCM,data:VU8tpeCgEFSUC490q1hGgBrdFFscL2QybywlpiFG3suofj2Q2VVXKLK4EpF2ebpf/nBf/ggHv/uoSFxuQYYvIsMIo1bYOKvM5QNMi9HO2KmfFbmQYYzmt5CNNh9tno9wmiekeDOnKjQDGK5CoGLD4+y+VW1IVrN9XL+xRxAszgYM4qdSim7CJ1hgU89OgzVL9poVsmqxbiuWY88+ZErIspSHO0QwGOJ5Pc4OixEK2N3EtcYDhV5fBvlFv7t4b8P6BJZIn2NVXCVaW4UcEsefcxHqohd5AuYXJH7wt9aPwJRJehxd9GhVJeQ6QtPXuqZaEspd+dSvlYrvdO8pFTrIklrty30CJg3WberWmI111T8ZNFlNBghSu6nXzO9YkKfDuAYUEPVERL9jG9xF8tGb1JxhOmg33Kg6fg==,iv:07Reckni7LSfDL3qVUv4v80IOVQSbFpz49UsyiIDGWk=,tag:iMgCspLUWNCjjYT0pkMwDw==,type:str] sops: - kms: [] - gcp_kms: [] - azure_kv: [] - hc_vault: [] age: - recipient: age1ey3wr2wnkgny3dfgvnyrf0cptwzr7s5x464p2y9ya58lpay8lfrsds3y68 enc: | @@ -23,8 +19,7 @@ sops: Ky83VFhiVE9wK01UMDlSbnIrd2d2SHcKp6mF8PaR0ItrvLHpEgMe6fwuboyrrs9y 7Ct6qZ1SN/4f/xJpDP2qiaQ4KTZzY1BlC3isT3CWeajOQhL/y5JCOw== -----END AGE ENCRYPTED FILE----- - lastmodified: "2024-11-07T21:12:36Z" - mac: ENC[AES256_GCM,data:z0ePEvsEKvcMca2x2qjTsSBwk+qI3jd8h2uAnSsGtJL5UI1OdBL8oVIGKty0pGaCvtrF01UN1ncKBGe5y12Vij2yuyv7LK4ANArxQ4+O583NdYHYeD+T75yGu4SAYjcoM23RD1h+W0SLQpCen2J3WYmJaOjtqMBv/gaFYl/DV7I=,iv:VJjZTd1g4oJCDLEp8+jH15Y2svTNtQUE1vc3WQoJJZU=,tag:4U7uh6U5PwHJ2r6/WFUbnw==,type:str] - pgp: [] + lastmodified: "2025-08-27T05:30:04Z" + mac: ENC[AES256_GCM,data:hoSykxuHPAofdbXNJCyozeQYYhg3yXLOVx+K9PsSctUMrIc9ii76SDGY2h+6gFNy1rGkPxmYHueqHEJHvvoxLHcwkwoN8AddOVrnXNoIpOvwcn0GfpPIPf5rCvxSxvcsZwPW+affMMVRyRR8aJ3llj7ojuuuyTnm+HL9H9vY1PQ=,iv:pUXl49AqRerTlGoOzoWt0NrEo8rqPmBF7yiB4ZufC3M=,tag:1mP3jsP2O6yKlJVmaA7EMQ==,type:str] unencrypted_suffix: _unencrypted - version: 3.9.1 + version: 3.10.2 From 0088cb584ef6142a5d72b74a44993c4527bd4aba Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 15 Dec 2025 22:49:34 -0800 Subject: [PATCH 384/412] Jibril, update Kabal internet --- hosts/jibril/networks.toml | 2 +- hosts/jibril/secrets.yaml | 13 ++++--------- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/hosts/jibril/networks.toml b/hosts/jibril/networks.toml index 860bdd1..762a2f2 100644 --- a/hosts/jibril/networks.toml +++ b/hosts/jibril/networks.toml @@ -1,4 +1,4 @@ -["TheKabal2.4"] +[Kabal] ["DropboxGuest3.0"] diff --git a/hosts/jibril/secrets.yaml b/hosts/jibril/secrets.yaml index fcde584..a1dbefb 100644 --- a/hosts/jibril/secrets.yaml +++ b/hosts/jibril/secrets.yaml @@ -1,9 +1,5 @@ -wireless: ENC[AES256_GCM,data:pQv+gdAW8W9nSEJkbXWex47iuuqgJMEELldFsmgk2Y08MDZ1ytXqlphTK/jbewD3tpz4v29fSuWamv1uZpxM2+c2zCuMVTdrhAf0i/Sjqd9CWP8NQvTDI3v8ps9REFzR7n7hywnkfOkDNwRkmavSfCxK5k9SQLNC7De6P811/Fundb9r6oeIH2OEDBkZEHw8gYndjy6cLDUE2SY/cmxRsKWhATsCLcWKOpQa86zlT9dr9nMtYVF1AN5T4JR/7QKqJ8UT4mvhAA0OEfKv0Cf3euH24vtBrv5YxwDT6tQpOABOyOy9mWLc+bXDID/HX4akeU1O6+eBSpNeRgpAcMfD6b/eqKAvDvnixHubu9GemVspmeoA/91i5B70u3kjm0EKup7KLXCp5RutLnLRczDPdfbCB7bEipeRyF8P+UCuhQ==,iv:WN7mGyHpaMDdLRpFGyDUQ2D9a0t/rucfyKroJYqaHPs=,tag:7KTzBEt30nqCJclDgiWuKg==,type:str] +wireless: ENC[AES256_GCM,data:VU8tpeCgEFSUC490q1hGgBrdFFscL2QybywlpiFG3suofj2Q2VVXKLK4EpF2ebpf/nBf/ggHv/uoSFxuQYYvIsMIo1bYOKvM5QNMi9HO2KmfFbmQYYzmt5CNNh9tno9wmiekeDOnKjQDGK5CoGLD4+y+VW1IVrN9XL+xRxAszgYM4qdSim7CJ1hgU89OgzVL9poVsmqxbiuWY88+ZErIspSHO0QwGOJ5Pc4OixEK2N3EtcYDhV5fBvlFv7t4b8P6BJZIn2NVXCVaW4UcEsefcxHqohd5AuYXJH7wt9aPwJRJehxd9GhVJeQ6QtPXuqZaEspd+dSvlYrvdO8pFTrIklrty30CJg3WberWmI111T8ZNFlNBghSu6nXzO9YkKfDuAYUEPVERL9jG9xF8tGb1JxhOmg33Kg6fg==,iv:07Reckni7LSfDL3qVUv4v80IOVQSbFpz49UsyiIDGWk=,tag:iMgCspLUWNCjjYT0pkMwDw==,type:str] sops: - kms: [] - gcp_kms: [] - azure_kv: [] - hc_vault: [] age: - recipient: age1ey3wr2wnkgny3dfgvnyrf0cptwzr7s5x464p2y9ya58lpay8lfrsds3y68 enc: | @@ -23,8 +19,7 @@ sops: Ky83VFhiVE9wK01UMDlSbnIrd2d2SHcKp6mF8PaR0ItrvLHpEgMe6fwuboyrrs9y 7Ct6qZ1SN/4f/xJpDP2qiaQ4KTZzY1BlC3isT3CWeajOQhL/y5JCOw== -----END AGE ENCRYPTED FILE----- - lastmodified: "2024-11-07T21:12:36Z" - mac: ENC[AES256_GCM,data:z0ePEvsEKvcMca2x2qjTsSBwk+qI3jd8h2uAnSsGtJL5UI1OdBL8oVIGKty0pGaCvtrF01UN1ncKBGe5y12Vij2yuyv7LK4ANArxQ4+O583NdYHYeD+T75yGu4SAYjcoM23RD1h+W0SLQpCen2J3WYmJaOjtqMBv/gaFYl/DV7I=,iv:VJjZTd1g4oJCDLEp8+jH15Y2svTNtQUE1vc3WQoJJZU=,tag:4U7uh6U5PwHJ2r6/WFUbnw==,type:str] - pgp: [] + lastmodified: "2025-08-27T05:30:04Z" + mac: ENC[AES256_GCM,data:hoSykxuHPAofdbXNJCyozeQYYhg3yXLOVx+K9PsSctUMrIc9ii76SDGY2h+6gFNy1rGkPxmYHueqHEJHvvoxLHcwkwoN8AddOVrnXNoIpOvwcn0GfpPIPf5rCvxSxvcsZwPW+affMMVRyRR8aJ3llj7ojuuuyTnm+HL9H9vY1PQ=,iv:pUXl49AqRerTlGoOzoWt0NrEo8rqPmBF7yiB4ZufC3M=,tag:1mP3jsP2O6yKlJVmaA7EMQ==,type:str] unencrypted_suffix: _unencrypted - version: 3.9.1 + version: 3.10.2 From d833f04aa3891f64654e4ac38f63166027d7a567 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 9 Feb 2026 17:17:25 -0800 Subject: [PATCH 385/412] Flake update 2026-02-09 --- flake.lock | 139 ++++++++++------------------------------------------- flake.nix | 22 ++++----- 2 files changed, 37 insertions(+), 124 deletions(-) diff --git a/flake.lock b/flake.lock index 0e7d694..9d751ae 100644 --- a/flake.lock +++ b/flake.lock @@ -22,11 +22,11 @@ ] }, "locked": { - "lastModified": 1762980239, - "narHash": "sha256-8oNVE8TrD19ulHinjaqONf9QWCKK+w4url56cdStMpM=", + "lastModified": 1769996383, + "narHash": "sha256-AnYjnFWgS49RlqX7LrC4uA+sCCDBj0Ry/WOJ5XWAsa0=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "52a2caecc898d0b46b2b905f058ccc5081f842da", + "rev": "57928607ea566b5db3ad13af0e57e921e6b12381", "type": "github" }, "original": { @@ -35,39 +35,6 @@ "type": "github" } }, - "flake-utils": { - "inputs": { - "systems": "systems" - }, - "locked": { - "lastModified": 1731533236, - "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, - "flakey-profile": { - "locked": { - "lastModified": 1712898590, - "narHash": "sha256-FhGIEU93VHAChKEXx905TSiPZKga69bWl1VB37FK//I=", - "owner": "lf-", - "repo": "flakey-profile", - "rev": "243c903fd8eadc0f63d205665a92d4df91d42d9d", - "type": "github" - }, - "original": { - "owner": "lf-", - "repo": "flakey-profile", - "type": "github" - } - }, "home-manager": { "inputs": { "nixpkgs": [ @@ -75,11 +42,11 @@ ] }, "locked": { - "lastModified": 1763416652, - "narHash": "sha256-8EBEEvtzQ11LCxpQHMNEBQAGtQiCu/pqP9zSovDSbNM=", + "lastModified": 1770654520, + "narHash": "sha256-mg5WZMIPGsFu9MxSrUcuJUPMbfMsF77el5yb/7rc10k=", "owner": "nix-community", "repo": "home-manager", - "rev": "ea164b7c9ccdc2321379c2ff78fd4317b4c41312", + "rev": "6c4fdbe1ad198fac36c320fd45c5957324a80b8e", "type": "github" }, "original": { @@ -88,43 +55,6 @@ "type": "github" } }, - "lix": { - "flake": false, - "locked": { - "lastModified": 1763570812, - "narHash": "sha256-A42G8ulTZ1MFCR0VsLF21CoKi0XKGUYwtVBHGm5mFgQ=", - "rev": "f3b2f3496bd6d346cba475d0ba152a9d3a83dec7", - "type": "tarball", - "url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/f3b2f3496bd6d346cba475d0ba152a9d3a83dec7.tar.gz" - }, - "original": { - "type": "tarball", - "url": "https://git.lix.systems/lix-project/lix/archive/main.tar.gz" - } - }, - "lix-module": { - "inputs": { - "flake-utils": "flake-utils", - "flakey-profile": "flakey-profile", - "lix": [ - "lix" - ], - "nixpkgs": [ - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1763435414, - "narHash": "sha256-i2467FddWfd19q5Qoj+1/BAeg6LZmM5m4mYGRSQn/as=", - "rev": "192c92b603731fbc1bade6c1b18c8d8a0086f703", - "type": "tarball", - "url": "https://git.lix.systems/api/v1/repos/lix-project/nixos-module/archive/192c92b603731fbc1bade6c1b18c8d8a0086f703.tar.gz" - }, - "original": { - "type": "tarball", - "url": "https://git.lix.systems/lix-project/nixos-module/archive/main.tar.gz" - } - }, "niri": { "inputs": { "niri-stable": "niri-stable", @@ -137,11 +67,11 @@ "xwayland-satellite-unstable": "xwayland-satellite-unstable" }, "locked": { - "lastModified": 1763538184, - "narHash": "sha256-6umNY06L6ZUjinthjVZIwyWyAjxOXSPhXfY0U1CVTWw=", + "lastModified": 1770620836, + "narHash": "sha256-HPoMvo/EqIr6xDDRlk6DGZYdu1Hte7lGLZaGZ5017Uc=", "owner": "sodiboo", "repo": "niri-flake", - "rev": "85a16f400641eed912431efcec16f12e2100d46a", + "rev": "ff1edce403a67cfac7bf1038d348f2ef457ac691", "type": "github" }, "original": { @@ -170,11 +100,11 @@ "niri-unstable": { "flake": false, "locked": { - "lastModified": 1763531615, - "narHash": "sha256-cMi8tz+0+gWtlYqVnyMv7phOeQ0/4WmzZ/lxCyraUVw=", + "lastModified": 1770394959, + "narHash": "sha256-if7bIsomdceIufOhkFwN74rFY/pLCWPynRxGyol2viQ=", "owner": "YaLTeR", "repo": "niri", - "rev": "c722634c269ae97a5ea185691bcd0b8c73a600e5", + "rev": "ab47f5cec4c1c5758afeb91c0c98554ffd3433db", "type": "github" }, "original": { @@ -185,11 +115,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1763464769, - "narHash": "sha256-mU85VDFRIgKGq1EhT71bLjhvjJ5yuMEe0Ip1kwCbR80=", - "rev": "6f374686605df381de8541c072038472a5ea2e2d", + "lastModified": 1770537093, + "narHash": "sha256-XV30uo8tXuxdzuV8l3sojmlPRLd/8tpMsOp4lNzLGUo=", + "rev": "fef9403a3e4d31b0a23f0bacebbec52c248fbb51", "type": "tarball", - "url": "https://releases.nixos.org/nixpkgs/nixpkgs-25.11pre898015.6f374686605d/nixexprs.tar.xz" + "url": "https://releases.nixos.org/nixpkgs/nixpkgs-26.05pre942631.fef9403a3e4d/nixexprs.tar.xz" }, "original": { "type": "tarball", @@ -198,16 +128,16 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1763334038, - "narHash": "sha256-LBVOyaH6NFzQ3X/c6vfMZ9k4SV2ofhpxeL9YnhHNJQQ=", + "lastModified": 1770464364, + "narHash": "sha256-z5NJPSBwsLf/OfD8WTmh79tlSU8XgIbwmk6qB1/TFzY=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "4c8cdd5b1a630e8f72c9dd9bf582b1afb3127d2c", + "rev": "23d72dabcb3b12469f57b37170fcbc1789bd7457", "type": "github" }, "original": { "owner": "NixOS", - "ref": "nixos-25.05", + "ref": "nixos-25.11", "repo": "nixpkgs", "type": "github" } @@ -217,8 +147,6 @@ "easy-hosts": "easy-hosts", "flake-parts": "flake-parts", "home-manager": "home-manager", - "lix": "lix", - "lix-module": "lix-module", "niri": "niri", "nixpkgs": "nixpkgs", "sops-nix": "sops-nix" @@ -231,11 +159,11 @@ ] }, "locked": { - "lastModified": 1763509310, - "narHash": "sha256-s2WzTAD3vJtPACBCZXezNUMTG/wC6SFsU9DxazB9wDI=", + "lastModified": 1770683991, + "narHash": "sha256-xVfPvXDf9QN3Eh9dV+Lw6IkWG42KSuQ1u2260HKvpnc=", "owner": "Mic92", "repo": "sops-nix", - "rev": "3ee33c0ed7c5aa61b4e10484d2ebdbdc98afb03e", + "rev": "8b89f44c2cc4581e402111d928869fe7ba9f7033", "type": "github" }, "original": { @@ -244,21 +172,6 @@ "type": "github" } }, - "systems": { - "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", - "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", - "type": "github" - }, - "original": { - "owner": "nix-systems", - "repo": "default", - "type": "github" - } - }, "xwayland-satellite-stable": { "flake": false, "locked": { @@ -279,11 +192,11 @@ "xwayland-satellite-unstable": { "flake": false, "locked": { - "lastModified": 1762747449, - "narHash": "sha256-Z1TKiux8K09a93w4PFDFsj8HFugXNy3iCC3Z8MpR5Rk=", + "lastModified": 1770583271, + "narHash": "sha256-Q75S8cEqJoZ92s1y4zArvk2U1ayAy2E4SaF7gbNXkYQ=", "owner": "Supreeeme", "repo": "xwayland-satellite", - "rev": "6338574bc5c036487486acde264f38f39ea15fad", + "rev": "86f5bd5d867ad6e120935dfe825f6b903ebbeddd", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 37dafc1..e469f38 100644 --- a/flake.nix +++ b/flake.nix @@ -13,7 +13,7 @@ shared = { modules = [ - inputs.lix-module.nixosModules.default + # inputs.lix-module.nixosModules.default ./nixosModules ]; }; @@ -61,16 +61,16 @@ repo = "easy-hosts"; }; - lix = { - url = "https://git.lix.systems/lix-project/lix/archive/main.tar.gz"; - flake = false; - }; - - lix-module = { - url = "https://git.lix.systems/lix-project/nixos-module/archive/main.tar.gz"; - inputs.nixpkgs.follows = "nixpkgs"; - inputs.lix.follows = "lix"; - }; + # lix = { + # url = "https://git.lix.systems/lix-project/lix/archive/main.tar.gz"; + # flake = false; + # }; + # + # lix-module = { + # url = "https://git.lix.systems/lix-project/nixos-module/archive/main.tar.gz"; + # inputs.nixpkgs.follows = "nixpkgs"; + # inputs.lix.follows = "lix"; + # }; niri = { type = "github"; From ba95a3c9676af0564537e72c28af29119b6bc383 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Mon, 9 Feb 2026 17:17:25 -0800 Subject: [PATCH 386/412] Flake update 2026-02-09 --- flake.lock | 139 ++++++++++------------------------------------------- flake.nix | 22 ++++----- 2 files changed, 37 insertions(+), 124 deletions(-) diff --git a/flake.lock b/flake.lock index 0e7d694..9d751ae 100644 --- a/flake.lock +++ b/flake.lock @@ -22,11 +22,11 @@ ] }, "locked": { - "lastModified": 1762980239, - "narHash": "sha256-8oNVE8TrD19ulHinjaqONf9QWCKK+w4url56cdStMpM=", + "lastModified": 1769996383, + "narHash": "sha256-AnYjnFWgS49RlqX7LrC4uA+sCCDBj0Ry/WOJ5XWAsa0=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "52a2caecc898d0b46b2b905f058ccc5081f842da", + "rev": "57928607ea566b5db3ad13af0e57e921e6b12381", "type": "github" }, "original": { @@ -35,39 +35,6 @@ "type": "github" } }, - "flake-utils": { - "inputs": { - "systems": "systems" - }, - "locked": { - "lastModified": 1731533236, - "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, - "flakey-profile": { - "locked": { - "lastModified": 1712898590, - "narHash": "sha256-FhGIEU93VHAChKEXx905TSiPZKga69bWl1VB37FK//I=", - "owner": "lf-", - "repo": "flakey-profile", - "rev": "243c903fd8eadc0f63d205665a92d4df91d42d9d", - "type": "github" - }, - "original": { - "owner": "lf-", - "repo": "flakey-profile", - "type": "github" - } - }, "home-manager": { "inputs": { "nixpkgs": [ @@ -75,11 +42,11 @@ ] }, "locked": { - "lastModified": 1763416652, - "narHash": "sha256-8EBEEvtzQ11LCxpQHMNEBQAGtQiCu/pqP9zSovDSbNM=", + "lastModified": 1770654520, + "narHash": "sha256-mg5WZMIPGsFu9MxSrUcuJUPMbfMsF77el5yb/7rc10k=", "owner": "nix-community", "repo": "home-manager", - "rev": "ea164b7c9ccdc2321379c2ff78fd4317b4c41312", + "rev": "6c4fdbe1ad198fac36c320fd45c5957324a80b8e", "type": "github" }, "original": { @@ -88,43 +55,6 @@ "type": "github" } }, - "lix": { - "flake": false, - "locked": { - "lastModified": 1763570812, - "narHash": "sha256-A42G8ulTZ1MFCR0VsLF21CoKi0XKGUYwtVBHGm5mFgQ=", - "rev": "f3b2f3496bd6d346cba475d0ba152a9d3a83dec7", - "type": "tarball", - "url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/f3b2f3496bd6d346cba475d0ba152a9d3a83dec7.tar.gz" - }, - "original": { - "type": "tarball", - "url": "https://git.lix.systems/lix-project/lix/archive/main.tar.gz" - } - }, - "lix-module": { - "inputs": { - "flake-utils": "flake-utils", - "flakey-profile": "flakey-profile", - "lix": [ - "lix" - ], - "nixpkgs": [ - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1763435414, - "narHash": "sha256-i2467FddWfd19q5Qoj+1/BAeg6LZmM5m4mYGRSQn/as=", - "rev": "192c92b603731fbc1bade6c1b18c8d8a0086f703", - "type": "tarball", - "url": "https://git.lix.systems/api/v1/repos/lix-project/nixos-module/archive/192c92b603731fbc1bade6c1b18c8d8a0086f703.tar.gz" - }, - "original": { - "type": "tarball", - "url": "https://git.lix.systems/lix-project/nixos-module/archive/main.tar.gz" - } - }, "niri": { "inputs": { "niri-stable": "niri-stable", @@ -137,11 +67,11 @@ "xwayland-satellite-unstable": "xwayland-satellite-unstable" }, "locked": { - "lastModified": 1763538184, - "narHash": "sha256-6umNY06L6ZUjinthjVZIwyWyAjxOXSPhXfY0U1CVTWw=", + "lastModified": 1770620836, + "narHash": "sha256-HPoMvo/EqIr6xDDRlk6DGZYdu1Hte7lGLZaGZ5017Uc=", "owner": "sodiboo", "repo": "niri-flake", - "rev": "85a16f400641eed912431efcec16f12e2100d46a", + "rev": "ff1edce403a67cfac7bf1038d348f2ef457ac691", "type": "github" }, "original": { @@ -170,11 +100,11 @@ "niri-unstable": { "flake": false, "locked": { - "lastModified": 1763531615, - "narHash": "sha256-cMi8tz+0+gWtlYqVnyMv7phOeQ0/4WmzZ/lxCyraUVw=", + "lastModified": 1770394959, + "narHash": "sha256-if7bIsomdceIufOhkFwN74rFY/pLCWPynRxGyol2viQ=", "owner": "YaLTeR", "repo": "niri", - "rev": "c722634c269ae97a5ea185691bcd0b8c73a600e5", + "rev": "ab47f5cec4c1c5758afeb91c0c98554ffd3433db", "type": "github" }, "original": { @@ -185,11 +115,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1763464769, - "narHash": "sha256-mU85VDFRIgKGq1EhT71bLjhvjJ5yuMEe0Ip1kwCbR80=", - "rev": "6f374686605df381de8541c072038472a5ea2e2d", + "lastModified": 1770537093, + "narHash": "sha256-XV30uo8tXuxdzuV8l3sojmlPRLd/8tpMsOp4lNzLGUo=", + "rev": "fef9403a3e4d31b0a23f0bacebbec52c248fbb51", "type": "tarball", - "url": "https://releases.nixos.org/nixpkgs/nixpkgs-25.11pre898015.6f374686605d/nixexprs.tar.xz" + "url": "https://releases.nixos.org/nixpkgs/nixpkgs-26.05pre942631.fef9403a3e4d/nixexprs.tar.xz" }, "original": { "type": "tarball", @@ -198,16 +128,16 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1763334038, - "narHash": "sha256-LBVOyaH6NFzQ3X/c6vfMZ9k4SV2ofhpxeL9YnhHNJQQ=", + "lastModified": 1770464364, + "narHash": "sha256-z5NJPSBwsLf/OfD8WTmh79tlSU8XgIbwmk6qB1/TFzY=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "4c8cdd5b1a630e8f72c9dd9bf582b1afb3127d2c", + "rev": "23d72dabcb3b12469f57b37170fcbc1789bd7457", "type": "github" }, "original": { "owner": "NixOS", - "ref": "nixos-25.05", + "ref": "nixos-25.11", "repo": "nixpkgs", "type": "github" } @@ -217,8 +147,6 @@ "easy-hosts": "easy-hosts", "flake-parts": "flake-parts", "home-manager": "home-manager", - "lix": "lix", - "lix-module": "lix-module", "niri": "niri", "nixpkgs": "nixpkgs", "sops-nix": "sops-nix" @@ -231,11 +159,11 @@ ] }, "locked": { - "lastModified": 1763509310, - "narHash": "sha256-s2WzTAD3vJtPACBCZXezNUMTG/wC6SFsU9DxazB9wDI=", + "lastModified": 1770683991, + "narHash": "sha256-xVfPvXDf9QN3Eh9dV+Lw6IkWG42KSuQ1u2260HKvpnc=", "owner": "Mic92", "repo": "sops-nix", - "rev": "3ee33c0ed7c5aa61b4e10484d2ebdbdc98afb03e", + "rev": "8b89f44c2cc4581e402111d928869fe7ba9f7033", "type": "github" }, "original": { @@ -244,21 +172,6 @@ "type": "github" } }, - "systems": { - "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", - "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", - "type": "github" - }, - "original": { - "owner": "nix-systems", - "repo": "default", - "type": "github" - } - }, "xwayland-satellite-stable": { "flake": false, "locked": { @@ -279,11 +192,11 @@ "xwayland-satellite-unstable": { "flake": false, "locked": { - "lastModified": 1762747449, - "narHash": "sha256-Z1TKiux8K09a93w4PFDFsj8HFugXNy3iCC3Z8MpR5Rk=", + "lastModified": 1770583271, + "narHash": "sha256-Q75S8cEqJoZ92s1y4zArvk2U1ayAy2E4SaF7gbNXkYQ=", "owner": "Supreeeme", "repo": "xwayland-satellite", - "rev": "6338574bc5c036487486acde264f38f39ea15fad", + "rev": "86f5bd5d867ad6e120935dfe825f6b903ebbeddd", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 37dafc1..e469f38 100644 --- a/flake.nix +++ b/flake.nix @@ -13,7 +13,7 @@ shared = { modules = [ - inputs.lix-module.nixosModules.default + # inputs.lix-module.nixosModules.default ./nixosModules ]; }; @@ -61,16 +61,16 @@ repo = "easy-hosts"; }; - lix = { - url = "https://git.lix.systems/lix-project/lix/archive/main.tar.gz"; - flake = false; - }; - - lix-module = { - url = "https://git.lix.systems/lix-project/nixos-module/archive/main.tar.gz"; - inputs.nixpkgs.follows = "nixpkgs"; - inputs.lix.follows = "lix"; - }; + # lix = { + # url = "https://git.lix.systems/lix-project/lix/archive/main.tar.gz"; + # flake = false; + # }; + # + # lix-module = { + # url = "https://git.lix.systems/lix-project/nixos-module/archive/main.tar.gz"; + # inputs.nixpkgs.follows = "nixpkgs"; + # inputs.lix.follows = "lix"; + # }; niri = { type = "github"; From d02533517f5181f594379a9c1b37400323c1234e Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 26 Nov 2025 15:21:12 -0800 Subject: [PATCH 387/412] OSAuto, sane nix defaults --- nixosModules/automatic/default.nix | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/nixosModules/automatic/default.nix b/nixosModules/automatic/default.nix index 05d82c7..f6b9a74 100644 --- a/nixosModules/automatic/default.nix +++ b/nixosModules/automatic/default.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, ... }: +{ config, pkgs, lib, inputs, ... }: { options.system = { @@ -9,7 +9,7 @@ "Enable if you are running a non-EFI system"; users.bigWheels = lib.mkOption { default = []; }; }; - + config = lib.mkMerge [ (lib.mkIf config.system.isNonEFI { boot.loader.grub.enable = false; @@ -29,15 +29,26 @@ # Packages & Default Packages nixpkgs.config.allowUnfree = true; + nix = { + registry.nixpkgs.flake = inputs.nixpkgs; + gc = { automatic = true; options = "--delete-older-than 5d"; }; + channel.enable = false; + settings = { + auto-optimise-store = true; + keep-going = true; + use-xdg-base-directories = true; + experimental-features = [ + "flakes" + "nix-command" + ]; + }; + }; environment.systemPackages = with pkgs; [ git neovim xdg-user-dirs ] ++ config.system.extraPkgs; - # XDG Compliance - nix.settings.use-xdg-base-directories = true; - users = { users = builtins.listToAttrs (map ( user: { From 33d56584e2bdd3bd9dd38061a264b4820e3afdc5 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 26 Nov 2025 15:21:12 -0800 Subject: [PATCH 388/412] OSAuto, sane nix defaults --- nixosModules/automatic/default.nix | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/nixosModules/automatic/default.nix b/nixosModules/automatic/default.nix index 05d82c7..f6b9a74 100644 --- a/nixosModules/automatic/default.nix +++ b/nixosModules/automatic/default.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, ... }: +{ config, pkgs, lib, inputs, ... }: { options.system = { @@ -9,7 +9,7 @@ "Enable if you are running a non-EFI system"; users.bigWheels = lib.mkOption { default = []; }; }; - + config = lib.mkMerge [ (lib.mkIf config.system.isNonEFI { boot.loader.grub.enable = false; @@ -29,15 +29,26 @@ # Packages & Default Packages nixpkgs.config.allowUnfree = true; + nix = { + registry.nixpkgs.flake = inputs.nixpkgs; + gc = { automatic = true; options = "--delete-older-than 5d"; }; + channel.enable = false; + settings = { + auto-optimise-store = true; + keep-going = true; + use-xdg-base-directories = true; + experimental-features = [ + "flakes" + "nix-command" + ]; + }; + }; environment.systemPackages = with pkgs; [ git neovim xdg-user-dirs ] ++ config.system.extraPkgs; - # XDG Compliance - nix.settings.use-xdg-base-directories = true; - users = { users = builtins.listToAttrs (map ( user: { From 085e8e45acb7724984276aa8f6b92a6724417d8a Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 10 Feb 2026 23:35:37 -0800 Subject: [PATCH 389/412] sddm, with silentsddm --- flake.lock | 21 +++++++++++++++ flake.nix | 7 +++++ nixosModules/services/sddm/service.nix | 27 +++++++++++++++++++ .../{displaymanager => tuigreet}/service.nix | 0 4 files changed, 55 insertions(+) create mode 100644 nixosModules/services/sddm/service.nix rename nixosModules/services/{displaymanager => tuigreet}/service.nix (100%) diff --git a/flake.lock b/flake.lock index 9d751ae..01c0331 100644 --- a/flake.lock +++ b/flake.lock @@ -149,9 +149,30 @@ "home-manager": "home-manager", "niri": "niri", "nixpkgs": "nixpkgs", + "silentSDDM": "silentSDDM", "sops-nix": "sops-nix" } }, + "silentSDDM": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1769900466, + "narHash": "sha256-WeoJBj/PhqFCCJEIycTipqPbKm5BpQT2uzFTYcYZ30I=", + "owner": "uiriansan", + "repo": "SilentSDDM", + "rev": "a44caf771b4cb72f5c2514f7d488455b0fa860d2", + "type": "github" + }, + "original": { + "owner": "uiriansan", + "repo": "SilentSDDM", + "type": "github" + } + }, "sops-nix": { "inputs": { "nixpkgs": [ diff --git a/flake.nix b/flake.nix index e469f38..936cb1d 100644 --- a/flake.nix +++ b/flake.nix @@ -85,5 +85,12 @@ repo = "sops-nix"; inputs.nixpkgs.follows = "nixpkgs"; }; + + silentSDDM = { + type = "github"; + owner = "uiriansan"; + repo = "SilentSDDM"; + inputs.nixpkgs.follows = "nixpkgs"; + }; }; } diff --git a/nixosModules/services/sddm/service.nix b/nixosModules/services/sddm/service.nix new file mode 100644 index 0000000..bde0724 --- /dev/null +++ b/nixosModules/services/sddm/service.nix @@ -0,0 +1,27 @@ +{ config, pkgs, lib, inputs', ... }: + +{ + options.sddm = { + enable = lib.mkEnableOption "enables sddm"; + }; + + config = lib.mkIf config.sddm.enable (let + sddm-theme = inputs'.silentSDDM.packages.default.override { + theme = "catppuccin-macchiato"; + }; + in { + qt.enable = true; + environment.systemPackages = [ sddm-theme sddm-theme.test ]; + services.displayManager.sddm = { + wayland.enable = true; + package = pkgs.kdePackages.sddm; + enable = true; + theme = sddm-theme.pname; + extraPackages = sddm-theme.propagatedBuildInputs; + settings.General = { + GreeterEnvironment = "QML2_IMPORT_PATH=${sddm-theme}/share/sddm/themes/${sddm-theme.pname}/components/,QT_IM_MODULE=qtvirtualkeyboard"; + InputMethod = "qtvirtualkeyboard"; + }; + }; + }); +} diff --git a/nixosModules/services/displaymanager/service.nix b/nixosModules/services/tuigreet/service.nix similarity index 100% rename from nixosModules/services/displaymanager/service.nix rename to nixosModules/services/tuigreet/service.nix From 230fbb05f70a845506a7b22cab53c41cf863687f Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 10 Feb 2026 23:35:37 -0800 Subject: [PATCH 390/412] sddm, with silentsddm --- flake.lock | 21 +++++++++++++++ flake.nix | 7 +++++ nixosModules/services/sddm/service.nix | 27 +++++++++++++++++++ .../{displaymanager => tuigreet}/service.nix | 0 4 files changed, 55 insertions(+) create mode 100644 nixosModules/services/sddm/service.nix rename nixosModules/services/{displaymanager => tuigreet}/service.nix (100%) diff --git a/flake.lock b/flake.lock index 9d751ae..01c0331 100644 --- a/flake.lock +++ b/flake.lock @@ -149,9 +149,30 @@ "home-manager": "home-manager", "niri": "niri", "nixpkgs": "nixpkgs", + "silentSDDM": "silentSDDM", "sops-nix": "sops-nix" } }, + "silentSDDM": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1769900466, + "narHash": "sha256-WeoJBj/PhqFCCJEIycTipqPbKm5BpQT2uzFTYcYZ30I=", + "owner": "uiriansan", + "repo": "SilentSDDM", + "rev": "a44caf771b4cb72f5c2514f7d488455b0fa860d2", + "type": "github" + }, + "original": { + "owner": "uiriansan", + "repo": "SilentSDDM", + "type": "github" + } + }, "sops-nix": { "inputs": { "nixpkgs": [ diff --git a/flake.nix b/flake.nix index e469f38..936cb1d 100644 --- a/flake.nix +++ b/flake.nix @@ -85,5 +85,12 @@ repo = "sops-nix"; inputs.nixpkgs.follows = "nixpkgs"; }; + + silentSDDM = { + type = "github"; + owner = "uiriansan"; + repo = "SilentSDDM"; + inputs.nixpkgs.follows = "nixpkgs"; + }; }; } diff --git a/nixosModules/services/sddm/service.nix b/nixosModules/services/sddm/service.nix new file mode 100644 index 0000000..bde0724 --- /dev/null +++ b/nixosModules/services/sddm/service.nix @@ -0,0 +1,27 @@ +{ config, pkgs, lib, inputs', ... }: + +{ + options.sddm = { + enable = lib.mkEnableOption "enables sddm"; + }; + + config = lib.mkIf config.sddm.enable (let + sddm-theme = inputs'.silentSDDM.packages.default.override { + theme = "catppuccin-macchiato"; + }; + in { + qt.enable = true; + environment.systemPackages = [ sddm-theme sddm-theme.test ]; + services.displayManager.sddm = { + wayland.enable = true; + package = pkgs.kdePackages.sddm; + enable = true; + theme = sddm-theme.pname; + extraPackages = sddm-theme.propagatedBuildInputs; + settings.General = { + GreeterEnvironment = "QML2_IMPORT_PATH=${sddm-theme}/share/sddm/themes/${sddm-theme.pname}/components/,QT_IM_MODULE=qtvirtualkeyboard"; + InputMethod = "qtvirtualkeyboard"; + }; + }; + }); +} diff --git a/nixosModules/services/displaymanager/service.nix b/nixosModules/services/tuigreet/service.nix similarity index 100% rename from nixosModules/services/displaymanager/service.nix rename to nixosModules/services/tuigreet/service.nix From 29c2b1ce80a2d0b50480e0df0dc7f1f4258ca9bd Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 10 Feb 2026 23:36:38 -0800 Subject: [PATCH 391/412] Onizuka, enable sddm, remove old packages, flip screen --- hosts/onizuka/default.nix | 2 +- users/onizuka/default.nix | 9 +-------- 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/hosts/onizuka/default.nix b/hosts/onizuka/default.nix index 46a9717..dbff8d3 100644 --- a/hosts/onizuka/default.nix +++ b/hosts/onizuka/default.nix @@ -15,7 +15,7 @@ sshd.enable = true; tailscale.enable = true; - tuigreet.enable = true; + sddm.enable = true; niri.enable = true; steam.enable = true; diff --git a/users/onizuka/default.nix b/users/onizuka/default.nix index 7a03bfb..fd6988c 100644 --- a/users/onizuka/default.nix +++ b/users/onizuka/default.nix @@ -28,9 +28,8 @@ mouse.accel = -0.53; outputs = { "DP-1" = { - position = { x = 2560; y = -100; }; + position = { x = 2560; y = 0; }; mode = { width = 2560; height = 1440; refresh = 144.000; }; - transform.rotation = 270; }; "DP-2" = { position = { x = 0; y = 0; }; @@ -108,10 +107,4 @@ discord.enable = true; lutris.enable = true; - - extraPkgs = with pkgs; [ - # Applications - logseq - claude-code - ]; } From 67c6ecb1d8a6127dc0cd7f97fb974f9eea3ae926 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 10 Feb 2026 23:36:38 -0800 Subject: [PATCH 392/412] Onizuka, enable sddm, remove old packages, flip screen --- hosts/onizuka/default.nix | 2 +- users/onizuka/default.nix | 9 +-------- 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/hosts/onizuka/default.nix b/hosts/onizuka/default.nix index 46a9717..dbff8d3 100644 --- a/hosts/onizuka/default.nix +++ b/hosts/onizuka/default.nix @@ -15,7 +15,7 @@ sshd.enable = true; tailscale.enable = true; - tuigreet.enable = true; + sddm.enable = true; niri.enable = true; steam.enable = true; diff --git a/users/onizuka/default.nix b/users/onizuka/default.nix index 7a03bfb..fd6988c 100644 --- a/users/onizuka/default.nix +++ b/users/onizuka/default.nix @@ -28,9 +28,8 @@ mouse.accel = -0.53; outputs = { "DP-1" = { - position = { x = 2560; y = -100; }; + position = { x = 2560; y = 0; }; mode = { width = 2560; height = 1440; refresh = 144.000; }; - transform.rotation = 270; }; "DP-2" = { position = { x = 0; y = 0; }; @@ -108,10 +107,4 @@ discord.enable = true; lutris.enable = true; - - extraPkgs = with pkgs; [ - # Applications - logseq - claude-code - ]; } From 544bb630a0d92df0afc47ede3b40eddf5130c464 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 10 Feb 2026 23:03:02 -0800 Subject: [PATCH 393/412] Nvidia, add option to use stable drivers --- hosts/onizuka/default.nix | 5 ++++- nixosModules/services/nvidia/service.nix | 12 ++++++------ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/hosts/onizuka/default.nix b/hosts/onizuka/default.nix index dbff8d3..b9c5717 100644 --- a/hosts/onizuka/default.nix +++ b/hosts/onizuka/default.nix @@ -4,7 +4,10 @@ imports = [ ./hardware.nix ]; - nvidia.enable = true; + nvidia = { + enable = true; + stable = true; + }; pipewire.enable = true; polkit.enable = true; tablet.enable = true; diff --git a/nixosModules/services/nvidia/service.nix b/nixosModules/services/nvidia/service.nix index 78e4ef2..b6647f9 100644 --- a/nixosModules/services/nvidia/service.nix +++ b/nixosModules/services/nvidia/service.nix @@ -2,22 +2,22 @@ { options.nvidia = { - enable = lib.mkEnableOption - "Enables nvidia with proprietary drivers"; + enable = lib.mkEnableOption "Enables nvidia with proprietary drivers"; open = lib.mkEnableOption "Use open nvidia option for newer cards"; + stable = lib.mkEnableOption "Use stable instead of beta"; }; config = lib.mkIf config.nvidia.enable { - hardware.graphics = { - enable = true; - }; + hardware.graphics.enable = true; services.xserver.videoDrivers = ["nvidia"]; hardware.nvidia = { open = if config.nvidia.open then true else false; modesetting.enable = true; - package = config.boot.kernelPackages.nvidiaPackages.beta; + package = if config.nvidia.stable + then config.boot.kernelPackages.nvidiaPackages.stable + else config.boot.kernelPackages.nvidiaPackages.beta; }; boot.kernelParams = [ "nvidia_drm.fbdev=1" ]; From db7fff456bb0c49199bd82fbd08d5d9eb8af622a Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 10 Feb 2026 23:03:02 -0800 Subject: [PATCH 394/412] Nvidia, add option to use stable drivers --- hosts/onizuka/default.nix | 5 ++++- nixosModules/services/nvidia/service.nix | 12 ++++++------ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/hosts/onizuka/default.nix b/hosts/onizuka/default.nix index dbff8d3..b9c5717 100644 --- a/hosts/onizuka/default.nix +++ b/hosts/onizuka/default.nix @@ -4,7 +4,10 @@ imports = [ ./hardware.nix ]; - nvidia.enable = true; + nvidia = { + enable = true; + stable = true; + }; pipewire.enable = true; polkit.enable = true; tablet.enable = true; diff --git a/nixosModules/services/nvidia/service.nix b/nixosModules/services/nvidia/service.nix index 78e4ef2..b6647f9 100644 --- a/nixosModules/services/nvidia/service.nix +++ b/nixosModules/services/nvidia/service.nix @@ -2,22 +2,22 @@ { options.nvidia = { - enable = lib.mkEnableOption - "Enables nvidia with proprietary drivers"; + enable = lib.mkEnableOption "Enables nvidia with proprietary drivers"; open = lib.mkEnableOption "Use open nvidia option for newer cards"; + stable = lib.mkEnableOption "Use stable instead of beta"; }; config = lib.mkIf config.nvidia.enable { - hardware.graphics = { - enable = true; - }; + hardware.graphics.enable = true; services.xserver.videoDrivers = ["nvidia"]; hardware.nvidia = { open = if config.nvidia.open then true else false; modesetting.enable = true; - package = config.boot.kernelPackages.nvidiaPackages.beta; + package = if config.nvidia.stable + then config.boot.kernelPackages.nvidiaPackages.stable + else config.boot.kernelPackages.nvidiaPackages.beta; }; boot.kernelParams = [ "nvidia_drm.fbdev=1" ]; From 09ae6daec055163b6219a1ec2dc0b4f69e5f2cba Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 10 Feb 2026 09:50:06 -0800 Subject: [PATCH 395/412] Beets, initial commit Sets up beets with my preferred defaults. Configures the program for the following plugins: - embedart - fetchart - ftintitle - info - lyrics - the --- hmModules/apps/beets/app.nix | 52 ++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 hmModules/apps/beets/app.nix diff --git a/hmModules/apps/beets/app.nix b/hmModules/apps/beets/app.nix new file mode 100644 index 0000000..cb983ec --- /dev/null +++ b/hmModules/apps/beets/app.nix @@ -0,0 +1,52 @@ +{ config, pkgs, lib, ... }: + +{ + options.beets = { + enable = lib.mkEnableOption "Enables beets music"; + plugins = { + the.enable = lib.mkOption { default = true; }; + ftintitle.enable = lib.mkOption { default = true; }; + lyrics.enable = lib.mkOption { default = true; }; + fetchart = { + enable = lib.mkOption { default = true; }; + embed = lib.mkOption { default = true; }; + }; + }; + }; + + config = lib.mkIf config.beets.enable { + programs.beets.enable = true; + + programs.beets.settings = { + directory = "${config.xdg.userDirs.music}"; + library = "${config.xdg.userDirs.music}.db"; + + paths.default = with config.beets.plugins; let + # raw_artist = if ftintitle.enable + # then "$album_artist_no_feat" + # else "$albumartist"; + raw_artist = "$albumartist"; + artist = if the.enable + then "%the{${raw_artist}}/" + else raw_artist; + + the_rest = "$album%aunique{}/$track $title"; + in artist + the_rest; + + embedart = with config.beets.plugins.fetchart; + lib.mkIf (enable && embed) { + maxwidth = 500; + }; + + plugins = with lib; with config.beets.plugins; + optional (the.enable) "the" ++ + optional (ftintitle.enable) "ftintitle" ++ + optional (lyrics.enable) "lyrics" ++ + optional (fetchart.enable) "fetchart" ++ + optional (fetchart.embed) "embedart" ++ [ + "musicbrainz" + "info" + ]; + }; + }; +} From 14547201a833d249c8a373568b5feaf196171089 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 10 Feb 2026 09:50:06 -0800 Subject: [PATCH 396/412] Beets, initial commit Sets up beets with my preferred defaults. Configures the program for the following plugins: - embedart - fetchart - ftintitle - info - lyrics - the --- hmModules/apps/beets/app.nix | 52 ++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 hmModules/apps/beets/app.nix diff --git a/hmModules/apps/beets/app.nix b/hmModules/apps/beets/app.nix new file mode 100644 index 0000000..cb983ec --- /dev/null +++ b/hmModules/apps/beets/app.nix @@ -0,0 +1,52 @@ +{ config, pkgs, lib, ... }: + +{ + options.beets = { + enable = lib.mkEnableOption "Enables beets music"; + plugins = { + the.enable = lib.mkOption { default = true; }; + ftintitle.enable = lib.mkOption { default = true; }; + lyrics.enable = lib.mkOption { default = true; }; + fetchart = { + enable = lib.mkOption { default = true; }; + embed = lib.mkOption { default = true; }; + }; + }; + }; + + config = lib.mkIf config.beets.enable { + programs.beets.enable = true; + + programs.beets.settings = { + directory = "${config.xdg.userDirs.music}"; + library = "${config.xdg.userDirs.music}.db"; + + paths.default = with config.beets.plugins; let + # raw_artist = if ftintitle.enable + # then "$album_artist_no_feat" + # else "$albumartist"; + raw_artist = "$albumartist"; + artist = if the.enable + then "%the{${raw_artist}}/" + else raw_artist; + + the_rest = "$album%aunique{}/$track $title"; + in artist + the_rest; + + embedart = with config.beets.plugins.fetchart; + lib.mkIf (enable && embed) { + maxwidth = 500; + }; + + plugins = with lib; with config.beets.plugins; + optional (the.enable) "the" ++ + optional (ftintitle.enable) "ftintitle" ++ + optional (lyrics.enable) "lyrics" ++ + optional (fetchart.enable) "fetchart" ++ + optional (fetchart.embed) "embedart" ++ [ + "musicbrainz" + "info" + ]; + }; + }; +} From 2ebd936994e4b9a297e4bdc24cc661a741980404 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 10 Feb 2026 10:44:05 -0800 Subject: [PATCH 397/412] Onizuka, remove beeper, add Beets --- users/onizuka/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/users/onizuka/default.nix b/users/onizuka/default.nix index fd6988c..f5ea837 100644 --- a/users/onizuka/default.nix +++ b/users/onizuka/default.nix @@ -1,4 +1,4 @@ -{ config, pkgs, ... }: +{ config, ... }: { # "DP-2" = [ @@ -66,6 +66,7 @@ mpv.enable = true; zathura.enable = true; feh.enable = true; + beets.enable = true; neovim.enable = true; neovim.languages = { @@ -103,7 +104,6 @@ gimp.enable = true; - beeper.enable = true; discord.enable = true; lutris.enable = true; From a2cf048db5fcd7537fed46aa477b0f61ce8440ba Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Tue, 10 Feb 2026 10:44:05 -0800 Subject: [PATCH 398/412] Onizuka, remove beeper, add Beets --- users/onizuka/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/users/onizuka/default.nix b/users/onizuka/default.nix index fd6988c..f5ea837 100644 --- a/users/onizuka/default.nix +++ b/users/onizuka/default.nix @@ -1,4 +1,4 @@ -{ config, pkgs, ... }: +{ config, ... }: { # "DP-2" = [ @@ -66,6 +66,7 @@ mpv.enable = true; zathura.enable = true; feh.enable = true; + beets.enable = true; neovim.enable = true; neovim.languages = { @@ -103,7 +104,6 @@ gimp.enable = true; - beeper.enable = true; discord.enable = true; lutris.enable = true; From dcc7b97cfce9114335826c0e74556ceb1090057c Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 12 Feb 2026 14:37:08 -0800 Subject: [PATCH 399/412] Flake, add nixvim --- flake.lock | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ flake.nix | 12 ++++++++++- 2 files changed, 70 insertions(+), 1 deletion(-) diff --git a/flake.lock b/flake.lock index 01c0331..23c561f 100644 --- a/flake.lock +++ b/flake.lock @@ -35,6 +35,27 @@ "type": "github" } }, + "flake-parts_2": { + "inputs": { + "nixpkgs-lib": [ + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1769996383, + "narHash": "sha256-AnYjnFWgS49RlqX7LrC4uA+sCCDBj0Ry/WOJ5XWAsa0=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "57928607ea566b5db3ad13af0e57e921e6b12381", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, "home-manager": { "inputs": { "nixpkgs": [ @@ -142,6 +163,28 @@ "type": "github" } }, + "nixvim": { + "inputs": { + "flake-parts": "flake-parts_2", + "nixpkgs": [ + "nixpkgs" + ], + "systems": "systems" + }, + "locked": { + "lastModified": 1770630823, + "narHash": "sha256-5SEmOnJ61vmbap39vzWEsCX5UQ+3Ul8J4mXWKdqSn3w=", + "owner": "nix-community", + "repo": "nixvim", + "rev": "6acc964664ac916c64fe4e394edd467af4d90790", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixvim", + "type": "github" + } + }, "root": { "inputs": { "easy-hosts": "easy-hosts", @@ -149,6 +192,7 @@ "home-manager": "home-manager", "niri": "niri", "nixpkgs": "nixpkgs", + "nixvim": "nixvim", "silentSDDM": "silentSDDM", "sops-nix": "sops-nix" } @@ -193,6 +237,21 @@ "type": "github" } }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, "xwayland-satellite-stable": { "flake": false, "locked": { diff --git a/flake.nix b/flake.nix index 936cb1d..9cee2ae 100644 --- a/flake.nix +++ b/flake.nix @@ -25,7 +25,10 @@ inputs.home-manager.lib.homeManagerConfiguration { extraSpecialArgs = { inherit inputs; }; pkgs = inputs.nixpkgs.legacyPackages.${system}; - modules = [ ./hmModules ] ++ extraModules; + modules = [ + ./hmModules + inputs.nixvim.homeModules.nixvim + ] ++ extraModules; }; in { "pan@juri" = userConfig "x86_64-linux" [ ./users/juri ]; @@ -79,6 +82,13 @@ inputs.nixpkgs.follows = "nixpkgs"; }; + nixvim = { + type = "github"; + owner = "nix-community"; + repo = "nixvim"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + sops-nix = { type = "github"; owner = "Mic92"; From cda595c17c067b9cc1a3585fa03e18ae03a3fa84 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 12 Feb 2026 14:37:08 -0800 Subject: [PATCH 400/412] Flake, add nixvim --- flake.lock | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ flake.nix | 12 ++++++++++- 2 files changed, 70 insertions(+), 1 deletion(-) diff --git a/flake.lock b/flake.lock index 01c0331..23c561f 100644 --- a/flake.lock +++ b/flake.lock @@ -35,6 +35,27 @@ "type": "github" } }, + "flake-parts_2": { + "inputs": { + "nixpkgs-lib": [ + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1769996383, + "narHash": "sha256-AnYjnFWgS49RlqX7LrC4uA+sCCDBj0Ry/WOJ5XWAsa0=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "57928607ea566b5db3ad13af0e57e921e6b12381", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, "home-manager": { "inputs": { "nixpkgs": [ @@ -142,6 +163,28 @@ "type": "github" } }, + "nixvim": { + "inputs": { + "flake-parts": "flake-parts_2", + "nixpkgs": [ + "nixpkgs" + ], + "systems": "systems" + }, + "locked": { + "lastModified": 1770630823, + "narHash": "sha256-5SEmOnJ61vmbap39vzWEsCX5UQ+3Ul8J4mXWKdqSn3w=", + "owner": "nix-community", + "repo": "nixvim", + "rev": "6acc964664ac916c64fe4e394edd467af4d90790", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixvim", + "type": "github" + } + }, "root": { "inputs": { "easy-hosts": "easy-hosts", @@ -149,6 +192,7 @@ "home-manager": "home-manager", "niri": "niri", "nixpkgs": "nixpkgs", + "nixvim": "nixvim", "silentSDDM": "silentSDDM", "sops-nix": "sops-nix" } @@ -193,6 +237,21 @@ "type": "github" } }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, "xwayland-satellite-stable": { "flake": false, "locked": { diff --git a/flake.nix b/flake.nix index 936cb1d..9cee2ae 100644 --- a/flake.nix +++ b/flake.nix @@ -25,7 +25,10 @@ inputs.home-manager.lib.homeManagerConfiguration { extraSpecialArgs = { inherit inputs; }; pkgs = inputs.nixpkgs.legacyPackages.${system}; - modules = [ ./hmModules ] ++ extraModules; + modules = [ + ./hmModules + inputs.nixvim.homeModules.nixvim + ] ++ extraModules; }; in { "pan@juri" = userConfig "x86_64-linux" [ ./users/juri ]; @@ -79,6 +82,13 @@ inputs.nixpkgs.follows = "nixpkgs"; }; + nixvim = { + type = "github"; + owner = "nix-community"; + repo = "nixvim"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + sops-nix = { type = "github"; owner = "Mic92"; From bc2b23ca01c73b918cc617a3ca3a4750fbcfea0a Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 18 Feb 2026 11:48:11 -0800 Subject: [PATCH 401/412] Neovim, switch to nixvim and mono file This merges all the different files into one app.nix using nixvim instead of the manual home-manager nvim management. Behavior should be almost unchanged, with the following changes: - Plugins now have defaults for my own personal sane default experience - The highlighted line is now 81 instead of 80 - Treesitter plugins may not be integrated correctly --- hmModules/apps/neovim/app.nix | 278 +++++++++++--------- hmModules/apps/neovim/options.lua | 60 ----- hmModules/apps/neovim/plugin/lsp.nix | 53 ---- hmModules/apps/neovim/plugin/nvimcmp.nix | 72 ----- hmModules/apps/neovim/plugin/telescope.nix | 43 --- hmModules/apps/neovim/plugin/treesitter.nix | 38 --- 6 files changed, 151 insertions(+), 393 deletions(-) delete mode 100644 hmModules/apps/neovim/options.lua delete mode 100644 hmModules/apps/neovim/plugin/lsp.nix delete mode 100644 hmModules/apps/neovim/plugin/nvimcmp.nix delete mode 100644 hmModules/apps/neovim/plugin/telescope.nix delete mode 100644 hmModules/apps/neovim/plugin/treesitter.nix diff --git a/hmModules/apps/neovim/app.nix b/hmModules/apps/neovim/app.nix index d655103..83b1bb4 100644 --- a/hmModules/apps/neovim/app.nix +++ b/hmModules/apps/neovim/app.nix @@ -14,156 +14,180 @@ catppuccin.enable = lib.mkEnableOption "Enables catppuccin theme"; }; plugins = { - comments.enable = lib.mkEnableOption "Enables nvim-comment"; - fugitive.enable = lib.mkEnableOption "Enables git-fugitive"; - lualine.enable = lib.mkEnableOption "Enables lualine"; - luasnip.enable = lib.mkEnableOption "Enables luasnip snippets"; - nvimcmp.enable = lib.mkEnableOption "Enables nvim completion"; + comments.enable = lib.mkOption { default = true; }; + fugitive.enable = lib.mkOption { default = true; }; + lualine.enable = lib.mkOption { default = true; }; + luasnip.enable = lib.mkOption { default = false; }; + nvimcmp.enable = lib.mkOption { default = true; }; telescope = { - enable = lib.mkEnableOption "Enables telescope"; - fzf.enable = lib.mkEnableOption "Enables telescope-fzf"; + enable = lib.mkOption { default = true; }; + fzf.enable = lib.mkOption { default = true; }; }; - treesitter.enable = lib.mkEnableOption "Enables treesitter"; - wiki.enable = lib.mkEnableOption "Enables a wiki"; + treesitter.enable = lib.mkOption { default = true; }; + wiki.enable = lib.mkOption { default = false; }; }; }; - imports = [ - ./plugin/lsp.nix - ./plugin/nvimcmp.nix - ./plugin/telescope.nix - ./plugin/treesitter.nix - ]; - config = lib.mkIf config.neovim.enable { home.sessionVariables = { EDITOR = "nvim"; VISUAL = "nvim"; }; - programs.neovim = { + programs.nixvim = { enable = true; viAlias = true; vimAlias = true; - vimdiffAlias = true; - extraLuaConfig = '' - ${builtins.readFile ./options.lua} - ''; + globals = { + mapleader = " "; + maplocalleader = " "; + rust_recommended_style = 0; + }; - extraPackages = with pkgs; [ - (lib.mkIf config.neovim.languages.c.enable libclang) - (lib.mkIf config.neovim.languages.go.enable gopls) - (lib.mkIf config.neovim.languages.nix.enable nil) - (lib.mkIf config.neovim.languages.rust.enable rust-analyzer) + opts = { + list = true; + updatetime = 750; + + tabstop = 2; + softtabstop = 0; + shiftwidth = 2; + smarttab = true; + expandtab = true; + + colorcolumn = "81"; + showmatch = true; + number = true; + relativenumber = true; + + swapfile = false; + backup = false; + undofile = true; + undodir = "${config.xdg.configHome}/nvim/undodir"; + + smartcase = true; + }; + + keymaps = with config.lib.nixvim; [ + { + key = "d"; + mode = "n"; + action = mkRaw "vim.diagnostic.open_float"; + } + # -- Easy Split Navigation + # -- nnoremap + # -- nnoremap + # -- nnoremap + # -- nnoremap + # + # -- Easy copy and pasting to external programs + # -- map "+yy + # -- map "+P ]; + }; - # Additional packages are added through imports - plugins = let - lopts = lib.lists.optionals; - cfgp = config.neovim.plugins; - cfgl = config.neovim.languages; - cfgt = config.neovim.themes; + programs.nixvim.colorschemes = with config.neovim.themes; { + catppuccin = lib.mkIf catppuccin.enable { + enable = true; + flavour = "mocha"; + integrations.vimwiki = lib.mkIf wiki.enable true; + }; + }; - comments = lopts cfgp.comments.enable (with pkgs.vimPlugins; [ + programs.nixvim.plugins = with config.neovim.plugins; { + comment.enable = comments.enable; + + fugitive.enable = fugitive.enable; + + lualine = lib.mkIf lualine.enable { + enable = true; + icons_enabled = true; + }; + web-devicons.enable = lualine.enable; + + luasnip.enable = luasnip.enable; + friendly-snippets.enable = luasnip.enable; + + cmp = { + enable = nvimcmp.enable; + autoEnableSources = true; + settings = { + sources = [ + { name = "nvim_lsp"; } + { name = "path"; } + { name = "buffer"; } + ] ++ lib.optional luasnip.enable { name = "cmp-luasnip"; }; + mapping = with config.lib.nixvim; { + "" = mkRaw + "cmp.mapping(cmp.mapping.select_next_item(), {'i', 's'})"; + "" = mkRaw + "cmp.mapping(cmp.mapping.select_prev_item(), {'i', 's'})"; + }; + }; + }; + + telescope = { + enable = telescope.enable; + keymaps = { + "ff" = "find_files"; + "fg" = "git_files"; + }; + extensions = { + fzf = lib.mkIf telescope.fzf.enable { + enable = true; + fuzzy = true; + override_generic_sorter = true; + override_file_sorter = true; + case_mode = "smart_case"; + }; + }; + }; + + treesitter = { + enable = treesitter.enable; + highlight.enable = true; + indent.enable = true; + folding.enable = false; + }; + + vimwiki = { + enable = wiki.enable; + list = [ { - plugin = comment-nvim; - type = "lua"; - config = "require(\"Comment\").setup()"; + path = "${config.xdg.userDirs.documents}/wiki"; + links_space_char = "_"; + ext = ".md"; + syntax = "markdown"; } - ]); + ]; + }; - fugitive = lopts cfgp.fugitive.enable (with pkgs.vimPlugins; [ - vim-fugitive - ]); + nvim-lspconfig.enable = true; + nix.enable = config.neovim.languages.nix.enable; + rustaceanvim.enable = config.neovim.languages.rust.enable; + typsecript-tools.enable = config.neovim.languages.typescript.enable; + }; - luasnip-pkg = lopts cfgp.luasnip.enable (with pkgs.vimPlugins; [ - luasnip - friendly-snippets - (lib.mkIf cfgp.nvimcmp.enable cmp_luasnip) - ]); - - lualine = lopts cfgp.lualine.enable (with pkgs.vimPlugins; [ - { - plugin = lualine-nvim; - type = "lua"; - config = '' - require("lualine").setup { - options = { - icons_enabled = true, - '' + lib.strings.optionalString cfgt.catppuccin.enable '' - theme = "catppuccin" - '' + '' - } - } - ''; - } - nvim-web-devicons - ]); - - nix-pkg = lopts cfgl.nix.enable (with pkgs.vimPlugins; [ - vim-nix - ]); - - rust-pkg = lopts cfgl.rust.enable (with pkgs.vimPlugins; [ - { - plugin = rustaceanvim; - type = "lua"; - config = '' - vim.g.rust_recommended_style = 0 - ''; - } - ]); - - go-pkg = lopts cfgl.go.enable (with pkgs.vimPlugins; [ - go-nvim - ]); - - typescript-pkg = lopts cfgl.typescript.enable (with pkgs.vimPlugins; [ - { - plugin = typescript-tools-nvim; - type = "lua"; - config = '' - require("typescript-tools").setup {} - ''; - } - ]); - - catppuccin-pkg = lopts cfgt.catppuccin.enable (with pkgs.vimPlugins; [ - { - plugin = catppuccin-nvim; - type = "lua"; - config = '' - vim.cmd.colorscheme "catppuccin-mocha" - require('catppuccin').setup({ - integrations = { - '' + lib.strings.optionalString cfgp.wiki.enable '' - vimwiki = true - '' + '' - } - }) - ''; - } - ]); - - wiki = lopts cfgp.wiki.enable (with pkgs.vimPlugins; [ - { - plugin = vimwiki; - type = "lua"; - config = '' - vim.g.vimwiki_list = { - { - path = '${config.xdg.userDirs.documents}/wiki', - links_space_char = '_', - ext = '.md', - syntax = 'markdown', - } - } - ''; - } - ]); - in comments ++ fugitive ++ luasnip-pkg ++ lualine ++ nix-pkg ++ rust-pkg - ++ go-pkg ++ wiki ++ catppuccin-pkg ++ typescript-pkg; + programs.nixvim.lsp = { + enable = true; + servers = with config.neovim.languages; { + clangd.enable = c.enable; + gopls.enable = go.enable; + nil_ls.enable = nix.enable; + rust_analyzer.enable = rust.enable; + tsserver.enable = typescript.enable; + }; + keymaps = [ + { key = "gd"; lspBufAction = "definition"; } + { key = "gD"; lspBufAction = "declaration"; } + { key = "gi"; lspBufAction = "implementation"; } + { key = "gt"; lspBufAction = "type_definition"; } + { key = "K"; lspBufAction = "hover"; } + ] ++ lib.optional config.neovim.plugins.telescope.enable { + key = "gr"; + action = config.lib.nixvim.mkRaw + "require('telescope.builtin').lsp_references"; + }; }; }; } diff --git a/hmModules/apps/neovim/options.lua b/hmModules/apps/neovim/options.lua deleted file mode 100644 index db669e2..0000000 --- a/hmModules/apps/neovim/options.lua +++ /dev/null @@ -1,60 +0,0 @@ --- Globals -vim.g.mapleader = ' ' -vim.g.maplocalleader = ' ' -vim.opt.list = true -vim.bo.filetype = "on" -vim.opt.updatetime = 300 - --- Indentations -vim.opt.tabstop = 2 -vim.opt.softtabstop = 0 -vim.opt.shiftwidth = 2 -vim.opt.smarttab = true -vim.opt.expandtab = true - --- Style -vim.opt.colorcolumn = "80" -vim.opt.showmatch = true -vim.opt.number = true -vim.opt.relativenumber = true - --- Easy Split Navigation --- nnoremap --- nnoremap --- nnoremap --- nnoremap - --- Searching -vim.opt.smartcase = true - --- Backups -vim.opt.swapfile = false -vim.opt.backup = false -vim.opt.undofile = true -vim.opt.undodir = '/home/pan/.config/nvim/undodir' - --- Error viewing -vim.keymap.set('n', 'd', function() vim.diagnostic.open_float() end) - --- Easy copy and pasting to external programs --- map "+yy --- map "+P - --- autocmd BufRead,BufNewFile *.md call WritingMode() --- autocmd BufRead,BufNewFile *.tex call WritingMode() --- autocmd BufRead,BufNewFile *.svx call WritingMode() - --- autocmd BufRead,BufNewFile *.py call PythonMode() - --- function! WritingMode() - -- setlocal textwidth=80 - -- setlocal wrap linebreak nolist - -- setlocal whichwrap+=<,>,h,l - -- nnoremap j gj - -- nnoremap k gk - -- setlocal spell spelllang=en_us --- endfunction --- function! PythonMode() - -- setlocal foldmethod=indent - -- setlocal foldlevel=99 --- endfunction diff --git a/hmModules/apps/neovim/plugin/lsp.nix b/hmModules/apps/neovim/plugin/lsp.nix deleted file mode 100644 index f5a66c5..0000000 --- a/hmModules/apps/neovim/plugin/lsp.nix +++ /dev/null @@ -1,53 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - config = lib.mkIf config.neovim.enable { - programs.neovim.plugins = let - cfgp = config.neovim.plugins; - cfgl = config.neovim.languages; - - configText = '' - local on_attach = function(_, bufnr) - - local bufmap = function(keys, func) - vim.keymap.set('n', keys, func, { buffer = bufnr }) - end - - bufmap('r', vim.lsp.buf.rename) - bufmap('a', vim.lsp.buf.code_action) - - bufmap('gd', vim.lsp.buf.definition) - bufmap('gD', vim.lsp.buf.declaration) - bufmap('gI', vim.lsp.buf.implementation) - bufmap('D', vim.lsp.buf.type_definition) - - '' + lib.strings.optionalString cfgp.telescope.enable '' - bufmap('gr', require('telescope.builtin').lsp_references) - bufmap('s', require('telescope.builtin').lsp_document_symbols) - bufmap('S', require('telescope.builtin').lsp_dynamic_workspace_symbols) - '' + '' - - bufmap('K', vim.lsp.buf.hover) - - vim.api.nvim_buf_create_user_command(bufnr, 'Format', function(_) - vim.lsp.buf.format() - end, {}) - end - - local capabilities = vim.lsp.protocol.make_client_capabilities() - '' + lib.strings.optionalString cfgl.c.enable '' - require('lspconfig').clangd.setup {} - '' + lib.strings.optionalString cfgl.go.enable '' - require('lspconfig').gopls.setup {} - '' + lib.strings.optionalString cfgl.nix.enable '' - require('lspconfig').nil_ls.setup {} - ''; - in with pkgs.vimPlugins; [ - { - plugin = nvim-lspconfig; - type = "lua"; - config = configText; - } - ]; - }; -} diff --git a/hmModules/apps/neovim/plugin/nvimcmp.nix b/hmModules/apps/neovim/plugin/nvimcmp.nix deleted file mode 100644 index 82098ef..0000000 --- a/hmModules/apps/neovim/plugin/nvimcmp.nix +++ /dev/null @@ -1,72 +0,0 @@ -{ config, pkgs, lib, ... }: - -let - cfgp = config.neovim.plugins; -in { - config = lib.mkIf (config.neovim.enable && cfgp.nvimcmp.enable) { - programs.neovim.plugins = let - - configText = '' - local cmp = require('cmp') - '' + lib.strings.optionalString cfgp.luasnip.enable '' - local luasnip = require('luasnip') - - require('luasnip.loaders.from_vscode').lazy_load() - luasnip.config.setup {} - '' + '' - - cmp.setup { - mapping = cmp.mapping.preset.insert { - [''] = cmp.mapping.select_next_item(), - [''] = cmp.mapping.select_prev_item(), - [''] = cmp.mapping.scroll_docs(-4), - [''] = cmp.mapping.scroll_docs(4), - [''] = cmp.mapping.complete {}, - [''] = cmp.mapping.confirm { - behavior = cmp.ConfirmBehavior.Replace, - select = true, - }, - [''] = cmp.mapping(function(fallback) - if cmp.visible() then - cmp.select_next_item() - '' + lib.strings.optionalString cfgp.luasnip.enable '' - elseif luasnip.expand_or_locally_jumpable() then - luasnip.expand_or_jump() - '' + '' - else - fallback() - end - end, { 'i', 's' }), - [''] = cmp.mapping(function(fallback) - if cmp.visible() then - cmp.select_prev_item() - '' + lib.strings.optionalString cfgp.luasnip.enable '' - elseif luasnip.locally_jumpable(-1) then - luasnip.jump(-1) - '' + '' - else - fallback() - end - end, { 'i', 's' }), - }, - '' + lib.strings.optionalString cfgp.luasnip.enable '' - snippet = { - expand = function(args) - luasnip.lsp_expand(args.body) - end, - }, - sources = { - { name = 'luasnip' }, - }, - '' + '' - } - ''; - in with pkgs.vimPlugins; [ - { - plugin = nvim-cmp; - type = "lua"; - config = configText; - } - ]; - }; -} diff --git a/hmModules/apps/neovim/plugin/telescope.nix b/hmModules/apps/neovim/plugin/telescope.nix deleted file mode 100644 index 48a96e9..0000000 --- a/hmModules/apps/neovim/plugin/telescope.nix +++ /dev/null @@ -1,43 +0,0 @@ -{ config, pkgs, lib, ... }: - -let - cfgp = config.neovim.plugins; -in { - config = lib.mkIf (config.neovim.enable && cfgp.telescope.enable) { - programs.neovim.plugins = let - configText = '' - require('telescope').setup({ - extensions = { - '' + lib.strings.optionalString cfgp.telescope.fzf.enable '' - fzf = { - fuzzy = true, -- false will only do exact matching - override_generic_sorter = true, -- override the generic sorter - override_file_sorter = true, -- override the file sorter - case_mode = "smart_case", -- or "ignore_case" or "respect_case" - -- the default case_mode is "smart_case" - } - '' + '' - } - }) - local builtin = require('telescope.builtin') - vim.keymap.set('n', 'ff', builtin.find_files, {}) - vim.keymap.set('n', 'fg', builtin.git_files, {}) - - '' + lib.strings.optionalString cfgp.telescope.fzf.enable '' - require('telescope').load_extension('fzf') - ''; - in with pkgs.vimPlugins; [ - { - plugin = telescope-nvim; - type = "lua"; - config = configText; - } - (lib.mkIf cfgp.nvimcmp.enable telescope-fzf-native-nvim) - ]; - - home.packages = with pkgs; [ - (lib.mkIf cfgp.telescope.fzf.enable fzf) - ]; - - }; -} diff --git a/hmModules/apps/neovim/plugin/treesitter.nix b/hmModules/apps/neovim/plugin/treesitter.nix deleted file mode 100644 index a6bb8c0..0000000 --- a/hmModules/apps/neovim/plugin/treesitter.nix +++ /dev/null @@ -1,38 +0,0 @@ -{ config, pkgs, lib, ... }: - -let - cfgp = config.neovim.plugins; - cfgl = config.neovim.languages; -in { - config = lib.mkIf (config.neovim.enable && cfgp.treesitter.enable) { - programs.neovim.plugins = let - configText = '' - require('nvim-treesitter.configs').setup { - ensure_installed = {}, - - auto_install = false, - - highlight = { enable = true }, - - indent = { enable = true }, - } - ''; - - # I've tried many things, and can't get treesitter plugins changing - # dynamically. For not just have them always loaded regardless of config - treeplugs = p: [ - p.tree-sitter-c - p.tree-sitter-go - p.tree-sitter-nix - p.tree-sitter-rust - p.tree-sitter-typescript - ]; - in with pkgs.vimPlugins; [ - { - plugin = (nvim-treesitter.withPlugins treeplugs); - type = "lua"; - config = configText; - } - ]; - }; -} From b903912a1f967708a17da224cf6d980a03a8c4d2 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 18 Feb 2026 11:48:11 -0800 Subject: [PATCH 402/412] Neovim, switch to nixvim and mono file This merges all the different files into one app.nix using nixvim instead of the manual home-manager nvim management. Behavior should be almost unchanged, with the following changes: - Plugins now have defaults for my own personal sane default experience - The highlighted line is now 81 instead of 80 - Treesitter plugins may not be integrated correctly --- hmModules/apps/neovim/app.nix | 278 +++++++++++--------- hmModules/apps/neovim/options.lua | 60 ----- hmModules/apps/neovim/plugin/lsp.nix | 53 ---- hmModules/apps/neovim/plugin/nvimcmp.nix | 72 ----- hmModules/apps/neovim/plugin/telescope.nix | 43 --- hmModules/apps/neovim/plugin/treesitter.nix | 38 --- 6 files changed, 151 insertions(+), 393 deletions(-) delete mode 100644 hmModules/apps/neovim/options.lua delete mode 100644 hmModules/apps/neovim/plugin/lsp.nix delete mode 100644 hmModules/apps/neovim/plugin/nvimcmp.nix delete mode 100644 hmModules/apps/neovim/plugin/telescope.nix delete mode 100644 hmModules/apps/neovim/plugin/treesitter.nix diff --git a/hmModules/apps/neovim/app.nix b/hmModules/apps/neovim/app.nix index d655103..83b1bb4 100644 --- a/hmModules/apps/neovim/app.nix +++ b/hmModules/apps/neovim/app.nix @@ -14,156 +14,180 @@ catppuccin.enable = lib.mkEnableOption "Enables catppuccin theme"; }; plugins = { - comments.enable = lib.mkEnableOption "Enables nvim-comment"; - fugitive.enable = lib.mkEnableOption "Enables git-fugitive"; - lualine.enable = lib.mkEnableOption "Enables lualine"; - luasnip.enable = lib.mkEnableOption "Enables luasnip snippets"; - nvimcmp.enable = lib.mkEnableOption "Enables nvim completion"; + comments.enable = lib.mkOption { default = true; }; + fugitive.enable = lib.mkOption { default = true; }; + lualine.enable = lib.mkOption { default = true; }; + luasnip.enable = lib.mkOption { default = false; }; + nvimcmp.enable = lib.mkOption { default = true; }; telescope = { - enable = lib.mkEnableOption "Enables telescope"; - fzf.enable = lib.mkEnableOption "Enables telescope-fzf"; + enable = lib.mkOption { default = true; }; + fzf.enable = lib.mkOption { default = true; }; }; - treesitter.enable = lib.mkEnableOption "Enables treesitter"; - wiki.enable = lib.mkEnableOption "Enables a wiki"; + treesitter.enable = lib.mkOption { default = true; }; + wiki.enable = lib.mkOption { default = false; }; }; }; - imports = [ - ./plugin/lsp.nix - ./plugin/nvimcmp.nix - ./plugin/telescope.nix - ./plugin/treesitter.nix - ]; - config = lib.mkIf config.neovim.enable { home.sessionVariables = { EDITOR = "nvim"; VISUAL = "nvim"; }; - programs.neovim = { + programs.nixvim = { enable = true; viAlias = true; vimAlias = true; - vimdiffAlias = true; - extraLuaConfig = '' - ${builtins.readFile ./options.lua} - ''; + globals = { + mapleader = " "; + maplocalleader = " "; + rust_recommended_style = 0; + }; - extraPackages = with pkgs; [ - (lib.mkIf config.neovim.languages.c.enable libclang) - (lib.mkIf config.neovim.languages.go.enable gopls) - (lib.mkIf config.neovim.languages.nix.enable nil) - (lib.mkIf config.neovim.languages.rust.enable rust-analyzer) + opts = { + list = true; + updatetime = 750; + + tabstop = 2; + softtabstop = 0; + shiftwidth = 2; + smarttab = true; + expandtab = true; + + colorcolumn = "81"; + showmatch = true; + number = true; + relativenumber = true; + + swapfile = false; + backup = false; + undofile = true; + undodir = "${config.xdg.configHome}/nvim/undodir"; + + smartcase = true; + }; + + keymaps = with config.lib.nixvim; [ + { + key = "d"; + mode = "n"; + action = mkRaw "vim.diagnostic.open_float"; + } + # -- Easy Split Navigation + # -- nnoremap + # -- nnoremap + # -- nnoremap + # -- nnoremap + # + # -- Easy copy and pasting to external programs + # -- map "+yy + # -- map "+P ]; + }; - # Additional packages are added through imports - plugins = let - lopts = lib.lists.optionals; - cfgp = config.neovim.plugins; - cfgl = config.neovim.languages; - cfgt = config.neovim.themes; + programs.nixvim.colorschemes = with config.neovim.themes; { + catppuccin = lib.mkIf catppuccin.enable { + enable = true; + flavour = "mocha"; + integrations.vimwiki = lib.mkIf wiki.enable true; + }; + }; - comments = lopts cfgp.comments.enable (with pkgs.vimPlugins; [ + programs.nixvim.plugins = with config.neovim.plugins; { + comment.enable = comments.enable; + + fugitive.enable = fugitive.enable; + + lualine = lib.mkIf lualine.enable { + enable = true; + icons_enabled = true; + }; + web-devicons.enable = lualine.enable; + + luasnip.enable = luasnip.enable; + friendly-snippets.enable = luasnip.enable; + + cmp = { + enable = nvimcmp.enable; + autoEnableSources = true; + settings = { + sources = [ + { name = "nvim_lsp"; } + { name = "path"; } + { name = "buffer"; } + ] ++ lib.optional luasnip.enable { name = "cmp-luasnip"; }; + mapping = with config.lib.nixvim; { + "" = mkRaw + "cmp.mapping(cmp.mapping.select_next_item(), {'i', 's'})"; + "" = mkRaw + "cmp.mapping(cmp.mapping.select_prev_item(), {'i', 's'})"; + }; + }; + }; + + telescope = { + enable = telescope.enable; + keymaps = { + "ff" = "find_files"; + "fg" = "git_files"; + }; + extensions = { + fzf = lib.mkIf telescope.fzf.enable { + enable = true; + fuzzy = true; + override_generic_sorter = true; + override_file_sorter = true; + case_mode = "smart_case"; + }; + }; + }; + + treesitter = { + enable = treesitter.enable; + highlight.enable = true; + indent.enable = true; + folding.enable = false; + }; + + vimwiki = { + enable = wiki.enable; + list = [ { - plugin = comment-nvim; - type = "lua"; - config = "require(\"Comment\").setup()"; + path = "${config.xdg.userDirs.documents}/wiki"; + links_space_char = "_"; + ext = ".md"; + syntax = "markdown"; } - ]); + ]; + }; - fugitive = lopts cfgp.fugitive.enable (with pkgs.vimPlugins; [ - vim-fugitive - ]); + nvim-lspconfig.enable = true; + nix.enable = config.neovim.languages.nix.enable; + rustaceanvim.enable = config.neovim.languages.rust.enable; + typsecript-tools.enable = config.neovim.languages.typescript.enable; + }; - luasnip-pkg = lopts cfgp.luasnip.enable (with pkgs.vimPlugins; [ - luasnip - friendly-snippets - (lib.mkIf cfgp.nvimcmp.enable cmp_luasnip) - ]); - - lualine = lopts cfgp.lualine.enable (with pkgs.vimPlugins; [ - { - plugin = lualine-nvim; - type = "lua"; - config = '' - require("lualine").setup { - options = { - icons_enabled = true, - '' + lib.strings.optionalString cfgt.catppuccin.enable '' - theme = "catppuccin" - '' + '' - } - } - ''; - } - nvim-web-devicons - ]); - - nix-pkg = lopts cfgl.nix.enable (with pkgs.vimPlugins; [ - vim-nix - ]); - - rust-pkg = lopts cfgl.rust.enable (with pkgs.vimPlugins; [ - { - plugin = rustaceanvim; - type = "lua"; - config = '' - vim.g.rust_recommended_style = 0 - ''; - } - ]); - - go-pkg = lopts cfgl.go.enable (with pkgs.vimPlugins; [ - go-nvim - ]); - - typescript-pkg = lopts cfgl.typescript.enable (with pkgs.vimPlugins; [ - { - plugin = typescript-tools-nvim; - type = "lua"; - config = '' - require("typescript-tools").setup {} - ''; - } - ]); - - catppuccin-pkg = lopts cfgt.catppuccin.enable (with pkgs.vimPlugins; [ - { - plugin = catppuccin-nvim; - type = "lua"; - config = '' - vim.cmd.colorscheme "catppuccin-mocha" - require('catppuccin').setup({ - integrations = { - '' + lib.strings.optionalString cfgp.wiki.enable '' - vimwiki = true - '' + '' - } - }) - ''; - } - ]); - - wiki = lopts cfgp.wiki.enable (with pkgs.vimPlugins; [ - { - plugin = vimwiki; - type = "lua"; - config = '' - vim.g.vimwiki_list = { - { - path = '${config.xdg.userDirs.documents}/wiki', - links_space_char = '_', - ext = '.md', - syntax = 'markdown', - } - } - ''; - } - ]); - in comments ++ fugitive ++ luasnip-pkg ++ lualine ++ nix-pkg ++ rust-pkg - ++ go-pkg ++ wiki ++ catppuccin-pkg ++ typescript-pkg; + programs.nixvim.lsp = { + enable = true; + servers = with config.neovim.languages; { + clangd.enable = c.enable; + gopls.enable = go.enable; + nil_ls.enable = nix.enable; + rust_analyzer.enable = rust.enable; + tsserver.enable = typescript.enable; + }; + keymaps = [ + { key = "gd"; lspBufAction = "definition"; } + { key = "gD"; lspBufAction = "declaration"; } + { key = "gi"; lspBufAction = "implementation"; } + { key = "gt"; lspBufAction = "type_definition"; } + { key = "K"; lspBufAction = "hover"; } + ] ++ lib.optional config.neovim.plugins.telescope.enable { + key = "gr"; + action = config.lib.nixvim.mkRaw + "require('telescope.builtin').lsp_references"; + }; }; }; } diff --git a/hmModules/apps/neovim/options.lua b/hmModules/apps/neovim/options.lua deleted file mode 100644 index db669e2..0000000 --- a/hmModules/apps/neovim/options.lua +++ /dev/null @@ -1,60 +0,0 @@ --- Globals -vim.g.mapleader = ' ' -vim.g.maplocalleader = ' ' -vim.opt.list = true -vim.bo.filetype = "on" -vim.opt.updatetime = 300 - --- Indentations -vim.opt.tabstop = 2 -vim.opt.softtabstop = 0 -vim.opt.shiftwidth = 2 -vim.opt.smarttab = true -vim.opt.expandtab = true - --- Style -vim.opt.colorcolumn = "80" -vim.opt.showmatch = true -vim.opt.number = true -vim.opt.relativenumber = true - --- Easy Split Navigation --- nnoremap --- nnoremap --- nnoremap --- nnoremap - --- Searching -vim.opt.smartcase = true - --- Backups -vim.opt.swapfile = false -vim.opt.backup = false -vim.opt.undofile = true -vim.opt.undodir = '/home/pan/.config/nvim/undodir' - --- Error viewing -vim.keymap.set('n', 'd', function() vim.diagnostic.open_float() end) - --- Easy copy and pasting to external programs --- map "+yy --- map "+P - --- autocmd BufRead,BufNewFile *.md call WritingMode() --- autocmd BufRead,BufNewFile *.tex call WritingMode() --- autocmd BufRead,BufNewFile *.svx call WritingMode() - --- autocmd BufRead,BufNewFile *.py call PythonMode() - --- function! WritingMode() - -- setlocal textwidth=80 - -- setlocal wrap linebreak nolist - -- setlocal whichwrap+=<,>,h,l - -- nnoremap j gj - -- nnoremap k gk - -- setlocal spell spelllang=en_us --- endfunction --- function! PythonMode() - -- setlocal foldmethod=indent - -- setlocal foldlevel=99 --- endfunction diff --git a/hmModules/apps/neovim/plugin/lsp.nix b/hmModules/apps/neovim/plugin/lsp.nix deleted file mode 100644 index f5a66c5..0000000 --- a/hmModules/apps/neovim/plugin/lsp.nix +++ /dev/null @@ -1,53 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - config = lib.mkIf config.neovim.enable { - programs.neovim.plugins = let - cfgp = config.neovim.plugins; - cfgl = config.neovim.languages; - - configText = '' - local on_attach = function(_, bufnr) - - local bufmap = function(keys, func) - vim.keymap.set('n', keys, func, { buffer = bufnr }) - end - - bufmap('r', vim.lsp.buf.rename) - bufmap('a', vim.lsp.buf.code_action) - - bufmap('gd', vim.lsp.buf.definition) - bufmap('gD', vim.lsp.buf.declaration) - bufmap('gI', vim.lsp.buf.implementation) - bufmap('D', vim.lsp.buf.type_definition) - - '' + lib.strings.optionalString cfgp.telescope.enable '' - bufmap('gr', require('telescope.builtin').lsp_references) - bufmap('s', require('telescope.builtin').lsp_document_symbols) - bufmap('S', require('telescope.builtin').lsp_dynamic_workspace_symbols) - '' + '' - - bufmap('K', vim.lsp.buf.hover) - - vim.api.nvim_buf_create_user_command(bufnr, 'Format', function(_) - vim.lsp.buf.format() - end, {}) - end - - local capabilities = vim.lsp.protocol.make_client_capabilities() - '' + lib.strings.optionalString cfgl.c.enable '' - require('lspconfig').clangd.setup {} - '' + lib.strings.optionalString cfgl.go.enable '' - require('lspconfig').gopls.setup {} - '' + lib.strings.optionalString cfgl.nix.enable '' - require('lspconfig').nil_ls.setup {} - ''; - in with pkgs.vimPlugins; [ - { - plugin = nvim-lspconfig; - type = "lua"; - config = configText; - } - ]; - }; -} diff --git a/hmModules/apps/neovim/plugin/nvimcmp.nix b/hmModules/apps/neovim/plugin/nvimcmp.nix deleted file mode 100644 index 82098ef..0000000 --- a/hmModules/apps/neovim/plugin/nvimcmp.nix +++ /dev/null @@ -1,72 +0,0 @@ -{ config, pkgs, lib, ... }: - -let - cfgp = config.neovim.plugins; -in { - config = lib.mkIf (config.neovim.enable && cfgp.nvimcmp.enable) { - programs.neovim.plugins = let - - configText = '' - local cmp = require('cmp') - '' + lib.strings.optionalString cfgp.luasnip.enable '' - local luasnip = require('luasnip') - - require('luasnip.loaders.from_vscode').lazy_load() - luasnip.config.setup {} - '' + '' - - cmp.setup { - mapping = cmp.mapping.preset.insert { - [''] = cmp.mapping.select_next_item(), - [''] = cmp.mapping.select_prev_item(), - [''] = cmp.mapping.scroll_docs(-4), - [''] = cmp.mapping.scroll_docs(4), - [''] = cmp.mapping.complete {}, - [''] = cmp.mapping.confirm { - behavior = cmp.ConfirmBehavior.Replace, - select = true, - }, - [''] = cmp.mapping(function(fallback) - if cmp.visible() then - cmp.select_next_item() - '' + lib.strings.optionalString cfgp.luasnip.enable '' - elseif luasnip.expand_or_locally_jumpable() then - luasnip.expand_or_jump() - '' + '' - else - fallback() - end - end, { 'i', 's' }), - [''] = cmp.mapping(function(fallback) - if cmp.visible() then - cmp.select_prev_item() - '' + lib.strings.optionalString cfgp.luasnip.enable '' - elseif luasnip.locally_jumpable(-1) then - luasnip.jump(-1) - '' + '' - else - fallback() - end - end, { 'i', 's' }), - }, - '' + lib.strings.optionalString cfgp.luasnip.enable '' - snippet = { - expand = function(args) - luasnip.lsp_expand(args.body) - end, - }, - sources = { - { name = 'luasnip' }, - }, - '' + '' - } - ''; - in with pkgs.vimPlugins; [ - { - plugin = nvim-cmp; - type = "lua"; - config = configText; - } - ]; - }; -} diff --git a/hmModules/apps/neovim/plugin/telescope.nix b/hmModules/apps/neovim/plugin/telescope.nix deleted file mode 100644 index 48a96e9..0000000 --- a/hmModules/apps/neovim/plugin/telescope.nix +++ /dev/null @@ -1,43 +0,0 @@ -{ config, pkgs, lib, ... }: - -let - cfgp = config.neovim.plugins; -in { - config = lib.mkIf (config.neovim.enable && cfgp.telescope.enable) { - programs.neovim.plugins = let - configText = '' - require('telescope').setup({ - extensions = { - '' + lib.strings.optionalString cfgp.telescope.fzf.enable '' - fzf = { - fuzzy = true, -- false will only do exact matching - override_generic_sorter = true, -- override the generic sorter - override_file_sorter = true, -- override the file sorter - case_mode = "smart_case", -- or "ignore_case" or "respect_case" - -- the default case_mode is "smart_case" - } - '' + '' - } - }) - local builtin = require('telescope.builtin') - vim.keymap.set('n', 'ff', builtin.find_files, {}) - vim.keymap.set('n', 'fg', builtin.git_files, {}) - - '' + lib.strings.optionalString cfgp.telescope.fzf.enable '' - require('telescope').load_extension('fzf') - ''; - in with pkgs.vimPlugins; [ - { - plugin = telescope-nvim; - type = "lua"; - config = configText; - } - (lib.mkIf cfgp.nvimcmp.enable telescope-fzf-native-nvim) - ]; - - home.packages = with pkgs; [ - (lib.mkIf cfgp.telescope.fzf.enable fzf) - ]; - - }; -} diff --git a/hmModules/apps/neovim/plugin/treesitter.nix b/hmModules/apps/neovim/plugin/treesitter.nix deleted file mode 100644 index a6bb8c0..0000000 --- a/hmModules/apps/neovim/plugin/treesitter.nix +++ /dev/null @@ -1,38 +0,0 @@ -{ config, pkgs, lib, ... }: - -let - cfgp = config.neovim.plugins; - cfgl = config.neovim.languages; -in { - config = lib.mkIf (config.neovim.enable && cfgp.treesitter.enable) { - programs.neovim.plugins = let - configText = '' - require('nvim-treesitter.configs').setup { - ensure_installed = {}, - - auto_install = false, - - highlight = { enable = true }, - - indent = { enable = true }, - } - ''; - - # I've tried many things, and can't get treesitter plugins changing - # dynamically. For not just have them always loaded regardless of config - treeplugs = p: [ - p.tree-sitter-c - p.tree-sitter-go - p.tree-sitter-nix - p.tree-sitter-rust - p.tree-sitter-typescript - ]; - in with pkgs.vimPlugins; [ - { - plugin = (nvim-treesitter.withPlugins treeplugs); - type = "lua"; - config = configText; - } - ]; - }; -} From bd167a504a2a1df72995b9a79db6dbf267073b0c Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 18 Feb 2026 14:30:01 -0800 Subject: [PATCH 403/412] Onizuka, update neovim config to match update --- users/onizuka/default.nix | 27 ++++++++------------------- 1 file changed, 8 insertions(+), 19 deletions(-) diff --git a/users/onizuka/default.nix b/users/onizuka/default.nix index f5ea837..ade362c 100644 --- a/users/onizuka/default.nix +++ b/users/onizuka/default.nix @@ -68,27 +68,16 @@ feh.enable = true; beets.enable = true; - neovim.enable = true; - neovim.languages = { - c.enable = true; - nix.enable = true; - rust.enable = true; - typescript.enable = true; - }; - neovim.plugins = { - comments.enable = true; - fugitive.enable = true; - lualine.enable = true; - luasnip.enable = true; - nvimcmp.enable = true; - telescope = { - enable = true; - fzf.enable = true; + neovim = { + enable = true; + languages = { + c.enable = true; + nix.enable = true; + rust.enable = true; + typescript.enable = true; }; - treesitter.enable = true; - wiki.enable = true; + themes.catppuccin.enable = true; }; - neovim.themes.catppuccin.enable = true; lf.enable = true; lf.hiddenfiles = [ From 28bda11c686940057b46192b84b73edf96be054a Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 18 Feb 2026 14:30:01 -0800 Subject: [PATCH 404/412] Onizuka, update neovim config to match update --- users/onizuka/default.nix | 27 ++++++++------------------- 1 file changed, 8 insertions(+), 19 deletions(-) diff --git a/users/onizuka/default.nix b/users/onizuka/default.nix index f5ea837..ade362c 100644 --- a/users/onizuka/default.nix +++ b/users/onizuka/default.nix @@ -68,27 +68,16 @@ feh.enable = true; beets.enable = true; - neovim.enable = true; - neovim.languages = { - c.enable = true; - nix.enable = true; - rust.enable = true; - typescript.enable = true; - }; - neovim.plugins = { - comments.enable = true; - fugitive.enable = true; - lualine.enable = true; - luasnip.enable = true; - nvimcmp.enable = true; - telescope = { - enable = true; - fzf.enable = true; + neovim = { + enable = true; + languages = { + c.enable = true; + nix.enable = true; + rust.enable = true; + typescript.enable = true; }; - treesitter.enable = true; - wiki.enable = true; + themes.catppuccin.enable = true; }; - neovim.themes.catppuccin.enable = true; lf.enable = true; lf.hiddenfiles = [ From 481a3c6ec053baa3c19286e83ca95a85a5758d22 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 18 Feb 2026 16:34:20 -0800 Subject: [PATCH 405/412] Ssh, disable DefaultConfig to supress warning --- hmModules/services/ssh/service.nix | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/hmModules/services/ssh/service.nix b/hmModules/services/ssh/service.nix index 418ae9c..ed2c9be 100644 --- a/hmModules/services/ssh/service.nix +++ b/hmModules/services/ssh/service.nix @@ -6,7 +6,10 @@ }; config = lib.mkIf config.ssh.enable { - programs.ssh.enable = true; + programs.ssh = { + enable = true; + enableDefaultConfig = false; + }; home.packages = with pkgs; [ sshfs # SSH File system ]; From 8fe6e2302ccc50a12a739aac34875e183e597516 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 18 Feb 2026 16:34:20 -0800 Subject: [PATCH 406/412] Ssh, disable DefaultConfig to supress warning --- hmModules/services/ssh/service.nix | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/hmModules/services/ssh/service.nix b/hmModules/services/ssh/service.nix index 418ae9c..ed2c9be 100644 --- a/hmModules/services/ssh/service.nix +++ b/hmModules/services/ssh/service.nix @@ -6,7 +6,10 @@ }; config = lib.mkIf config.ssh.enable { - programs.ssh.enable = true; + programs.ssh = { + enable = true; + enableDefaultConfig = false; + }; home.packages = with pkgs; [ sshfs # SSH File system ]; From 026c4fb0d20a79656c0143db1bcf102a30fff3d7 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 12 Mar 2026 10:52:52 -0700 Subject: [PATCH 407/412] Lutris, switch to wineWow64 from wineWow --- hmModules/apps/lutris/app.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hmModules/apps/lutris/app.nix b/hmModules/apps/lutris/app.nix index aa78d39..775e15e 100644 --- a/hmModules/apps/lutris/app.nix +++ b/hmModules/apps/lutris/app.nix @@ -8,7 +8,7 @@ config = lib.mkIf config.lutris.enable { home.packages = with pkgs; [ lutris - wineWowPackages.stable + wineWow64Packages.stable # (lutris.override { # extraLibraries = pkgs: [ # # List library dependencies here From a88471e240130bfbccf0747f946e82adfd8884cd Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 12 Mar 2026 10:52:52 -0700 Subject: [PATCH 408/412] Lutris, switch to wineWow64 from wineWow --- hmModules/apps/lutris/app.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hmModules/apps/lutris/app.nix b/hmModules/apps/lutris/app.nix index aa78d39..775e15e 100644 --- a/hmModules/apps/lutris/app.nix +++ b/hmModules/apps/lutris/app.nix @@ -8,7 +8,7 @@ config = lib.mkIf config.lutris.enable { home.packages = with pkgs; [ lutris - wineWowPackages.stable + wineWow64Packages.stable # (lutris.override { # extraLibraries = pkgs: [ # # List library dependencies here From f6fe4ec23f53a60bfa351d06756033c94b44b260 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 12 Mar 2026 10:53:05 -0700 Subject: [PATCH 409/412] Onizuka, remove timers and lutris --- users/onizuka/default.nix | 4 ---- 1 file changed, 4 deletions(-) diff --git a/users/onizuka/default.nix b/users/onizuka/default.nix index ade362c..4d47697 100644 --- a/users/onizuka/default.nix +++ b/users/onizuka/default.nix @@ -38,8 +38,6 @@ }; }; - timer.enableHourly = true; - timer.enableQuarterly = true; colors.enable = true; manpages.enable = true; trash.enable = true; @@ -94,6 +92,4 @@ gimp.enable = true; discord.enable = true; - - lutris.enable = true; } From db037407cd3f8c67d669589949bb8efa31c2ec6c Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Thu, 12 Mar 2026 10:53:05 -0700 Subject: [PATCH 410/412] Onizuka, remove timers and lutris --- users/onizuka/default.nix | 4 ---- 1 file changed, 4 deletions(-) diff --git a/users/onizuka/default.nix b/users/onizuka/default.nix index ade362c..4d47697 100644 --- a/users/onizuka/default.nix +++ b/users/onizuka/default.nix @@ -38,8 +38,6 @@ }; }; - timer.enableHourly = true; - timer.enableQuarterly = true; colors.enable = true; manpages.enable = true; trash.enable = true; @@ -94,6 +92,4 @@ gimp.enable = true; discord.enable = true; - - lutris.enable = true; } From 62c682cdc3ef8cba37f8ded8780847ad667da8e1 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 18 Mar 2026 11:25:02 -0700 Subject: [PATCH 411/412] Flake update 2026-03-18 --- flake.lock | 62 ++++++++++++------------- nixosModules/services/caddy/service.nix | 2 +- 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/flake.lock b/flake.lock index 23c561f..eca4d1b 100644 --- a/flake.lock +++ b/flake.lock @@ -22,11 +22,11 @@ ] }, "locked": { - "lastModified": 1769996383, - "narHash": "sha256-AnYjnFWgS49RlqX7LrC4uA+sCCDBj0Ry/WOJ5XWAsa0=", + "lastModified": 1772408722, + "narHash": "sha256-rHuJtdcOjK7rAHpHphUb1iCvgkU3GpfvicLMwwnfMT0=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "57928607ea566b5db3ad13af0e57e921e6b12381", + "rev": "f20dc5d9b8027381c474144ecabc9034d6a839a3", "type": "github" }, "original": { @@ -63,11 +63,11 @@ ] }, "locked": { - "lastModified": 1770654520, - "narHash": "sha256-mg5WZMIPGsFu9MxSrUcuJUPMbfMsF77el5yb/7rc10k=", + "lastModified": 1773810247, + "narHash": "sha256-6Vz1Thy/1s7z+Rq5OfkWOBAdV4eD+OrvDs10yH6xJzQ=", "owner": "nix-community", "repo": "home-manager", - "rev": "6c4fdbe1ad198fac36c320fd45c5957324a80b8e", + "rev": "d47357a4c806d18a3e853ad2699eaec3c01622e7", "type": "github" }, "original": { @@ -88,11 +88,11 @@ "xwayland-satellite-unstable": "xwayland-satellite-unstable" }, "locked": { - "lastModified": 1770620836, - "narHash": "sha256-HPoMvo/EqIr6xDDRlk6DGZYdu1Hte7lGLZaGZ5017Uc=", + "lastModified": 1773848336, + "narHash": "sha256-fWAuQtxkD6j6KP7xtUgJZzVfRYLxhTJ1DeBG4vAFO7Q=", "owner": "sodiboo", "repo": "niri-flake", - "rev": "ff1edce403a67cfac7bf1038d348f2ef457ac691", + "rev": "ea96ac8a3effd1eb372f57b782c857d391c48439", "type": "github" }, "original": { @@ -121,11 +121,11 @@ "niri-unstable": { "flake": false, "locked": { - "lastModified": 1770394959, - "narHash": "sha256-if7bIsomdceIufOhkFwN74rFY/pLCWPynRxGyol2viQ=", + "lastModified": 1773130184, + "narHash": "sha256-3bwx4WqCB06yfQIGB+OgIckOkEDyKxiTD5pOo4Xz2rI=", "owner": "YaLTeR", "repo": "niri", - "rev": "ab47f5cec4c1c5758afeb91c0c98554ffd3433db", + "rev": "b07bde3ee82dd73115e6b949e4f3f63695da35ea", "type": "github" }, "original": { @@ -136,11 +136,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1770537093, - "narHash": "sha256-XV30uo8tXuxdzuV8l3sojmlPRLd/8tpMsOp4lNzLGUo=", - "rev": "fef9403a3e4d31b0a23f0bacebbec52c248fbb51", + "lastModified": 1773628058, + "narHash": "sha256-YgVQzPaKa5eVf/rGA5Rn7BWJcP0T98JkE+2KuKVTyzA=", + "rev": "f8573b9c935cfaa162dd62cc9e75ae2db86f85df", "type": "tarball", - "url": "https://releases.nixos.org/nixpkgs/nixpkgs-26.05pre942631.fef9403a3e4d/nixexprs.tar.xz" + "url": "https://releases.nixos.org/nixpkgs/nixpkgs-26.05pre963857.f8573b9c935c/nixexprs.tar.xz" }, "original": { "type": "tarball", @@ -149,11 +149,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1770464364, - "narHash": "sha256-z5NJPSBwsLf/OfD8WTmh79tlSU8XgIbwmk6qB1/TFzY=", + "lastModified": 1773814637, + "narHash": "sha256-GNU+ooRmrHLfjlMsKdn0prEKVa0faVanm0jrgu1J/gY=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "23d72dabcb3b12469f57b37170fcbc1789bd7457", + "rev": "fea3b367d61c1a6592bc47c72f40a9f3e6a53e96", "type": "github" }, "original": { @@ -172,11 +172,11 @@ "systems": "systems" }, "locked": { - "lastModified": 1770630823, - "narHash": "sha256-5SEmOnJ61vmbap39vzWEsCX5UQ+3Ul8J4mXWKdqSn3w=", + "lastModified": 1772402258, + "narHash": "sha256-3DmCFOdmbkFML1/G9gj8Wb+rCCZFPOQtNoMCpqOF8SA=", "owner": "nix-community", "repo": "nixvim", - "rev": "6acc964664ac916c64fe4e394edd467af4d90790", + "rev": "21ae25e13b01d3b4cdc750b5f9e7bad68b150c10", "type": "github" }, "original": { @@ -204,11 +204,11 @@ ] }, "locked": { - "lastModified": 1769900466, - "narHash": "sha256-WeoJBj/PhqFCCJEIycTipqPbKm5BpQT2uzFTYcYZ30I=", + "lastModified": 1771956684, + "narHash": "sha256-+EtzmEzGA2xqwIvKrP0euYaOzrmTQWEWAiWV+k2WBEM=", "owner": "uiriansan", "repo": "SilentSDDM", - "rev": "a44caf771b4cb72f5c2514f7d488455b0fa860d2", + "rev": "34f82e1fb8412fff78b82a0dcce763492b36054c", "type": "github" }, "original": { @@ -224,11 +224,11 @@ ] }, "locked": { - "lastModified": 1770683991, - "narHash": "sha256-xVfPvXDf9QN3Eh9dV+Lw6IkWG42KSuQ1u2260HKvpnc=", + "lastModified": 1773698643, + "narHash": "sha256-VCiDjE8kNs8uCAK73Ezk1r3fFuc4JepvW07YFqaN968=", "owner": "Mic92", "repo": "sops-nix", - "rev": "8b89f44c2cc4581e402111d928869fe7ba9f7033", + "rev": "8237de83e8200d16fe0c4467b02a1c608ff28044", "type": "github" }, "original": { @@ -272,11 +272,11 @@ "xwayland-satellite-unstable": { "flake": false, "locked": { - "lastModified": 1770583271, - "narHash": "sha256-Q75S8cEqJoZ92s1y4zArvk2U1ayAy2E4SaF7gbNXkYQ=", + "lastModified": 1773622265, + "narHash": "sha256-wToKwH7IgWdGLMSIWksEDs4eumR6UbbsuPQ42r0oTXQ=", "owner": "Supreeeme", "repo": "xwayland-satellite", - "rev": "86f5bd5d867ad6e120935dfe825f6b903ebbeddd", + "rev": "a879e5e0896a326adc79c474bf457b8b99011027", "type": "github" }, "original": { diff --git a/nixosModules/services/caddy/service.nix b/nixosModules/services/caddy/service.nix index eaf0965..c954c61 100644 --- a/nixosModules/services/caddy/service.nix +++ b/nixosModules/services/caddy/service.nix @@ -20,7 +20,7 @@ ''; package = pkgs.caddy.withPlugins { plugins = [ "github.com/caddy-dns/porkbun@v0.3.1" ]; - hash = "sha256-NlZY/EEY9TbqrMAkSHK2aGm5AjFTvpvBXV1GW1PnXCc="; + hash = "sha256-cM9ez2i9ZADbXSI7KNZlBCe1F1vpX5fH++qKILaHguA="; }; virtualHosts = config.caddy.vhosts; email = config.caddy.adminEmail; From dc0d90de4532db70660c1d328676efb1d217bd33 Mon Sep 17 00:00:00 2001 From: Julia Lange Date: Wed, 18 Mar 2026 11:25:02 -0700 Subject: [PATCH 412/412] Flake update 2026-03-18 --- flake.lock | 62 ++++++++++++------------- nixosModules/services/caddy/service.nix | 2 +- 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/flake.lock b/flake.lock index 23c561f..eca4d1b 100644 --- a/flake.lock +++ b/flake.lock @@ -22,11 +22,11 @@ ] }, "locked": { - "lastModified": 1769996383, - "narHash": "sha256-AnYjnFWgS49RlqX7LrC4uA+sCCDBj0Ry/WOJ5XWAsa0=", + "lastModified": 1772408722, + "narHash": "sha256-rHuJtdcOjK7rAHpHphUb1iCvgkU3GpfvicLMwwnfMT0=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "57928607ea566b5db3ad13af0e57e921e6b12381", + "rev": "f20dc5d9b8027381c474144ecabc9034d6a839a3", "type": "github" }, "original": { @@ -63,11 +63,11 @@ ] }, "locked": { - "lastModified": 1770654520, - "narHash": "sha256-mg5WZMIPGsFu9MxSrUcuJUPMbfMsF77el5yb/7rc10k=", + "lastModified": 1773810247, + "narHash": "sha256-6Vz1Thy/1s7z+Rq5OfkWOBAdV4eD+OrvDs10yH6xJzQ=", "owner": "nix-community", "repo": "home-manager", - "rev": "6c4fdbe1ad198fac36c320fd45c5957324a80b8e", + "rev": "d47357a4c806d18a3e853ad2699eaec3c01622e7", "type": "github" }, "original": { @@ -88,11 +88,11 @@ "xwayland-satellite-unstable": "xwayland-satellite-unstable" }, "locked": { - "lastModified": 1770620836, - "narHash": "sha256-HPoMvo/EqIr6xDDRlk6DGZYdu1Hte7lGLZaGZ5017Uc=", + "lastModified": 1773848336, + "narHash": "sha256-fWAuQtxkD6j6KP7xtUgJZzVfRYLxhTJ1DeBG4vAFO7Q=", "owner": "sodiboo", "repo": "niri-flake", - "rev": "ff1edce403a67cfac7bf1038d348f2ef457ac691", + "rev": "ea96ac8a3effd1eb372f57b782c857d391c48439", "type": "github" }, "original": { @@ -121,11 +121,11 @@ "niri-unstable": { "flake": false, "locked": { - "lastModified": 1770394959, - "narHash": "sha256-if7bIsomdceIufOhkFwN74rFY/pLCWPynRxGyol2viQ=", + "lastModified": 1773130184, + "narHash": "sha256-3bwx4WqCB06yfQIGB+OgIckOkEDyKxiTD5pOo4Xz2rI=", "owner": "YaLTeR", "repo": "niri", - "rev": "ab47f5cec4c1c5758afeb91c0c98554ffd3433db", + "rev": "b07bde3ee82dd73115e6b949e4f3f63695da35ea", "type": "github" }, "original": { @@ -136,11 +136,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1770537093, - "narHash": "sha256-XV30uo8tXuxdzuV8l3sojmlPRLd/8tpMsOp4lNzLGUo=", - "rev": "fef9403a3e4d31b0a23f0bacebbec52c248fbb51", + "lastModified": 1773628058, + "narHash": "sha256-YgVQzPaKa5eVf/rGA5Rn7BWJcP0T98JkE+2KuKVTyzA=", + "rev": "f8573b9c935cfaa162dd62cc9e75ae2db86f85df", "type": "tarball", - "url": "https://releases.nixos.org/nixpkgs/nixpkgs-26.05pre942631.fef9403a3e4d/nixexprs.tar.xz" + "url": "https://releases.nixos.org/nixpkgs/nixpkgs-26.05pre963857.f8573b9c935c/nixexprs.tar.xz" }, "original": { "type": "tarball", @@ -149,11 +149,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1770464364, - "narHash": "sha256-z5NJPSBwsLf/OfD8WTmh79tlSU8XgIbwmk6qB1/TFzY=", + "lastModified": 1773814637, + "narHash": "sha256-GNU+ooRmrHLfjlMsKdn0prEKVa0faVanm0jrgu1J/gY=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "23d72dabcb3b12469f57b37170fcbc1789bd7457", + "rev": "fea3b367d61c1a6592bc47c72f40a9f3e6a53e96", "type": "github" }, "original": { @@ -172,11 +172,11 @@ "systems": "systems" }, "locked": { - "lastModified": 1770630823, - "narHash": "sha256-5SEmOnJ61vmbap39vzWEsCX5UQ+3Ul8J4mXWKdqSn3w=", + "lastModified": 1772402258, + "narHash": "sha256-3DmCFOdmbkFML1/G9gj8Wb+rCCZFPOQtNoMCpqOF8SA=", "owner": "nix-community", "repo": "nixvim", - "rev": "6acc964664ac916c64fe4e394edd467af4d90790", + "rev": "21ae25e13b01d3b4cdc750b5f9e7bad68b150c10", "type": "github" }, "original": { @@ -204,11 +204,11 @@ ] }, "locked": { - "lastModified": 1769900466, - "narHash": "sha256-WeoJBj/PhqFCCJEIycTipqPbKm5BpQT2uzFTYcYZ30I=", + "lastModified": 1771956684, + "narHash": "sha256-+EtzmEzGA2xqwIvKrP0euYaOzrmTQWEWAiWV+k2WBEM=", "owner": "uiriansan", "repo": "SilentSDDM", - "rev": "a44caf771b4cb72f5c2514f7d488455b0fa860d2", + "rev": "34f82e1fb8412fff78b82a0dcce763492b36054c", "type": "github" }, "original": { @@ -224,11 +224,11 @@ ] }, "locked": { - "lastModified": 1770683991, - "narHash": "sha256-xVfPvXDf9QN3Eh9dV+Lw6IkWG42KSuQ1u2260HKvpnc=", + "lastModified": 1773698643, + "narHash": "sha256-VCiDjE8kNs8uCAK73Ezk1r3fFuc4JepvW07YFqaN968=", "owner": "Mic92", "repo": "sops-nix", - "rev": "8b89f44c2cc4581e402111d928869fe7ba9f7033", + "rev": "8237de83e8200d16fe0c4467b02a1c608ff28044", "type": "github" }, "original": { @@ -272,11 +272,11 @@ "xwayland-satellite-unstable": { "flake": false, "locked": { - "lastModified": 1770583271, - "narHash": "sha256-Q75S8cEqJoZ92s1y4zArvk2U1ayAy2E4SaF7gbNXkYQ=", + "lastModified": 1773622265, + "narHash": "sha256-wToKwH7IgWdGLMSIWksEDs4eumR6UbbsuPQ42r0oTXQ=", "owner": "Supreeeme", "repo": "xwayland-satellite", - "rev": "86f5bd5d867ad6e120935dfe825f6b903ebbeddd", + "rev": "a879e5e0896a326adc79c474bf457b8b99011027", "type": "github" }, "original": { diff --git a/nixosModules/services/caddy/service.nix b/nixosModules/services/caddy/service.nix index eaf0965..c954c61 100644 --- a/nixosModules/services/caddy/service.nix +++ b/nixosModules/services/caddy/service.nix @@ -20,7 +20,7 @@ ''; package = pkgs.caddy.withPlugins { plugins = [ "github.com/caddy-dns/porkbun@v0.3.1" ]; - hash = "sha256-NlZY/EEY9TbqrMAkSHK2aGm5AjFTvpvBXV1GW1PnXCc="; + hash = "sha256-cM9ez2i9ZADbXSI7KNZlBCe1F1vpX5fH++qKILaHguA="; }; virtualHosts = config.caddy.vhosts; email = config.caddy.adminEmail;

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 Date: Tue, 27 Feb 2024 20:47:08 -0800 Subject: [PATCH 068/412] Add chime to timer --- services/timers/default.nix | 4 ++-- services/timers/scripts/chimes.ogg | Bin 0 -> 262412 bytes services/timers/scripts/notify-time.sh | 3 +++ 3 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 services/timers/scripts/chimes.ogg diff --git a/services/timers/default.nix b/services/timers/default.nix index e47f3c9..8eb16b7 100644 --- a/services/timers/default.nix +++ b/services/timers/default.nix @@ -30,7 +30,7 @@ let rootPath = ./.; in }; Service = { Type="simple"; - ExecStart="/home/pan/.config/timer_scripts/notify-time.sh 60000"; + ExecStart="/home/pan/.config/timer_scripts/notify-time.sh 60000 1"; }; }; quarterly-time = { @@ -40,7 +40,7 @@ let rootPath = ./.; in }; Service = { Type="simple"; - ExecStart="/home/pan/.config/timer_scripts/notify-time.sh 10000"; + ExecStart="/home/pan/.config/timer_scripts/notify-time.sh 10000 0"; }; }; }; diff --git a/services/timers/scripts/chimes.ogg b/services/timers/scripts/chimes.ogg new file mode 100644 index 0000000000000000000000000000000000000000..bd716d057e920a7b2738d07d386f9b48cc1a1bc8 GIT binary patch literal 262412 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