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 'docker-mailserver-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-rofi-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-waybar-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'iwd-configuration 'scheme-indent-function 0))
|
||||
(eval . (put 'jellyfin-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)
|
||||
#:use-module (guix gexp)
|
||||
#:use-module (guix records)
|
||||
#:use-module (guix utils)
|
||||
#:use-module (rosenthal utils file)
|
||||
#:use-module (rosenthal utils packages)
|
||||
|
||||
#:use-module (gnu system)
|
||||
#:use-module (gnu system shadow)
|
||||
|
||||
#:use-module (gnu services)
|
||||
#:use-module (gnu services base)
|
||||
#:use-module (gnu services desktop)
|
||||
#:use-module (gnu services sddm)
|
||||
#:use-module (gnu services xorg)
|
||||
#: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
|
||||
#:optional (system (or (%current-target-system)
|
||||
@ -22,7 +484,7 @@
|
||||
gdm-service-type
|
||||
sddm-service-type))
|
||||
|
||||
(define %font
|
||||
(define %term-font
|
||||
(file-append (spec->pkg "font-terminus") "/share/consolefonts/ter-132n"))
|
||||
|
||||
(cons* (service greetd-service-type
|
||||
@ -44,6 +506,12 @@
|
||||
(command #~(getenv "SHELL"))))))))))
|
||||
(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
|
||||
(screen-locker-configuration
|
||||
(name "swaylock")
|
||||
@ -55,16 +523,43 @@
|
||||
(program (plain-file "empty" "")) ;Not used.
|
||||
(using-setuid? #f)))
|
||||
|
||||
;; Add udev rules for backlight control.
|
||||
(simple-service 'backlight udev-service-type (specs->pkgs "light"))
|
||||
|
||||
(modify-services %desktop-services
|
||||
(delete mingetty-service-type)
|
||||
(delete %display-manager-service-type)
|
||||
(delete screen-locker-service-type)
|
||||
|
||||
;; Use a font suitable for HiDPI monitors.
|
||||
(console-font-service-type
|
||||
_ => (map (lambda (num)
|
||||
(cons (string-append "tty" (number->string num))
|
||||
%font))
|
||||
%term-font))
|
||||
(iota 6 1))))))
|
||||
|
||||
(define-syntax %rosenthal-desktop-services
|
||||
(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