mirror of
https://codeberg.org/hako/Rosenthal.git
synced 2025-07-08 17:35:21 +00:00
Compare commits
2 Commits
b084fdae98
...
6a9c5289d0
Author | SHA1 | Date | |
---|---|---|---|
|
6a9c5289d0 | ||
|
20c9d408bc |
@ -52,9 +52,17 @@
|
|||||||
(eval . (put 'cuirass-worker-container-configuration 'scheme-indent-function 0))
|
(eval . (put 'cuirass-worker-container-configuration 'scheme-indent-function 0))
|
||||||
(eval . (put 'docker-mailserver-configuration 'scheme-indent-function 0))
|
(eval . (put 'docker-mailserver-configuration 'scheme-indent-function 0))
|
||||||
(eval . (put 'forgejo-configuration 'scheme-indent-function 0))
|
(eval . (put 'forgejo-configuration 'scheme-indent-function 0))
|
||||||
|
(eval . (put 'home-blueman-applet-configuration 'scheme-indent-function 0))
|
||||||
|
(eval . (put 'home-fcitx5-configuration 'scheme-indent-function 0))
|
||||||
|
(eval . (put 'home-mako-configuration 'scheme-indent-function 0))
|
||||||
|
(eval . (put 'home-network-manager-applet-configuration 'scheme-indent-function 0))
|
||||||
|
(eval . (put 'home-niri-configuration 'scheme-indent-function 0))
|
||||||
(eval . (put 'home-qbittorrent-service-type 'scheme-indent-function 0))
|
(eval . (put 'home-qbittorrent-service-type 'scheme-indent-function 0))
|
||||||
|
(eval . (put 'home-rofi-configuration 'scheme-indent-function 0))
|
||||||
(eval . (put 'home-socks2http-configuration 'scheme-indent-function 0))
|
(eval . (put 'home-socks2http-configuration 'scheme-indent-function 0))
|
||||||
|
(eval . (put 'home-swaybg-configuration 'scheme-indent-function 0))
|
||||||
(eval . (put 'home-wakapi-configuration 'scheme-indent-function 0))
|
(eval . (put 'home-wakapi-configuration 'scheme-indent-function 0))
|
||||||
|
(eval . (put 'home-waybar-configuration 'scheme-indent-function 0))
|
||||||
(eval . (put 'iwd-configuration 'scheme-indent-function 0))
|
(eval . (put 'iwd-configuration 'scheme-indent-function 0))
|
||||||
(eval . (put 'jellyfin-configuration 'scheme-indent-function 0))
|
(eval . (put 'jellyfin-configuration 'scheme-indent-function 0))
|
||||||
(eval . (put 'komga-configuration 'scheme-indent-function 0))
|
(eval . (put 'komga-configuration 'scheme-indent-function 0))
|
||||||
|
427
LICENSES/CC-BY-SA-4.0.txt
Normal file
427
LICENSES/CC-BY-SA-4.0.txt
Normal file
@ -0,0 +1,427 @@
|
|||||||
|
Attribution-ShareAlike 4.0 International
|
||||||
|
|
||||||
|
=======================================================================
|
||||||
|
|
||||||
|
Creative Commons Corporation ("Creative Commons") is not a law firm and
|
||||||
|
does not provide legal services or legal advice. Distribution of
|
||||||
|
Creative Commons public licenses does not create a lawyer-client or
|
||||||
|
other relationship. Creative Commons makes its licenses and related
|
||||||
|
information available on an "as-is" basis. Creative Commons gives no
|
||||||
|
warranties regarding its licenses, any material licensed under their
|
||||||
|
terms and conditions, or any related information. Creative Commons
|
||||||
|
disclaims all liability for damages resulting from their use to the
|
||||||
|
fullest extent possible.
|
||||||
|
|
||||||
|
Using Creative Commons Public Licenses
|
||||||
|
|
||||||
|
Creative Commons public licenses provide a standard set of terms and
|
||||||
|
conditions that creators and other rights holders may use to share
|
||||||
|
original works of authorship and other material subject to copyright
|
||||||
|
and certain other rights specified in the public license below. The
|
||||||
|
following considerations are for informational purposes only, are not
|
||||||
|
exhaustive, and do not form part of our licenses.
|
||||||
|
|
||||||
|
Considerations for licensors: Our public licenses are
|
||||||
|
intended for use by those authorized to give the public
|
||||||
|
permission to use material in ways otherwise restricted by
|
||||||
|
copyright and certain other rights. Our licenses are
|
||||||
|
irrevocable. Licensors should read and understand the terms
|
||||||
|
and conditions of the license they choose before applying it.
|
||||||
|
Licensors should also secure all rights necessary before
|
||||||
|
applying our licenses so that the public can reuse the
|
||||||
|
material as expected. Licensors should clearly mark any
|
||||||
|
material not subject to the license. This includes other CC-
|
||||||
|
licensed material, or material used under an exception or
|
||||||
|
limitation to copyright. More considerations for licensors:
|
||||||
|
wiki.creativecommons.org/Considerations_for_licensors
|
||||||
|
|
||||||
|
Considerations for the public: By using one of our public
|
||||||
|
licenses, a licensor grants the public permission to use the
|
||||||
|
licensed material under specified terms and conditions. If
|
||||||
|
the licensor's permission is not necessary for any reason--for
|
||||||
|
example, because of any applicable exception or limitation to
|
||||||
|
copyright--then that use is not regulated by the license. Our
|
||||||
|
licenses grant only permissions under copyright and certain
|
||||||
|
other rights that a licensor has authority to grant. Use of
|
||||||
|
the licensed material may still be restricted for other
|
||||||
|
reasons, including because others have copyright or other
|
||||||
|
rights in the material. A licensor may make special requests,
|
||||||
|
such as asking that all changes be marked or described.
|
||||||
|
Although not required by our licenses, you are encouraged to
|
||||||
|
respect those requests where reasonable. More considerations
|
||||||
|
for the public:
|
||||||
|
wiki.creativecommons.org/Considerations_for_licensees
|
||||||
|
|
||||||
|
=======================================================================
|
||||||
|
|
||||||
|
Creative Commons Attribution-ShareAlike 4.0 International Public
|
||||||
|
License
|
||||||
|
|
||||||
|
By exercising the Licensed Rights (defined below), You accept and agree
|
||||||
|
to be bound by the terms and conditions of this Creative Commons
|
||||||
|
Attribution-ShareAlike 4.0 International Public License ("Public
|
||||||
|
License"). To the extent this Public License may be interpreted as a
|
||||||
|
contract, You are granted the Licensed Rights in consideration of Your
|
||||||
|
acceptance of these terms and conditions, and the Licensor grants You
|
||||||
|
such rights in consideration of benefits the Licensor receives from
|
||||||
|
making the Licensed Material available under these terms and
|
||||||
|
conditions.
|
||||||
|
|
||||||
|
|
||||||
|
Section 1 -- Definitions.
|
||||||
|
|
||||||
|
a. Adapted Material means material subject to Copyright and Similar
|
||||||
|
Rights that is derived from or based upon the Licensed Material
|
||||||
|
and in which the Licensed Material is translated, altered,
|
||||||
|
arranged, transformed, or otherwise modified in a manner requiring
|
||||||
|
permission under the Copyright and Similar Rights held by the
|
||||||
|
Licensor. For purposes of this Public License, where the Licensed
|
||||||
|
Material is a musical work, performance, or sound recording,
|
||||||
|
Adapted Material is always produced where the Licensed Material is
|
||||||
|
synched in timed relation with a moving image.
|
||||||
|
|
||||||
|
b. Adapter's License means the license You apply to Your Copyright
|
||||||
|
and Similar Rights in Your contributions to Adapted Material in
|
||||||
|
accordance with the terms and conditions of this Public License.
|
||||||
|
|
||||||
|
c. BY-SA Compatible License means a license listed at
|
||||||
|
creativecommons.org/compatiblelicenses, approved by Creative
|
||||||
|
Commons as essentially the equivalent of this Public License.
|
||||||
|
|
||||||
|
d. Copyright and Similar Rights means copyright and/or similar rights
|
||||||
|
closely related to copyright including, without limitation,
|
||||||
|
performance, broadcast, sound recording, and Sui Generis Database
|
||||||
|
Rights, without regard to how the rights are labeled or
|
||||||
|
categorized. For purposes of this Public License, the rights
|
||||||
|
specified in Section 2(b)(1)-(2) are not Copyright and Similar
|
||||||
|
Rights.
|
||||||
|
|
||||||
|
e. Effective Technological Measures means those measures that, in the
|
||||||
|
absence of proper authority, may not be circumvented under laws
|
||||||
|
fulfilling obligations under Article 11 of the WIPO Copyright
|
||||||
|
Treaty adopted on December 20, 1996, and/or similar international
|
||||||
|
agreements.
|
||||||
|
|
||||||
|
f. Exceptions and Limitations means fair use, fair dealing, and/or
|
||||||
|
any other exception or limitation to Copyright and Similar Rights
|
||||||
|
that applies to Your use of the Licensed Material.
|
||||||
|
|
||||||
|
g. License Elements means the license attributes listed in the name
|
||||||
|
of a Creative Commons Public License. The License Elements of this
|
||||||
|
Public License are Attribution and ShareAlike.
|
||||||
|
|
||||||
|
h. Licensed Material means the artistic or literary work, database,
|
||||||
|
or other material to which the Licensor applied this Public
|
||||||
|
License.
|
||||||
|
|
||||||
|
i. Licensed Rights means the rights granted to You subject to the
|
||||||
|
terms and conditions of this Public License, which are limited to
|
||||||
|
all Copyright and Similar Rights that apply to Your use of the
|
||||||
|
Licensed Material and that the Licensor has authority to license.
|
||||||
|
|
||||||
|
j. Licensor means the individual(s) or entity(ies) granting rights
|
||||||
|
under this Public License.
|
||||||
|
|
||||||
|
k. Share means to provide material to the public by any means or
|
||||||
|
process that requires permission under the Licensed Rights, such
|
||||||
|
as reproduction, public display, public performance, distribution,
|
||||||
|
dissemination, communication, or importation, and to make material
|
||||||
|
available to the public including in ways that members of the
|
||||||
|
public may access the material from a place and at a time
|
||||||
|
individually chosen by them.
|
||||||
|
|
||||||
|
l. Sui Generis Database Rights means rights other than copyright
|
||||||
|
resulting from Directive 96/9/EC of the European Parliament and of
|
||||||
|
the Council of 11 March 1996 on the legal protection of databases,
|
||||||
|
as amended and/or succeeded, as well as other essentially
|
||||||
|
equivalent rights anywhere in the world.
|
||||||
|
|
||||||
|
m. You means the individual or entity exercising the Licensed Rights
|
||||||
|
under this Public License. Your has a corresponding meaning.
|
||||||
|
|
||||||
|
|
||||||
|
Section 2 -- Scope.
|
||||||
|
|
||||||
|
a. License grant.
|
||||||
|
|
||||||
|
1. Subject to the terms and conditions of this Public License,
|
||||||
|
the Licensor hereby grants You a worldwide, royalty-free,
|
||||||
|
non-sublicensable, non-exclusive, irrevocable license to
|
||||||
|
exercise the Licensed Rights in the Licensed Material to:
|
||||||
|
|
||||||
|
a. reproduce and Share the Licensed Material, in whole or
|
||||||
|
in part; and
|
||||||
|
|
||||||
|
b. produce, reproduce, and Share Adapted Material.
|
||||||
|
|
||||||
|
2. Exceptions and Limitations. For the avoidance of doubt, where
|
||||||
|
Exceptions and Limitations apply to Your use, this Public
|
||||||
|
License does not apply, and You do not need to comply with
|
||||||
|
its terms and conditions.
|
||||||
|
|
||||||
|
3. Term. The term of this Public License is specified in Section
|
||||||
|
6(a).
|
||||||
|
|
||||||
|
4. Media and formats; technical modifications allowed. The
|
||||||
|
Licensor authorizes You to exercise the Licensed Rights in
|
||||||
|
all media and formats whether now known or hereafter created,
|
||||||
|
and to make technical modifications necessary to do so. The
|
||||||
|
Licensor waives and/or agrees not to assert any right or
|
||||||
|
authority to forbid You from making technical modifications
|
||||||
|
necessary to exercise the Licensed Rights, including
|
||||||
|
technical modifications necessary to circumvent Effective
|
||||||
|
Technological Measures. For purposes of this Public License,
|
||||||
|
simply making modifications authorized by this Section 2(a)
|
||||||
|
(4) never produces Adapted Material.
|
||||||
|
|
||||||
|
5. Downstream recipients.
|
||||||
|
|
||||||
|
a. Offer from the Licensor -- Licensed Material. Every
|
||||||
|
recipient of the Licensed Material automatically
|
||||||
|
receives an offer from the Licensor to exercise the
|
||||||
|
Licensed Rights under the terms and conditions of this
|
||||||
|
Public License.
|
||||||
|
|
||||||
|
b. Additional offer from the Licensor -- Adapted Material.
|
||||||
|
Every recipient of Adapted Material from You
|
||||||
|
automatically receives an offer from the Licensor to
|
||||||
|
exercise the Licensed Rights in the Adapted Material
|
||||||
|
under the conditions of the Adapter's License You apply.
|
||||||
|
|
||||||
|
c. No downstream restrictions. You may not offer or impose
|
||||||
|
any additional or different terms or conditions on, or
|
||||||
|
apply any Effective Technological Measures to, the
|
||||||
|
Licensed Material if doing so restricts exercise of the
|
||||||
|
Licensed Rights by any recipient of the Licensed
|
||||||
|
Material.
|
||||||
|
|
||||||
|
6. No endorsement. Nothing in this Public License constitutes or
|
||||||
|
may be construed as permission to assert or imply that You
|
||||||
|
are, or that Your use of the Licensed Material is, connected
|
||||||
|
with, or sponsored, endorsed, or granted official status by,
|
||||||
|
the Licensor or others designated to receive attribution as
|
||||||
|
provided in Section 3(a)(1)(A)(i).
|
||||||
|
|
||||||
|
b. Other rights.
|
||||||
|
|
||||||
|
1. Moral rights, such as the right of integrity, are not
|
||||||
|
licensed under this Public License, nor are publicity,
|
||||||
|
privacy, and/or other similar personality rights; however, to
|
||||||
|
the extent possible, the Licensor waives and/or agrees not to
|
||||||
|
assert any such rights held by the Licensor to the limited
|
||||||
|
extent necessary to allow You to exercise the Licensed
|
||||||
|
Rights, but not otherwise.
|
||||||
|
|
||||||
|
2. Patent and trademark rights are not licensed under this
|
||||||
|
Public License.
|
||||||
|
|
||||||
|
3. To the extent possible, the Licensor waives any right to
|
||||||
|
collect royalties from You for the exercise of the Licensed
|
||||||
|
Rights, whether directly or through a collecting society
|
||||||
|
under any voluntary or waivable statutory or compulsory
|
||||||
|
licensing scheme. In all other cases the Licensor expressly
|
||||||
|
reserves any right to collect such royalties.
|
||||||
|
|
||||||
|
|
||||||
|
Section 3 -- License Conditions.
|
||||||
|
|
||||||
|
Your exercise of the Licensed Rights is expressly made subject to the
|
||||||
|
following conditions.
|
||||||
|
|
||||||
|
a. Attribution.
|
||||||
|
|
||||||
|
1. If You Share the Licensed Material (including in modified
|
||||||
|
form), You must:
|
||||||
|
|
||||||
|
a. retain the following if it is supplied by the Licensor
|
||||||
|
with the Licensed Material:
|
||||||
|
|
||||||
|
i. identification of the creator(s) of the Licensed
|
||||||
|
Material and any others designated to receive
|
||||||
|
attribution, in any reasonable manner requested by
|
||||||
|
the Licensor (including by pseudonym if
|
||||||
|
designated);
|
||||||
|
|
||||||
|
ii. a copyright notice;
|
||||||
|
|
||||||
|
iii. a notice that refers to this Public License;
|
||||||
|
|
||||||
|
iv. a notice that refers to the disclaimer of
|
||||||
|
warranties;
|
||||||
|
|
||||||
|
v. a URI or hyperlink to the Licensed Material to the
|
||||||
|
extent reasonably practicable;
|
||||||
|
|
||||||
|
b. indicate if You modified the Licensed Material and
|
||||||
|
retain an indication of any previous modifications; and
|
||||||
|
|
||||||
|
c. indicate the Licensed Material is licensed under this
|
||||||
|
Public License, and include the text of, or the URI or
|
||||||
|
hyperlink to, this Public License.
|
||||||
|
|
||||||
|
2. You may satisfy the conditions in Section 3(a)(1) in any
|
||||||
|
reasonable manner based on the medium, means, and context in
|
||||||
|
which You Share the Licensed Material. For example, it may be
|
||||||
|
reasonable to satisfy the conditions by providing a URI or
|
||||||
|
hyperlink to a resource that includes the required
|
||||||
|
information.
|
||||||
|
|
||||||
|
3. If requested by the Licensor, You must remove any of the
|
||||||
|
information required by Section 3(a)(1)(A) to the extent
|
||||||
|
reasonably practicable.
|
||||||
|
|
||||||
|
b. ShareAlike.
|
||||||
|
|
||||||
|
In addition to the conditions in Section 3(a), if You Share
|
||||||
|
Adapted Material You produce, the following conditions also apply.
|
||||||
|
|
||||||
|
1. The Adapter's License You apply must be a Creative Commons
|
||||||
|
license with the same License Elements, this version or
|
||||||
|
later, or a BY-SA Compatible License.
|
||||||
|
|
||||||
|
2. You must include the text of, or the URI or hyperlink to, the
|
||||||
|
Adapter's License You apply. You may satisfy this condition
|
||||||
|
in any reasonable manner based on the medium, means, and
|
||||||
|
context in which You Share Adapted Material.
|
||||||
|
|
||||||
|
3. You may not offer or impose any additional or different terms
|
||||||
|
or conditions on, or apply any Effective Technological
|
||||||
|
Measures to, Adapted Material that restrict exercise of the
|
||||||
|
rights granted under the Adapter's License You apply.
|
||||||
|
|
||||||
|
|
||||||
|
Section 4 -- Sui Generis Database Rights.
|
||||||
|
|
||||||
|
Where the Licensed Rights include Sui Generis Database Rights that
|
||||||
|
apply to Your use of the Licensed Material:
|
||||||
|
|
||||||
|
a. for the avoidance of doubt, Section 2(a)(1) grants You the right
|
||||||
|
to extract, reuse, reproduce, and Share all or a substantial
|
||||||
|
portion of the contents of the database;
|
||||||
|
|
||||||
|
b. if You include all or a substantial portion of the database
|
||||||
|
contents in a database in which You have Sui Generis Database
|
||||||
|
Rights, then the database in which You have Sui Generis Database
|
||||||
|
Rights (but not its individual contents) is Adapted Material,
|
||||||
|
including for purposes of Section 3(b); and
|
||||||
|
|
||||||
|
c. You must comply with the conditions in Section 3(a) if You Share
|
||||||
|
all or a substantial portion of the contents of the database.
|
||||||
|
|
||||||
|
For the avoidance of doubt, this Section 4 supplements and does not
|
||||||
|
replace Your obligations under this Public License where the Licensed
|
||||||
|
Rights include other Copyright and Similar Rights.
|
||||||
|
|
||||||
|
|
||||||
|
Section 5 -- Disclaimer of Warranties and Limitation of Liability.
|
||||||
|
|
||||||
|
a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
|
||||||
|
EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
|
||||||
|
AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
|
||||||
|
ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
|
||||||
|
IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
|
||||||
|
WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||||
|
PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
|
||||||
|
ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
|
||||||
|
KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
|
||||||
|
ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
|
||||||
|
|
||||||
|
b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
|
||||||
|
TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
|
||||||
|
NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
|
||||||
|
INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
|
||||||
|
COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
|
||||||
|
USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
|
||||||
|
ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
|
||||||
|
DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
|
||||||
|
IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
|
||||||
|
|
||||||
|
c. The disclaimer of warranties and limitation of liability provided
|
||||||
|
above shall be interpreted in a manner that, to the extent
|
||||||
|
possible, most closely approximates an absolute disclaimer and
|
||||||
|
waiver of all liability.
|
||||||
|
|
||||||
|
|
||||||
|
Section 6 -- Term and Termination.
|
||||||
|
|
||||||
|
a. This Public License applies for the term of the Copyright and
|
||||||
|
Similar Rights licensed here. However, if You fail to comply with
|
||||||
|
this Public License, then Your rights under this Public License
|
||||||
|
terminate automatically.
|
||||||
|
|
||||||
|
b. Where Your right to use the Licensed Material has terminated under
|
||||||
|
Section 6(a), it reinstates:
|
||||||
|
|
||||||
|
1. automatically as of the date the violation is cured, provided
|
||||||
|
it is cured within 30 days of Your discovery of the
|
||||||
|
violation; or
|
||||||
|
|
||||||
|
2. upon express reinstatement by the Licensor.
|
||||||
|
|
||||||
|
For the avoidance of doubt, this Section 6(b) does not affect any
|
||||||
|
right the Licensor may have to seek remedies for Your violations
|
||||||
|
of this Public License.
|
||||||
|
|
||||||
|
c. For the avoidance of doubt, the Licensor may also offer the
|
||||||
|
Licensed Material under separate terms or conditions or stop
|
||||||
|
distributing the Licensed Material at any time; however, doing so
|
||||||
|
will not terminate this Public License.
|
||||||
|
|
||||||
|
d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
|
||||||
|
License.
|
||||||
|
|
||||||
|
|
||||||
|
Section 7 -- Other Terms and Conditions.
|
||||||
|
|
||||||
|
a. The Licensor shall not be bound by any additional or different
|
||||||
|
terms or conditions communicated by You unless expressly agreed.
|
||||||
|
|
||||||
|
b. Any arrangements, understandings, or agreements regarding the
|
||||||
|
Licensed Material not stated herein are separate from and
|
||||||
|
independent of the terms and conditions of this Public License.
|
||||||
|
|
||||||
|
|
||||||
|
Section 8 -- Interpretation.
|
||||||
|
|
||||||
|
a. For the avoidance of doubt, this Public License does not, and
|
||||||
|
shall not be interpreted to, reduce, limit, restrict, or impose
|
||||||
|
conditions on any use of the Licensed Material that could lawfully
|
||||||
|
be made without permission under this Public License.
|
||||||
|
|
||||||
|
b. To the extent possible, if any provision of this Public License is
|
||||||
|
deemed unenforceable, it shall be automatically reformed to the
|
||||||
|
minimum extent necessary to make it enforceable. If the provision
|
||||||
|
cannot be reformed, it shall be severed from this Public License
|
||||||
|
without affecting the enforceability of the remaining terms and
|
||||||
|
conditions.
|
||||||
|
|
||||||
|
c. No term or condition of this Public License will be waived and no
|
||||||
|
failure to comply consented to unless expressly agreed to by the
|
||||||
|
Licensor.
|
||||||
|
|
||||||
|
d. Nothing in this Public License constitutes or may be interpreted
|
||||||
|
as a limitation upon, or waiver of, any privileges and immunities
|
||||||
|
that apply to the Licensor or You, including from the legal
|
||||||
|
processes of any jurisdiction or authority.
|
||||||
|
|
||||||
|
|
||||||
|
=======================================================================
|
||||||
|
|
||||||
|
Creative Commons is not a party to its public
|
||||||
|
licenses. Notwithstanding, Creative Commons may elect to apply one of
|
||||||
|
its public licenses to material it publishes and in those instances
|
||||||
|
will be considered the “Licensor.” The text of the Creative Commons
|
||||||
|
public licenses is dedicated to the public domain under the CC0 Public
|
||||||
|
Domain Dedication. Except for the limited purpose of indicating that
|
||||||
|
material is shared under a Creative Commons public license or as
|
||||||
|
otherwise permitted by the Creative Commons policies published at
|
||||||
|
creativecommons.org/policies, Creative Commons does not authorize the
|
||||||
|
use of the trademark "Creative Commons" or any other trademark or logo
|
||||||
|
of Creative Commons without its prior written consent including,
|
||||||
|
without limitation, in connection with any unauthorized modifications
|
||||||
|
to any of its public licenses or any other arrangements,
|
||||||
|
understandings, or agreements concerning use of licensed material. For
|
||||||
|
the avoidance of doubt, this paragraph does not form part of the
|
||||||
|
public licenses.
|
||||||
|
|
||||||
|
Creative Commons may be contacted at creativecommons.org.
|
69
modules/rosenthal/examples/emacs/fonts.el
Normal file
69
modules/rosenthal/examples/emacs/fonts.el
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
;; SPDX-FileCopyrightText: DogLooksGood <doglooksgood@hotmail.com>
|
||||||
|
;; SPDX-FileCopyrightText: 2022 Nyk Ma <i@nyk.ma>
|
||||||
|
;;
|
||||||
|
;; SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
;; https://github.com/DogLooksGood/meomacs/blob/master/laf.org
|
||||||
|
;; https://github.com/nykma/nema/blob/develop/my-sample/font.el
|
||||||
|
|
||||||
|
(defvar nema--font-size 12 "Font size")
|
||||||
|
(defvar nema-fonts '((mono . "monospace")
|
||||||
|
(sans . "sans")
|
||||||
|
(serif . "serif")
|
||||||
|
(cjk . "Noto Serif CJK SC")
|
||||||
|
(symbol . "Noto Color Emoji")
|
||||||
|
(modeline . "Source Serif 4"))
|
||||||
|
"Fonts to use.")
|
||||||
|
|
||||||
|
(defun nema//get-font-family (key)
|
||||||
|
(alist-get key nema-fonts))
|
||||||
|
|
||||||
|
(defun nema//generate-font-spec (key)
|
||||||
|
(format "%s-%d"
|
||||||
|
(nema//get-font-family key)
|
||||||
|
nema--font-size))
|
||||||
|
|
||||||
|
(defun nema//load-base-font ()
|
||||||
|
"Load the default font for ascii characters."
|
||||||
|
(let* ((font-spec (nema//generate-font-spec 'mono)))
|
||||||
|
(set-frame-parameter nil 'font font-spec)
|
||||||
|
(add-to-list 'default-frame-alist (cons 'font font-spec))))
|
||||||
|
|
||||||
|
(defun nema//load-face-font ()
|
||||||
|
"Load fonts used in faces.
|
||||||
|
|
||||||
|
This function must be called after frame creation."
|
||||||
|
(let ((mono (nema//generate-font-spec 'mono))
|
||||||
|
(sans (nema//generate-font-spec 'sans))
|
||||||
|
(serif (nema//generate-font-spec 'sans-serif))
|
||||||
|
(modeline (nema//generate-font-spec 'modeline)))
|
||||||
|
(set-face-attribute 'variable-pitch nil :font sans)
|
||||||
|
(set-face-attribute 'variable-pitch-text nil :font serif)
|
||||||
|
(set-face-attribute 'fixed-pitch nil :font mono)
|
||||||
|
(set-face-attribute 'fixed-pitch-serif nil :font mono)
|
||||||
|
(set-face-attribute 'mode-line nil :font modeline)
|
||||||
|
(set-face-attribute 'mode-line-inactive nil :font modeline)))
|
||||||
|
|
||||||
|
(defun nema//load-ext-font ()
|
||||||
|
"Load fonts used for non-ascii characters.
|
||||||
|
|
||||||
|
This function must be called after frame creation."
|
||||||
|
(let ((font (frame-parameter nil 'font))
|
||||||
|
(font-spec-cjk (font-spec :family (nema//get-font-family 'cjk)))
|
||||||
|
(font-spec-symbol (font-spec :family (nema//get-font-family 'symbol))))
|
||||||
|
(dolist (charset '(kana han hangul cjk-misc bopomofo))
|
||||||
|
(set-fontset-font font charset font-spec-cjk))
|
||||||
|
(set-fontset-font font 'symbol font-spec-symbol)))
|
||||||
|
|
||||||
|
(defun nema/load-font ()
|
||||||
|
"Load all font configuration."
|
||||||
|
(interactive)
|
||||||
|
(when (display-graphic-p)
|
||||||
|
(nema//load-base-font)
|
||||||
|
(nema//load-ext-font)
|
||||||
|
(nema//load-face-font)))
|
||||||
|
|
||||||
|
(if (daemonp)
|
||||||
|
(add-hook 'server-after-make-frame-hook #'nema/load-font)
|
||||||
|
;; Else: not in daemon
|
||||||
|
(add-hook 'after-init-hook #'nema/load-font))
|
179
modules/rosenthal/examples/emacs/init.el
Normal file
179
modules/rosenthal/examples/emacs/init.el
Normal file
@ -0,0 +1,179 @@
|
|||||||
|
;;; -*- lexical-binding: t -*-
|
||||||
|
;;; SPDX-FileCopyrightText: 2025 Hilton Chain <hako@ultrarare.space>
|
||||||
|
;;;
|
||||||
|
;;; SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
;;;
|
||||||
|
;;; Init
|
||||||
|
;;;
|
||||||
|
|
||||||
|
(use-package emacs
|
||||||
|
:custom
|
||||||
|
(blink-cursor-mode nil)
|
||||||
|
(browse-url-firefox-program "librewolf")
|
||||||
|
(completion-ignore-case t)
|
||||||
|
(enable-recursive-minibuffers t)
|
||||||
|
(fringe-mode 0)
|
||||||
|
(global-completion-preview-mode t)
|
||||||
|
(indent-tabs-mode nil)
|
||||||
|
(pixel-scroll-precision-mode t)
|
||||||
|
(read-buffer-completion-ignore-case t)
|
||||||
|
(read-extended-command-predicate 'command-completion-default-include-p)
|
||||||
|
(read-file-name-completion-ignore-case t)
|
||||||
|
(scroll-bar-mode nil)
|
||||||
|
(shell-file-name "/bin/sh")
|
||||||
|
(tool-bar-mode nil)
|
||||||
|
(tooltip-mode nil)
|
||||||
|
(word-wrap-by-category t)
|
||||||
|
(modus-themes-italic-constructs t)
|
||||||
|
:init
|
||||||
|
(setopt custom-file (locate-user-emacs-file "custom.el"))
|
||||||
|
(if (not (file-exists-p custom-file))
|
||||||
|
(make-empty-file custom-file)
|
||||||
|
(load custom-file))
|
||||||
|
(gcmh-mode 1)
|
||||||
|
(no-littering-theme-backups)
|
||||||
|
(load-file (locate-user-emacs-file "fonts.el"))
|
||||||
|
:config
|
||||||
|
(setopt electric-indent-inhibit t)
|
||||||
|
:hook
|
||||||
|
((after-init . electric-pair-mode)
|
||||||
|
(after-init . menu-bar-mode)
|
||||||
|
(after-init . minibuffer-depth-indicate-mode)
|
||||||
|
(after-init . savehist-mode)
|
||||||
|
(before-save . delete-trailing-whitespace)
|
||||||
|
(prog-mode . display-fill-column-indicator-mode))
|
||||||
|
:bind (([remap list-buffers] . switch-to-buffer)))
|
||||||
|
|
||||||
|
|
||||||
|
;;;
|
||||||
|
;;; Interface
|
||||||
|
;;;
|
||||||
|
|
||||||
|
(use-package emacs
|
||||||
|
:custom
|
||||||
|
(modus-themes-italic-constructs t)
|
||||||
|
:config
|
||||||
|
(load-theme 'modus-operandi-tinted :no-confirm))
|
||||||
|
|
||||||
|
(use-package doom-modeline
|
||||||
|
:custom
|
||||||
|
(doom-modeline-icon nil)
|
||||||
|
(doom-modeline-height 18)
|
||||||
|
:hook
|
||||||
|
(after-init . doom-modeline-mode))
|
||||||
|
|
||||||
|
(use-package helpful
|
||||||
|
:bind
|
||||||
|
(([remap describe-function] . helpful-callable)
|
||||||
|
([remap describe-variable] . helpful-variable)
|
||||||
|
([remap describe-key] . helpful-key)
|
||||||
|
([remap describe-command] . helpful-command)
|
||||||
|
([remap describe-symbol] . helpful-symbol)
|
||||||
|
("C-c C-d" . helpful-at-point)))
|
||||||
|
|
||||||
|
(use-package hl-todo
|
||||||
|
:custom
|
||||||
|
(hl-todo-highlight-punctuation ":")
|
||||||
|
:hook
|
||||||
|
(prog-mode . hl-todo-mode))
|
||||||
|
|
||||||
|
(use-package isearch
|
||||||
|
:custom
|
||||||
|
(isearch-lazy-count t)
|
||||||
|
(isearch-wrap-pause 'no-ding)
|
||||||
|
(regexp-search-ring-max 200)
|
||||||
|
(search-ring-max 200))
|
||||||
|
|
||||||
|
(use-package mwim
|
||||||
|
:bind
|
||||||
|
(([remap move-beginning-of-line] . mwim-beginning)
|
||||||
|
([remap move-end-of-line] . mwim-end)))
|
||||||
|
|
||||||
|
(use-package orderless
|
||||||
|
:custom
|
||||||
|
(completion-styles '(orderless basic))
|
||||||
|
(completion-category-overrides '((file (styles basic partial-completion))))
|
||||||
|
(orderless-matching-styles '(orderless-literal orderless-flex orderless-regexp)))
|
||||||
|
|
||||||
|
(use-package paren
|
||||||
|
:custom
|
||||||
|
(show-paren-context-when-offscreen 'overlay)
|
||||||
|
:hook
|
||||||
|
(after-init . show-paren-mode))
|
||||||
|
|
||||||
|
(use-package rainbow-delimiters
|
||||||
|
:hook
|
||||||
|
(prog-mode . rainbow-delimiters-mode))
|
||||||
|
|
||||||
|
(use-package vertico
|
||||||
|
:hook
|
||||||
|
(after-init . vertico-mode))
|
||||||
|
|
||||||
|
(use-package vertico-directory
|
||||||
|
:after (vertico)
|
||||||
|
:bind
|
||||||
|
(:map vertico-map
|
||||||
|
("RET" . vertico-directory-enter)
|
||||||
|
("DEL" . vertico-directory-delete-char)
|
||||||
|
("M-DEL" . vertico-directory-delete-word))
|
||||||
|
:hook
|
||||||
|
(rfn-eshadow-update-overlay . vertico-directory-tidy))
|
||||||
|
|
||||||
|
(use-package which-key
|
||||||
|
:config
|
||||||
|
(which-key-setup-side-window-right-bottom)
|
||||||
|
:hook
|
||||||
|
(after-init . which-key-mode))
|
||||||
|
|
||||||
|
|
||||||
|
;;;
|
||||||
|
;;; Editing
|
||||||
|
;;;
|
||||||
|
|
||||||
|
(use-package macrostep
|
||||||
|
:bind
|
||||||
|
("C-c e" . macrostep-expand))
|
||||||
|
|
||||||
|
(use-package puni
|
||||||
|
:hook
|
||||||
|
((eval-expression-minibuffer-setup nxml-mode prog-mode sgml-mode tex-mode) . puni-mode))
|
||||||
|
|
||||||
|
|
||||||
|
;;;
|
||||||
|
;;; Miscellaneous
|
||||||
|
;;;
|
||||||
|
|
||||||
|
(use-package daemons
|
||||||
|
:custom
|
||||||
|
(daemons-list-fill-frame t))
|
||||||
|
|
||||||
|
(use-package dired
|
||||||
|
:custom
|
||||||
|
(dired-listing-switches
|
||||||
|
"-lv --all --group-directories-first --human-readable")
|
||||||
|
:bind
|
||||||
|
([remap list-directory] . dired))
|
||||||
|
|
||||||
|
(use-package dired-aux
|
||||||
|
:custom
|
||||||
|
(dired-compress-directory-default-suffix ".tar.zst")
|
||||||
|
(dired-create-destination-dirs 'ask)
|
||||||
|
(dired-create-destination-dirs-on-trailing-dirsep t)
|
||||||
|
(dired-vc-rename-file t))
|
||||||
|
|
||||||
|
(use-package envrc
|
||||||
|
:hook
|
||||||
|
(after-init . envrc-global-mode))
|
||||||
|
|
||||||
|
(use-package magit
|
||||||
|
:custom
|
||||||
|
(git-commit-cd-to-toplevel t)
|
||||||
|
:config
|
||||||
|
(add-to-list 'project-switch-commands '(magit-project-status "Magit") t)
|
||||||
|
:bind
|
||||||
|
(:map project-prefix-map
|
||||||
|
("m" . magit-project-status)))
|
||||||
|
|
||||||
|
(use-package forge
|
||||||
|
:after (magit))
|
9
modules/rosenthal/examples/mako.conf
Normal file
9
modules/rosenthal/examples/mako.conf
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
# SPDX-FileCopyrightText: 2025 Hilton Chain <hako@ultrarare.space>
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: CC0-1.0
|
||||||
|
|
||||||
|
background-color=#D2DEE9E0
|
||||||
|
border-color=#D2DEE9
|
||||||
|
text-color=#13181B
|
||||||
|
border-radius=5
|
||||||
|
font=monospace 11
|
584
modules/rosenthal/examples/niri.kdl
Normal file
584
modules/rosenthal/examples/niri.kdl
Normal file
@ -0,0 +1,584 @@
|
|||||||
|
// SPDX-FileCopyrightText: 2023-2025 Ivan Molodetskikh <yalterz@gmail.com>
|
||||||
|
//
|
||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
//
|
||||||
|
// This config is in the KDL format: https://kdl.dev
|
||||||
|
// "/-" comments out the following node.
|
||||||
|
// Check the wiki for a full description of the configuration:
|
||||||
|
// https://github.com/YaLTeR/niri/wiki/Configuration:-Overview
|
||||||
|
|
||||||
|
// Input device configuration.
|
||||||
|
// Find the full list of options on the wiki:
|
||||||
|
// https://github.com/YaLTeR/niri/wiki/Configuration:-Input
|
||||||
|
input {
|
||||||
|
keyboard {
|
||||||
|
repeat-delay 300
|
||||||
|
repeat-rate 30
|
||||||
|
xkb {
|
||||||
|
// You can set rules, model, layout, variant and options.
|
||||||
|
// For more information, see xkeyboard-config(7).
|
||||||
|
|
||||||
|
// For example:
|
||||||
|
// layout "us,ru"
|
||||||
|
// options "grp:win_space_toggle,compose:ralt,ctrl:nocaps"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Next sections include libinput settings.
|
||||||
|
// Omitting settings disables them, or leaves them at their default values.
|
||||||
|
touchpad {
|
||||||
|
// off
|
||||||
|
tap
|
||||||
|
// dwt
|
||||||
|
// dwtp
|
||||||
|
// drag-lock
|
||||||
|
natural-scroll
|
||||||
|
// accel-speed 0.2
|
||||||
|
// accel-profile "flat"
|
||||||
|
// scroll-method "two-finger"
|
||||||
|
// disabled-on-external-mouse
|
||||||
|
}
|
||||||
|
|
||||||
|
mouse {
|
||||||
|
// off
|
||||||
|
// natural-scroll
|
||||||
|
// accel-speed 0.2
|
||||||
|
// accel-profile "flat"
|
||||||
|
// scroll-method "no-scroll"
|
||||||
|
}
|
||||||
|
|
||||||
|
trackpoint {
|
||||||
|
// off
|
||||||
|
// natural-scroll
|
||||||
|
// accel-speed 0.2
|
||||||
|
// accel-profile "flat"
|
||||||
|
// scroll-method "on-button-down"
|
||||||
|
// scroll-button 273
|
||||||
|
// middle-emulation
|
||||||
|
}
|
||||||
|
|
||||||
|
// Uncomment this to make the mouse warp to the center of newly focused windows.
|
||||||
|
// warp-mouse-to-focus
|
||||||
|
|
||||||
|
// Focus windows and outputs automatically when moving the mouse into them.
|
||||||
|
// Setting max-scroll-amount="0%" makes it work only on windows already fully on screen.
|
||||||
|
// focus-follows-mouse max-scroll-amount="0%"
|
||||||
|
}
|
||||||
|
|
||||||
|
// You can configure outputs by their name, which you can find
|
||||||
|
// by running `niri msg outputs` while inside a niri instance.
|
||||||
|
// The built-in laptop monitor is usually called "eDP-1".
|
||||||
|
// Find more information on the wiki:
|
||||||
|
// https://github.com/YaLTeR/niri/wiki/Configuration:-Outputs
|
||||||
|
// Remember to uncomment the node by removing "/-"!
|
||||||
|
/-output "eDP-1" {
|
||||||
|
// Uncomment this line to disable this output.
|
||||||
|
// off
|
||||||
|
|
||||||
|
// Resolution and, optionally, refresh rate of the output.
|
||||||
|
// The format is "<width>x<height>" or "<width>x<height>@<refresh rate>".
|
||||||
|
// If the refresh rate is omitted, niri will pick the highest refresh rate
|
||||||
|
// for the resolution.
|
||||||
|
// If the mode is omitted altogether or is invalid, niri will pick one automatically.
|
||||||
|
// Run `niri msg outputs` while inside a niri instance to list all outputs and their modes.
|
||||||
|
mode "1920x1080@120.030"
|
||||||
|
|
||||||
|
// You can use integer or fractional scale, for example use 1.5 for 150% scale.
|
||||||
|
scale 2
|
||||||
|
|
||||||
|
// Transform allows to rotate the output counter-clockwise, valid values are:
|
||||||
|
// normal, 90, 180, 270, flipped, flipped-90, flipped-180 and flipped-270.
|
||||||
|
transform "normal"
|
||||||
|
|
||||||
|
// Position of the output in the global coordinate space.
|
||||||
|
// This affects directional monitor actions like "focus-monitor-left", and cursor movement.
|
||||||
|
// The cursor can only move between directly adjacent outputs.
|
||||||
|
// Output scale and rotation has to be taken into account for positioning:
|
||||||
|
// outputs are sized in logical, or scaled, pixels.
|
||||||
|
// For example, a 3840×2160 output with scale 2.0 will have a logical size of 1920×1080,
|
||||||
|
// so to put another output directly adjacent to it on the right, set its x to 1920.
|
||||||
|
// If the position is unset or results in an overlap, the output is instead placed
|
||||||
|
// automatically.
|
||||||
|
position x=1280 y=0
|
||||||
|
}
|
||||||
|
|
||||||
|
// Settings that influence how windows are positioned and sized.
|
||||||
|
// Find more information on the wiki:
|
||||||
|
// https://github.com/YaLTeR/niri/wiki/Configuration:-Layout
|
||||||
|
layout {
|
||||||
|
// Set gaps around windows in logical pixels.
|
||||||
|
gaps 16
|
||||||
|
|
||||||
|
// When to center a column when changing focus, options are:
|
||||||
|
// - "never", default behavior, focusing an off-screen column will keep at the left
|
||||||
|
// or right edge of the screen.
|
||||||
|
// - "always", the focused column will always be centered.
|
||||||
|
// - "on-overflow", focusing a column will center it if it doesn't fit
|
||||||
|
// together with the previously focused column.
|
||||||
|
center-focused-column "never"
|
||||||
|
|
||||||
|
// You can customize the widths that "switch-preset-column-width" (Mod+R) toggles between.
|
||||||
|
preset-column-widths {
|
||||||
|
// Proportion sets the width as a fraction of the output width, taking gaps into account.
|
||||||
|
// For example, you can perfectly fit four windows sized "proportion 0.25" on an output.
|
||||||
|
// The default preset widths are 1/3, 1/2 and 2/3 of the output.
|
||||||
|
proportion 0.33333
|
||||||
|
proportion 0.5
|
||||||
|
proportion 0.66667
|
||||||
|
|
||||||
|
// Fixed sets the width in logical pixels exactly.
|
||||||
|
// fixed 1920
|
||||||
|
}
|
||||||
|
|
||||||
|
// You can also customize the heights that "switch-preset-window-height" (Mod+Shift+R) toggles between.
|
||||||
|
// preset-window-heights { }
|
||||||
|
|
||||||
|
// You can change the default width of the new windows.
|
||||||
|
default-column-width { proportion 0.5; }
|
||||||
|
// If you leave the brackets empty, the windows themselves will decide their initial width.
|
||||||
|
// default-column-width {}
|
||||||
|
|
||||||
|
// By default focus ring and border are rendered as a solid background rectangle
|
||||||
|
// behind windows. That is, they will show up through semitransparent windows.
|
||||||
|
// This is because windows using client-side decorations can have an arbitrary shape.
|
||||||
|
//
|
||||||
|
// If you don't like that, you should uncomment `prefer-no-csd` below.
|
||||||
|
// Niri will draw focus ring and border *around* windows that agree to omit their
|
||||||
|
// client-side decorations.
|
||||||
|
//
|
||||||
|
// Alternatively, you can override it with a window rule called
|
||||||
|
// `draw-border-with-background`.
|
||||||
|
|
||||||
|
// You can change how the focus ring looks.
|
||||||
|
focus-ring {
|
||||||
|
// Uncomment this line to disable the focus ring.
|
||||||
|
// off
|
||||||
|
|
||||||
|
// How many logical pixels the ring extends out from the windows.
|
||||||
|
width 4
|
||||||
|
|
||||||
|
// Colors can be set in a variety of ways:
|
||||||
|
// - CSS named colors: "red"
|
||||||
|
// - RGB hex: "#rgb", "#rgba", "#rrggbb", "#rrggbbaa"
|
||||||
|
// - CSS-like notation: "rgb(255, 127, 0)", rgba(), hsl() and a few others.
|
||||||
|
|
||||||
|
// Color of the ring on the active monitor.
|
||||||
|
active-color "#7fc8ff"
|
||||||
|
|
||||||
|
// Color of the ring on inactive monitors.
|
||||||
|
inactive-color "#505050"
|
||||||
|
|
||||||
|
// You can also use gradients. They take precedence over solid colors.
|
||||||
|
// Gradients are rendered the same as CSS linear-gradient(angle, from, to).
|
||||||
|
// The angle is the same as in linear-gradient, and is optional,
|
||||||
|
// defaulting to 180 (top-to-bottom gradient).
|
||||||
|
// You can use any CSS linear-gradient tool on the web to set these up.
|
||||||
|
// Changing the color space is also supported, check the wiki for more info.
|
||||||
|
//
|
||||||
|
// active-gradient from="#80c8ff" to="#bbddff" angle=45
|
||||||
|
|
||||||
|
// You can also color the gradient relative to the entire view
|
||||||
|
// of the workspace, rather than relative to just the window itself.
|
||||||
|
// To do that, set relative-to="workspace-view".
|
||||||
|
//
|
||||||
|
// inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view"
|
||||||
|
}
|
||||||
|
|
||||||
|
// You can also add a border. It's similar to the focus ring, but always visible.
|
||||||
|
border {
|
||||||
|
// The settings are the same as for the focus ring.
|
||||||
|
// If you enable the border, you probably want to disable the focus ring.
|
||||||
|
off
|
||||||
|
|
||||||
|
width 4
|
||||||
|
active-color "#ffc87f"
|
||||||
|
inactive-color "#505050"
|
||||||
|
|
||||||
|
// active-gradient from="#ffbb66" to="#ffc880" angle=45 relative-to="workspace-view"
|
||||||
|
// inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view"
|
||||||
|
}
|
||||||
|
|
||||||
|
// You can enable drop shadows for windows.
|
||||||
|
shadow {
|
||||||
|
// Uncomment the next line to enable shadows.
|
||||||
|
// on
|
||||||
|
|
||||||
|
// By default, the shadow draws only around its window, and not behind it.
|
||||||
|
// Uncomment this setting to make the shadow draw behind its window.
|
||||||
|
//
|
||||||
|
// Note that niri has no way of knowing about the CSD window corner
|
||||||
|
// radius. It has to assume that windows have square corners, leading to
|
||||||
|
// shadow artifacts inside the CSD rounded corners. This setting fixes
|
||||||
|
// those artifacts.
|
||||||
|
//
|
||||||
|
// However, instead you may want to set prefer-no-csd and/or
|
||||||
|
// geometry-corner-radius. Then, niri will know the corner radius and
|
||||||
|
// draw the shadow correctly, without having to draw it behind the
|
||||||
|
// window. These will also remove client-side shadows if the window
|
||||||
|
// draws any.
|
||||||
|
//
|
||||||
|
// draw-behind-window true
|
||||||
|
|
||||||
|
// You can change how shadows look. The values below are in logical
|
||||||
|
// pixels and match the CSS box-shadow properties.
|
||||||
|
|
||||||
|
// Softness controls the shadow blur radius.
|
||||||
|
softness 30
|
||||||
|
|
||||||
|
// Spread expands the shadow.
|
||||||
|
spread 5
|
||||||
|
|
||||||
|
// Offset moves the shadow relative to the window.
|
||||||
|
offset x=0 y=5
|
||||||
|
|
||||||
|
// You can also change the shadow color and opacity.
|
||||||
|
color "#0007"
|
||||||
|
}
|
||||||
|
|
||||||
|
// Struts shrink the area occupied by windows, similarly to layer-shell panels.
|
||||||
|
// You can think of them as a kind of outer gaps. They are set in logical pixels.
|
||||||
|
// Left and right struts will cause the next window to the side to always be visible.
|
||||||
|
// Top and bottom struts will simply add outer gaps in addition to the area occupied by
|
||||||
|
// layer-shell panels and regular gaps.
|
||||||
|
struts {
|
||||||
|
// left 64
|
||||||
|
// right 64
|
||||||
|
// top 64
|
||||||
|
// bottom 64
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add lines like this to spawn processes at startup.
|
||||||
|
// Note that running niri as a session supports xdg-desktop-autostart,
|
||||||
|
// which may be more convenient to use.
|
||||||
|
// See the binds section below for more spawn examples.
|
||||||
|
// spawn-at-startup "alacritty" "-e" "fish"
|
||||||
|
|
||||||
|
// Uncomment this line to ask the clients to omit their client-side decorations if possible.
|
||||||
|
// If the client will specifically ask for CSD, the request will be honored.
|
||||||
|
// Additionally, clients will be informed that they are tiled, removing some client-side rounded corners.
|
||||||
|
// This option will also fix border/focus ring drawing behind some semitransparent windows.
|
||||||
|
// After enabling or disabling this, you need to restart the apps for this to take effect.
|
||||||
|
// prefer-no-csd
|
||||||
|
|
||||||
|
// You can change the path where screenshots are saved.
|
||||||
|
// A ~ at the front will be expanded to the home directory.
|
||||||
|
// The path is formatted with strftime(3) to give you the screenshot date and time.
|
||||||
|
screenshot-path "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png"
|
||||||
|
|
||||||
|
// You can also set this to null to disable saving screenshots to disk.
|
||||||
|
// screenshot-path null
|
||||||
|
|
||||||
|
// Animation settings.
|
||||||
|
// The wiki explains how to configure individual animations:
|
||||||
|
// https://github.com/YaLTeR/niri/wiki/Configuration:-Animations
|
||||||
|
animations {
|
||||||
|
// Uncomment to turn off all animations.
|
||||||
|
// off
|
||||||
|
|
||||||
|
// Slow down all animations by this factor. Values below 1 speed them up instead.
|
||||||
|
// slowdown 3.0
|
||||||
|
}
|
||||||
|
|
||||||
|
// Window rules let you adjust behavior for individual windows.
|
||||||
|
// Find more information on the wiki:
|
||||||
|
// https://github.com/YaLTeR/niri/wiki/Configuration:-Window-Rules
|
||||||
|
|
||||||
|
// Work around WezTerm's initial configure bug
|
||||||
|
// by setting an empty default-column-width.
|
||||||
|
window-rule {
|
||||||
|
// This regular expression is intentionally made as specific as possible,
|
||||||
|
// since this is the default config, and we want no false positives.
|
||||||
|
// You can get away with just app-id="wezterm" if you want.
|
||||||
|
match app-id=r#"^org\.wezfurlong\.wezterm$"#
|
||||||
|
default-column-width {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Open the Firefox picture-in-picture player as floating by default.
|
||||||
|
window-rule {
|
||||||
|
// This app-id regular expression will work for both:
|
||||||
|
// - host Firefox (app-id is "firefox")
|
||||||
|
// - Flatpak Firefox (app-id is "org.mozilla.firefox")
|
||||||
|
match app-id=r#"firefox$"# title="^Picture-in-Picture$"
|
||||||
|
open-floating true
|
||||||
|
}
|
||||||
|
|
||||||
|
// Example: block out two password managers from screen capture.
|
||||||
|
// (This example rule is commented out with a "/-" in front.)
|
||||||
|
/-window-rule {
|
||||||
|
match app-id=r#"^org\.keepassxc\.KeePassXC$"#
|
||||||
|
match app-id=r#"^org\.gnome\.World\.Secrets$"#
|
||||||
|
|
||||||
|
block-out-from "screen-capture"
|
||||||
|
|
||||||
|
// Use this instead if you want them visible on third-party screenshot tools.
|
||||||
|
// block-out-from "screencast"
|
||||||
|
}
|
||||||
|
|
||||||
|
// Example: enable rounded corners for all windows.
|
||||||
|
// (This example rule is commented out with a "/-" in front.)
|
||||||
|
window-rule {
|
||||||
|
geometry-corner-radius 12
|
||||||
|
clip-to-geometry true
|
||||||
|
}
|
||||||
|
|
||||||
|
binds {
|
||||||
|
// Keys consist of modifiers separated by + signs, followed by an XKB key name
|
||||||
|
// in the end. To find an XKB name for a particular key, you may use a program
|
||||||
|
// like wev.
|
||||||
|
//
|
||||||
|
// "Mod" is a special modifier equal to Super when running on a TTY, and to Alt
|
||||||
|
// when running as a winit window.
|
||||||
|
//
|
||||||
|
// Most actions that you can bind here can also be invoked programmatically with
|
||||||
|
// `niri msg action do-something`.
|
||||||
|
|
||||||
|
// Mod-Shift-/, which is usually the same as Mod-?,
|
||||||
|
// shows a list of important hotkeys.
|
||||||
|
Mod+Shift+Slash { show-hotkey-overlay; }
|
||||||
|
|
||||||
|
// Suggested binds for running programs: terminal, app launcher, screen locker.
|
||||||
|
Mod+T { spawn "$$bin/alacritty$$"; }
|
||||||
|
Mod+D { spawn "$$bin/rofi$$" "-show" "drun"; }
|
||||||
|
// Super+Alt+L { spawn "swaylock"; }
|
||||||
|
|
||||||
|
// You can also use a shell. Do this if you need pipes, multiple commands, etc.
|
||||||
|
// Note: the entire command goes as a single argument in the end.
|
||||||
|
// Mod+T { spawn "bash" "-c" "notify-send hello && exec alacritty"; }
|
||||||
|
|
||||||
|
// Example volume keys mappings for PipeWire & WirePlumber.
|
||||||
|
// The allow-when-locked=true property makes them work even when the session is locked.
|
||||||
|
XF86AudioRaiseVolume allow-when-locked=true { spawn "$$bin/wpctl$$" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1+"; }
|
||||||
|
XF86AudioLowerVolume allow-when-locked=true { spawn "$$bin/wpctl$$" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1-"; }
|
||||||
|
XF86AudioMute allow-when-locked=true { spawn "$$bin/wpctl$$" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"; }
|
||||||
|
XF86AudioMicMute allow-when-locked=true { spawn "$$bin/wpctl$$" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle"; }
|
||||||
|
|
||||||
|
// Example brightness key mappings for light.
|
||||||
|
XF86MonBrightnessUp allow-when-locked=true { spawn "$$bin/light$$" "-A" "10"; }
|
||||||
|
XF86MonBrightnessDown allow-when-locked=true { spawn "$$bin/light$$" "-U" "10"; }
|
||||||
|
|
||||||
|
Mod+Q { close-window; }
|
||||||
|
|
||||||
|
Mod+Left { focus-column-left; }
|
||||||
|
Mod+Down { focus-window-down; }
|
||||||
|
Mod+Up { focus-window-up; }
|
||||||
|
Mod+Right { focus-column-right; }
|
||||||
|
Mod+H { focus-column-left; }
|
||||||
|
Mod+J { focus-window-down; }
|
||||||
|
Mod+K { focus-window-up; }
|
||||||
|
Mod+L { focus-column-right; }
|
||||||
|
|
||||||
|
Mod+Ctrl+Left { move-column-left; }
|
||||||
|
Mod+Ctrl+Down { move-window-down; }
|
||||||
|
Mod+Ctrl+Up { move-window-up; }
|
||||||
|
Mod+Ctrl+Right { move-column-right; }
|
||||||
|
Mod+Ctrl+H { move-column-left; }
|
||||||
|
Mod+Ctrl+J { move-window-down; }
|
||||||
|
Mod+Ctrl+K { move-window-up; }
|
||||||
|
Mod+Ctrl+L { move-column-right; }
|
||||||
|
|
||||||
|
// Alternative commands that move across workspaces when reaching
|
||||||
|
// the first or last window in a column.
|
||||||
|
// Mod+J { focus-window-or-workspace-down; }
|
||||||
|
// Mod+K { focus-window-or-workspace-up; }
|
||||||
|
// Mod+Ctrl+J { move-window-down-or-to-workspace-down; }
|
||||||
|
// Mod+Ctrl+K { move-window-up-or-to-workspace-up; }
|
||||||
|
|
||||||
|
Mod+Home { focus-column-first; }
|
||||||
|
Mod+End { focus-column-last; }
|
||||||
|
Mod+Ctrl+Home { move-column-to-first; }
|
||||||
|
Mod+Ctrl+End { move-column-to-last; }
|
||||||
|
|
||||||
|
Mod+Shift+Left { focus-monitor-left; }
|
||||||
|
Mod+Shift+Down { focus-monitor-down; }
|
||||||
|
Mod+Shift+Up { focus-monitor-up; }
|
||||||
|
Mod+Shift+Right { focus-monitor-right; }
|
||||||
|
Mod+Shift+H { focus-monitor-left; }
|
||||||
|
Mod+Shift+J { focus-monitor-down; }
|
||||||
|
Mod+Shift+K { focus-monitor-up; }
|
||||||
|
Mod+Shift+L { focus-monitor-right; }
|
||||||
|
|
||||||
|
Mod+Shift+Ctrl+Left { move-column-to-monitor-left; }
|
||||||
|
Mod+Shift+Ctrl+Down { move-column-to-monitor-down; }
|
||||||
|
Mod+Shift+Ctrl+Up { move-column-to-monitor-up; }
|
||||||
|
Mod+Shift+Ctrl+Right { move-column-to-monitor-right; }
|
||||||
|
Mod+Shift+Ctrl+H { move-column-to-monitor-left; }
|
||||||
|
Mod+Shift+Ctrl+J { move-column-to-monitor-down; }
|
||||||
|
Mod+Shift+Ctrl+K { move-column-to-monitor-up; }
|
||||||
|
Mod+Shift+Ctrl+L { move-column-to-monitor-right; }
|
||||||
|
|
||||||
|
// Alternatively, there are commands to move just a single window:
|
||||||
|
// Mod+Shift+Ctrl+Left { move-window-to-monitor-left; }
|
||||||
|
// ...
|
||||||
|
|
||||||
|
// And you can also move a whole workspace to another monitor:
|
||||||
|
// Mod+Shift+Ctrl+Left { move-workspace-to-monitor-left; }
|
||||||
|
// ...
|
||||||
|
|
||||||
|
Mod+Page_Down { focus-workspace-down; }
|
||||||
|
Mod+Page_Up { focus-workspace-up; }
|
||||||
|
Mod+U { focus-workspace-down; }
|
||||||
|
Mod+I { focus-workspace-up; }
|
||||||
|
Mod+Ctrl+Page_Down { move-column-to-workspace-down; }
|
||||||
|
Mod+Ctrl+Page_Up { move-column-to-workspace-up; }
|
||||||
|
Mod+Ctrl+U { move-column-to-workspace-down; }
|
||||||
|
Mod+Ctrl+I { move-column-to-workspace-up; }
|
||||||
|
|
||||||
|
// Alternatively, there are commands to move just a single window:
|
||||||
|
// Mod+Ctrl+Page_Down { move-window-to-workspace-down; }
|
||||||
|
// ...
|
||||||
|
|
||||||
|
Mod+Shift+Page_Down { move-workspace-down; }
|
||||||
|
Mod+Shift+Page_Up { move-workspace-up; }
|
||||||
|
Mod+Shift+U { move-workspace-down; }
|
||||||
|
Mod+Shift+I { move-workspace-up; }
|
||||||
|
|
||||||
|
// You can bind mouse wheel scroll ticks using the following syntax.
|
||||||
|
// These binds will change direction based on the natural-scroll setting.
|
||||||
|
//
|
||||||
|
// To avoid scrolling through workspaces really fast, you can use
|
||||||
|
// the cooldown-ms property. The bind will be rate-limited to this value.
|
||||||
|
// You can set a cooldown on any bind, but it's most useful for the wheel.
|
||||||
|
Mod+WheelScrollDown cooldown-ms=150 { focus-workspace-down; }
|
||||||
|
Mod+WheelScrollUp cooldown-ms=150 { focus-workspace-up; }
|
||||||
|
Mod+Ctrl+WheelScrollDown cooldown-ms=150 { move-column-to-workspace-down; }
|
||||||
|
Mod+Ctrl+WheelScrollUp cooldown-ms=150 { move-column-to-workspace-up; }
|
||||||
|
|
||||||
|
Mod+WheelScrollRight { focus-column-right; }
|
||||||
|
Mod+WheelScrollLeft { focus-column-left; }
|
||||||
|
Mod+Ctrl+WheelScrollRight { move-column-right; }
|
||||||
|
Mod+Ctrl+WheelScrollLeft { move-column-left; }
|
||||||
|
|
||||||
|
// Usually scrolling up and down with Shift in applications results in
|
||||||
|
// horizontal scrolling; these binds replicate that.
|
||||||
|
Mod+Shift+WheelScrollDown { focus-column-right; }
|
||||||
|
Mod+Shift+WheelScrollUp { focus-column-left; }
|
||||||
|
Mod+Ctrl+Shift+WheelScrollDown { move-column-right; }
|
||||||
|
Mod+Ctrl+Shift+WheelScrollUp { move-column-left; }
|
||||||
|
|
||||||
|
// Similarly, you can bind touchpad scroll "ticks".
|
||||||
|
// Touchpad scrolling is continuous, so for these binds it is split into
|
||||||
|
// discrete intervals.
|
||||||
|
// These binds are also affected by touchpad's natural-scroll, so these
|
||||||
|
// example binds are "inverted", since we have natural-scroll enabled for
|
||||||
|
// touchpads by default.
|
||||||
|
// Mod+TouchpadScrollDown { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.02+"; }
|
||||||
|
// Mod+TouchpadScrollUp { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.02-"; }
|
||||||
|
|
||||||
|
// You can refer to workspaces by index. However, keep in mind that
|
||||||
|
// niri is a dynamic workspace system, so these commands are kind of
|
||||||
|
// "best effort". Trying to refer to a workspace index bigger than
|
||||||
|
// the current workspace count will instead refer to the bottommost
|
||||||
|
// (empty) workspace.
|
||||||
|
//
|
||||||
|
// For example, with 2 workspaces + 1 empty, indices 3, 4, 5 and so on
|
||||||
|
// will all refer to the 3rd workspace.
|
||||||
|
Mod+1 { focus-workspace 1; }
|
||||||
|
Mod+2 { focus-workspace 2; }
|
||||||
|
Mod+3 { focus-workspace 3; }
|
||||||
|
Mod+4 { focus-workspace 4; }
|
||||||
|
Mod+5 { focus-workspace 5; }
|
||||||
|
Mod+6 { focus-workspace 6; }
|
||||||
|
Mod+7 { focus-workspace 7; }
|
||||||
|
Mod+8 { focus-workspace 8; }
|
||||||
|
Mod+9 { focus-workspace 9; }
|
||||||
|
Mod+Ctrl+1 { move-column-to-workspace 1; }
|
||||||
|
Mod+Ctrl+2 { move-column-to-workspace 2; }
|
||||||
|
Mod+Ctrl+3 { move-column-to-workspace 3; }
|
||||||
|
Mod+Ctrl+4 { move-column-to-workspace 4; }
|
||||||
|
Mod+Ctrl+5 { move-column-to-workspace 5; }
|
||||||
|
Mod+Ctrl+6 { move-column-to-workspace 6; }
|
||||||
|
Mod+Ctrl+7 { move-column-to-workspace 7; }
|
||||||
|
Mod+Ctrl+8 { move-column-to-workspace 8; }
|
||||||
|
Mod+Ctrl+9 { move-column-to-workspace 9; }
|
||||||
|
|
||||||
|
// Alternatively, there are commands to move just a single window:
|
||||||
|
// Mod+Ctrl+1 { move-window-to-workspace 1; }
|
||||||
|
|
||||||
|
// Switches focus between the current and the previous workspace.
|
||||||
|
// Mod+Tab { focus-workspace-previous; }
|
||||||
|
|
||||||
|
// The following binds move the focused window in and out of a column.
|
||||||
|
// If the window is alone, they will consume it into the nearby column to the side.
|
||||||
|
// If the window is already in a column, they will expel it out.
|
||||||
|
Mod+BracketLeft { consume-or-expel-window-left; }
|
||||||
|
Mod+BracketRight { consume-or-expel-window-right; }
|
||||||
|
|
||||||
|
// Consume one window from the right to the bottom of the focused column.
|
||||||
|
Mod+Comma { consume-window-into-column; }
|
||||||
|
// Expel the bottom window from the focused column to the right.
|
||||||
|
Mod+Period { expel-window-from-column; }
|
||||||
|
|
||||||
|
Mod+R { switch-preset-column-width; }
|
||||||
|
Mod+Shift+R { switch-preset-window-height; }
|
||||||
|
Mod+Ctrl+R { reset-window-height; }
|
||||||
|
Mod+F { maximize-column; }
|
||||||
|
Mod+Shift+F { fullscreen-window; }
|
||||||
|
|
||||||
|
// Expand the focused column to space not taken up by other fully visible columns.
|
||||||
|
// Makes the column "fill the rest of the space".
|
||||||
|
Mod+Ctrl+F { expand-column-to-available-width; }
|
||||||
|
|
||||||
|
Mod+C { center-column; }
|
||||||
|
|
||||||
|
// Finer width adjustments.
|
||||||
|
// This command can also:
|
||||||
|
// * set width in pixels: "1000"
|
||||||
|
// * adjust width in pixels: "-5" or "+5"
|
||||||
|
// * set width as a percentage of screen width: "25%"
|
||||||
|
// * adjust width as a percentage of screen width: "-10%" or "+10%"
|
||||||
|
// Pixel sizes use logical, or scaled, pixels. I.e. on an output with scale 2.0,
|
||||||
|
// set-column-width "100" will make the column occupy 200 physical screen pixels.
|
||||||
|
Mod+Minus { set-column-width "-10%"; }
|
||||||
|
Mod+Equal { set-column-width "+10%"; }
|
||||||
|
|
||||||
|
// Finer height adjustments when in column with other windows.
|
||||||
|
Mod+Shift+Minus { set-window-height "-10%"; }
|
||||||
|
Mod+Shift+Equal { set-window-height "+10%"; }
|
||||||
|
|
||||||
|
// Move the focused window between the floating and the tiling layout.
|
||||||
|
Mod+V { toggle-window-floating; }
|
||||||
|
Mod+Shift+V { switch-focus-between-floating-and-tiling; }
|
||||||
|
|
||||||
|
// Toggle tabbed column display mode.
|
||||||
|
// Windows in this column will appear as vertical tabs,
|
||||||
|
// rather than stacked on top of each other.
|
||||||
|
Mod+W { toggle-column-tabbed-display; }
|
||||||
|
|
||||||
|
// Actions to switch layouts.
|
||||||
|
// Note: if you uncomment these, make sure you do NOT have
|
||||||
|
// a matching layout switch hotkey configured in xkb options above.
|
||||||
|
// Having both at once on the same hotkey will break the switching,
|
||||||
|
// since it will switch twice upon pressing the hotkey (once by xkb, once by niri).
|
||||||
|
// Mod+Space { switch-layout "next"; }
|
||||||
|
// Mod+Shift+Space { switch-layout "prev"; }
|
||||||
|
|
||||||
|
Print { screenshot; }
|
||||||
|
Ctrl+Print { screenshot-screen; }
|
||||||
|
Alt+Print { screenshot-window; }
|
||||||
|
|
||||||
|
// Applications such as remote-desktop clients and software KVM switches may
|
||||||
|
// request that niri stops processing the keyboard shortcuts defined here
|
||||||
|
// so they may, for example, forward the key presses as-is to a remote machine.
|
||||||
|
// It's a good idea to bind an escape hatch to toggle the inhibitor,
|
||||||
|
// so a buggy application can't hold your session hostage.
|
||||||
|
//
|
||||||
|
// The allow-inhibiting=false property can be applied to other binds as well,
|
||||||
|
// which ensures niri always processes them, even when an inhibitor is active.
|
||||||
|
Mod+Escape allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; }
|
||||||
|
|
||||||
|
// The quit action will show a confirmation dialog to avoid accidental exits.
|
||||||
|
Mod+Shift+E { quit; }
|
||||||
|
Ctrl+Alt+Delete { quit; }
|
||||||
|
|
||||||
|
// Powers off the monitors. To turn them back on, do any input like
|
||||||
|
// moving the mouse or pressing any other key.
|
||||||
|
Mod+Shift+P { power-off-monitors; }
|
||||||
|
}
|
||||||
|
|
||||||
|
prefer-no-csd
|
||||||
|
spawn-at-startup "sh" "-c" "pgrep --uid $USER shepherd > /dev/null || shepherd"
|
||||||
|
spawn-at-startup "$$bin/xwayland-satellite$$" ":233"
|
||||||
|
environment {
|
||||||
|
DISPLAY ":233"
|
||||||
|
}
|
BIN
modules/rosenthal/examples/wallpaper.jpg
Normal file
BIN
modules/rosenthal/examples/wallpaper.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.4 MiB |
107
modules/rosenthal/examples/waybar/config.jsonc
Normal file
107
modules/rosenthal/examples/waybar/config.jsonc
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
// -*- mode: jsonc -*-
|
||||||
|
// SPDX-FileCopyrightText: 2025 Hilton Chain <hako@ultrarare.space>
|
||||||
|
//
|
||||||
|
// SPDX-License-Identifier: CC0-1.0
|
||||||
|
|
||||||
|
{
|
||||||
|
"layer": "top",
|
||||||
|
"spacing": 5,
|
||||||
|
"modules-left": [
|
||||||
|
"niri/workspaces",
|
||||||
|
"cpu",
|
||||||
|
"memory",
|
||||||
|
"temperature",
|
||||||
|
],
|
||||||
|
"modules-center": [
|
||||||
|
"clock",
|
||||||
|
],
|
||||||
|
"modules-right": [
|
||||||
|
"tray",
|
||||||
|
"wireplumber",
|
||||||
|
"backlight",
|
||||||
|
"battery",
|
||||||
|
],
|
||||||
|
// left
|
||||||
|
"niri/workspaces": {
|
||||||
|
"all-outputs": true,
|
||||||
|
"format": "{icon}",
|
||||||
|
"format-icons": {
|
||||||
|
"focused": "\uF055",
|
||||||
|
"active": "\uF192",
|
||||||
|
"default": "\uF111",
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"cpu": {
|
||||||
|
"format": "CPU {usage}%",
|
||||||
|
"states": {
|
||||||
|
"full": 90,
|
||||||
|
},
|
||||||
|
"interval": 2,
|
||||||
|
},
|
||||||
|
"memory": {
|
||||||
|
"format": "RAM {percentage}%",
|
||||||
|
"states": {
|
||||||
|
"full": 90,
|
||||||
|
},
|
||||||
|
"interval": 2,
|
||||||
|
},
|
||||||
|
"temperature": {
|
||||||
|
"critical-threshold": 80,
|
||||||
|
"format": "{temperatureC}\u00B0C",
|
||||||
|
"interval": 2,
|
||||||
|
"tooltip": false,
|
||||||
|
},
|
||||||
|
// center
|
||||||
|
"clock": {
|
||||||
|
"format": "{:%A, %B %d, %Y (%R)}",
|
||||||
|
"tooltip-format": "<tt><small>{calendar}</small></tt>",
|
||||||
|
"calendar": {
|
||||||
|
"mode" : "year",
|
||||||
|
"mode-mon-col" : 3,
|
||||||
|
"weeks-pos" : "right",
|
||||||
|
"on-scroll" : 1,
|
||||||
|
"format": {
|
||||||
|
"months": "<span color='#FFEAD3'><b>{}</b></span>",
|
||||||
|
"days": "<span color='#ECC6D9'><b>{}</b></span>",
|
||||||
|
"weeks": "<span color='#99FFDD'><b>W{}</b></span>",
|
||||||
|
"weekdays": "<span color='#FFCC66'><b>{}</b></span>",
|
||||||
|
"today": "<span color='#FF6699'><b><u>{}</u></b></span>",
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"actions": {
|
||||||
|
"on-click-right": "mode",
|
||||||
|
"on-scroll-up": "tz_up",
|
||||||
|
"on-scroll-down": "tz_down",
|
||||||
|
"on-scroll-up": "shift_up",
|
||||||
|
"on-scroll-down": "shift_down",
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// right
|
||||||
|
"tray": {
|
||||||
|
"spacing": 10,
|
||||||
|
},
|
||||||
|
"wireplumber": {
|
||||||
|
"scroll-step": 5,
|
||||||
|
"format": "{icon} {volume}%",
|
||||||
|
"format-icons": ["\uF026", "\uF027", "\uF028"],
|
||||||
|
"format-muted": "Muted {volume}%",
|
||||||
|
"on-click": "$$bin/wpctl$$ set-mute @DEFAULT_AUDIO_SINK@ toggle",
|
||||||
|
"on-click-right": "$$bin/pavucontrol$$",
|
||||||
|
},
|
||||||
|
"backlight": {
|
||||||
|
"on-scroll-down": "$$bin/light$$ -U 5",
|
||||||
|
"on-scroll-up": "$$bin/light$$ -A 5",
|
||||||
|
"format": "{icon} {percent}%",
|
||||||
|
"format-icons": ["\uF186", "\uF0EB"],
|
||||||
|
"tooltip": false,
|
||||||
|
},
|
||||||
|
"battery": {
|
||||||
|
"interval": 60,
|
||||||
|
"states": {
|
||||||
|
"warning": 30,
|
||||||
|
"critical": 15,
|
||||||
|
},
|
||||||
|
"format": "{icon} {capacity}%",
|
||||||
|
"format-icons": ["\uF244", "\uF243", "\uF242", "\uF241", "\uF240"],
|
||||||
|
},
|
||||||
|
}
|
135
modules/rosenthal/examples/waybar/style.css
Normal file
135
modules/rosenthal/examples/waybar/style.css
Normal file
@ -0,0 +1,135 @@
|
|||||||
|
/* SPDX-FileCopyrightText: 2025 Hilton Chain <hako@ultrarare.space> */
|
||||||
|
/* SPDX-License-Identifier: CC0-1.0 */
|
||||||
|
|
||||||
|
@define-color bg1 #d2dee9;
|
||||||
|
@define-color bg2 #13181b;
|
||||||
|
|
||||||
|
@define-color red #EC7875;
|
||||||
|
@define-color green #A3BE8C;
|
||||||
|
@define-color blue #75A4CD;
|
||||||
|
|
||||||
|
/* Execute ‘guix shell python-pywal imagemagick -- wal -nstei <image>’, */
|
||||||
|
/* then select colors from ‘~/.cache/wal/colors-waybar.css’. */
|
||||||
|
@define-color color0 #d2dee9;
|
||||||
|
@define-color color1 #B3C6D3;
|
||||||
|
@define-color color2 #97B0C7;
|
||||||
|
@define-color color3 #AFB5AE;
|
||||||
|
@define-color color4 #d2dee9;
|
||||||
|
@define-color color5 #A7BAC9;
|
||||||
|
@define-color color6 #C2C2B5;
|
||||||
|
@define-color color7 #939ba3;
|
||||||
|
|
||||||
|
* {
|
||||||
|
font-family: "Noto Sans";
|
||||||
|
font-size: 1.2rem;
|
||||||
|
background-color: transparent;
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
window {
|
||||||
|
color: @bg2;
|
||||||
|
}
|
||||||
|
|
||||||
|
tooltip {
|
||||||
|
background-color: @bg2;
|
||||||
|
border: 1px solid @bg2;
|
||||||
|
}
|
||||||
|
|
||||||
|
tooltip label {
|
||||||
|
color: @bg1;
|
||||||
|
text-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modules-right {
|
||||||
|
margin: 10px 10px 0 0;
|
||||||
|
}
|
||||||
|
.modules-center {
|
||||||
|
margin: 10px 0 0 0;
|
||||||
|
}
|
||||||
|
.modules-left {
|
||||||
|
margin: 10px 0 0 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#cpu,
|
||||||
|
#memory,
|
||||||
|
#temperature,
|
||||||
|
#clock,
|
||||||
|
#tray,
|
||||||
|
#wireplumber,
|
||||||
|
#backlight,
|
||||||
|
#battery {
|
||||||
|
padding: 0 10px;
|
||||||
|
background-color: @bg1;
|
||||||
|
opacity: 0.95;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button {
|
||||||
|
color: @bg2;
|
||||||
|
padding: 0 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tray menu {
|
||||||
|
color: @bg2;
|
||||||
|
background-color: @bg1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tray menu menuitem:hover {
|
||||||
|
color: @bg1;
|
||||||
|
background-color: @bg2;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tray > .passive {
|
||||||
|
-gtk-icon-effect: dim;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tray > .needs-attention {
|
||||||
|
-gtk-icon-effect: highlight;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tray {
|
||||||
|
background-color: @bg2;
|
||||||
|
}
|
||||||
|
|
||||||
|
#cpu.full,
|
||||||
|
#memory.full,
|
||||||
|
#temperature.critical,
|
||||||
|
#wireplumber.muted,
|
||||||
|
#battery.warning, #battery.critical {
|
||||||
|
background-color: @red;
|
||||||
|
}
|
||||||
|
|
||||||
|
#battery.charging, #battery.plugged {
|
||||||
|
background-color: @green;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces {
|
||||||
|
background-color: @color0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#cpu {
|
||||||
|
background-color: @color1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#memory {
|
||||||
|
background-color: @color2;
|
||||||
|
}
|
||||||
|
|
||||||
|
#temperature {
|
||||||
|
background-color: @color3;
|
||||||
|
}
|
||||||
|
|
||||||
|
#clock {
|
||||||
|
background-color: @color4;
|
||||||
|
}
|
||||||
|
|
||||||
|
#wireplumber {
|
||||||
|
background-color: @color5;
|
||||||
|
}
|
||||||
|
|
||||||
|
#backlight {
|
||||||
|
background-color: @color6;
|
||||||
|
}
|
||||||
|
|
||||||
|
#battery {
|
||||||
|
background-color: @color7;
|
||||||
|
}
|
@ -4,15 +4,477 @@
|
|||||||
|
|
||||||
(define-module (rosenthal services desktop)
|
(define-module (rosenthal services desktop)
|
||||||
#:use-module (guix gexp)
|
#:use-module (guix gexp)
|
||||||
|
#:use-module (guix records)
|
||||||
#:use-module (guix utils)
|
#:use-module (guix utils)
|
||||||
|
#:use-module (rosenthal utils file)
|
||||||
#:use-module (rosenthal utils packages)
|
#:use-module (rosenthal utils packages)
|
||||||
|
|
||||||
|
#:use-module (gnu system)
|
||||||
|
#:use-module (gnu system shadow)
|
||||||
|
|
||||||
#:use-module (gnu services)
|
#:use-module (gnu services)
|
||||||
#:use-module (gnu services base)
|
#:use-module (gnu services base)
|
||||||
#:use-module (gnu services desktop)
|
#:use-module (gnu services desktop)
|
||||||
#:use-module (gnu services sddm)
|
#:use-module (gnu services sddm)
|
||||||
#:use-module (gnu services xorg)
|
#:use-module (gnu services xorg)
|
||||||
#:use-module (rosenthal services base)
|
#:use-module (rosenthal services base)
|
||||||
#:export (%rosenthal-desktop-services))
|
|
||||||
|
#:use-module (gnu home)
|
||||||
|
#:use-module (gnu home services)
|
||||||
|
#:use-module (gnu home services desktop)
|
||||||
|
#:use-module (gnu home services shepherd)
|
||||||
|
#:use-module (gnu home services sound)
|
||||||
|
|
||||||
|
#:use-module (rosenthal packages xorg)
|
||||||
|
|
||||||
|
#:export (%rosenthal-example-emacs-fonts
|
||||||
|
%rosenthal-example-emacs-init
|
||||||
|
|
||||||
|
home-blueman-applet-configuration
|
||||||
|
home-blueman-applet-service-type
|
||||||
|
|
||||||
|
home-fcitx5-configuration
|
||||||
|
home-fcitx5-service-type
|
||||||
|
|
||||||
|
home-mako-configuration
|
||||||
|
home-mako-service-type
|
||||||
|
|
||||||
|
home-network-manager-applet-configuration
|
||||||
|
home-network-manager-applet-service-type
|
||||||
|
|
||||||
|
home-niri-configuration
|
||||||
|
home-niri-service-type
|
||||||
|
|
||||||
|
home-rofi-configuration
|
||||||
|
home-rofi-service-type
|
||||||
|
|
||||||
|
home-swaybg-configuration
|
||||||
|
home-swaybg-service-type
|
||||||
|
|
||||||
|
home-waybar-configuration
|
||||||
|
home-waybar-service-type
|
||||||
|
|
||||||
|
%rosenthal-desktop-services
|
||||||
|
%rosenthal-desktop-home-services))
|
||||||
|
|
||||||
|
|
||||||
|
;;;
|
||||||
|
;;; Configuration file presets.
|
||||||
|
;;;
|
||||||
|
|
||||||
|
(define %rosenthal-example-emacs-fonts
|
||||||
|
(local-file "../examples/emacs/fonts.el"))
|
||||||
|
|
||||||
|
(define %rosenthal-example-emacs-init
|
||||||
|
(local-file "../examples/emacs/init.el"))
|
||||||
|
|
||||||
|
|
||||||
|
;;;
|
||||||
|
;;; Blueman
|
||||||
|
;;;
|
||||||
|
|
||||||
|
(define-record-type* <home-blueman-applet-configuration>
|
||||||
|
home-blueman-applet-configuration
|
||||||
|
make-home-blueman-applet-configuration
|
||||||
|
home-blueman-applet-configuration?
|
||||||
|
this-home-blueman-applet-configuration
|
||||||
|
(blueman home-blueman-applet-configuration-blueman
|
||||||
|
(default (spec->pkg+out "blueman"))))
|
||||||
|
|
||||||
|
(define home-blueman-applet-shepherd-service
|
||||||
|
(match-record-lambda <home-blueman-applet-configuration>
|
||||||
|
(blueman)
|
||||||
|
(list (shepherd-service
|
||||||
|
(documentation "Start blueman applet.")
|
||||||
|
(provision '(blueman-applet))
|
||||||
|
(start
|
||||||
|
#~(make-forkexec-constructor
|
||||||
|
(list #$(file-append blueman "/bin/blueman-applet"))))
|
||||||
|
(stop #~(make-kill-destructor))))))
|
||||||
|
|
||||||
|
(define home-blueman-applet-service-type
|
||||||
|
(service-type
|
||||||
|
(name 'blueman-applet)
|
||||||
|
(extensions
|
||||||
|
(list (service-extension home-profile-service-type
|
||||||
|
(compose list home-blueman-applet-configuration-blueman))
|
||||||
|
(service-extension home-shepherd-service-type
|
||||||
|
home-blueman-applet-shepherd-service)))
|
||||||
|
(default-value (home-blueman-applet-configuration))
|
||||||
|
(description "Run blueman applet, a tray applet for managing bluetooth.")))
|
||||||
|
|
||||||
|
|
||||||
|
;;;
|
||||||
|
;;; Fcitx5
|
||||||
|
;;;
|
||||||
|
|
||||||
|
(define-record-type* <home-fcitx5-configuration>
|
||||||
|
home-fcitx5-configuration
|
||||||
|
make-home-fcitx5-configuration
|
||||||
|
home-fcitx5-configuration?
|
||||||
|
this-home-fcitx5-configuration
|
||||||
|
(fcitx5 home-fcitx5-configuration-fcitx5
|
||||||
|
(default (spec->pkg "fcitx5")))
|
||||||
|
(utilities home-fcitx5-configuration-utilities
|
||||||
|
(default (specs->pkgs "fcitx5-configtool")))
|
||||||
|
(themes home-fcitx5-configuration-themes
|
||||||
|
(default '()))
|
||||||
|
(input-method-editors home-fcitx5-configuration-input-method-editors
|
||||||
|
(default '()))
|
||||||
|
(gtk-im-module? home-fcitx5-configuration-gtk-im-module?
|
||||||
|
(default #f))
|
||||||
|
(qt-im-module? home-fcitx5-configuration-qt-im-module?
|
||||||
|
(default #f))
|
||||||
|
(xim? home-fcitx5-configuration-xim?
|
||||||
|
(default #t))
|
||||||
|
;; Extensions
|
||||||
|
(environment-variables home-fcitx5-configuration-environment-variables
|
||||||
|
(default (%home-fcitx5-environment-variables
|
||||||
|
this-home-fcitx5-configuration))
|
||||||
|
(thunked))
|
||||||
|
(profile home-fcitx5-configuration-profile
|
||||||
|
(default (%home-fcitx5-profile
|
||||||
|
this-home-fcitx5-configuration))
|
||||||
|
(thunked))
|
||||||
|
(shepherd home-fcitx5-configuration-shepherd
|
||||||
|
(default (%home-fcitx5-shepherd
|
||||||
|
this-home-fcitx5-configuration))
|
||||||
|
(thunked)))
|
||||||
|
|
||||||
|
(define %home-fcitx5-environment-variables
|
||||||
|
(match-record-lambda <home-fcitx5-configuration>
|
||||||
|
(gtk-im-module? qt-im-module? xim?)
|
||||||
|
`(,@(if gtk-im-module?
|
||||||
|
'(("GTK_IM_MODULE" . "fcitx"))
|
||||||
|
'())
|
||||||
|
,@(if qt-im-module?
|
||||||
|
'(("QT_IM_MODULE" . "fcitx"))
|
||||||
|
'())
|
||||||
|
,@(if xim?
|
||||||
|
'(("XMODIFIERS" . "@im=fcitx"))
|
||||||
|
'()))))
|
||||||
|
|
||||||
|
(define %home-fcitx5-profile
|
||||||
|
(match-record-lambda <home-fcitx5-configuration>
|
||||||
|
(fcitx5 utilities themes input-method-editors gtk-im-module? qt-im-module?)
|
||||||
|
(append (list fcitx5)
|
||||||
|
utilities
|
||||||
|
themes
|
||||||
|
input-method-editors
|
||||||
|
(if gtk-im-module?
|
||||||
|
(list (spec->pkg "fcitx5-gtk"))
|
||||||
|
'())
|
||||||
|
(if qt-im-module?
|
||||||
|
(list (spec->pkg "fcitx5-qt"))
|
||||||
|
'()))))
|
||||||
|
|
||||||
|
(define %home-fcitx5-shepherd
|
||||||
|
(match-record-lambda <home-fcitx5-configuration>
|
||||||
|
(fcitx5)
|
||||||
|
(list (shepherd-service
|
||||||
|
(documentation "Start fcitx5.")
|
||||||
|
(provision '(fcitx5))
|
||||||
|
(requirement '(dbus))
|
||||||
|
(start
|
||||||
|
#~(make-forkexec-constructor
|
||||||
|
(list #$(file-append fcitx5 "/bin/fcitx5"))))
|
||||||
|
(stop #~(make-kill-destructor))))))
|
||||||
|
|
||||||
|
(define home-fcitx5-service-type
|
||||||
|
(service-type
|
||||||
|
(name 'fcitx5)
|
||||||
|
(extensions
|
||||||
|
(list (service-extension home-environment-variables-service-type
|
||||||
|
home-fcitx5-configuration-environment-variables)
|
||||||
|
(service-extension home-profile-service-type
|
||||||
|
home-fcitx5-configuration-profile)
|
||||||
|
(service-extension home-shepherd-service-type
|
||||||
|
home-fcitx5-configuration-shepherd)))
|
||||||
|
(default-value (home-fcitx5-configuration))
|
||||||
|
(description "Run fcitx5, an input method framework.")))
|
||||||
|
|
||||||
|
|
||||||
|
;;;
|
||||||
|
;;; mako
|
||||||
|
;;;
|
||||||
|
|
||||||
|
(define %rosenthal-example-mako-config
|
||||||
|
(local-file "../examples/mako.conf"))
|
||||||
|
|
||||||
|
(define-record-type* <home-mako-configuration>
|
||||||
|
home-mako-configuration
|
||||||
|
make-home-mako-configuration
|
||||||
|
home-mako-configuration?
|
||||||
|
this-home-mako-configuration
|
||||||
|
(mako home-mako-configuration-mako
|
||||||
|
(default (spec->pkg "mako")))
|
||||||
|
(config home-mako-configuration-config
|
||||||
|
(default %rosenthal-example-mako-config))
|
||||||
|
;; Extensions.
|
||||||
|
(xdg-config home-mako-configuration-xdg-config
|
||||||
|
(default (%home-mako-xdg-config
|
||||||
|
this-home-mako-configuration))
|
||||||
|
(thunked))
|
||||||
|
(shepherd home-mako-configuration-shepherd
|
||||||
|
(default (%home-mako-shepherd
|
||||||
|
this-home-mako-configuration))
|
||||||
|
(thunked)))
|
||||||
|
|
||||||
|
(define %home-mako-xdg-config
|
||||||
|
(match-record-lambda <home-mako-configuration>
|
||||||
|
(config)
|
||||||
|
`(("mako/config" ,config))))
|
||||||
|
|
||||||
|
(define %home-mako-shepherd
|
||||||
|
(match-record-lambda <home-mako-configuration>
|
||||||
|
(mako)
|
||||||
|
(list (shepherd-service
|
||||||
|
(documentation "Start mako.")
|
||||||
|
(provision '(mako))
|
||||||
|
(start
|
||||||
|
#~(make-forkexec-constructor
|
||||||
|
(list #$(file-append mako "/bin/mako"))))
|
||||||
|
(stop #~(make-kill-destructor))))))
|
||||||
|
|
||||||
|
(define home-mako-service-type
|
||||||
|
(service-type
|
||||||
|
(name 'mako)
|
||||||
|
(extensions
|
||||||
|
(list (service-extension home-xdg-configuration-files-service-type
|
||||||
|
home-mako-configuration-xdg-config)
|
||||||
|
(service-extension home-shepherd-service-type
|
||||||
|
home-mako-configuration-shepherd)))
|
||||||
|
(default-value (home-mako-configuration))
|
||||||
|
(description "Run mako, a notification daemon.")))
|
||||||
|
|
||||||
|
|
||||||
|
;;;
|
||||||
|
;;; network-manager-applet
|
||||||
|
;;;
|
||||||
|
|
||||||
|
(define-record-type* <home-network-manager-applet-configuration>
|
||||||
|
home-network-manager-applet-configuration
|
||||||
|
make-home-network-manager-applet-configuration
|
||||||
|
home-network-manager-applet-configuration?
|
||||||
|
this-home-network-manager-applet-configuration
|
||||||
|
(network-manager-applet home-network-manager-applet-configuration-network-manager-applet
|
||||||
|
(default (spec->pkg "network-manager-applet"))))
|
||||||
|
|
||||||
|
(define home-network-manager-applet-shepherd-service
|
||||||
|
(match-record-lambda <home-network-manager-applet-configuration>
|
||||||
|
(network-manager-applet)
|
||||||
|
(list (shepherd-service
|
||||||
|
(documentation "Start network manager applet.")
|
||||||
|
(provision '(network-manager-applet))
|
||||||
|
(start
|
||||||
|
#~(make-forkexec-constructor
|
||||||
|
(list #$(file-append network-manager-applet "/bin/nm-applet"))))
|
||||||
|
(stop #~(make-kill-destructor))))))
|
||||||
|
|
||||||
|
(define home-network-manager-applet-service-type
|
||||||
|
(service-type
|
||||||
|
(name 'network-manager-applet)
|
||||||
|
(extensions
|
||||||
|
(list (service-extension home-profile-service-type
|
||||||
|
(compose list home-network-manager-applet-configuration-network-manager-applet))
|
||||||
|
(service-extension home-shepherd-service-type
|
||||||
|
home-network-manager-applet-shepherd-service)))
|
||||||
|
(default-value (home-network-manager-applet-configuration))
|
||||||
|
(description "Run nm-applet, a tray applet for managing networks.")))
|
||||||
|
|
||||||
|
|
||||||
|
;;;
|
||||||
|
;;; niri
|
||||||
|
;;;
|
||||||
|
|
||||||
|
(define %rosenthal-example-niri-config
|
||||||
|
(computed-substitution-with-inputs "niri.kdl"
|
||||||
|
(local-file "../examples/niri.kdl")
|
||||||
|
(cons xwayland-satellite
|
||||||
|
(specs->pkgs "alacritty"
|
||||||
|
"guix-backgrounds"
|
||||||
|
"light"
|
||||||
|
"rofi-wayland"
|
||||||
|
"wireplumber"))))
|
||||||
|
|
||||||
|
(define-record-type* <home-niri-configuration>
|
||||||
|
home-niri-configuration
|
||||||
|
make-home-niri-configuration
|
||||||
|
home-niri-configuration?
|
||||||
|
this-home-niri-configuration
|
||||||
|
(config home-niri-configuration-config
|
||||||
|
(default %rosenthal-example-niri-config))
|
||||||
|
;; Extension.
|
||||||
|
(xdg-config home-niri-configuration-xdg-config
|
||||||
|
(default (%home-niri-xdg-config
|
||||||
|
this-home-niri-configuration))
|
||||||
|
(thunked)))
|
||||||
|
|
||||||
|
(define %home-niri-xdg-config
|
||||||
|
(match-record-lambda <home-niri-configuration>
|
||||||
|
(config)
|
||||||
|
`(("niri/config.kdl" ,config))))
|
||||||
|
|
||||||
|
(define home-niri-service-type
|
||||||
|
(service-type
|
||||||
|
(name 'niri)
|
||||||
|
(extensions
|
||||||
|
(list (service-extension home-xdg-configuration-files-service-type
|
||||||
|
home-niri-configuration-xdg-config)))
|
||||||
|
(default-value (home-niri-configuration))
|
||||||
|
(description
|
||||||
|
"Set up configuration file for niri, a scrollable-tiling Wayland
|
||||||
|
compositor.")))
|
||||||
|
|
||||||
|
|
||||||
|
;;;
|
||||||
|
;;; rofi
|
||||||
|
;;;
|
||||||
|
|
||||||
|
(define %rosenthal-example-rofi-config
|
||||||
|
(mixed-text-file "rofi.rasi" "\
|
||||||
|
configuration {
|
||||||
|
icon-theme: \"Qogir\";
|
||||||
|
}
|
||||||
|
@theme \"" (spec->pkg "rofi") "/share/rofi/themes/fullscreen-preview.rasi\"\n"))
|
||||||
|
|
||||||
|
|
||||||
|
(define-record-type* <home-rofi-configuration>
|
||||||
|
home-rofi-configuration
|
||||||
|
make-home-rofi-configuration
|
||||||
|
home-rofi-configuration?
|
||||||
|
this-home-rofi-configuration
|
||||||
|
(config home-rofi-configuration-config
|
||||||
|
(default %rosenthal-example-rofi-config))
|
||||||
|
;; Extension.
|
||||||
|
(xdg-config home-rofi-configuration-xdg-config
|
||||||
|
(default (%home-rofi-xdg-config
|
||||||
|
this-home-rofi-configuration))
|
||||||
|
(thunked)))
|
||||||
|
|
||||||
|
(define %home-rofi-xdg-config
|
||||||
|
(match-record-lambda <home-rofi-configuration>
|
||||||
|
(config)
|
||||||
|
`(("rofi/config.rasi" ,config))))
|
||||||
|
|
||||||
|
(define home-rofi-service-type
|
||||||
|
(service-type
|
||||||
|
(name 'rofi)
|
||||||
|
(extensions
|
||||||
|
(list (service-extension home-xdg-configuration-files-service-type
|
||||||
|
home-rofi-configuration-xdg-config)))
|
||||||
|
(default-value (home-rofi-configuration))
|
||||||
|
(description
|
||||||
|
"Set up configuration file for rofi, an application launcher.")))
|
||||||
|
|
||||||
|
|
||||||
|
;;;
|
||||||
|
;;; swaybg
|
||||||
|
;;;
|
||||||
|
|
||||||
|
(define-record-type* <home-swaybg-configuration>
|
||||||
|
home-swaybg-configuration
|
||||||
|
make-home-swaybg-configuration
|
||||||
|
home-swaybg-configuration?
|
||||||
|
this-home-swaybg-configuration
|
||||||
|
(swaybg home-swaybg-configuration-swaybg
|
||||||
|
(default (spec->pkg "swaybg")))
|
||||||
|
(background home-swaybg-configuration-background
|
||||||
|
(default (local-file "../examples/wallpaper.jpg")))
|
||||||
|
;; Extensions.
|
||||||
|
(shepherd home-swaybg-configuration-shepherd
|
||||||
|
(default (%home-swaybg-shepherd
|
||||||
|
this-home-swaybg-configuration))
|
||||||
|
(thunked)))
|
||||||
|
|
||||||
|
(define %home-swaybg-shepherd
|
||||||
|
(match-record-lambda <home-swaybg-configuration>
|
||||||
|
(swaybg background)
|
||||||
|
(list (shepherd-service
|
||||||
|
(documentation "Start swaybg.")
|
||||||
|
(provision '(swaybg))
|
||||||
|
(start
|
||||||
|
#~(make-forkexec-constructor
|
||||||
|
(list #$(file-append swaybg "/bin/swaybg") "--mode" "fill"
|
||||||
|
"--image" #$background)))
|
||||||
|
(stop #~(make-kill-destructor))))))
|
||||||
|
|
||||||
|
(define home-swaybg-service-type
|
||||||
|
(service-type
|
||||||
|
(name 'swaybg)
|
||||||
|
(extensions
|
||||||
|
(list (service-extension home-shepherd-service-type
|
||||||
|
home-swaybg-configuration-shepherd)))
|
||||||
|
(default-value (home-swaybg-configuration))
|
||||||
|
(description
|
||||||
|
"Run swaybg, a screen wallpaper utility for Wayland compositors.")))
|
||||||
|
|
||||||
|
|
||||||
|
;;;
|
||||||
|
;;; waybar
|
||||||
|
;;;
|
||||||
|
|
||||||
|
(define %rosenthal-example-waybar-config
|
||||||
|
(computed-substitution-with-inputs "config.jsonc"
|
||||||
|
(local-file "../examples/waybar/config.jsonc")
|
||||||
|
(specs->pkgs "light" "pavucontrol" "wireplumber")))
|
||||||
|
|
||||||
|
(define %rosenthal-example-waybar-style
|
||||||
|
(local-file "../examples/waybar/style.css"))
|
||||||
|
|
||||||
|
(define-record-type* <home-waybar-configuration>
|
||||||
|
home-waybar-configuration
|
||||||
|
make-home-waybar-configuration
|
||||||
|
home-waybar-configuration?
|
||||||
|
this-home-waybar-configuration
|
||||||
|
(waybar home-waybar-configuration-waybar
|
||||||
|
(default (spec->pkg "waybar")))
|
||||||
|
(config home-waybar-configuration-config
|
||||||
|
(default %rosenthal-example-waybar-config))
|
||||||
|
(style home-waybar-configuration-style
|
||||||
|
(default %rosenthal-example-waybar-style))
|
||||||
|
;; Extensions.
|
||||||
|
(xdg-config home-waybar-configuration-xdg-config
|
||||||
|
(default (%home-waybar-xdg-config
|
||||||
|
this-home-waybar-configuration))
|
||||||
|
(thunked))
|
||||||
|
(shepherd home-waybar-configuration-shepherd
|
||||||
|
(default (%home-waybar-shepherd
|
||||||
|
this-home-waybar-configuration))
|
||||||
|
(thunked)))
|
||||||
|
|
||||||
|
(define %home-waybar-xdg-config
|
||||||
|
(match-record-lambda <home-waybar-configuration>
|
||||||
|
(config style)
|
||||||
|
`(("waybar/config.jsonc" ,config)
|
||||||
|
("waybar/style.css" ,style))))
|
||||||
|
|
||||||
|
(define %home-waybar-shepherd
|
||||||
|
(match-record-lambda <home-waybar-configuration>
|
||||||
|
(waybar)
|
||||||
|
(list (shepherd-service
|
||||||
|
(documentation "Start waybar.")
|
||||||
|
(provision '(waybar))
|
||||||
|
(start
|
||||||
|
#~(make-forkexec-constructor
|
||||||
|
(list #$(file-append waybar "/bin/waybar"))))
|
||||||
|
(stop #~(make-kill-destructor))))))
|
||||||
|
|
||||||
|
(define home-waybar-service-type
|
||||||
|
(service-type
|
||||||
|
(name 'waybar)
|
||||||
|
(extensions
|
||||||
|
(list (service-extension home-xdg-configuration-files-service-type
|
||||||
|
home-waybar-configuration-xdg-config)
|
||||||
|
(service-extension home-shepherd-service-type
|
||||||
|
home-waybar-configuration-shepherd)))
|
||||||
|
(default-value (home-waybar-configuration))
|
||||||
|
(description "Run waybar, a status bar for Wayland compositors.")))
|
||||||
|
|
||||||
|
|
||||||
|
;;;
|
||||||
|
;;; Service presets.
|
||||||
|
;;;
|
||||||
|
|
||||||
(define* (rosenthal-desktop-services-for-system
|
(define* (rosenthal-desktop-services-for-system
|
||||||
#:optional (system (or (%current-target-system)
|
#:optional (system (or (%current-target-system)
|
||||||
@ -22,7 +484,7 @@
|
|||||||
gdm-service-type
|
gdm-service-type
|
||||||
sddm-service-type))
|
sddm-service-type))
|
||||||
|
|
||||||
(define %font
|
(define %term-font
|
||||||
(file-append (spec->pkg "font-terminus") "/share/consolefonts/ter-132n"))
|
(file-append (spec->pkg "font-terminus") "/share/consolefonts/ter-132n"))
|
||||||
|
|
||||||
(cons* (service greetd-service-type
|
(cons* (service greetd-service-type
|
||||||
@ -44,6 +506,12 @@
|
|||||||
(command #~(getenv "SHELL"))))))))))
|
(command #~(getenv "SHELL"))))))))))
|
||||||
(iota 6 1)))))
|
(iota 6 1)))))
|
||||||
|
|
||||||
|
(service bluetooth-service-type
|
||||||
|
(bluetooth-configuration
|
||||||
|
(auto-enable? #t)))
|
||||||
|
|
||||||
|
;; Screen lockers for Wayland environment. No dependencies are pulled
|
||||||
|
;; in since we're using empty files.
|
||||||
(service screen-locker-service-type
|
(service screen-locker-service-type
|
||||||
(screen-locker-configuration
|
(screen-locker-configuration
|
||||||
(name "swaylock")
|
(name "swaylock")
|
||||||
@ -55,16 +523,43 @@
|
|||||||
(program (plain-file "empty" "")) ;Not used.
|
(program (plain-file "empty" "")) ;Not used.
|
||||||
(using-setuid? #f)))
|
(using-setuid? #f)))
|
||||||
|
|
||||||
|
;; Add udev rules for backlight control.
|
||||||
|
(simple-service 'backlight udev-service-type (specs->pkgs "light"))
|
||||||
|
|
||||||
(modify-services %desktop-services
|
(modify-services %desktop-services
|
||||||
(delete mingetty-service-type)
|
(delete mingetty-service-type)
|
||||||
(delete %display-manager-service-type)
|
(delete %display-manager-service-type)
|
||||||
(delete screen-locker-service-type)
|
(delete screen-locker-service-type)
|
||||||
|
|
||||||
|
;; Use a font suitable for HiDPI monitors.
|
||||||
(console-font-service-type
|
(console-font-service-type
|
||||||
_ => (map (lambda (num)
|
_ => (map (lambda (num)
|
||||||
(cons (string-append "tty" (number->string num))
|
(cons (string-append "tty" (number->string num))
|
||||||
%font))
|
%term-font))
|
||||||
(iota 6 1))))))
|
(iota 6 1))))))
|
||||||
|
|
||||||
(define-syntax %rosenthal-desktop-services
|
(define-syntax %rosenthal-desktop-services
|
||||||
(identifier-syntax (rosenthal-desktop-services-for-system)))
|
(identifier-syntax (rosenthal-desktop-services-for-system)))
|
||||||
|
|
||||||
|
(define %rosenthal-desktop-home-services
|
||||||
|
(cons* (service home-files-service-type
|
||||||
|
`((".guile" ,%default-dotguile)))
|
||||||
|
|
||||||
|
(service home-xdg-configuration-files-service-type
|
||||||
|
`(("gdb/gdbinit" ,%default-gdbinit)
|
||||||
|
("nano/nanorc" ,%default-nanorc)))
|
||||||
|
|
||||||
|
(service home-shepherd-service-type
|
||||||
|
(home-shepherd-configuration
|
||||||
|
;; Start by WM to inherit environment variables for graphical session.
|
||||||
|
(auto-start? #f)
|
||||||
|
(daemonize? #f)))
|
||||||
|
|
||||||
|
(service home-dbus-service-type)
|
||||||
|
|
||||||
|
(service home-pipewire-service-type)
|
||||||
|
|
||||||
|
(service home-blueman-applet-service-type)
|
||||||
|
(service home-network-manager-applet-service-type)
|
||||||
|
|
||||||
|
%base-home-services))
|
||||||
|
Loading…
Reference in New Issue
Block a user