Compare commits
6 commits
main
...
add-server
Author | SHA1 | Date | |
---|---|---|---|
b761f7218b | |||
c58816d17a | |||
006daa6ebc | |||
6c75a3644f | |||
d472424a4e | |||
43e754db72 |
79 changed files with 1232 additions and 2871 deletions
696
LICENSE
696
LICENSE
|
@ -1,675 +1,21 @@
|
||||||
GNU GENERAL PUBLIC LICENSE
|
MIT License
|
||||||
Version 3, 29 June 2007
|
|
||||||
|
Copyright (c) 2024 Anthony Rodriguez
|
||||||
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
|
||||||
Everyone is permitted to copy and distribute verbatim copies
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this license document, but changing it is not allowed.
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
Preamble
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
The GNU General Public License is a free, copyleft license for
|
furnished to do so, subject to the following conditions:
|
||||||
software and other kinds of works.
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
The licenses for most software and other practical works are designed
|
copies or substantial portions of the Software.
|
||||||
to take away your freedom to share and change the works. By contrast,
|
|
||||||
the GNU General Public License is intended to guarantee your freedom to
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
share and change all versions of a program--to make sure it remains free
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
software for all its users. We, the Free Software Foundation, use the
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
GNU General Public License for most of our software; it applies also to
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
any other work released this way by its authors. You can apply it to
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
your programs, too.
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
When we speak of free software, we are referring to freedom, not
|
|
||||||
price. Our General Public Licenses are designed to make sure that you
|
|
||||||
have the freedom to distribute copies of free software (and charge for
|
|
||||||
them if you wish), that you receive source code or can get it if you
|
|
||||||
want it, that you can change the software or use pieces of it in new
|
|
||||||
free programs, and that you know you can do these things.
|
|
||||||
|
|
||||||
To protect your rights, we need to prevent others from denying you
|
|
||||||
these rights or asking you to surrender the rights. Therefore, you have
|
|
||||||
certain responsibilities if you distribute copies of the software, or if
|
|
||||||
you modify it: responsibilities to respect the freedom of others.
|
|
||||||
|
|
||||||
For example, if you distribute copies of such a program, whether
|
|
||||||
gratis or for a fee, you must pass on to the recipients the same
|
|
||||||
freedoms that you received. You must make sure that they, too, receive
|
|
||||||
or can get the source code. And you must show them these terms so they
|
|
||||||
know their rights.
|
|
||||||
|
|
||||||
Developers that use the GNU GPL protect your rights with two steps:
|
|
||||||
(1) assert copyright on the software, and (2) offer you this License
|
|
||||||
giving you legal permission to copy, distribute and/or modify it.
|
|
||||||
|
|
||||||
For the developers' and authors' protection, the GPL clearly explains
|
|
||||||
that there is no warranty for this free software. For both users' and
|
|
||||||
authors' sake, the GPL requires that modified versions be marked as
|
|
||||||
changed, so that their problems will not be attributed erroneously to
|
|
||||||
authors of previous versions.
|
|
||||||
|
|
||||||
Some devices are designed to deny users access to install or run
|
|
||||||
modified versions of the software inside them, although the manufacturer
|
|
||||||
can do so. This is fundamentally incompatible with the aim of
|
|
||||||
protecting users' freedom to change the software. The systematic
|
|
||||||
pattern of such abuse occurs in the area of products for individuals to
|
|
||||||
use, which is precisely where it is most unacceptable. Therefore, we
|
|
||||||
have designed this version of the GPL to prohibit the practice for those
|
|
||||||
products. If such problems arise substantially in other domains, we
|
|
||||||
stand ready to extend this provision to those domains in future versions
|
|
||||||
of the GPL, as needed to protect the freedom of users.
|
|
||||||
|
|
||||||
Finally, every program is threatened constantly by software patents.
|
|
||||||
States should not allow patents to restrict development and use of
|
|
||||||
software on general-purpose computers, but in those that do, we wish to
|
|
||||||
avoid the special danger that patents applied to a free program could
|
|
||||||
make it effectively proprietary. To prevent this, the GPL assures that
|
|
||||||
patents cannot be used to render the program non-free.
|
|
||||||
|
|
||||||
The precise terms and conditions for copying, distribution and
|
|
||||||
modification follow.
|
|
||||||
|
|
||||||
TERMS AND CONDITIONS
|
|
||||||
|
|
||||||
0. Definitions.
|
|
||||||
|
|
||||||
"This License" refers to version 3 of the GNU General Public License.
|
|
||||||
|
|
||||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
|
||||||
works, such as semiconductor masks.
|
|
||||||
|
|
||||||
"The Program" refers to any copyrightable work licensed under this
|
|
||||||
License. Each licensee is addressed as "you". "Licensees" and
|
|
||||||
"recipients" may be individuals or organizations.
|
|
||||||
|
|
||||||
To "modify" a work means to copy from or adapt all or part of the work
|
|
||||||
in a fashion requiring copyright permission, other than the making of an
|
|
||||||
exact copy. The resulting work is called a "modified version" of the
|
|
||||||
earlier work or a work "based on" the earlier work.
|
|
||||||
|
|
||||||
A "covered work" means either the unmodified Program or a work based
|
|
||||||
on the Program.
|
|
||||||
|
|
||||||
To "propagate" a work means to do anything with it that, without
|
|
||||||
permission, would make you directly or secondarily liable for
|
|
||||||
infringement under applicable copyright law, except executing it on a
|
|
||||||
computer or modifying a private copy. Propagation includes copying,
|
|
||||||
distribution (with or without modification), making available to the
|
|
||||||
public, and in some countries other activities as well.
|
|
||||||
|
|
||||||
To "convey" a work means any kind of propagation that enables other
|
|
||||||
parties to make or receive copies. Mere interaction with a user through
|
|
||||||
a computer network, with no transfer of a copy, is not conveying.
|
|
||||||
|
|
||||||
An interactive user interface displays "Appropriate Legal Notices"
|
|
||||||
to the extent that it includes a convenient and prominently visible
|
|
||||||
feature that (1) displays an appropriate copyright notice, and (2)
|
|
||||||
tells the user that there is no warranty for the work (except to the
|
|
||||||
extent that warranties are provided), that licensees may convey the
|
|
||||||
work under this License, and how to view a copy of this License. If
|
|
||||||
the interface presents a list of user commands or options, such as a
|
|
||||||
menu, a prominent item in the list meets this criterion.
|
|
||||||
|
|
||||||
1. Source Code.
|
|
||||||
|
|
||||||
The "source code" for a work means the preferred form of the work
|
|
||||||
for making modifications to it. "Object code" means any non-source
|
|
||||||
form of a work.
|
|
||||||
|
|
||||||
A "Standard Interface" means an interface that either is an official
|
|
||||||
standard defined by a recognized standards body, or, in the case of
|
|
||||||
interfaces specified for a particular programming language, one that
|
|
||||||
is widely used among developers working in that language.
|
|
||||||
|
|
||||||
The "System Libraries" of an executable work include anything, other
|
|
||||||
than the work as a whole, that (a) is included in the normal form of
|
|
||||||
packaging a Major Component, but which is not part of that Major
|
|
||||||
Component, and (b) serves only to enable use of the work with that
|
|
||||||
Major Component, or to implement a Standard Interface for which an
|
|
||||||
implementation is available to the public in source code form. A
|
|
||||||
"Major Component", in this context, means a major essential component
|
|
||||||
(kernel, window system, and so on) of the specific operating system
|
|
||||||
(if any) on which the executable work runs, or a compiler used to
|
|
||||||
produce the work, or an object code interpreter used to run it.
|
|
||||||
|
|
||||||
The "Corresponding Source" for a work in object code form means all
|
|
||||||
the source code needed to generate, install, and (for an executable
|
|
||||||
work) run the object code and to modify the work, including scripts to
|
|
||||||
control those activities. However, it does not include the work's
|
|
||||||
System Libraries, or general-purpose tools or generally available free
|
|
||||||
programs which are used unmodified in performing those activities but
|
|
||||||
which are not part of the work. For example, Corresponding Source
|
|
||||||
includes interface definition files associated with source files for
|
|
||||||
the work, and the source code for shared libraries and dynamically
|
|
||||||
linked subprograms that the work is specifically designed to require,
|
|
||||||
such as by intimate data communication or control flow between those
|
|
||||||
subprograms and other parts of the work.
|
|
||||||
|
|
||||||
The Corresponding Source need not include anything that users
|
|
||||||
can regenerate automatically from other parts of the Corresponding
|
|
||||||
Source.
|
|
||||||
|
|
||||||
The Corresponding Source for a work in source code form is that
|
|
||||||
same work.
|
|
||||||
|
|
||||||
2. Basic Permissions.
|
|
||||||
|
|
||||||
All rights granted under this License are granted for the term of
|
|
||||||
copyright on the Program, and are irrevocable provided the stated
|
|
||||||
conditions are met. This License explicitly affirms your unlimited
|
|
||||||
permission to run the unmodified Program. The output from running a
|
|
||||||
covered work is covered by this License only if the output, given its
|
|
||||||
content, constitutes a covered work. This License acknowledges your
|
|
||||||
rights of fair use or other equivalent, as provided by copyright law.
|
|
||||||
|
|
||||||
You may make, run and propagate covered works that you do not
|
|
||||||
convey, without conditions so long as your license otherwise remains
|
|
||||||
in force. You may convey covered works to others for the sole purpose
|
|
||||||
of having them make modifications exclusively for you, or provide you
|
|
||||||
with facilities for running those works, provided that you comply with
|
|
||||||
the terms of this License in conveying all material for which you do
|
|
||||||
not control copyright. Those thus making or running the covered works
|
|
||||||
for you must do so exclusively on your behalf, under your direction
|
|
||||||
and control, on terms that prohibit them from making any copies of
|
|
||||||
your copyrighted material outside their relationship with you.
|
|
||||||
|
|
||||||
Conveying under any other circumstances is permitted solely under
|
|
||||||
the conditions stated below. Sublicensing is not allowed; section 10
|
|
||||||
makes it unnecessary.
|
|
||||||
|
|
||||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
|
||||||
|
|
||||||
No covered work shall be deemed part of an effective technological
|
|
||||||
measure under any applicable law fulfilling obligations under article
|
|
||||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
|
||||||
similar laws prohibiting or restricting circumvention of such
|
|
||||||
measures.
|
|
||||||
|
|
||||||
When you convey a covered work, you waive any legal power to forbid
|
|
||||||
circumvention of technological measures to the extent such circumvention
|
|
||||||
is effected by exercising rights under this License with respect to
|
|
||||||
the covered work, and you disclaim any intention to limit operation or
|
|
||||||
modification of the work as a means of enforcing, against the work's
|
|
||||||
users, your or third parties' legal rights to forbid circumvention of
|
|
||||||
technological measures.
|
|
||||||
|
|
||||||
4. Conveying Verbatim Copies.
|
|
||||||
|
|
||||||
You may convey verbatim copies of the Program's source code as you
|
|
||||||
receive it, in any medium, provided that you conspicuously and
|
|
||||||
appropriately publish on each copy an appropriate copyright notice;
|
|
||||||
keep intact all notices stating that this License and any
|
|
||||||
non-permissive terms added in accord with section 7 apply to the code;
|
|
||||||
keep intact all notices of the absence of any warranty; and give all
|
|
||||||
recipients a copy of this License along with the Program.
|
|
||||||
|
|
||||||
You may charge any price or no price for each copy that you convey,
|
|
||||||
and you may offer support or warranty protection for a fee.
|
|
||||||
|
|
||||||
5. Conveying Modified Source Versions.
|
|
||||||
|
|
||||||
You may convey a work based on the Program, or the modifications to
|
|
||||||
produce it from the Program, in the form of source code under the
|
|
||||||
terms of section 4, provided that you also meet all of these conditions:
|
|
||||||
|
|
||||||
a) The work must carry prominent notices stating that you modified
|
|
||||||
it, and giving a relevant date.
|
|
||||||
|
|
||||||
b) The work must carry prominent notices stating that it is
|
|
||||||
released under this License and any conditions added under section
|
|
||||||
7. This requirement modifies the requirement in section 4 to
|
|
||||||
"keep intact all notices".
|
|
||||||
|
|
||||||
c) You must license the entire work, as a whole, under this
|
|
||||||
License to anyone who comes into possession of a copy. This
|
|
||||||
License will therefore apply, along with any applicable section 7
|
|
||||||
additional terms, to the whole of the work, and all its parts,
|
|
||||||
regardless of how they are packaged. This License gives no
|
|
||||||
permission to license the work in any other way, but it does not
|
|
||||||
invalidate such permission if you have separately received it.
|
|
||||||
|
|
||||||
d) If the work has interactive user interfaces, each must display
|
|
||||||
Appropriate Legal Notices; however, if the Program has interactive
|
|
||||||
interfaces that do not display Appropriate Legal Notices, your
|
|
||||||
work need not make them do so.
|
|
||||||
|
|
||||||
A compilation of a covered work with other separate and independent
|
|
||||||
works, which are not by their nature extensions of the covered work,
|
|
||||||
and which are not combined with it such as to form a larger program,
|
|
||||||
in or on a volume of a storage or distribution medium, is called an
|
|
||||||
"aggregate" if the compilation and its resulting copyright are not
|
|
||||||
used to limit the access or legal rights of the compilation's users
|
|
||||||
beyond what the individual works permit. Inclusion of a covered work
|
|
||||||
in an aggregate does not cause this License to apply to the other
|
|
||||||
parts of the aggregate.
|
|
||||||
|
|
||||||
6. Conveying Non-Source Forms.
|
|
||||||
|
|
||||||
You may convey a covered work in object code form under the terms
|
|
||||||
of sections 4 and 5, provided that you also convey the
|
|
||||||
machine-readable Corresponding Source under the terms of this License,
|
|
||||||
in one of these ways:
|
|
||||||
|
|
||||||
a) Convey the object code in, or embodied in, a physical product
|
|
||||||
(including a physical distribution medium), accompanied by the
|
|
||||||
Corresponding Source fixed on a durable physical medium
|
|
||||||
customarily used for software interchange.
|
|
||||||
|
|
||||||
b) Convey the object code in, or embodied in, a physical product
|
|
||||||
(including a physical distribution medium), accompanied by a
|
|
||||||
written offer, valid for at least three years and valid for as
|
|
||||||
long as you offer spare parts or customer support for that product
|
|
||||||
model, to give anyone who possesses the object code either (1) a
|
|
||||||
copy of the Corresponding Source for all the software in the
|
|
||||||
product that is covered by this License, on a durable physical
|
|
||||||
medium customarily used for software interchange, for a price no
|
|
||||||
more than your reasonable cost of physically performing this
|
|
||||||
conveying of source, or (2) access to copy the
|
|
||||||
Corresponding Source from a network server at no charge.
|
|
||||||
|
|
||||||
c) Convey individual copies of the object code with a copy of the
|
|
||||||
written offer to provide the Corresponding Source. This
|
|
||||||
alternative is allowed only occasionally and noncommercially, and
|
|
||||||
only if you received the object code with such an offer, in accord
|
|
||||||
with subsection 6b.
|
|
||||||
|
|
||||||
d) Convey the object code by offering access from a designated
|
|
||||||
place (gratis or for a charge), and offer equivalent access to the
|
|
||||||
Corresponding Source in the same way through the same place at no
|
|
||||||
further charge. You need not require recipients to copy the
|
|
||||||
Corresponding Source along with the object code. If the place to
|
|
||||||
copy the object code is a network server, the Corresponding Source
|
|
||||||
may be on a different server (operated by you or a third party)
|
|
||||||
that supports equivalent copying facilities, provided you maintain
|
|
||||||
clear directions next to the object code saying where to find the
|
|
||||||
Corresponding Source. Regardless of what server hosts the
|
|
||||||
Corresponding Source, you remain obligated to ensure that it is
|
|
||||||
available for as long as needed to satisfy these requirements.
|
|
||||||
|
|
||||||
e) Convey the object code using peer-to-peer transmission, provided
|
|
||||||
you inform other peers where the object code and Corresponding
|
|
||||||
Source of the work are being offered to the general public at no
|
|
||||||
charge under subsection 6d.
|
|
||||||
|
|
||||||
A separable portion of the object code, whose source code is excluded
|
|
||||||
from the Corresponding Source as a System Library, need not be
|
|
||||||
included in conveying the object code work.
|
|
||||||
|
|
||||||
A "User Product" is either (1) a "consumer product", which means any
|
|
||||||
tangible personal property which is normally used for personal, family,
|
|
||||||
or household purposes, or (2) anything designed or sold for incorporation
|
|
||||||
into a dwelling. In determining whether a product is a consumer product,
|
|
||||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
|
||||||
product received by a particular user, "normally used" refers to a
|
|
||||||
typical or common use of that class of product, regardless of the status
|
|
||||||
of the particular user or of the way in which the particular user
|
|
||||||
actually uses, or expects or is expected to use, the product. A product
|
|
||||||
is a consumer product regardless of whether the product has substantial
|
|
||||||
commercial, industrial or non-consumer uses, unless such uses represent
|
|
||||||
the only significant mode of use of the product.
|
|
||||||
|
|
||||||
"Installation Information" for a User Product means any methods,
|
|
||||||
procedures, authorization keys, or other information required to install
|
|
||||||
and execute modified versions of a covered work in that User Product from
|
|
||||||
a modified version of its Corresponding Source. The information must
|
|
||||||
suffice to ensure that the continued functioning of the modified object
|
|
||||||
code is in no case prevented or interfered with solely because
|
|
||||||
modification has been made.
|
|
||||||
|
|
||||||
If you convey an object code work under this section in, or with, or
|
|
||||||
specifically for use in, a User Product, and the conveying occurs as
|
|
||||||
part of a transaction in which the right of possession and use of the
|
|
||||||
User Product is transferred to the recipient in perpetuity or for a
|
|
||||||
fixed term (regardless of how the transaction is characterized), the
|
|
||||||
Corresponding Source conveyed under this section must be accompanied
|
|
||||||
by the Installation Information. But this requirement does not apply
|
|
||||||
if neither you nor any third party retains the ability to install
|
|
||||||
modified object code on the User Product (for example, the work has
|
|
||||||
been installed in ROM).
|
|
||||||
|
|
||||||
The requirement to provide Installation Information does not include a
|
|
||||||
requirement to continue to provide support service, warranty, or updates
|
|
||||||
for a work that has been modified or installed by the recipient, or for
|
|
||||||
the User Product in which it has been modified or installed. Access to a
|
|
||||||
network may be denied when the modification itself materially and
|
|
||||||
adversely affects the operation of the network or violates the rules and
|
|
||||||
protocols for communication across the network.
|
|
||||||
|
|
||||||
Corresponding Source conveyed, and Installation Information provided,
|
|
||||||
in accord with this section must be in a format that is publicly
|
|
||||||
documented (and with an implementation available to the public in
|
|
||||||
source code form), and must require no special password or key for
|
|
||||||
unpacking, reading or copying.
|
|
||||||
|
|
||||||
7. Additional Terms.
|
|
||||||
|
|
||||||
"Additional permissions" are terms that supplement the terms of this
|
|
||||||
License by making exceptions from one or more of its conditions.
|
|
||||||
Additional permissions that are applicable to the entire Program shall
|
|
||||||
be treated as though they were included in this License, to the extent
|
|
||||||
that they are valid under applicable law. If additional permissions
|
|
||||||
apply only to part of the Program, that part may be used separately
|
|
||||||
under those permissions, but the entire Program remains governed by
|
|
||||||
this License without regard to the additional permissions.
|
|
||||||
|
|
||||||
When you convey a copy of a covered work, you may at your option
|
|
||||||
remove any additional permissions from that copy, or from any part of
|
|
||||||
it. (Additional permissions may be written to require their own
|
|
||||||
removal in certain cases when you modify the work.) You may place
|
|
||||||
additional permissions on material, added by you to a covered work,
|
|
||||||
for which you have or can give appropriate copyright permission.
|
|
||||||
|
|
||||||
Notwithstanding any other provision of this License, for material you
|
|
||||||
add to a covered work, you may (if authorized by the copyright holders of
|
|
||||||
that material) supplement the terms of this License with terms:
|
|
||||||
|
|
||||||
a) Disclaiming warranty or limiting liability differently from the
|
|
||||||
terms of sections 15 and 16 of this License; or
|
|
||||||
|
|
||||||
b) Requiring preservation of specified reasonable legal notices or
|
|
||||||
author attributions in that material or in the Appropriate Legal
|
|
||||||
Notices displayed by works containing it; or
|
|
||||||
|
|
||||||
c) Prohibiting misrepresentation of the origin of that material, or
|
|
||||||
requiring that modified versions of such material be marked in
|
|
||||||
reasonable ways as different from the original version; or
|
|
||||||
|
|
||||||
d) Limiting the use for publicity purposes of names of licensors or
|
|
||||||
authors of the material; or
|
|
||||||
|
|
||||||
e) Declining to grant rights under trademark law for use of some
|
|
||||||
trade names, trademarks, or service marks; or
|
|
||||||
|
|
||||||
f) Requiring indemnification of licensors and authors of that
|
|
||||||
material by anyone who conveys the material (or modified versions of
|
|
||||||
it) with contractual assumptions of liability to the recipient, for
|
|
||||||
any liability that these contractual assumptions directly impose on
|
|
||||||
those licensors and authors.
|
|
||||||
|
|
||||||
All other non-permissive additional terms are considered "further
|
|
||||||
restrictions" within the meaning of section 10. If the Program as you
|
|
||||||
received it, or any part of it, contains a notice stating that it is
|
|
||||||
governed by this License along with a term that is a further
|
|
||||||
restriction, you may remove that term. If a license document contains
|
|
||||||
a further restriction but permits relicensing or conveying under this
|
|
||||||
License, you may add to a covered work material governed by the terms
|
|
||||||
of that license document, provided that the further restriction does
|
|
||||||
not survive such relicensing or conveying.
|
|
||||||
|
|
||||||
If you add terms to a covered work in accord with this section, you
|
|
||||||
must place, in the relevant source files, a statement of the
|
|
||||||
additional terms that apply to those files, or a notice indicating
|
|
||||||
where to find the applicable terms.
|
|
||||||
|
|
||||||
Additional terms, permissive or non-permissive, may be stated in the
|
|
||||||
form of a separately written license, or stated as exceptions;
|
|
||||||
the above requirements apply either way.
|
|
||||||
|
|
||||||
8. Termination.
|
|
||||||
|
|
||||||
You may not propagate or modify a covered work except as expressly
|
|
||||||
provided under this License. Any attempt otherwise to propagate or
|
|
||||||
modify it is void, and will automatically terminate your rights under
|
|
||||||
this License (including any patent licenses granted under the third
|
|
||||||
paragraph of section 11).
|
|
||||||
|
|
||||||
However, if you cease all violation of this License, then your
|
|
||||||
license from a particular copyright holder is reinstated (a)
|
|
||||||
provisionally, unless and until the copyright holder explicitly and
|
|
||||||
finally terminates your license, and (b) permanently, if the copyright
|
|
||||||
holder fails to notify you of the violation by some reasonable means
|
|
||||||
prior to 60 days after the cessation.
|
|
||||||
|
|
||||||
Moreover, your license from a particular copyright holder is
|
|
||||||
reinstated permanently if the copyright holder notifies you of the
|
|
||||||
violation by some reasonable means, this is the first time you have
|
|
||||||
received notice of violation of this License (for any work) from that
|
|
||||||
copyright holder, and you cure the violation prior to 30 days after
|
|
||||||
your receipt of the notice.
|
|
||||||
|
|
||||||
Termination of your rights under this section does not terminate the
|
|
||||||
licenses of parties who have received copies or rights from you under
|
|
||||||
this License. If your rights have been terminated and not permanently
|
|
||||||
reinstated, you do not qualify to receive new licenses for the same
|
|
||||||
material under section 10.
|
|
||||||
|
|
||||||
9. Acceptance Not Required for Having Copies.
|
|
||||||
|
|
||||||
You are not required to accept this License in order to receive or
|
|
||||||
run a copy of the Program. Ancillary propagation of a covered work
|
|
||||||
occurring solely as a consequence of using peer-to-peer transmission
|
|
||||||
to receive a copy likewise does not require acceptance. However,
|
|
||||||
nothing other than this License grants you permission to propagate or
|
|
||||||
modify any covered work. These actions infringe copyright if you do
|
|
||||||
not accept this License. Therefore, by modifying or propagating a
|
|
||||||
covered work, you indicate your acceptance of this License to do so.
|
|
||||||
|
|
||||||
10. Automatic Licensing of Downstream Recipients.
|
|
||||||
|
|
||||||
Each time you convey a covered work, the recipient automatically
|
|
||||||
receives a license from the original licensors, to run, modify and
|
|
||||||
propagate that work, subject to this License. You are not responsible
|
|
||||||
for enforcing compliance by third parties with this License.
|
|
||||||
|
|
||||||
An "entity transaction" is a transaction transferring control of an
|
|
||||||
organization, or substantially all assets of one, or subdividing an
|
|
||||||
organization, or merging organizations. If propagation of a covered
|
|
||||||
work results from an entity transaction, each party to that
|
|
||||||
transaction who receives a copy of the work also receives whatever
|
|
||||||
licenses to the work the party's predecessor in interest had or could
|
|
||||||
give under the previous paragraph, plus a right to possession of the
|
|
||||||
Corresponding Source of the work from the predecessor in interest, if
|
|
||||||
the predecessor has it or can get it with reasonable efforts.
|
|
||||||
|
|
||||||
You may not impose any further restrictions on the exercise of the
|
|
||||||
rights granted or affirmed under this License. For example, you may
|
|
||||||
not impose a license fee, royalty, or other charge for exercise of
|
|
||||||
rights granted under this License, and you may not initiate litigation
|
|
||||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
|
||||||
any patent claim is infringed by making, using, selling, offering for
|
|
||||||
sale, or importing the Program or any portion of it.
|
|
||||||
|
|
||||||
11. Patents.
|
|
||||||
|
|
||||||
A "contributor" is a copyright holder who authorizes use under this
|
|
||||||
License of the Program or a work on which the Program is based. The
|
|
||||||
work thus licensed is called the contributor's "contributor version".
|
|
||||||
|
|
||||||
A contributor's "essential patent claims" are all patent claims
|
|
||||||
owned or controlled by the contributor, whether already acquired or
|
|
||||||
hereafter acquired, that would be infringed by some manner, permitted
|
|
||||||
by this License, of making, using, or selling its contributor version,
|
|
||||||
but do not include claims that would be infringed only as a
|
|
||||||
consequence of further modification of the contributor version. For
|
|
||||||
purposes of this definition, "control" includes the right to grant
|
|
||||||
patent sublicenses in a manner consistent with the requirements of
|
|
||||||
this License.
|
|
||||||
|
|
||||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
|
||||||
patent license under the contributor's essential patent claims, to
|
|
||||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
|
||||||
propagate the contents of its contributor version.
|
|
||||||
|
|
||||||
In the following three paragraphs, a "patent license" is any express
|
|
||||||
agreement or commitment, however denominated, not to enforce a patent
|
|
||||||
(such as an express permission to practice a patent or covenant not to
|
|
||||||
sue for patent infringement). To "grant" such a patent license to a
|
|
||||||
party means to make such an agreement or commitment not to enforce a
|
|
||||||
patent against the party.
|
|
||||||
|
|
||||||
If you convey a covered work, knowingly relying on a patent license,
|
|
||||||
and the Corresponding Source of the work is not available for anyone
|
|
||||||
to copy, free of charge and under the terms of this License, through a
|
|
||||||
publicly available network server or other readily accessible means,
|
|
||||||
then you must either (1) cause the Corresponding Source to be so
|
|
||||||
available, or (2) arrange to deprive yourself of the benefit of the
|
|
||||||
patent license for this particular work, or (3) arrange, in a manner
|
|
||||||
consistent with the requirements of this License, to extend the patent
|
|
||||||
license to downstream recipients. "Knowingly relying" means you have
|
|
||||||
actual knowledge that, but for the patent license, your conveying the
|
|
||||||
covered work in a country, or your recipient's use of the covered work
|
|
||||||
in a country, would infringe one or more identifiable patents in that
|
|
||||||
country that you have reason to believe are valid.
|
|
||||||
|
|
||||||
If, pursuant to or in connection with a single transaction or
|
|
||||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
|
||||||
covered work, and grant a patent license to some of the parties
|
|
||||||
receiving the covered work authorizing them to use, propagate, modify
|
|
||||||
or convey a specific copy of the covered work, then the patent license
|
|
||||||
you grant is automatically extended to all recipients of the covered
|
|
||||||
work and works based on it.
|
|
||||||
|
|
||||||
A patent license is "discriminatory" if it does not include within
|
|
||||||
the scope of its coverage, prohibits the exercise of, or is
|
|
||||||
conditioned on the non-exercise of one or more of the rights that are
|
|
||||||
specifically granted under this License. You may not convey a covered
|
|
||||||
work if you are a party to an arrangement with a third party that is
|
|
||||||
in the business of distributing software, under which you make payment
|
|
||||||
to the third party based on the extent of your activity of conveying
|
|
||||||
the work, and under which the third party grants, to any of the
|
|
||||||
parties who would receive the covered work from you, a discriminatory
|
|
||||||
patent license (a) in connection with copies of the covered work
|
|
||||||
conveyed by you (or copies made from those copies), or (b) primarily
|
|
||||||
for and in connection with specific products or compilations that
|
|
||||||
contain the covered work, unless you entered into that arrangement,
|
|
||||||
or that patent license was granted, prior to 28 March 2007.
|
|
||||||
|
|
||||||
Nothing in this License shall be construed as excluding or limiting
|
|
||||||
any implied license or other defenses to infringement that may
|
|
||||||
otherwise be available to you under applicable patent law.
|
|
||||||
|
|
||||||
12. No Surrender of Others' Freedom.
|
|
||||||
|
|
||||||
If conditions are imposed on you (whether by court order, agreement or
|
|
||||||
otherwise) that contradict the conditions of this License, they do not
|
|
||||||
excuse you from the conditions of this License. If you cannot convey a
|
|
||||||
covered work so as to satisfy simultaneously your obligations under this
|
|
||||||
License and any other pertinent obligations, then as a consequence you may
|
|
||||||
not convey it at all. For example, if you agree to terms that obligate you
|
|
||||||
to collect a royalty for further conveying from those to whom you convey
|
|
||||||
the Program, the only way you could satisfy both those terms and this
|
|
||||||
License would be to refrain entirely from conveying the Program.
|
|
||||||
|
|
||||||
13. Use with the GNU Affero General Public License.
|
|
||||||
|
|
||||||
Notwithstanding any other provision of this License, you have
|
|
||||||
permission to link or combine any covered work with a work licensed
|
|
||||||
under version 3 of the GNU Affero General Public License into a single
|
|
||||||
combined work, and to convey the resulting work. The terms of this
|
|
||||||
License will continue to apply to the part which is the covered work,
|
|
||||||
but the special requirements of the GNU Affero General Public License,
|
|
||||||
section 13, concerning interaction through a network will apply to the
|
|
||||||
combination as such.
|
|
||||||
|
|
||||||
14. Revised Versions of this License.
|
|
||||||
|
|
||||||
The Free Software Foundation may publish revised and/or new versions of
|
|
||||||
the GNU General Public License from time to time. Such new versions will
|
|
||||||
be similar in spirit to the present version, but may differ in detail to
|
|
||||||
address new problems or concerns.
|
|
||||||
|
|
||||||
Each version is given a distinguishing version number. If the
|
|
||||||
Program specifies that a certain numbered version of the GNU General
|
|
||||||
Public License "or any later version" applies to it, you have the
|
|
||||||
option of following the terms and conditions either of that numbered
|
|
||||||
version or of any later version published by the Free Software
|
|
||||||
Foundation. If the Program does not specify a version number of the
|
|
||||||
GNU General Public License, you may choose any version ever published
|
|
||||||
by the Free Software Foundation.
|
|
||||||
|
|
||||||
If the Program specifies that a proxy can decide which future
|
|
||||||
versions of the GNU General Public License can be used, that proxy's
|
|
||||||
public statement of acceptance of a version permanently authorizes you
|
|
||||||
to choose that version for the Program.
|
|
||||||
|
|
||||||
Later license versions may give you additional or different
|
|
||||||
permissions. However, no additional obligations are imposed on any
|
|
||||||
author or copyright holder as a result of your choosing to follow a
|
|
||||||
later version.
|
|
||||||
|
|
||||||
15. Disclaimer of Warranty.
|
|
||||||
|
|
||||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
|
||||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
|
||||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
|
||||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
|
||||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
|
||||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
|
||||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
|
||||||
|
|
||||||
16. Limitation of Liability.
|
|
||||||
|
|
||||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
|
||||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
|
||||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
|
||||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
|
||||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
|
||||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
|
||||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
|
||||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
|
||||||
SUCH DAMAGES.
|
|
||||||
|
|
||||||
17. Interpretation of Sections 15 and 16.
|
|
||||||
|
|
||||||
If the disclaimer of warranty and limitation of liability provided
|
|
||||||
above cannot be given local legal effect according to their terms,
|
|
||||||
reviewing courts shall apply local law that most closely approximates
|
|
||||||
an absolute waiver of all civil liability in connection with the
|
|
||||||
Program, unless a warranty or assumption of liability accompanies a
|
|
||||||
copy of the Program in return for a fee.
|
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
|
||||||
|
|
||||||
How to Apply These Terms to Your New Programs
|
|
||||||
|
|
||||||
If you develop a new program, and you want it to be of the greatest
|
|
||||||
possible use to the public, the best way to achieve this is to make it
|
|
||||||
free software which everyone can redistribute and change under these terms.
|
|
||||||
|
|
||||||
To do so, attach the following notices to the program. It is safest
|
|
||||||
to attach them to the start of each source file to most effectively
|
|
||||||
state the exclusion of warranty; and each file should have at least
|
|
||||||
the "copyright" line and a pointer to where the full notice is found.
|
|
||||||
|
|
||||||
<one line to give the program's name and a brief idea of what it does.>
|
|
||||||
Copyright (C) <year> <name of author>
|
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Also add information on how to contact you by electronic and paper mail.
|
|
||||||
|
|
||||||
If the program does terminal interaction, make it output a short
|
|
||||||
notice like this when it starts in an interactive mode:
|
|
||||||
|
|
||||||
<program> Copyright (C) <year> <name of author>
|
|
||||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
|
||||||
This is free software, and you are welcome to redistribute it
|
|
||||||
under certain conditions; type `show c' for details.
|
|
||||||
|
|
||||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
|
||||||
parts of the General Public License. Of course, your program's commands
|
|
||||||
might be different; for a GUI interface, you would use an "about box".
|
|
||||||
|
|
||||||
You should also get your employer (if you work as a programmer) or school,
|
|
||||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
|
||||||
For more information on this, and how to apply and follow the GNU GPL, see
|
|
||||||
<https://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
The GNU General Public License does not permit incorporating your program
|
|
||||||
into proprietary programs. If your program is a subroutine library, you
|
|
||||||
may consider it more useful to permit linking proprietary applications with
|
|
||||||
the library. If this is what you want to do, use the GNU Lesser General
|
|
||||||
Public License instead of this License. But first, please read
|
|
||||||
<https://www.gnu.org/licenses/why-not-lgpl.html>.
|
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# ❄️ flocon
|
# ❄️ nix
|
||||||
|
|
||||||
My NixOS configurations, using flakes.
|
My NixOS configurations, using flakes.
|
||||||
|
|
||||||
|
@ -20,7 +20,6 @@ Additionally using a lot of other software you can find in the configuration fil
|
||||||
| [hosts](hosts/) | Host-specific |
|
| [hosts](hosts/) | Host-specific |
|
||||||
| [lib](lib/) | Helper functions |
|
| [lib](lib/) | Helper functions |
|
||||||
| [modules](modules/) | NixOS modules |
|
| [modules](modules/) | NixOS modules |
|
||||||
| [pkgs](pkgs/) | Custom packages |
|
|
||||||
| [system](system/) | NixOS configuration |
|
| [system](system/) | NixOS configuration |
|
||||||
|
|
||||||
My configuration is structured based on the following principles:
|
My configuration is structured based on the following principles:
|
||||||
|
@ -38,6 +37,5 @@ People / repositories I have copied / learned from:
|
||||||
|
|
||||||
- [fufexan/dotfiles](https://github.com/fufexan/dotfiles) for the configuration structure
|
- [fufexan/dotfiles](https://github.com/fufexan/dotfiles) for the configuration structure
|
||||||
- [jacekpoz/nixos](https://git.jacekpoz.pl/poz/niksos) for learning how NixOS modules work
|
- [jacekpoz/nixos](https://git.jacekpoz.pl/poz/niksos) for learning how NixOS modules work
|
||||||
- [sodiboo](https://github.com/sodiboo) for helping me a whole lot with Niri-specific issues
|
|
||||||
|
|
||||||
Some bits have also been borrowed from within the configuration, and credit has been given where its due.
|
Some bits have also been borrowed from within the configuration, and credit has been given where its due.
|
||||||
|
|
437
flake.lock
437
flake.lock
|
@ -1,39 +1,16 @@
|
||||||
{
|
{
|
||||||
"nodes": {
|
"nodes": {
|
||||||
"agenix": {
|
"ags": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"darwin": "darwin",
|
"nixpkgs": "nixpkgs",
|
||||||
"home-manager": "home-manager",
|
|
||||||
"nixpkgs": [
|
|
||||||
"nixpkgs"
|
|
||||||
],
|
|
||||||
"systems": "systems"
|
"systems": "systems"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1723293904,
|
"lastModified": 1728326430,
|
||||||
"narHash": "sha256-b+uqzj+Wa6xgMS9aNbX4I+sXeb5biPDi39VgvSFqFvU=",
|
"narHash": "sha256-tV1ABHuA1HItMdCTuNdA8fMB+qw7LpjvI945VwMSABI=",
|
||||||
"owner": "ryantm",
|
|
||||||
"repo": "agenix",
|
|
||||||
"rev": "f6291c5935fdc4e0bef208cfc0dcab7e3f7a1c41",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "ryantm",
|
|
||||||
"repo": "agenix",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"ags": {
|
|
||||||
"inputs": {
|
|
||||||
"astal": "astal",
|
|
||||||
"nixpkgs": "nixpkgs"
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1732307740,
|
|
||||||
"narHash": "sha256-ZDsYdZOtg5qkK/wfLLB83B3SI+fE32S+/6Ey0ggHODM=",
|
|
||||||
"owner": "Aylur",
|
"owner": "Aylur",
|
||||||
"repo": "ags",
|
"repo": "ags",
|
||||||
"rev": "81159966eb8b39b66c3efc133982fd76920c9605",
|
"rev": "60180a184cfb32b61a1d871c058b31a3b9b0743d",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -42,27 +19,6 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"astal": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"ags",
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1731952585,
|
|
||||||
"narHash": "sha256-Sh1E7sJd8JJM3PCU1ZOei/QWz97OLCENIi2rTRoaniw=",
|
|
||||||
"owner": "aylur",
|
|
||||||
"repo": "astal",
|
|
||||||
"rev": "664c7a4ddfcf48c6e8accd3c33bb94424b0e8609",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "aylur",
|
|
||||||
"repo": "astal",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"basix": {
|
"basix": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"flake-compat": "flake-compat",
|
"flake-compat": "flake-compat",
|
||||||
|
@ -70,11 +26,11 @@
|
||||||
"nixpkgs": "nixpkgs_2"
|
"nixpkgs": "nixpkgs_2"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1731727882,
|
"lastModified": 1727493962,
|
||||||
"narHash": "sha256-GLHrsoW8nrEGU7Oarwkyhtks5YqPvtcTqWl0+dtFqjM=",
|
"narHash": "sha256-9eYh6s5ChKmm2uqsZijk6PCGoyZyEgZ0BJqt+ESDrqU=",
|
||||||
"owner": "notashelf",
|
"owner": "notashelf",
|
||||||
"repo": "basix",
|
"repo": "basix",
|
||||||
"rev": "5cdb4c25956c93a192c37572236d0a12b068d7f8",
|
"rev": "742cefc42e7fa7bb77f5bd1c3191ff8c8fa8d610",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -104,28 +60,6 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"darwin": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"agenix",
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1700795494,
|
|
||||||
"narHash": "sha256-gzGLZSiOhf155FW7262kdHo2YDeugp3VuIFb4/GGng0=",
|
|
||||||
"owner": "lnl7",
|
|
||||||
"repo": "nix-darwin",
|
|
||||||
"rev": "4b9b83d5a92e8c1fbfd8eb27eda375908c11ec4d",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "lnl7",
|
|
||||||
"ref": "master",
|
|
||||||
"repo": "nix-darwin",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"deploy-rs": {
|
"deploy-rs": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"flake-compat": "flake-compat_2",
|
"flake-compat": "flake-compat_2",
|
||||||
|
@ -155,11 +89,11 @@
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"dir": "pkgs/firefox-addons",
|
"dir": "pkgs/firefox-addons",
|
||||||
"lastModified": 1732680201,
|
"lastModified": 1729491205,
|
||||||
"narHash": "sha256-3PA+AlonG9xzJrT1NvnD0Id2dBvIVNrSijVwlIinzNo=",
|
"narHash": "sha256-luvUK8ZTRTdsVao7VqnxvGEvA3rjEmfiwakDyHxQhx8=",
|
||||||
"owner": "rycee",
|
"owner": "rycee",
|
||||||
"repo": "nur-expressions",
|
"repo": "nur-expressions",
|
||||||
"rev": "77e347b8897e917e99bf2929a7178d8caa6fd473",
|
"rev": "9764579885c84ba5d4bcd9d3061409a527ff805c",
|
||||||
"type": "gitlab"
|
"type": "gitlab"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -260,6 +194,24 @@
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs-lib": "nixpkgs-lib_2"
|
"nixpkgs-lib": "nixpkgs-lib_2"
|
||||||
},
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1727826117,
|
||||||
|
"narHash": "sha256-K5ZLCyfO/Zj9mPFldf3iwS6oZStJcU4tSpiXTMYaaL0=",
|
||||||
|
"owner": "hercules-ci",
|
||||||
|
"repo": "flake-parts",
|
||||||
|
"rev": "3d04084d54bedc3d6b8b736c70ef449225c361b1",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "hercules-ci",
|
||||||
|
"repo": "flake-parts",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"flake-parts_4": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs-lib": "nixpkgs-lib_3"
|
||||||
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1715865404,
|
"lastModified": 1715865404,
|
||||||
"narHash": "sha256-/GJvTdTpuDjNn84j82cU6bXztE0MSkdnTWClUCRub78=",
|
"narHash": "sha256-/GJvTdTpuDjNn84j82cU6bXztE0MSkdnTWClUCRub78=",
|
||||||
|
@ -330,11 +282,11 @@
|
||||||
"systems": "systems_7"
|
"systems": "systems_7"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1726560853,
|
"lastModified": 1710146030,
|
||||||
"narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=",
|
"narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
|
||||||
"owner": "numtide",
|
"owner": "numtide",
|
||||||
"repo": "flake-utils",
|
"repo": "flake-utils",
|
||||||
"rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a",
|
"rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -402,36 +354,15 @@
|
||||||
"home-manager": {
|
"home-manager": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
"agenix",
|
|
||||||
"nixpkgs"
|
"nixpkgs"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1703113217,
|
"lastModified": 1729459288,
|
||||||
"narHash": "sha256-7ulcXOk63TIT2lVDSExj7XzFx09LpdSAPtvgtM7yQPE=",
|
"narHash": "sha256-gBOVJv+q6Mx8jGvwX7cE6J8+sZmi1uxpRVsO7WxvVuQ=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "home-manager",
|
"repo": "home-manager",
|
||||||
"rev": "3bfaacf46133c037bb356193bd2f1765d9dc82c1",
|
"rev": "1e27f213d77fc842603628bcf2df6681d7d08f7e",
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "nix-community",
|
|
||||||
"repo": "home-manager",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"home-manager_2": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1732482255,
|
|
||||||
"narHash": "sha256-GUffLwzawz5WRVfWaWCg78n/HrBJrOG7QadFY6rtV8A=",
|
|
||||||
"owner": "nix-community",
|
|
||||||
"repo": "home-manager",
|
|
||||||
"rev": "a9953635d7f34e7358d5189751110f87e3ac17da",
|
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -502,7 +433,6 @@
|
||||||
"naersk": {
|
"naersk": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
"neovim-flake",
|
|
||||||
"nvf",
|
"nvf",
|
||||||
"rnix-lsp",
|
"rnix-lsp",
|
||||||
"nixpkgs"
|
"nixpkgs"
|
||||||
|
@ -522,36 +452,13 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"neovim-flake": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"nixpkgs"
|
|
||||||
],
|
|
||||||
"nvf": "nvf"
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1731867828,
|
|
||||||
"narHash": "sha256-7OSiuI0Jgc5rLXkBuKzj7mNxKkkESqO2rwD+PDQHoqw=",
|
|
||||||
"ref": "refs/heads/main",
|
|
||||||
"rev": "5bbc441313c556a4dbc9f27a369e1bcfe5ccce65",
|
|
||||||
"revCount": 1,
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://git.nezia.dev/nezia/neovim-flake"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://git.nezia.dev/nezia/neovim-flake"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nil": {
|
"nil": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"flake-utils": [
|
"flake-utils": [
|
||||||
"neovim-flake",
|
|
||||||
"nvf",
|
"nvf",
|
||||||
"flake-utils"
|
"flake-utils"
|
||||||
],
|
],
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
"neovim-flake",
|
|
||||||
"nvf",
|
"nvf",
|
||||||
"nixpkgs"
|
"nixpkgs"
|
||||||
],
|
],
|
||||||
|
@ -573,19 +480,20 @@
|
||||||
},
|
},
|
||||||
"niri": {
|
"niri": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
|
"flake-parts": "flake-parts_3",
|
||||||
"niri-stable": "niri-stable",
|
"niri-stable": "niri-stable",
|
||||||
"niri-unstable": "niri-unstable",
|
"niri-unstable": "niri-unstable",
|
||||||
"nixpkgs": "nixpkgs_6",
|
"nixpkgs": "nixpkgs_4",
|
||||||
"nixpkgs-stable": "nixpkgs-stable_2",
|
"nixpkgs-stable": "nixpkgs-stable_2",
|
||||||
"xwayland-satellite-stable": "xwayland-satellite-stable",
|
"xwayland-satellite-stable": "xwayland-satellite-stable",
|
||||||
"xwayland-satellite-unstable": "xwayland-satellite-unstable"
|
"xwayland-satellite-unstable": "xwayland-satellite-unstable"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1732659819,
|
"lastModified": 1729499378,
|
||||||
"narHash": "sha256-Z1KdUhm4IQAVEodkl19XvPdZyWbU36bBKnregIffxsw=",
|
"narHash": "sha256-gslhStBw58+LAbcver/2/Q6zjPq9xNZQ/IcoIh7OBck=",
|
||||||
"owner": "sodiboo",
|
"owner": "sodiboo",
|
||||||
"repo": "niri-flake",
|
"repo": "niri-flake",
|
||||||
"rev": "b1ccd1e910af3f72ba02d64f61121b42b4c3184e",
|
"rev": "2e46e95f0e5be7cea740163d87edf628e755cc3e",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -597,16 +505,16 @@
|
||||||
"niri-stable": {
|
"niri-stable": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1731483594,
|
"lastModified": 1726304152,
|
||||||
"narHash": "sha256-Qjf7alRbPPERfiZsM9EMKX+HwjESky1tieh5PJIkLwE=",
|
"narHash": "sha256-4YDrKMwXGVOBkeaISbxqf24rLuHvO98TnqxWYfgiSeg=",
|
||||||
"owner": "YaLTeR",
|
"owner": "YaLTeR",
|
||||||
"repo": "niri",
|
"repo": "niri",
|
||||||
"rev": "75c79116a7e40cbc0e110ce0cdd500e896458679",
|
"rev": "6a48728ffb1e638839b07f9ab2f06b2adb41dc61",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "YaLTeR",
|
"owner": "YaLTeR",
|
||||||
"ref": "v0.1.10.1",
|
"ref": "v0.1.9",
|
||||||
"repo": "niri",
|
"repo": "niri",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
|
@ -614,11 +522,11 @@
|
||||||
"niri-unstable": {
|
"niri-unstable": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1732647766,
|
"lastModified": 1729444736,
|
||||||
"narHash": "sha256-ZUcQN/2bqL4BK+ifHX9Om4HJOZQAMefK7iziO/ZeEDo=",
|
"narHash": "sha256-/Q1yf6f9nUBFVqI/t89xfTPmQipaug63LP8TeENg4CA=",
|
||||||
"owner": "YaLTeR",
|
"owner": "YaLTeR",
|
||||||
"repo": "niri",
|
"repo": "niri",
|
||||||
"rev": "4c480a1ea3280733bc428d9cb38150bfc1a7c36c",
|
"rev": "289ae3604d705cebc82cbcd23ee4534ded16d3af",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -634,11 +542,11 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1732519917,
|
"lastModified": 1729394935,
|
||||||
"narHash": "sha256-AGXhwHdJV0q/WNgqwrR2zriubLr785b02FphaBtyt1Q=",
|
"narHash": "sha256-2ntUG+NJKdfhlrh/tF+jOU0fOesO7lm5ZZVSYitsvH8=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "nix-index-database",
|
"repo": "nix-index-database",
|
||||||
"rev": "f4a5ca5771ba9ca31ad24a62c8d511a405303436",
|
"rev": "04f8a11f247ba00263b060fbcdc95484fd046104",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -649,11 +557,11 @@
|
||||||
},
|
},
|
||||||
"nixos-hardware": {
|
"nixos-hardware": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1732483221,
|
"lastModified": 1729509737,
|
||||||
"narHash": "sha256-kF6rDeCshoCgmQz+7uiuPdREVFuzhIorGOoPXMalL2U=",
|
"narHash": "sha256-8OHgqz+tFo21h3hg4/GHizFPws+MMzpEru/+62Z0E8c=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixos-hardware",
|
"repo": "nixos-hardware",
|
||||||
"rev": "45348ad6fb8ac0e8415f6e5e96efe47dd7f39405",
|
"rev": "cc2d3c0e060f981905d52337340ee6ec8b8eb037",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -664,15 +572,15 @@
|
||||||
},
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1731676054,
|
"lastModified": 1725634671,
|
||||||
"narHash": "sha256-OZiZ3m8SCMfh3B6bfGC/Bm4x3qc1m2SVEAlkV6iY7Yg=",
|
"narHash": "sha256-v3rIhsJBOMLR8e/RNWxr828tB+WywYIoajrZKFM+0Gg=",
|
||||||
"owner": "nixos",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "5e4fbfb6b3de1aa2872b76d49fafc942626e2add",
|
"rev": "574d1eac1c200690e27b8eb4e24887f8df7ac27c",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "nixos",
|
"owner": "NixOS",
|
||||||
"ref": "nixos-unstable",
|
"ref": "nixos-unstable",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
|
@ -691,6 +599,18 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nixpkgs-lib_2": {
|
"nixpkgs-lib_2": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1727825735,
|
||||||
|
"narHash": "sha256-0xHYkMkeLVQAMa7gvkddbPqpxph+hDzdu1XdGPJR+Os=",
|
||||||
|
"type": "tarball",
|
||||||
|
"url": "https://github.com/NixOS/nixpkgs/archive/fb192fec7cc7a4c26d51779e9bab07ce6fa5597a.tar.gz"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"type": "tarball",
|
||||||
|
"url": "https://github.com/NixOS/nixpkgs/archive/fb192fec7cc7a4c26d51779e9bab07ce6fa5597a.tar.gz"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs-lib_3": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1714640452,
|
"lastModified": 1714640452,
|
||||||
"narHash": "sha256-QBx10+k6JWz6u7VsohfSw8g8hjdBZEf8CFzXH1/1Z94=",
|
"narHash": "sha256-QBx10+k6JWz6u7VsohfSw8g8hjdBZEf8CFzXH1/1Z94=",
|
||||||
|
@ -720,11 +640,11 @@
|
||||||
},
|
},
|
||||||
"nixpkgs-stable_2": {
|
"nixpkgs-stable_2": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1731797254,
|
"lastModified": 1729307008,
|
||||||
"narHash": "sha256-df3dJApLPhd11AlueuoN0Q4fHo/hagP75LlM5K1sz9g=",
|
"narHash": "sha256-QUvb6epgKi9pCu9CttRQW4y5NqJ+snKr1FZpG/x3Wtc=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "e8c38b73aeb218e27163376a2d617e61a2ad9b59",
|
"rev": "a9b86fc2290b69375c5542b622088eb6eca2a7c3",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -767,6 +687,38 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nixpkgs_4": {
|
"nixpkgs_4": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1729256560,
|
||||||
|
"narHash": "sha256-/uilDXvCIEs3C9l73JTACm4quuHUsIHcns1c+cHUJwA=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "4c2fcb090b1f3e5b47eaa7bd33913b574a11e0a0",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs_5": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1729256560,
|
||||||
|
"narHash": "sha256-/uilDXvCIEs3C9l73JTACm4quuHUsIHcns1c+cHUJwA=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "4c2fcb090b1f3e5b47eaa7bd33913b574a11e0a0",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs_6": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1726871744,
|
"lastModified": 1726871744,
|
||||||
"narHash": "sha256-V5LpfdHyQkUF7RfOaDPrZDP+oqz88lTJrMT1+stXNwo=",
|
"narHash": "sha256-V5LpfdHyQkUF7RfOaDPrZDP+oqz88lTJrMT1+stXNwo=",
|
||||||
|
@ -782,7 +734,7 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nixpkgs_5": {
|
"nixpkgs_7": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1656753965,
|
"lastModified": 1656753965,
|
||||||
"narHash": "sha256-BCrB3l0qpJokOnIVc3g2lHiGhnjUi0MoXiw6t1o8H1E=",
|
"narHash": "sha256-BCrB3l0qpJokOnIVc3g2lHiGhnjUi0MoXiw6t1o8H1E=",
|
||||||
|
@ -798,60 +750,13 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nixpkgs_6": {
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1732521221,
|
|
||||||
"narHash": "sha256-2ThgXBUXAE1oFsVATK1ZX9IjPcS4nKFOAjhPNKuiMn0=",
|
|
||||||
"owner": "NixOS",
|
|
||||||
"repo": "nixpkgs",
|
|
||||||
"rev": "4633a7c72337ea8fd23a4f2ba3972865e3ec685d",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "NixOS",
|
|
||||||
"ref": "nixos-unstable",
|
|
||||||
"repo": "nixpkgs",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nixpkgs_7": {
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1732521221,
|
|
||||||
"narHash": "sha256-2ThgXBUXAE1oFsVATK1ZX9IjPcS4nKFOAjhPNKuiMn0=",
|
|
||||||
"owner": "NixOS",
|
|
||||||
"repo": "nixpkgs",
|
|
||||||
"rev": "4633a7c72337ea8fd23a4f2ba3972865e3ec685d",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"id": "nixpkgs",
|
|
||||||
"ref": "nixos-unstable",
|
|
||||||
"type": "indirect"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nixpkgs_8": {
|
"nixpkgs_8": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1731531548,
|
"lastModified": 1726871744,
|
||||||
"narHash": "sha256-sz8/v17enkYmfpgeeuyzniGJU0QQBfmAjlemAUYhfy8=",
|
"narHash": "sha256-V5LpfdHyQkUF7RfOaDPrZDP+oqz88lTJrMT1+stXNwo=",
|
||||||
"owner": "NixOS",
|
|
||||||
"repo": "nixpkgs",
|
|
||||||
"rev": "24f0d4acd634792badd6470134c387a3b039dace",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "NixOS",
|
|
||||||
"ref": "nixpkgs-unstable",
|
|
||||||
"repo": "nixpkgs",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nixpkgs_9": {
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1731890469,
|
|
||||||
"narHash": "sha256-D1FNZ70NmQEwNxpSSdTXCSklBH1z2isPR84J6DQrJGs=",
|
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "5083ec887760adfe12af64830a66807423a859a7",
|
"rev": "a1d92660c6b3b7c26fb883500a80ea9d33321be2",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -879,11 +784,11 @@
|
||||||
},
|
},
|
||||||
"nvf": {
|
"nvf": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"flake-parts": "flake-parts_3",
|
"flake-parts": "flake-parts_4",
|
||||||
"flake-utils": "flake-utils_3",
|
"flake-utils": "flake-utils_3",
|
||||||
"mnw": "mnw",
|
"mnw": "mnw",
|
||||||
"nil": "nil",
|
"nil": "nil",
|
||||||
"nixpkgs": "nixpkgs_4",
|
"nixpkgs": "nixpkgs_6",
|
||||||
"nmd": "nmd",
|
"nmd": "nmd",
|
||||||
"plugin-alpha-nvim": "plugin-alpha-nvim",
|
"plugin-alpha-nvim": "plugin-alpha-nvim",
|
||||||
"plugin-bufdelete-nvim": "plugin-bufdelete-nvim",
|
"plugin-bufdelete-nvim": "plugin-bufdelete-nvim",
|
||||||
|
@ -964,7 +869,6 @@
|
||||||
"plugin-otter-nvim": "plugin-otter-nvim",
|
"plugin-otter-nvim": "plugin-otter-nvim",
|
||||||
"plugin-oxocarbon": "plugin-oxocarbon",
|
"plugin-oxocarbon": "plugin-oxocarbon",
|
||||||
"plugin-plenary-nvim": "plugin-plenary-nvim",
|
"plugin-plenary-nvim": "plugin-plenary-nvim",
|
||||||
"plugin-precognition-nvim": "plugin-precognition-nvim",
|
|
||||||
"plugin-project-nvim": "plugin-project-nvim",
|
"plugin-project-nvim": "plugin-project-nvim",
|
||||||
"plugin-registers": "plugin-registers",
|
"plugin-registers": "plugin-registers",
|
||||||
"plugin-rose-pine": "plugin-rose-pine",
|
"plugin-rose-pine": "plugin-rose-pine",
|
||||||
|
@ -991,11 +895,11 @@
|
||||||
"systems": "systems_5"
|
"systems": "systems_5"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1731058322,
|
"lastModified": 1728378979,
|
||||||
"narHash": "sha256-PCR/lHTzZDD7R9HtkSoC24yHbOwqX0VCf4rqWXJLh9I=",
|
"narHash": "sha256-CW/5Cs9m8HupL+6iRMpdHE88OmK9MXH2h3BcXCQw440=",
|
||||||
"owner": "notashelf",
|
"owner": "notashelf",
|
||||||
"repo": "nvf",
|
"repo": "nvf",
|
||||||
"rev": "8997e62b3b00ece6d51685b23949e3062a19dd06",
|
"rev": "0947ab38c0bc79780eec599161306157b8de74a3",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -1014,11 +918,11 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1732639391,
|
"lastModified": 1729372184,
|
||||||
"narHash": "sha256-kFtXjoCIqx9xe0ZryPXpqS6l/HVg71aNcuL8Y5e8+pI=",
|
"narHash": "sha256-Tb2/jJ74pt0nmfprkOW1g5zZphJTNbzLnyDENM+c5+I=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "plasma-manager",
|
"repo": "plasma-manager",
|
||||||
"rev": "06e3209d11797d9c741e25df06ab61048746bf93",
|
"rev": "9390dadadc58ffda8e494b31ef66a4ae041f6dd1",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -2292,22 +2196,6 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"plugin-precognition-nvim": {
|
|
||||||
"flake": false,
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1730325090,
|
|
||||||
"narHash": "sha256-onY1Aa+dwLR1wRua52hpSXj6zZOZXjkUlDjDa0xEEcE=",
|
|
||||||
"owner": "tris203",
|
|
||||||
"repo": "precognition.nvim",
|
|
||||||
"rev": "0189e8d6f96275a079b2805d68d49414871885cd",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "tris203",
|
|
||||||
"repo": "precognition.nvim",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"plugin-project-nvim": {
|
"plugin-project-nvim": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
|
@ -2660,25 +2548,6 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"portfolio": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": "nixpkgs_8",
|
|
||||||
"sam-zola": "sam-zola"
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1731578190,
|
|
||||||
"narHash": "sha256-9T5+xa1Qz4iJn31oq3q4T5JLr4bx3KHolwtPx1EBvlk=",
|
|
||||||
"owner": "nezia1",
|
|
||||||
"repo": "portfolio",
|
|
||||||
"rev": "34130f9c530d0f009865a443bef40531ef9b3dbe",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "nezia1",
|
|
||||||
"repo": "portfolio",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"pre-commit-hooks-nix": {
|
"pre-commit-hooks-nix": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"flake-compat": [
|
"flake-compat": [
|
||||||
|
@ -2709,7 +2578,7 @@
|
||||||
"rnix-lsp": {
|
"rnix-lsp": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"naersk": "naersk",
|
"naersk": "naersk",
|
||||||
"nixpkgs": "nixpkgs_5",
|
"nixpkgs": "nixpkgs_7",
|
||||||
"utils": "utils_2"
|
"utils": "utils_2"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
|
@ -2728,20 +2597,18 @@
|
||||||
},
|
},
|
||||||
"root": {
|
"root": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"agenix": "agenix",
|
|
||||||
"ags": "ags",
|
"ags": "ags",
|
||||||
"basix": "basix",
|
"basix": "basix",
|
||||||
"deploy-rs": "deploy-rs",
|
"deploy-rs": "deploy-rs",
|
||||||
"firefox-addons": "firefox-addons",
|
"firefox-addons": "firefox-addons",
|
||||||
"home-manager": "home-manager_2",
|
"home-manager": "home-manager",
|
||||||
"lanzaboote": "lanzaboote",
|
"lanzaboote": "lanzaboote",
|
||||||
"neovim-flake": "neovim-flake",
|
|
||||||
"niri": "niri",
|
"niri": "niri",
|
||||||
"nix-index-db": "nix-index-db",
|
"nix-index-db": "nix-index-db",
|
||||||
"nixos-hardware": "nixos-hardware",
|
"nixos-hardware": "nixos-hardware",
|
||||||
"nixpkgs": "nixpkgs_7",
|
"nixpkgs": "nixpkgs_5",
|
||||||
|
"nvf": "nvf",
|
||||||
"plasma-manager": "plasma-manager",
|
"plasma-manager": "plasma-manager",
|
||||||
"portfolio": "portfolio",
|
|
||||||
"systems": "systems_6",
|
"systems": "systems_6",
|
||||||
"treefmt-nix": "treefmt-nix",
|
"treefmt-nix": "treefmt-nix",
|
||||||
"wezterm": "wezterm"
|
"wezterm": "wezterm"
|
||||||
|
@ -2775,13 +2642,11 @@
|
||||||
"rust-overlay_2": {
|
"rust-overlay_2": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"flake-utils": [
|
"flake-utils": [
|
||||||
"neovim-flake",
|
|
||||||
"nvf",
|
"nvf",
|
||||||
"nil",
|
"nil",
|
||||||
"flake-utils"
|
"flake-utils"
|
||||||
],
|
],
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
"neovim-flake",
|
|
||||||
"nvf",
|
"nvf",
|
||||||
"nil",
|
"nil",
|
||||||
"nixpkgs"
|
"nixpkgs"
|
||||||
|
@ -2809,11 +2674,11 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1729477859,
|
"lastModified": 1726280639,
|
||||||
"narHash": "sha256-r0VyeJxy4O4CgTB/PNtfQft9fPfN1VuGvnZiCxDArvg=",
|
"narHash": "sha256-YfLRPlFZWrT2oRLNAoqf7G3+NnUTDdlIJk6tmBU7kXM=",
|
||||||
"owner": "oxalica",
|
"owner": "oxalica",
|
||||||
"repo": "rust-overlay",
|
"repo": "rust-overlay",
|
||||||
"rev": "ada8266712449c4c0e6ee6fcbc442b3c217c79e1",
|
"rev": "e9f8641c92f26fd1e076e705edb12147c384171d",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -2822,34 +2687,18 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"sam-zola": {
|
|
||||||
"flake": false,
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1612976548,
|
|
||||||
"narHash": "sha256-ut1NiSM0GooRrHFikvuTCLU2XhpplhFQejFSbTa9ZdU=",
|
|
||||||
"owner": "janbaudisch",
|
|
||||||
"repo": "zola-sam",
|
|
||||||
"rev": "890b51b4105fd2e63f5e417e5cb63b8e25d5721f",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "janbaudisch",
|
|
||||||
"repo": "zola-sam",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"systems": {
|
"systems": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1681028828,
|
"lastModified": 1689347949,
|
||||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
"narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=",
|
||||||
"owner": "nix-systems",
|
"owner": "nix-systems",
|
||||||
"repo": "default",
|
"repo": "default-linux",
|
||||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
"rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "nix-systems",
|
"owner": "nix-systems",
|
||||||
"repo": "default",
|
"repo": "default-linux",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -2945,14 +2794,14 @@
|
||||||
},
|
},
|
||||||
"treefmt-nix": {
|
"treefmt-nix": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": "nixpkgs_9"
|
"nixpkgs": "nixpkgs_8"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1732643199,
|
"lastModified": 1729242555,
|
||||||
"narHash": "sha256-uI7TXEb231o8dkwB5AUCecx3AQtosRmL6hKgnckvjps=",
|
"narHash": "sha256-6jWSWxv2crIXmYSEb3LEVsFkCkyVHNllk61X4uhqfCs=",
|
||||||
"owner": "numtide",
|
"owner": "numtide",
|
||||||
"repo": "treefmt-nix",
|
"repo": "treefmt-nix",
|
||||||
"rev": "84637a7ab04179bdc42aa8fd0af1909fba76ad0c",
|
"rev": "d986489c1c757f6921a48c1439f19bfb9b8ecab5",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -3008,11 +2857,11 @@
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"dir": "nix",
|
"dir": "nix",
|
||||||
"lastModified": 1732036472,
|
"lastModified": 1729006311,
|
||||||
"narHash": "sha256-8lv1bc7Lw5S7UFOduShwSHfBzB4Vl0ex22Cb+q/qLi0=",
|
"narHash": "sha256-1xtKJHu6CFnOhp4snof+WSTwcdPgwIaD6mBODP/cv3w=",
|
||||||
"owner": "wez",
|
"owner": "wez",
|
||||||
"repo": "wezterm",
|
"repo": "wezterm",
|
||||||
"rev": "4050072da21cc3106d0985281d75978c07e22abc",
|
"rev": "9ddca7bde92090792dbcdc65c1e9897c362196d7",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -3026,16 +2875,16 @@
|
||||||
"xwayland-satellite-stable": {
|
"xwayland-satellite-stable": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1730166465,
|
"lastModified": 1718165778,
|
||||||
"narHash": "sha256-nq7bouXQXaaPPo/E+Jbq+wNHnatD4dY8OxSrRqzvy6s=",
|
"narHash": "sha256-dwF9nI54a6Fo9XU5s4qmvMXSgCid3YQVGxch00qEMvI=",
|
||||||
"owner": "Supreeeme",
|
"owner": "Supreeeme",
|
||||||
"repo": "xwayland-satellite",
|
"repo": "xwayland-satellite",
|
||||||
"rev": "a713cf46cb7db84a0d1b57c3a397c610cad3cf98",
|
"rev": "b6d281967cb0b7bf1dfdb8d0f597b517dc4aa5c5",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "Supreeeme",
|
"owner": "Supreeeme",
|
||||||
"ref": "v0.5",
|
"ref": "v0.4",
|
||||||
"repo": "xwayland-satellite",
|
"repo": "xwayland-satellite",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
|
@ -3043,11 +2892,11 @@
|
||||||
"xwayland-satellite-unstable": {
|
"xwayland-satellite-unstable": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1732233710,
|
"lastModified": 1729139001,
|
||||||
"narHash": "sha256-gWf9dX6DVx0ssK2G3yrFG9yMT9UU0mDwyD51z/Q6FTA=",
|
"narHash": "sha256-BADKw4fQma8tUNBRfmS9YLXTRXK4nYyXIxQdhGuEV0s=",
|
||||||
"owner": "Supreeeme",
|
"owner": "Supreeeme",
|
||||||
"repo": "xwayland-satellite",
|
"repo": "xwayland-satellite",
|
||||||
"rev": "02f30546264ff8407cbb39528b3a3cc3045e53c1",
|
"rev": "ab2d09962c425670a4a7ca6ef5d92a0f06632499",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
25
flake.nix
25
flake.nix
|
@ -5,8 +5,6 @@
|
||||||
self,
|
self,
|
||||||
nixpkgs,
|
nixpkgs,
|
||||||
systems,
|
systems,
|
||||||
agenix,
|
|
||||||
deploy-rs,
|
|
||||||
treefmt-nix,
|
treefmt-nix,
|
||||||
...
|
...
|
||||||
} @ inputs: let
|
} @ inputs: let
|
||||||
|
@ -18,20 +16,17 @@
|
||||||
packages = [
|
packages = [
|
||||||
pkgs.alejandra
|
pkgs.alejandra
|
||||||
pkgs.git
|
pkgs.git
|
||||||
deploy-rs.packages.${pkgs.system}.default
|
|
||||||
agenix.packages.${pkgs.system}.default
|
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
formatter = eachSystem (pkgs: treefmtEval.${pkgs.system}.config.build.wrapper);
|
formatter = eachSystem (pkgs: treefmtEval.${pkgs.system}.config.build.wrapper);
|
||||||
nixosConfigurations = import ./hosts {inherit inputs;};
|
nixosModules = import ./modules;
|
||||||
packages = eachSystem (pkgs: import ./pkgs {inherit inputs pkgs;});
|
nixosConfigurations = import ./hosts {inherit self inputs;};
|
||||||
deploy.nodes = import ./nodes {inherit inputs;};
|
deploy.nodes = import ./nodes {inherit self inputs;};
|
||||||
checks = builtins.mapAttrs (_: deployLib: deployLib.deployChecks self.deploy) deploy-rs.lib;
|
|
||||||
};
|
};
|
||||||
inputs = {
|
inputs = {
|
||||||
# nix related
|
# nix related
|
||||||
nixpkgs.url = "nixpkgs/nixos-unstable";
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||||
systems.url = "github:nix-systems/default-linux";
|
systems.url = "github:nix-systems/default-linux";
|
||||||
nixos-hardware.url = "github:NixOS/nixos-hardware";
|
nixos-hardware.url = "github:NixOS/nixos-hardware";
|
||||||
lanzaboote = {
|
lanzaboote = {
|
||||||
|
@ -48,10 +43,6 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
# other
|
# other
|
||||||
agenix = {
|
|
||||||
url = "github:ryantm/agenix";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
ags.url = "github:Aylur/ags";
|
ags.url = "github:Aylur/ags";
|
||||||
basix.url = "github:notashelf/basix";
|
basix.url = "github:notashelf/basix";
|
||||||
deploy-rs.url = "github:serokell/deploy-rs";
|
deploy-rs.url = "github:serokell/deploy-rs";
|
||||||
|
@ -59,12 +50,8 @@
|
||||||
url = "gitlab:rycee/nur-expressions?dir=pkgs/firefox-addons";
|
url = "gitlab:rycee/nur-expressions?dir=pkgs/firefox-addons";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
niri.url = "github:sodiboo/niri-flake";
|
niri = {url = "github:sodiboo/niri-flake";};
|
||||||
neovim-flake = {
|
nvf.url = "github:notashelf/nvf";
|
||||||
url = "git+https://git.nezia.dev/nezia/neovim-flake";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
portfolio.url = "github:nezia1/portfolio";
|
|
||||||
plasma-manager = {
|
plasma-manager = {
|
||||||
url = "github:nix-community/plasma-manager";
|
url = "github:nix-community/plasma-manager";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
|
156
home/programs/ags/config.js
Normal file
156
home/programs/ags/config.js
Normal file
|
@ -0,0 +1,156 @@
|
||||||
|
const mpris = await Service.import("mpris");
|
||||||
|
const audio = await Service.import("audio");
|
||||||
|
const battery = await Service.import("battery");
|
||||||
|
const systemtray = await Service.import("systemtray");
|
||||||
|
import { NotificationPopups } from "./notificationPopups.js";
|
||||||
|
const date = Variable("", {
|
||||||
|
poll: [1000, 'date "+%H:%M %b %e."'],
|
||||||
|
});
|
||||||
|
|
||||||
|
// widgets can be only assigned as a child in one container
|
||||||
|
// so to make a reuseable widget, make it a function
|
||||||
|
// then you can simply instantiate one by calling it
|
||||||
|
|
||||||
|
function Clock() {
|
||||||
|
return Widget.Label({
|
||||||
|
class_name: "clock",
|
||||||
|
label: date.bind(),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function Media() {
|
||||||
|
const label = Utils.watch("", mpris, "player-changed", () => {
|
||||||
|
if (mpris.players[0]) {
|
||||||
|
const { track_artists, track_title } = mpris.players[0];
|
||||||
|
return `${track_artists.join(", ")} - ${track_title}`;
|
||||||
|
} else {
|
||||||
|
return "Nothing is playing";
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return Widget.Button({
|
||||||
|
class_name: "media",
|
||||||
|
on_primary_click: () => mpris.getPlayer("")?.playPause(),
|
||||||
|
on_scroll_up: () => mpris.getPlayer("")?.next(),
|
||||||
|
on_scroll_down: () => mpris.getPlayer("")?.previous(),
|
||||||
|
child: Widget.Label({ label }),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function Volume() {
|
||||||
|
const icons = {
|
||||||
|
101: "overamplified",
|
||||||
|
67: "high",
|
||||||
|
34: "medium",
|
||||||
|
1: "low",
|
||||||
|
0: "muted",
|
||||||
|
};
|
||||||
|
|
||||||
|
function getIcon() {
|
||||||
|
const icon = audio.speaker.is_muted
|
||||||
|
? 0
|
||||||
|
: [101, 67, 34, 1, 0].find(
|
||||||
|
(threshold) => threshold <= audio.speaker.volume * 100,
|
||||||
|
);
|
||||||
|
|
||||||
|
return `audio-volume-${icons[icon]}-symbolic`;
|
||||||
|
}
|
||||||
|
|
||||||
|
const icon = Widget.Icon({
|
||||||
|
icon: Utils.watch(getIcon(), audio.speaker, getIcon),
|
||||||
|
});
|
||||||
|
|
||||||
|
const slider = Widget.Slider({
|
||||||
|
hexpand: true,
|
||||||
|
draw_value: false,
|
||||||
|
on_change: ({ value }) => (audio.speaker.volume = value),
|
||||||
|
setup: (self) =>
|
||||||
|
self.hook(audio.speaker, () => {
|
||||||
|
self.value = audio.speaker.volume || 0;
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
|
||||||
|
return Widget.Box({
|
||||||
|
class_name: "volume",
|
||||||
|
css: "min-width: 180px",
|
||||||
|
children: [icon, slider],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function BatteryLabel() {
|
||||||
|
const value = battery.bind("percent").as((p) => (p > 0 ? p / 100 : 0));
|
||||||
|
const icon = battery
|
||||||
|
.bind("percent")
|
||||||
|
.as((p) => `battery-level-${Math.floor(p / 10) * 10}-symbolic`);
|
||||||
|
|
||||||
|
return Widget.Box({
|
||||||
|
class_name: "battery",
|
||||||
|
visible: battery.bind("available"),
|
||||||
|
children: [
|
||||||
|
Widget.Icon({ icon }),
|
||||||
|
Widget.LevelBar({
|
||||||
|
widthRequest: 140,
|
||||||
|
vpack: "center",
|
||||||
|
value,
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function SysTray() {
|
||||||
|
const items = systemtray.bind("items").as((items) =>
|
||||||
|
items.map((item) =>
|
||||||
|
Widget.Button({
|
||||||
|
child: Widget.Icon({ icon: item.bind("icon") }),
|
||||||
|
on_primary_click: (_, event) => item.activate(event),
|
||||||
|
on_secondary_click: (_, event) => item.openMenu(event),
|
||||||
|
tooltip_markup: item.bind("tooltip_markup"),
|
||||||
|
}),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
return Widget.Box({
|
||||||
|
children: items,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// layout of the bar
|
||||||
|
function Left() {
|
||||||
|
return Widget.Box({});
|
||||||
|
}
|
||||||
|
|
||||||
|
function Center() {
|
||||||
|
return Widget.Box({
|
||||||
|
spacing: 8,
|
||||||
|
children: [Media()],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function Right() {
|
||||||
|
return Widget.Box({
|
||||||
|
hpack: "end",
|
||||||
|
spacing: 8,
|
||||||
|
children: [Volume(), BatteryLabel(), Clock(), SysTray()],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function Bar() {
|
||||||
|
return Widget.Window({
|
||||||
|
name: "bar", // name has to be unique
|
||||||
|
class_name: "bar",
|
||||||
|
anchor: ["top", "left", "right"],
|
||||||
|
exclusivity: "exclusive",
|
||||||
|
child: Widget.CenterBox({
|
||||||
|
start_widget: Left(),
|
||||||
|
center_widget: Center(),
|
||||||
|
end_widget: Right(),
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
App.config({
|
||||||
|
style: "./style.css",
|
||||||
|
windows: [Bar(), NotificationPopups()],
|
||||||
|
});
|
||||||
|
|
||||||
|
export {};
|
42
home/programs/ags/default.nix
Normal file
42
home/programs/ags/default.nix
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
{
|
||||||
|
inputs,
|
||||||
|
pkgs,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
cfg = config.programs.ags;
|
||||||
|
in {
|
||||||
|
imports = [inputs.ags.homeManagerModules.default];
|
||||||
|
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
libdbusmenu-gtk3
|
||||||
|
dart-sass
|
||||||
|
];
|
||||||
|
|
||||||
|
programs.ags = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
# null or path, leave as null if you don't want hm to manage the config
|
||||||
|
configDir = ./.;
|
||||||
|
|
||||||
|
# additional packages to add to gjs's runtime
|
||||||
|
extraPackages = with pkgs; [
|
||||||
|
gtksourceview
|
||||||
|
webkitgtk
|
||||||
|
accountsservice
|
||||||
|
];
|
||||||
|
};
|
||||||
|
systemd.user.services.ags = {
|
||||||
|
Unit = {
|
||||||
|
Description = "Aylur's Gtk Shell";
|
||||||
|
PartOf = [
|
||||||
|
"graphical-session.target"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
Service = {
|
||||||
|
ExecStart = "${cfg.package}/bin/ags";
|
||||||
|
Restart = "on-failure";
|
||||||
|
};
|
||||||
|
Install.WantedBy = ["graphical-session.target"];
|
||||||
|
};
|
||||||
|
}
|
124
home/programs/ags/notificationPopups.js
Normal file
124
home/programs/ags/notificationPopups.js
Normal file
|
@ -0,0 +1,124 @@
|
||||||
|
const notifications = await Service.import("notifications");
|
||||||
|
|
||||||
|
/** @param {import('resource:///com/github/Aylur/ags/service/notifications.js').Notification} n */
|
||||||
|
function NotificationIcon({ app_entry, app_icon, image }) {
|
||||||
|
if (image) {
|
||||||
|
return Widget.Box({
|
||||||
|
css:
|
||||||
|
`background-image: url("${image}");` +
|
||||||
|
"background-size: contain;" +
|
||||||
|
"background-repeat: no-repeat;" +
|
||||||
|
"background-position: center;",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
let icon = "dialog-information-symbolic";
|
||||||
|
if (Utils.lookUpIcon(app_icon)) icon = app_icon;
|
||||||
|
|
||||||
|
if (app_entry && Utils.lookUpIcon(app_entry)) icon = app_entry;
|
||||||
|
|
||||||
|
return Widget.Box({
|
||||||
|
child: Widget.Icon(icon),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @param {import('resource:///com/github/Aylur/ags/service/notifications.js').Notification} n */
|
||||||
|
function Notification(n) {
|
||||||
|
const icon = Widget.Box({
|
||||||
|
vpack: "start",
|
||||||
|
class_name: "icon",
|
||||||
|
child: NotificationIcon(n),
|
||||||
|
});
|
||||||
|
|
||||||
|
const title = Widget.Label({
|
||||||
|
class_name: "title",
|
||||||
|
xalign: 0,
|
||||||
|
justification: "left",
|
||||||
|
hexpand: true,
|
||||||
|
max_width_chars: 24,
|
||||||
|
truncate: "end",
|
||||||
|
wrap: true,
|
||||||
|
label: n.summary,
|
||||||
|
use_markup: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
const body = Widget.Label({
|
||||||
|
class_name: "body",
|
||||||
|
hexpand: true,
|
||||||
|
use_markup: true,
|
||||||
|
xalign: 0,
|
||||||
|
justification: "left",
|
||||||
|
label: n.body,
|
||||||
|
wrap: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
const actions = Widget.Box({
|
||||||
|
class_name: "actions",
|
||||||
|
children: n.actions.map(({ id, label }) =>
|
||||||
|
Widget.Button({
|
||||||
|
class_name: "action-button",
|
||||||
|
on_clicked: () => {
|
||||||
|
n.invoke(id);
|
||||||
|
n.dismiss();
|
||||||
|
},
|
||||||
|
hexpand: true,
|
||||||
|
child: Widget.Label(label),
|
||||||
|
}),
|
||||||
|
),
|
||||||
|
});
|
||||||
|
|
||||||
|
return Widget.EventBox(
|
||||||
|
{
|
||||||
|
attribute: { id: n.id },
|
||||||
|
on_primary_click: n.dismiss,
|
||||||
|
},
|
||||||
|
Widget.Box(
|
||||||
|
{
|
||||||
|
class_name: `notification ${n.urgency}`,
|
||||||
|
vertical: true,
|
||||||
|
},
|
||||||
|
Widget.Box([icon, Widget.Box({ vertical: true }, title, body)]),
|
||||||
|
actions,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function NotificationPopups(monitor = 0) {
|
||||||
|
const list = Widget.Box({
|
||||||
|
vertical: true,
|
||||||
|
children: notifications.popups.map(Notification),
|
||||||
|
});
|
||||||
|
|
||||||
|
function onNotified(_, /** @type {number} */ id) {
|
||||||
|
const n = notifications.getNotification(id);
|
||||||
|
if (n) list.children = [Notification(n), ...list.children];
|
||||||
|
}
|
||||||
|
|
||||||
|
function onDismissed(_, /** @type {number} */ id) {
|
||||||
|
list.children.find((n) => n.attribute.id === id)?.destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
list
|
||||||
|
.hook(notifications, onNotified, "notified")
|
||||||
|
.hook(notifications, onDismissed, "dismissed");
|
||||||
|
|
||||||
|
return Widget.Window({
|
||||||
|
monitor,
|
||||||
|
name: `notifications${monitor}`,
|
||||||
|
class_name: "notification-popups",
|
||||||
|
anchor: ["top", "right"],
|
||||||
|
child: Widget.Box({
|
||||||
|
css: "min-width: 2px; min-height: 2px;",
|
||||||
|
class_name: "notifications",
|
||||||
|
vertical: true,
|
||||||
|
child: list,
|
||||||
|
|
||||||
|
/** this is a simple one liner that could be used instead of
|
||||||
|
hooking into the 'notified' and 'dismissed' signals.
|
||||||
|
but its not very optimized becuase it will recreate
|
||||||
|
the whole list everytime a notification is added or dismissed */
|
||||||
|
// children: notifications.bind('popups')
|
||||||
|
// .as(popups => popups.map(Notification))
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
}
|
15
home/programs/ags/src/README.md
Normal file
15
home/programs/ags/src/README.md
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
|
||||||
|
# Starter Config
|
||||||
|
|
||||||
|
if suggestions don't work, first make sure
|
||||||
|
you have TypeScript LSP working in your editor
|
||||||
|
|
||||||
|
if you do not want typechecking only suggestions
|
||||||
|
|
||||||
|
```json
|
||||||
|
// tsconfig.json
|
||||||
|
"checkJs": false
|
||||||
|
```
|
||||||
|
|
||||||
|
types are symlinked to:
|
||||||
|
/home/nezia/.local/share/com.github.Aylur.ags/types
|
57
home/programs/ags/style.css
Normal file
57
home/programs/ags/style.css
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
window.notification-popups box.notifications {
|
||||||
|
padding: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon {
|
||||||
|
min-width: 68px;
|
||||||
|
min-height: 68px;
|
||||||
|
margin-right: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon image {
|
||||||
|
font-size: 58px;
|
||||||
|
/* to center the icon */
|
||||||
|
margin: 5px;
|
||||||
|
color: @theme_fg_color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon box {
|
||||||
|
min-width: 68px;
|
||||||
|
min-height: 68px;
|
||||||
|
border-radius: 7px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification {
|
||||||
|
min-width: 350px;
|
||||||
|
border-radius: 11px;
|
||||||
|
padding: 1em;
|
||||||
|
margin: 0.5em;
|
||||||
|
border: 1px solid @wm_borders_edge;
|
||||||
|
background-color: @theme_bg_color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notification.critical {
|
||||||
|
border: 1px solid lightcoral;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title {
|
||||||
|
color: @theme_fg_color;
|
||||||
|
font-size: 1.4em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.body {
|
||||||
|
color: @theme_unfocused_fg_color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.actions .action-button {
|
||||||
|
margin: 0 0.4em;
|
||||||
|
margin-top: 0.8em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.actions .action-button:first-child {
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.actions .action-button:last-child {
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
18
home/programs/ags/tsconfig.json
Normal file
18
home/programs/ags/tsconfig.json
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"target": "ES2022",
|
||||||
|
"module": "ES2022",
|
||||||
|
"lib": [
|
||||||
|
"ES2022"
|
||||||
|
],
|
||||||
|
"allowJs": true,
|
||||||
|
"checkJs": true,
|
||||||
|
"strict": true,
|
||||||
|
"noImplicitAny": false,
|
||||||
|
"baseUrl": ".",
|
||||||
|
"typeRoots": [
|
||||||
|
"./types"
|
||||||
|
],
|
||||||
|
"skipLibCheck": true
|
||||||
|
}
|
||||||
|
}
|
|
@ -12,8 +12,7 @@
|
||||||
in {
|
in {
|
||||||
programs.firefox = {
|
programs.firefox = {
|
||||||
enable = true;
|
enable = true;
|
||||||
package = pkgs.wrapFirefox pkgs.firefox-unwrapped {
|
policies = {
|
||||||
extraPolicies = {
|
|
||||||
DisableTelemetry = true;
|
DisableTelemetry = true;
|
||||||
DisablePocket = true;
|
DisablePocket = true;
|
||||||
DisableFeedbackCommands = true;
|
DisableFeedbackCommands = true;
|
||||||
|
@ -21,9 +20,9 @@ in {
|
||||||
OfferToSaveLogins = false;
|
OfferToSaveLogins = false;
|
||||||
OffertosaveloginsDefault = false;
|
OffertosaveloginsDefault = false;
|
||||||
PasswordManagerEnabled = false;
|
PasswordManagerEnabled = false;
|
||||||
SearchSuggestEnabled = true;
|
|
||||||
|
|
||||||
# https://github.com/Sly-Harvey/NixOS/blob/f9da2691ea46565256ad757959cfc26ec6cee10d/modules/programs/browser/firefox/default.nix#L58-L163
|
# https://github.com/Sly-Harvey/NixOS/blob/f9da2691ea46565256ad757959cfc26ec6cee10d/modules/programs/browser/firefox/default.nix#L58-L163
|
||||||
|
# TODO: declare which block lists are needed
|
||||||
"3rdparty".Extensions = {
|
"3rdparty".Extensions = {
|
||||||
"addon@darkreader.org" = {
|
"addon@darkreader.org" = {
|
||||||
permissions = ["internal:privateBrowsingAllowed"];
|
permissions = ["internal:privateBrowsingAllowed"];
|
||||||
|
@ -53,40 +52,6 @@ in {
|
||||||
uiTheme = "dark";
|
uiTheme = "dark";
|
||||||
advancedUserEnabled = true;
|
advancedUserEnabled = true;
|
||||||
userFiltersTrusted = true;
|
userFiltersTrusted = true;
|
||||||
importedLists = [
|
|
||||||
"https://raw.githubusercontent.com/laylavish/uBlockOrigin-HUGE-AI-Blocklist/main/list.txt"
|
|
||||||
];
|
|
||||||
selectedFilterLists = [
|
|
||||||
"FRA-0"
|
|
||||||
"adguard-cookies"
|
|
||||||
"adguard-mobile-app-banners"
|
|
||||||
"adguard-other-annoyances"
|
|
||||||
"adguard-popup-overlays"
|
|
||||||
"adguard-social"
|
|
||||||
"adguard-spyware-url"
|
|
||||||
"adguard-widgets"
|
|
||||||
"easylist"
|
|
||||||
"easylist-annoyances"
|
|
||||||
"easylist-chat"
|
|
||||||
"easylist-newsletters"
|
|
||||||
"easylist-notifications"
|
|
||||||
"easyprivacy"
|
|
||||||
"fanboy-cookiemonster"
|
|
||||||
"https://filters.adtidy.org/extension/ublock/filters/3.txt"
|
|
||||||
"https://github.com/DandelionSprout/adfilt/raw/master/LegitimateURLShortener.txt"
|
|
||||||
"plowe-0"
|
|
||||||
"ublock-annoyances"
|
|
||||||
"ublock-badware"
|
|
||||||
"ublock-cookies-adguard"
|
|
||||||
"ublock-cookies-easylist"
|
|
||||||
"ublock-filters"
|
|
||||||
"ublock-privacy"
|
|
||||||
"ublock-quick-fixes"
|
|
||||||
"ublock-unbreak"
|
|
||||||
"urlhaus-1"
|
|
||||||
"https://raw.githubusercontent.com/laylavish/uBlockOrigin-HUGE-AI-Blocklist/main/list.txt"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -107,6 +72,7 @@ in {
|
||||||
ublock-origin
|
ublock-origin
|
||||||
violentmonkey
|
violentmonkey
|
||||||
];
|
];
|
||||||
|
|
||||||
# https://git.jacekpoz.pl/poz/niksos/src/commit/a48647a1c5bc6877a1100a65f4dc169b2fc11ed7/hosts/hape/firefox.nix
|
# https://git.jacekpoz.pl/poz/niksos/src/commit/a48647a1c5bc6877a1100a65f4dc169b2fc11ed7/hosts/hape/firefox.nix
|
||||||
search = {
|
search = {
|
||||||
default = "SearxNG";
|
default = "SearxNG";
|
||||||
|
@ -135,24 +101,49 @@ in {
|
||||||
"type" = "application/x-suggestions+json";
|
"type" = "application/x-suggestions+json";
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
};
|
iconUpdateURL = "https://search.nezia.dev/favicon.ico";
|
||||||
"MyNixOS" = {
|
|
||||||
urls = [{template = "https://mynixos.com/search?q={searchTerms}";}];
|
|
||||||
iconUpdateURL = "https://mynixos.com/favicon.ico";
|
|
||||||
updateInterval = 24 * 60 * 60 * 1000;
|
updateInterval = 24 * 60 * 60 * 1000;
|
||||||
definedAliases = ["@nx"];
|
definedAliases = ["@s"];
|
||||||
|
};
|
||||||
|
"Nix Packages" = {
|
||||||
|
urls = [
|
||||||
|
{
|
||||||
|
template = "https://search.nixos.org/packages";
|
||||||
|
params = [
|
||||||
|
{
|
||||||
|
name = "type";
|
||||||
|
value = "packages";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "query";
|
||||||
|
value = "{searchTerms}";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
|
||||||
|
definedAliases = ["@np"];
|
||||||
|
};
|
||||||
|
"NixOS Wiki" = {
|
||||||
|
urls = [{template = "https://wiki.nixos.org/w/index.php?search={searchTerms}";}];
|
||||||
|
iconUpdateURL = "https://wiki.nixos.org/favicon.ico";
|
||||||
|
updateInterval = 24 * 60 * 60 * 1000;
|
||||||
|
definedAliases = ["@nw"];
|
||||||
|
};
|
||||||
|
"NixOS Options" = {
|
||||||
|
urls = [{template = "https://search.nixos.org/options?channel=unstable&type=packages&query={searchTerms}";}];
|
||||||
|
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
|
||||||
|
definedAliases = ["@no"];
|
||||||
};
|
};
|
||||||
"Noogle" = {
|
"Noogle" = {
|
||||||
urls = [{template = "https://noogle.dev/q?term={searchTerms}";}];
|
urls = [{template = "https://noogle.dev/q?term={searchTerms}";}];
|
||||||
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
|
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
|
||||||
definedAliases = ["@ng"];
|
definedAliases = ["@ng"];
|
||||||
};
|
};
|
||||||
"GitHub Nix" = {
|
"Home Manager" = {
|
||||||
# https://github.com/search?q=language%3Anix+NOT+is%3Afork+programs.neovim&type=code
|
urls = [{template = "https://home-manager-options.extranix.com/?release=master&query={searchTerms}";}];
|
||||||
urls = [{template = "https://github.com/search?q=language:nix NOT is:fork {searchTerms}&type=code";}];
|
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
|
||||||
iconUpdateURL = "https://github.com/favicon.ico";
|
definedAliases = ["@hm"];
|
||||||
updateInterval = 24 * 60 * 60 * 1000;
|
|
||||||
definedAliases = ["@ghn"];
|
|
||||||
};
|
};
|
||||||
"Google".metaData.alias = "@g"; # builtin engines only support specifying one additional alias
|
"Google".metaData.alias = "@g"; # builtin engines only support specifying one additional alias
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,49 +1,39 @@
|
||||||
{
|
{pkgs, ...}: {
|
||||||
inputs,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
imports = [
|
imports = [
|
||||||
./browsers
|
./browsers
|
||||||
./media
|
./media
|
||||||
./xdg.nix
|
./xdg.nix
|
||||||
./gtk.nix
|
./gtk.nix
|
||||||
|
./editors/neovim.nix
|
||||||
./editors/helix.nix
|
./editors/helix.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
# idk where to put this
|
# idk where to put this
|
||||||
programs = {
|
programs = {
|
||||||
fzf.enable = true;
|
fzf.enable = true;
|
||||||
fastfetch.enable = true;
|
hyfetch.enable = true;
|
||||||
hyfetch = {
|
yazi = {
|
||||||
enable = true;
|
enable = true;
|
||||||
settings = {
|
enableFishIntegration = true;
|
||||||
preset = "nonbinary";
|
|
||||||
mode = "rgb";
|
|
||||||
backend = "fastfetch";
|
|
||||||
color_align.mode = "horizontal";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
# miscellaneous programs that do not need to be configured
|
# miscellaneous programs that do not need to be configured
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
cinny-desktop
|
|
||||||
entr
|
|
||||||
fractal
|
|
||||||
geary
|
geary
|
||||||
gnome-control-center
|
|
||||||
imhex
|
imhex
|
||||||
logisim-evolution
|
logisim-evolution
|
||||||
mission-center
|
|
||||||
nautilus
|
|
||||||
obsidian
|
obsidian
|
||||||
playerctl
|
|
||||||
proton-pass
|
proton-pass
|
||||||
simple-scan
|
|
||||||
vesktop
|
vesktop
|
||||||
wl-clipboard
|
wl-clipboard
|
||||||
|
fractal
|
||||||
inputs.neovim-flake.packages.${pkgs.system}.default
|
cinny-desktop
|
||||||
|
gnome-control-center
|
||||||
|
mission-center
|
||||||
|
playerctl
|
||||||
|
nautilus
|
||||||
|
simple-scan
|
||||||
|
entr
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,9 @@
|
||||||
lib,
|
lib,
|
||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
}: {
|
}: let
|
||||||
|
inherit (lib) getExe;
|
||||||
|
in {
|
||||||
programs.helix = {
|
programs.helix = {
|
||||||
enable = true;
|
enable = true;
|
||||||
settings = {
|
settings = {
|
||||||
|
|
121
home/programs/editors/neovim.nix
Normal file
121
home/programs/editors/neovim.nix
Normal file
|
@ -0,0 +1,121 @@
|
||||||
|
{
|
||||||
|
inputs,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
imports = [inputs.nvf.homeManagerModules.default];
|
||||||
|
|
||||||
|
programs.nvf = {
|
||||||
|
enable = true;
|
||||||
|
settings.vim = {
|
||||||
|
viAlias = true;
|
||||||
|
vimAlias = true;
|
||||||
|
enableLuaLoader = true;
|
||||||
|
preventJunkFiles = true;
|
||||||
|
tabWidth = 4;
|
||||||
|
autoIndent = false;
|
||||||
|
useSystemClipboard = true;
|
||||||
|
|
||||||
|
luaConfigPost = lib.concatStrings [
|
||||||
|
''
|
||||||
|
vim.opt.formatoptions:remove('c')
|
||||||
|
vim.opt.formatoptions:remove('r')
|
||||||
|
vim.opt.formatoptions:remove('o')
|
||||||
|
''
|
||||||
|
];
|
||||||
|
|
||||||
|
maps = {
|
||||||
|
normal = {
|
||||||
|
"<leader>m" = {
|
||||||
|
silent = true;
|
||||||
|
action = "<cmd>make<CR>";
|
||||||
|
}; # Same as nnoremap <leader>m <silent> <cmd>make<CR>
|
||||||
|
"<leader>t" = {
|
||||||
|
silent = true;
|
||||||
|
action = "<cmd>Neotree toggle<CR>";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
theme = {
|
||||||
|
enable = true;
|
||||||
|
name = "catppuccin";
|
||||||
|
style = "macchiato";
|
||||||
|
};
|
||||||
|
|
||||||
|
visuals = {
|
||||||
|
enable = true;
|
||||||
|
nvimWebDevicons.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
ui = {
|
||||||
|
noice.enable = true;
|
||||||
|
};
|
||||||
|
notify.nvim-notify.enable = true;
|
||||||
|
|
||||||
|
statusline.lualine = {
|
||||||
|
enable = true;
|
||||||
|
theme = "auto";
|
||||||
|
};
|
||||||
|
|
||||||
|
git.enable = true;
|
||||||
|
|
||||||
|
lsp = {
|
||||||
|
enable = true;
|
||||||
|
lspSignature.enable = true;
|
||||||
|
lspconfig.enable = true;
|
||||||
|
formatOnSave = true;
|
||||||
|
mappings = {
|
||||||
|
addWorkspaceFolder = "<leader>wa";
|
||||||
|
codeAction = "<leader>a";
|
||||||
|
goToDeclaration = "gD";
|
||||||
|
goToDefinition = "gd";
|
||||||
|
hover = "K";
|
||||||
|
listImplementations = "gi";
|
||||||
|
listReferences = "gr";
|
||||||
|
listWorkspaceFolders = "<leader>wl";
|
||||||
|
nextDiagnostic = "<leader>k";
|
||||||
|
previousDiagnostic = "<leader>j";
|
||||||
|
openDiagnosticFloat = "<leader>e";
|
||||||
|
removeWorkspaceFolder = "<leader>wr";
|
||||||
|
renameSymbol = "<leader>r";
|
||||||
|
signatureHelp = "<C-k>";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
autocomplete = {
|
||||||
|
enable = true;
|
||||||
|
alwaysComplete = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
autopairs.enable = true;
|
||||||
|
languages = {
|
||||||
|
enableExtraDiagnostics = true;
|
||||||
|
enableFormat = true;
|
||||||
|
enableLSP = true;
|
||||||
|
enableTreesitter = true;
|
||||||
|
|
||||||
|
nix.enable = true;
|
||||||
|
clang.enable = true;
|
||||||
|
python.enable = true;
|
||||||
|
ts.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
treesitter = {
|
||||||
|
enable = true;
|
||||||
|
fold = true;
|
||||||
|
context.enable = true;
|
||||||
|
grammars = [
|
||||||
|
pkgs.vimPlugins.nvim-treesitter.builtGrammars.nix
|
||||||
|
pkgs.vimPlugins.nvim-treesitter.builtGrammars.c
|
||||||
|
pkgs.vimPlugins.nvim-treesitter.builtGrammars.python
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
binds.whichKey.enable = true;
|
||||||
|
filetree.neo-tree.enable = true;
|
||||||
|
|
||||||
|
telescope.enable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
|
@ -14,6 +14,17 @@
|
||||||
dpi-aware = "auto";
|
dpi-aware = "auto";
|
||||||
font = "monospace:size=14";
|
font = "monospace:size=14";
|
||||||
};
|
};
|
||||||
|
colors = let
|
||||||
|
inherit (inputs.basix.schemeData.base16.${osConfig.theme.scheme}) palette;
|
||||||
|
in {
|
||||||
|
background = "${palette.base00}ff";
|
||||||
|
text = "${palette.base05}ff";
|
||||||
|
input = "${palette.base05}ff";
|
||||||
|
selection = "${palette.base02}ff";
|
||||||
|
selection-text = "${palette.base07}ff";
|
||||||
|
selection-match = "${palette.base0D}ff";
|
||||||
|
border = "${palette.base0E}ff";
|
||||||
|
};
|
||||||
border.width = 5;
|
border.width = 5;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,21 +1,15 @@
|
||||||
{
|
{pkgs, ...}: {
|
||||||
pkgs,
|
home.packages = with pkgs; [
|
||||||
inputs,
|
bottles
|
||||||
...
|
lutris
|
||||||
}: {
|
mangohud
|
||||||
home.packages = [
|
path-of-building
|
||||||
pkgs.bottles
|
protonplus
|
||||||
pkgs.lutris
|
r2modman
|
||||||
pkgs.mangohud
|
|
||||||
pkgs.path-of-building
|
|
||||||
pkgs.protonplus
|
|
||||||
pkgs.r2modman
|
|
||||||
|
|
||||||
# steamtinkerlaunch dependencies
|
# steamtinkerlaunch dependencies
|
||||||
pkgs.xdotool
|
xdotool
|
||||||
pkgs.xorg.xwininfo
|
xorg.xwininfo
|
||||||
pkgs.yad
|
yad
|
||||||
|
|
||||||
inputs.self.packages.${pkgs.system}.bolt-launcher
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
{
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
osConfig,
|
|
||||||
config,
|
config,
|
||||||
...
|
...
|
||||||
}: {
|
}: {
|
||||||
|
@ -26,7 +25,7 @@
|
||||||
color-scheme = "prefer-dark";
|
color-scheme = "prefer-dark";
|
||||||
};
|
};
|
||||||
"org/gnome/desktop/background" = {
|
"org/gnome/desktop/background" = {
|
||||||
picture-uri-dark = "file://" + builtins.toString osConfig.theme.wallpaper;
|
picture-uri-dark = "file://" + builtins.toString config.style.wallpaper;
|
||||||
};
|
};
|
||||||
|
|
||||||
"org/gnome/desktop/search-providers" = {
|
"org/gnome/desktop/search-providers" = {
|
||||||
|
|
|
@ -1,8 +1,19 @@
|
||||||
{
|
{
|
||||||
|
inputs,
|
||||||
pkgs,
|
pkgs,
|
||||||
config,
|
config,
|
||||||
|
osConfig,
|
||||||
|
lib,
|
||||||
...
|
...
|
||||||
}: {
|
}: let
|
||||||
|
isDark = inputs.basix.schemeData.base16.${osConfig.theme.scheme}.variant == "dark";
|
||||||
|
in {
|
||||||
|
home.pointerCursor = {
|
||||||
|
inherit (osConfig.theme.cursorTheme) name package size;
|
||||||
|
gtk.enable = true;
|
||||||
|
x11.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
gtk = {
|
gtk = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|
||||||
|
@ -14,6 +25,7 @@
|
||||||
|
|
||||||
gtk3.extraConfig = {
|
gtk3.extraConfig = {
|
||||||
gtk-decoration-layout = ":menu";
|
gtk-decoration-layout = ":menu";
|
||||||
|
gtk-application-prefer-dark-theme = isDark;
|
||||||
};
|
};
|
||||||
|
|
||||||
gtk4.extraConfig = {
|
gtk4.extraConfig = {
|
||||||
|
@ -21,5 +33,21 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
gtk2.configLocation = "${config.xdg.configHome}/gtk-2.0/gtkrc";
|
gtk2.configLocation = "${config.xdg.configHome}/gtk-2.0/gtkrc";
|
||||||
|
|
||||||
|
iconTheme = {
|
||||||
|
inherit (osConfig.theme.gtk.iconTheme) name package;
|
||||||
|
};
|
||||||
|
|
||||||
|
theme = lib.mkIf (!osConfig.services.xserver.desktopManager.gnome.enable) {
|
||||||
|
inherit (osConfig.theme.gtk.theme) name package;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
dconf.settings = {
|
||||||
|
"org/gnome/desktop/interface" = {
|
||||||
|
color-scheme =
|
||||||
|
if isDark
|
||||||
|
then "prefer-dark"
|
||||||
|
else "default";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
_: {
|
{pkgs, ...}: {
|
||||||
programs.zathura = {
|
programs.zathura = {
|
||||||
enable = true;
|
enable = true;
|
||||||
options = {
|
options = {
|
||||||
|
@ -13,5 +13,13 @@ _: {
|
||||||
scroll-step = "100";
|
scroll-step = "100";
|
||||||
zoom-min = "10";
|
zoom-min = "10";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
extraConfig = "include catppuccin-frappe";
|
||||||
|
};
|
||||||
|
xdg.configFile = {
|
||||||
|
"zathura/catppuccin-frappe".source = pkgs.fetchurl {
|
||||||
|
url = "https://raw.githubusercontent.com/catppuccin/zathura/main/src/catppuccin-frappe";
|
||||||
|
hash = "sha256-xdWI/Ai3iE0zRF/9DCxILKmVaNWbfqHm7Xeh6eKM3MY=";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,19 +8,14 @@
|
||||||
terminal = "foot";
|
terminal = "foot";
|
||||||
browser = "firefox";
|
browser = "firefox";
|
||||||
prefix = "Alt";
|
prefix = "Alt";
|
||||||
guiFileManager = "nautilus";
|
|
||||||
cliFileManager = "yazi";
|
|
||||||
in {
|
in {
|
||||||
programs.niri.settings.binds = {
|
programs.niri.settings.binds = {
|
||||||
"${prefix}+D".action.spawn = appLauncher;
|
"${prefix}+D".action.spawn = appLauncher;
|
||||||
"${prefix}+Return".action.spawn = terminal;
|
"${prefix}+Return".action.spawn = terminal;
|
||||||
"${prefix}+W".action.spawn = browser;
|
"${prefix}+W".action.spawn = browser;
|
||||||
"${prefix}+E".action.spawn = guiFileManager;
|
"${prefix}+Shift+E".action.quit.skip-confirmation = true;
|
||||||
"${prefix}+Shift+E".action.spawn = [terminal "-e" cliFileManager];
|
|
||||||
|
|
||||||
"${prefix}+Shift+Slash".action = config.lib.niri.actions.show-hotkey-overlay;
|
"${prefix}+Shift+Slash".action = config.lib.niri.actions.show-hotkey-overlay;
|
||||||
"${prefix}+Q".action = config.lib.niri.actions.close-window;
|
"${prefix}+Q".action = config.lib.niri.actions.close-window;
|
||||||
"${prefix}+Shift+Q".action.quit.skip-confirmation = true;
|
|
||||||
"${prefix}+F".action = config.lib.niri.actions.maximize-column;
|
"${prefix}+F".action = config.lib.niri.actions.maximize-column;
|
||||||
"${prefix}+Shift+F".action = config.lib.niri.actions.fullscreen-window;
|
"${prefix}+Shift+F".action = config.lib.niri.actions.fullscreen-window;
|
||||||
"${prefix}+C".action = config.lib.niri.actions.center-column;
|
"${prefix}+C".action = config.lib.niri.actions.center-column;
|
||||||
|
@ -162,7 +157,5 @@ in {
|
||||||
"XF86AudioMedia" = {
|
"XF86AudioMedia" = {
|
||||||
action.spawn = ["sh" "-c" "env XDG_CURRENT_DESKTOP=gnome gnome-control-center"];
|
action.spawn = ["sh" "-c" "env XDG_CURRENT_DESKTOP=gnome gnome-control-center"];
|
||||||
};
|
};
|
||||||
|
|
||||||
"XF86PowerOff".action.spawn = "wlogout";
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,13 @@
|
||||||
{
|
{
|
||||||
|
inputs,
|
||||||
lib,
|
lib,
|
||||||
pkgs,
|
pkgs,
|
||||||
config,
|
config,
|
||||||
|
osConfig,
|
||||||
...
|
...
|
||||||
}: {
|
}: let
|
||||||
|
colors = inputs.basix.schemeData.base16.${osConfig.theme.scheme}.palette;
|
||||||
|
in {
|
||||||
imports = [./binds.nix];
|
imports = [./binds.nix];
|
||||||
|
|
||||||
xdg.portal = {
|
xdg.portal = {
|
||||||
|
@ -21,13 +25,10 @@
|
||||||
|
|
||||||
programs.niri = {
|
programs.niri = {
|
||||||
settings = {
|
settings = {
|
||||||
input = {
|
input.keyboard.xkb = {
|
||||||
power-key-handling.enable = false;
|
|
||||||
keyboard.xkb = {
|
|
||||||
layout = "us";
|
layout = "us";
|
||||||
options = "compose:ralt";
|
options = "compose:ralt";
|
||||||
};
|
};
|
||||||
};
|
|
||||||
|
|
||||||
prefer-no-csd = true;
|
prefer-no-csd = true;
|
||||||
hotkey-overlay.skip-at-startup = true;
|
hotkey-overlay.skip-at-startup = true;
|
||||||
|
@ -35,6 +36,7 @@
|
||||||
layout = {
|
layout = {
|
||||||
focus-ring = {
|
focus-ring = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
active.color = "#${colors.base0E}";
|
||||||
};
|
};
|
||||||
always-center-single-column = true;
|
always-center-single-column = true;
|
||||||
};
|
};
|
||||||
|
@ -110,64 +112,4 @@
|
||||||
Restart = "on-failure";
|
Restart = "on-failure";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
programs.wlogout = {
|
|
||||||
enable = true;
|
|
||||||
|
|
||||||
layout = let
|
|
||||||
systemd = let
|
|
||||||
systemd = lib.getExe' pkgs.systemd;
|
|
||||||
in {
|
|
||||||
loginctl = systemd "loginctl";
|
|
||||||
systemctl = systemd "systemctl";
|
|
||||||
};
|
|
||||||
in [
|
|
||||||
{
|
|
||||||
action = "${systemd.loginctl} lock-session";
|
|
||||||
keybind = "l";
|
|
||||||
label = "lock";
|
|
||||||
text = "Lock";
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
action = "${systemd.systemctl} hibernate";
|
|
||||||
keybind = "h";
|
|
||||||
label = "hibernate";
|
|
||||||
text = "Hibernate";
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
action = "${
|
|
||||||
systemd.loginctl
|
|
||||||
} terminate-user ${
|
|
||||||
config.home.username
|
|
||||||
}";
|
|
||||||
|
|
||||||
keybind = "q";
|
|
||||||
label = "logout";
|
|
||||||
text = "Logout";
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
action = "${systemd.systemctl} poweroff";
|
|
||||||
keybind = "p";
|
|
||||||
label = "shutdown";
|
|
||||||
text = "Shutdown";
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
action = "${systemd.systemctl} suspend";
|
|
||||||
keybind = "s";
|
|
||||||
label = "suspend";
|
|
||||||
text = "Suspend";
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
action = "${systemd.systemctl} reboot";
|
|
||||||
keybind = "r";
|
|
||||||
label = "reboot";
|
|
||||||
text = "Reboot";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
37
home/programs/plasma/default.nix
Normal file
37
home/programs/plasma/default.nix
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
{
|
||||||
|
inputs,
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
imports = [
|
||||||
|
inputs.plasma-manager.homeManagerModules.plasma-manager
|
||||||
|
];
|
||||||
|
rograms.plasma = {
|
||||||
|
enable = true;
|
||||||
|
workspace = {
|
||||||
|
lookAndFeel = "org.kde.breezedark.desktop";
|
||||||
|
inherit (config.theme) wallpaper;
|
||||||
|
};
|
||||||
|
|
||||||
|
input = {
|
||||||
|
touchpads = [
|
||||||
|
{
|
||||||
|
enable = true;
|
||||||
|
naturalScroll = true;
|
||||||
|
vendorId = "093a";
|
||||||
|
productId = "0274";
|
||||||
|
name = "PIXA3854:00 093A:0274 Touchpad";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
keyboard = {
|
||||||
|
options = [
|
||||||
|
"compose:ralt"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
qalculate-qt
|
||||||
|
];
|
||||||
|
}
|
|
@ -1,4 +1,11 @@
|
||||||
{pkgs, ...}: {
|
{
|
||||||
|
inputs,
|
||||||
|
pkgs,
|
||||||
|
osConfig,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
inherit (inputs.basix.schemeData.base16.${osConfig.theme.scheme}) palette;
|
||||||
|
in {
|
||||||
# requires `security.pam.services.swaylock = { };` at the system level or else
|
# requires `security.pam.services.swaylock = { };` at the system level or else
|
||||||
# unlock will not work.
|
# unlock will not work.
|
||||||
programs.swaylock = {
|
programs.swaylock = {
|
||||||
|
@ -19,6 +26,32 @@
|
||||||
effect-pixelate = 5;
|
effect-pixelate = 5;
|
||||||
|
|
||||||
ignore-empty-password = false; # needed for PAM to work with fprintd / password
|
ignore-empty-password = false; # needed for PAM to work with fprintd / password
|
||||||
|
|
||||||
|
inside-color = palette.base01;
|
||||||
|
inside-clear-color = palette.base0C;
|
||||||
|
inside-caps-lock-color = palette.base09;
|
||||||
|
inside-ver-color = palette.base0D;
|
||||||
|
inside-wrong-color = palette.base08;
|
||||||
|
key-hl-color = palette.base0B;
|
||||||
|
layout-bg-color = palette.base00;
|
||||||
|
layout-border-color = palette.base05;
|
||||||
|
layout-text-color = palette.base07;
|
||||||
|
line-color = palette.base00;
|
||||||
|
line-clear-color = palette.base0C;
|
||||||
|
line-caps-lock-color = palette.base09;
|
||||||
|
line-ver-color = palette.base0D;
|
||||||
|
line-wrong-color = palette.base08;
|
||||||
|
ring-color = palette.base02;
|
||||||
|
ring-clear-color = palette.base0C;
|
||||||
|
ring-caps-lock-color = palette.base09;
|
||||||
|
ring-ver-color = palette.base0D;
|
||||||
|
ring-wrong-color = palette.base08;
|
||||||
|
separator-color = palette.base02;
|
||||||
|
text-color = palette.base07;
|
||||||
|
text-clear-color = palette.base04;
|
||||||
|
text-caps-lock-color = palette.base04;
|
||||||
|
text-ver-color = palette.base04;
|
||||||
|
text-wrong-color = palette.base04;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,178 +0,0 @@
|
||||||
{
|
|
||||||
pkgs,
|
|
||||||
lib,
|
|
||||||
osConfig,
|
|
||||||
config,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
inherit (lib) getExe mkMerge mkIf;
|
|
||||||
inherit (builtins) readFile;
|
|
||||||
in {
|
|
||||||
programs.waybar = {
|
|
||||||
enable = true;
|
|
||||||
systemd.enable = true;
|
|
||||||
style = readFile ./style.css;
|
|
||||||
settings = {
|
|
||||||
mainBar = mkMerge [
|
|
||||||
{
|
|
||||||
layer = "top";
|
|
||||||
position = "top";
|
|
||||||
height = 30;
|
|
||||||
|
|
||||||
margin-top = 6;
|
|
||||||
margin-left = 6;
|
|
||||||
margin-right = 6;
|
|
||||||
margin-bottom = 0;
|
|
||||||
|
|
||||||
modules-left = ["niri/workspaces" "niri/window"];
|
|
||||||
modules-center = ["group/clock"];
|
|
||||||
modules-right =
|
|
||||||
["tray" "group/status" "group/power"]
|
|
||||||
++ lib.optional config.services.swaync.enable "custom/notification";
|
|
||||||
|
|
||||||
battery = {
|
|
||||||
interval = 10;
|
|
||||||
states = {
|
|
||||||
warning = 30;
|
|
||||||
critical = 15;
|
|
||||||
};
|
|
||||||
format = "{icon} {capacity}%";
|
|
||||||
format-charging = " {capacity}% - {time}";
|
|
||||||
format-full = " {capacity}% - Full";
|
|
||||||
format-icons = [
|
|
||||||
""
|
|
||||||
""
|
|
||||||
""
|
|
||||||
""
|
|
||||||
""
|
|
||||||
];
|
|
||||||
max-length = 25;
|
|
||||||
};
|
|
||||||
|
|
||||||
"pulseaudio" = {
|
|
||||||
format = "{icon} {volume}%";
|
|
||||||
format-bluetooth = "{icon} {volume}%";
|
|
||||||
format-muted = " ";
|
|
||||||
format-icons = {
|
|
||||||
"alsa_output.pci-0000_00_1f.3.analog-stereo" = "";
|
|
||||||
"alsa_output.pci-0000_00_1f.3.analog-stereo-muted" = "";
|
|
||||||
headphone = "";
|
|
||||||
hands-free = "";
|
|
||||||
headset = "";
|
|
||||||
phone = "";
|
|
||||||
phone-muted = "";
|
|
||||||
portable = "";
|
|
||||||
car = "";
|
|
||||||
default = [
|
|
||||||
""
|
|
||||||
""
|
|
||||||
];
|
|
||||||
};
|
|
||||||
scroll-step = 1;
|
|
||||||
on-click = "pavucontrol";
|
|
||||||
ignored-sinks = [
|
|
||||||
"Easy Effects Sink"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
"power-profiles-daemon" = {
|
|
||||||
format-icons = {
|
|
||||||
default = "";
|
|
||||||
performance = "";
|
|
||||||
balanced = "";
|
|
||||||
power-saver = "";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
"group/status" = {
|
|
||||||
orientation = "inherit";
|
|
||||||
modules = [
|
|
||||||
"pulseaudio"
|
|
||||||
"power-profiles-daemon"
|
|
||||||
"network"
|
|
||||||
"battery"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
"group/power" = {
|
|
||||||
orientation = "inherit";
|
|
||||||
modules = [
|
|
||||||
"custom/power"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
"group/clock" = {
|
|
||||||
orientation = "inherit";
|
|
||||||
modules = [
|
|
||||||
"clock#time"
|
|
||||||
"clock#date"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
"custom/power" = {
|
|
||||||
format = "";
|
|
||||||
tooltip = false;
|
|
||||||
on-click = getExe pkgs.wlogout;
|
|
||||||
};
|
|
||||||
|
|
||||||
"clock#date" = {
|
|
||||||
format = "{:%D}";
|
|
||||||
tooltip-format = "<tt><big>{calendar}</big></tt>";
|
|
||||||
};
|
|
||||||
|
|
||||||
"clock#time" = {
|
|
||||||
format = "{:%H:%M}";
|
|
||||||
tooltip-format = "{tz_list}";
|
|
||||||
timezones = [
|
|
||||||
osConfig.time.timeZone
|
|
||||||
"US/Eastern"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
network = {
|
|
||||||
interface = "wlp1s0";
|
|
||||||
format = "{ifname}";
|
|
||||||
format-wifi = "{icon}";
|
|
||||||
format-ethernet = "{ipaddr}/{cidr} ";
|
|
||||||
format-disconnected = "";
|
|
||||||
tooltip-format = "{ifname} via {gwaddr} ";
|
|
||||||
tooltip-format-wifi = "{essid} ({signalStrength}%)";
|
|
||||||
tooltip-format-ethernet = "{ifname} ";
|
|
||||||
tooltip-format-disconnected = "Disconnected";
|
|
||||||
max-length = 50;
|
|
||||||
format-icons = [
|
|
||||||
""
|
|
||||||
""
|
|
||||||
""
|
|
||||||
""
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
(mkIf osConfig.programs.niri.enable {
|
|
||||||
"niri/window" = {
|
|
||||||
icon = true;
|
|
||||||
};
|
|
||||||
})
|
|
||||||
(mkIf config.services.swaync.enable {
|
|
||||||
"custom/notification" = {
|
|
||||||
tooltip = false;
|
|
||||||
format = "{icon} ";
|
|
||||||
format-icons = {
|
|
||||||
notification = "";
|
|
||||||
none = "";
|
|
||||||
dnd-notification = "";
|
|
||||||
dnd-none = "";
|
|
||||||
};
|
|
||||||
return-type = "json";
|
|
||||||
exec = "swaync-client -swb";
|
|
||||||
on-click = "swaync-client -t -sw";
|
|
||||||
};
|
|
||||||
})
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
home.packages = [
|
|
||||||
pkgs.pavucontrol
|
|
||||||
];
|
|
||||||
}
|
|
|
@ -1,91 +0,0 @@
|
||||||
* {
|
|
||||||
/* `otf-font-awesome` is required to be installed for icons */
|
|
||||||
border: none;
|
|
||||||
border-radius: 0px;
|
|
||||||
min-height: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
window#waybar {
|
|
||||||
border-radius: 2em;
|
|
||||||
font-family: "Symbols Nerd Font", Inter, sans-serif;
|
|
||||||
font-size: 16px;
|
|
||||||
font-style: normal;
|
|
||||||
background: alpha(
|
|
||||||
@base00,
|
|
||||||
0.9999999
|
|
||||||
); /* niri issue workaround, thanks https://github.com/oatmealine/nix-config/blob/bfdddd2cb36ef659bcddc28e0dbb542b6db8b3bc/modules/desktop/themes/catppuccin/waybar.css#L14 */
|
|
||||||
color: @base05;
|
|
||||||
}
|
|
||||||
|
|
||||||
#workspaces,
|
|
||||||
.modules-right box {
|
|
||||||
background: @base02;
|
|
||||||
padding: 0.15em 0.25em;
|
|
||||||
border-radius: 1em;
|
|
||||||
margin: 0 0.25em;
|
|
||||||
}
|
|
||||||
|
|
||||||
#workspaces {
|
|
||||||
padding: 0;
|
|
||||||
background: @base02;
|
|
||||||
}
|
|
||||||
|
|
||||||
#workspaces button:nth-child(1) {
|
|
||||||
border-top-left-radius: 1em;
|
|
||||||
border-bottom-left-radius: 1em;
|
|
||||||
}
|
|
||||||
#workspaces button:nth-last-child(1) {
|
|
||||||
border-top-right-radius: 1em;
|
|
||||||
border-bottom-right-radius: 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
#workspaces button {
|
|
||||||
padding: 0 0.5em;
|
|
||||||
background-color: transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
#workspaces button:hover {
|
|
||||||
background: rgba(255, 255, 255, 0.1);
|
|
||||||
box-shadow: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
#workspaces button.active {
|
|
||||||
background: @base0E;
|
|
||||||
color: @base02;
|
|
||||||
}
|
|
||||||
|
|
||||||
#workspaces button.urgent {
|
|
||||||
background: @base08;
|
|
||||||
}
|
|
||||||
|
|
||||||
#window {
|
|
||||||
margin-left: 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.modules-left,
|
|
||||||
.modules-right {
|
|
||||||
margin: 0.4em 0.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
#battery,
|
|
||||||
#clock,
|
|
||||||
#network,
|
|
||||||
#pulseaudio,
|
|
||||||
#tray,
|
|
||||||
#power-profiles-daemon {
|
|
||||||
padding: 0 0.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.modules-left,
|
|
||||||
.modules-right {
|
|
||||||
margin: 0.4em 0.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
#custom-power {
|
|
||||||
padding: 0 1.2em;
|
|
||||||
color: @base08;
|
|
||||||
}
|
|
||||||
|
|
||||||
#custom-notification {
|
|
||||||
padding: 0 1.2em;
|
|
||||||
}
|
|
|
@ -1,33 +0,0 @@
|
||||||
{
|
|
||||||
osConfig,
|
|
||||||
lib,
|
|
||||||
lib',
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
inherit (lib) optionalString;
|
|
||||||
inherit (builtins) readFile;
|
|
||||||
in {
|
|
||||||
services.swaync = {
|
|
||||||
enable = true;
|
|
||||||
style = readFile ./style.css;
|
|
||||||
settings = {
|
|
||||||
positionX = "right";
|
|
||||||
positionY = "top";
|
|
||||||
layer = "overlay";
|
|
||||||
control-center-layer = "top";
|
|
||||||
layer-shell = true;
|
|
||||||
cssPriority = "application";
|
|
||||||
control-center-margin-top = 0;
|
|
||||||
control-center-margin-bottom = 0;
|
|
||||||
control-center-margin-right = 0;
|
|
||||||
control-center-margin-left = 0;
|
|
||||||
notification-2fa-action = true;
|
|
||||||
notification-inline-replies = false;
|
|
||||||
notification-icon-size = 64;
|
|
||||||
notification-body-image-height = 100;
|
|
||||||
notification-body-image-width = 200;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
# systemd.user.services.swaync.Service.Environment = "WAYLAND_DISPLAY=wayland-1";
|
|
||||||
systemd.user.services.swaync.Unit.ConditionEnvironment = lib.mkForce "";
|
|
||||||
}
|
|
|
@ -1,450 +0,0 @@
|
||||||
* {
|
|
||||||
all: unset;
|
|
||||||
font-size: 14px;
|
|
||||||
font-family: "Ubuntu Nerd Font";
|
|
||||||
transition:
|
|
||||||
background 200ms,
|
|
||||||
border-radius 200ms; /* exclude color from transition so it looks more natural */
|
|
||||||
}
|
|
||||||
|
|
||||||
trough highlight {
|
|
||||||
background: @base05;
|
|
||||||
}
|
|
||||||
|
|
||||||
scale trough {
|
|
||||||
margin: 0rem 1rem;
|
|
||||||
background-color: @base02;
|
|
||||||
min-height: 8px;
|
|
||||||
min-width: 70px;
|
|
||||||
}
|
|
||||||
|
|
||||||
slider {
|
|
||||||
background-color: @base0D;
|
|
||||||
}
|
|
||||||
|
|
||||||
.floating-notifications.background .notification-row .notification-background {
|
|
||||||
box-shadow:
|
|
||||||
0 0 8px 0 rgba(0, 0, 0, 0.8),
|
|
||||||
inset 0 0 0 1px @base02;
|
|
||||||
border-radius: 12.6px;
|
|
||||||
margin: 18px;
|
|
||||||
background-color: @base00;
|
|
||||||
color: @base05;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.floating-notifications.background
|
|
||||||
.notification-row
|
|
||||||
.notification-background
|
|
||||||
.notification {
|
|
||||||
padding: 7px;
|
|
||||||
border-radius: 12.6px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.floating-notifications.background
|
|
||||||
.notification-row
|
|
||||||
.notification-background
|
|
||||||
.notification.critical {
|
|
||||||
box-shadow: inset 0 0 7px 0 @base08;
|
|
||||||
}
|
|
||||||
|
|
||||||
.floating-notifications.background
|
|
||||||
.notification-row
|
|
||||||
.notification-background
|
|
||||||
.notification
|
|
||||||
.notification-content {
|
|
||||||
margin: 7px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.floating-notifications.background
|
|
||||||
.notification-row
|
|
||||||
.notification-background
|
|
||||||
.notification
|
|
||||||
.notification-content
|
|
||||||
.summary {
|
|
||||||
color: @base05;
|
|
||||||
}
|
|
||||||
|
|
||||||
.floating-notifications.background
|
|
||||||
.notification-row
|
|
||||||
.notification-background
|
|
||||||
.notification
|
|
||||||
.notification-content
|
|
||||||
.time {
|
|
||||||
color: @base03;
|
|
||||||
}
|
|
||||||
|
|
||||||
.floating-notifications.background
|
|
||||||
.notification-row
|
|
||||||
.notification-background
|
|
||||||
.notification
|
|
||||||
.notification-content
|
|
||||||
.body {
|
|
||||||
color: @base05;
|
|
||||||
}
|
|
||||||
|
|
||||||
.floating-notifications.background
|
|
||||||
.notification-row
|
|
||||||
.notification-background
|
|
||||||
.notification
|
|
||||||
> *:last-child
|
|
||||||
> * {
|
|
||||||
min-height: 3.4em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.floating-notifications.background
|
|
||||||
.notification-row
|
|
||||||
.notification-background
|
|
||||||
.notification
|
|
||||||
> *:last-child
|
|
||||||
> *
|
|
||||||
.notification-action {
|
|
||||||
border-radius: 7px;
|
|
||||||
color: @base05;
|
|
||||||
background-color: @base02;
|
|
||||||
box-shadow: inset 0 0 0 1px @base03;
|
|
||||||
margin: 7px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.floating-notifications.background
|
|
||||||
.notification-row
|
|
||||||
.notification-background
|
|
||||||
.notification
|
|
||||||
> *:last-child
|
|
||||||
> *
|
|
||||||
.notification-action:hover {
|
|
||||||
box-shadow: inset 0 0 0 1px @base03;
|
|
||||||
background-color: @base02;
|
|
||||||
color: @base05;
|
|
||||||
}
|
|
||||||
|
|
||||||
.floating-notifications.background
|
|
||||||
.notification-row
|
|
||||||
.notification-background
|
|
||||||
.notification
|
|
||||||
> *:last-child
|
|
||||||
> *
|
|
||||||
.notification-action:active {
|
|
||||||
box-shadow: inset 0 0 0 1px @base03;
|
|
||||||
background-color: @base0C;
|
|
||||||
color: @base05;
|
|
||||||
}
|
|
||||||
|
|
||||||
.floating-notifications.background
|
|
||||||
.notification-row
|
|
||||||
.notification-background
|
|
||||||
.close-button {
|
|
||||||
margin: 7px;
|
|
||||||
padding: 2px;
|
|
||||||
border-radius: 6.3px;
|
|
||||||
color: @base00;
|
|
||||||
background-color: @base08;
|
|
||||||
}
|
|
||||||
|
|
||||||
.floating-notifications.background
|
|
||||||
.notification-row
|
|
||||||
.notification-background
|
|
||||||
.close-button:hover {
|
|
||||||
background-color: @base08;
|
|
||||||
color: @base00;
|
|
||||||
}
|
|
||||||
|
|
||||||
.floating-notifications.background
|
|
||||||
.notification-row
|
|
||||||
.notification-background
|
|
||||||
.close-button:active {
|
|
||||||
background-color: @base08;
|
|
||||||
color: @base00;
|
|
||||||
}
|
|
||||||
|
|
||||||
.control-center {
|
|
||||||
box-shadow:
|
|
||||||
0 0 8px 0 rgba(0, 0, 0, 0.8),
|
|
||||||
inset 0 0 0 1px @base02;
|
|
||||||
border-radius: 12.6px;
|
|
||||||
margin: 18px;
|
|
||||||
background-color: @base00;
|
|
||||||
color: @base05;
|
|
||||||
padding: 14px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.control-center .widget-title > label {
|
|
||||||
color: @base05;
|
|
||||||
font-size: 1.3em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.control-center .widget-title button {
|
|
||||||
border-radius: 7px;
|
|
||||||
color: @base05;
|
|
||||||
background-color: @base02;
|
|
||||||
box-shadow: inset 0 0 0 1px @base03;
|
|
||||||
padding: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.control-center .widget-title button:hover {
|
|
||||||
box-shadow: inset 0 0 0 1px @base03;
|
|
||||||
background-color: @base04;
|
|
||||||
color: @base05;
|
|
||||||
}
|
|
||||||
|
|
||||||
.control-center .widget-title button:active {
|
|
||||||
box-shadow: inset 0 0 0 1px @base03;
|
|
||||||
background-color: @base0C;
|
|
||||||
color: @base00;
|
|
||||||
}
|
|
||||||
|
|
||||||
.control-center .notification-row .notification-background {
|
|
||||||
border-radius: 7px;
|
|
||||||
color: @base05;
|
|
||||||
background-color: @base02;
|
|
||||||
box-shadow: inset 0 0 0 1px @base03;
|
|
||||||
margin-top: 14px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.control-center .notification-row .notification-background .notification {
|
|
||||||
padding: 7px;
|
|
||||||
border-radius: 7px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.control-center
|
|
||||||
.notification-row
|
|
||||||
.notification-background
|
|
||||||
.notification.critical {
|
|
||||||
box-shadow: inset 0 0 7px 0 @base08;
|
|
||||||
}
|
|
||||||
|
|
||||||
.control-center
|
|
||||||
.notification-row
|
|
||||||
.notification-background
|
|
||||||
.notification
|
|
||||||
.notification-content {
|
|
||||||
margin: 7px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.control-center
|
|
||||||
.notification-row
|
|
||||||
.notification-background
|
|
||||||
.notification
|
|
||||||
.notification-content
|
|
||||||
.summary {
|
|
||||||
color: @base05;
|
|
||||||
}
|
|
||||||
|
|
||||||
.control-center
|
|
||||||
.notification-row
|
|
||||||
.notification-background
|
|
||||||
.notification
|
|
||||||
.notification-content
|
|
||||||
.time {
|
|
||||||
color: @base03;
|
|
||||||
}
|
|
||||||
|
|
||||||
.control-center
|
|
||||||
.notification-row
|
|
||||||
.notification-background
|
|
||||||
.notification
|
|
||||||
.notification-content
|
|
||||||
.body {
|
|
||||||
color: @base05;
|
|
||||||
}
|
|
||||||
|
|
||||||
.control-center
|
|
||||||
.notification-row
|
|
||||||
.notification-background
|
|
||||||
.notification
|
|
||||||
> *:last-child
|
|
||||||
> * {
|
|
||||||
min-height: 3.4em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.control-center
|
|
||||||
.notification-row
|
|
||||||
.notification-background
|
|
||||||
.notification
|
|
||||||
> *:last-child
|
|
||||||
> *
|
|
||||||
.notification-action {
|
|
||||||
border-radius: 7px;
|
|
||||||
color: @base05;
|
|
||||||
background-color: @base00;
|
|
||||||
box-shadow: inset 0 0 0 1px @base03;
|
|
||||||
margin: 7px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.control-center
|
|
||||||
.notification-row
|
|
||||||
.notification-background
|
|
||||||
.notification
|
|
||||||
> *:last-child
|
|
||||||
> *
|
|
||||||
.notification-action:hover {
|
|
||||||
box-shadow: inset 0 0 0 1px @base03;
|
|
||||||
background-color: @base02;
|
|
||||||
color: @base05;
|
|
||||||
}
|
|
||||||
|
|
||||||
.control-center
|
|
||||||
.notification-row
|
|
||||||
.notification-background
|
|
||||||
.notification
|
|
||||||
> *:last-child
|
|
||||||
> *
|
|
||||||
.notification-action:active {
|
|
||||||
box-shadow: inset 0 0 0 1px @base03;
|
|
||||||
background-color: @base0C;
|
|
||||||
color: @base05;
|
|
||||||
}
|
|
||||||
|
|
||||||
.control-center .notification-row .notification-background .close-button {
|
|
||||||
margin: 7px;
|
|
||||||
padding: 2px;
|
|
||||||
border-radius: 6.3px;
|
|
||||||
color: @base00;
|
|
||||||
background-color: @base08;
|
|
||||||
}
|
|
||||||
|
|
||||||
.control-center .notification-row .notification-background .close-button:hover {
|
|
||||||
background-color: @base08;
|
|
||||||
color: @base00;
|
|
||||||
}
|
|
||||||
|
|
||||||
.control-center
|
|
||||||
.notification-row
|
|
||||||
.notification-background
|
|
||||||
.close-button:active {
|
|
||||||
background-color: @base08;
|
|
||||||
color: @base00;
|
|
||||||
}
|
|
||||||
|
|
||||||
.control-center .notification-row .notification-background:hover {
|
|
||||||
box-shadow: inset 0 0 0 1px @base03;
|
|
||||||
background-color: @base04;
|
|
||||||
color: @base05;
|
|
||||||
}
|
|
||||||
|
|
||||||
.control-center .notification-row .notification-background:active {
|
|
||||||
box-shadow: inset 0 0 0 1px @base03;
|
|
||||||
background-color: @base0C;
|
|
||||||
color: @base05;
|
|
||||||
}
|
|
||||||
|
|
||||||
.notification.critical progress {
|
|
||||||
background-color: @base08;
|
|
||||||
}
|
|
||||||
|
|
||||||
.notification.low progress,
|
|
||||||
.notification.normal progress {
|
|
||||||
background-color: @base0D;
|
|
||||||
}
|
|
||||||
|
|
||||||
.control-center-dnd {
|
|
||||||
margin-top: 5px;
|
|
||||||
border-radius: 8px;
|
|
||||||
background: @base02;
|
|
||||||
border: 1px solid @base03;
|
|
||||||
box-shadow: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.control-center-dnd:checked {
|
|
||||||
background: @base0C;
|
|
||||||
}
|
|
||||||
|
|
||||||
.control-center-dnd slider {
|
|
||||||
background: @base0C;
|
|
||||||
border-radius: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.widget-dnd {
|
|
||||||
margin: 0px;
|
|
||||||
font-size: 1.1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.widget-dnd > switch {
|
|
||||||
font-size: initial;
|
|
||||||
border-radius: 8px;
|
|
||||||
background: @base02;
|
|
||||||
border: 1px solid @base03;
|
|
||||||
box-shadow: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.widget-dnd > switch:checked {
|
|
||||||
background: @base0C;
|
|
||||||
color: @base00;
|
|
||||||
}
|
|
||||||
|
|
||||||
.widget-dnd > switch slider {
|
|
||||||
background: @base03;
|
|
||||||
border-radius: 8px;
|
|
||||||
border: 1px solid @base03;
|
|
||||||
}
|
|
||||||
|
|
||||||
.widget-mpris .widget-mpris-player {
|
|
||||||
background: @base02;
|
|
||||||
padding: 7px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.widget-mpris .widget-mpris-title {
|
|
||||||
font-size: 1.2rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.widget-mpris .widget-mpris-subtitle {
|
|
||||||
font-size: 0.8rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.widget-menubar > box > .menu-button-bar > button > label {
|
|
||||||
font-size: 3rem;
|
|
||||||
padding: 0.5rem 2rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.widget-menubar > box > .menu-button-bar > :last-child {
|
|
||||||
color: @base08;
|
|
||||||
}
|
|
||||||
|
|
||||||
.power-buttons button:hover,
|
|
||||||
.powermode-buttons button:hover,
|
|
||||||
.screenshot-buttons button:hover {
|
|
||||||
background: @base02;
|
|
||||||
}
|
|
||||||
|
|
||||||
.control-center .widget-label > label {
|
|
||||||
color: @base05;
|
|
||||||
font-size: 2rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.widget-buttons-grid {
|
|
||||||
padding-top: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.widget-buttons-grid > flowbox > flowboxchild > button label {
|
|
||||||
font-size: 2.5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.widget-volume {
|
|
||||||
padding-top: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.widget-volume label {
|
|
||||||
font-size: 1.5rem;
|
|
||||||
color: @base0C;
|
|
||||||
}
|
|
||||||
|
|
||||||
.widget-volume trough highlight {
|
|
||||||
background: @base0C;
|
|
||||||
}
|
|
||||||
|
|
||||||
.widget-backlight trough highlight {
|
|
||||||
background: @base0A;
|
|
||||||
}
|
|
||||||
|
|
||||||
.widget-backlight label {
|
|
||||||
font-size: 1.5rem;
|
|
||||||
color: @base0A;
|
|
||||||
}
|
|
||||||
|
|
||||||
.widget-backlight .KB {
|
|
||||||
padding-bottom: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.image {
|
|
||||||
padding-right: 0.5rem;
|
|
||||||
}
|
|
|
@ -1,3 +1,3 @@
|
||||||
{
|
_: {
|
||||||
services.udiskie.enable = true;
|
services.udiskie.enable = true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
_: {
|
{
|
||||||
imports = [
|
imports = [
|
||||||
./programs
|
./programs
|
||||||
./shell
|
./shell
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
{
|
{
|
||||||
|
inputs,
|
||||||
osConfig,
|
osConfig,
|
||||||
config,
|
config,
|
||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}: let
|
}: {
|
||||||
in {
|
|
||||||
programs.foot = {
|
programs.foot = {
|
||||||
enable = true;
|
enable = true;
|
||||||
settings = {
|
settings = {
|
||||||
|
@ -13,6 +13,30 @@ in {
|
||||||
font = "monospace:size=14";
|
font = "monospace:size=14";
|
||||||
shell = "${lib.getExe config.programs.fish.package}";
|
shell = "${lib.getExe config.programs.fish.package}";
|
||||||
};
|
};
|
||||||
|
colors = let
|
||||||
|
schemeData = inputs.basix.schemeData.base16.${osConfig.theme.scheme};
|
||||||
|
in {
|
||||||
|
background = schemeData.palette.base00;
|
||||||
|
foreground = schemeData.palette.base05;
|
||||||
|
|
||||||
|
regular0 = schemeData.palette.base01;
|
||||||
|
regular1 = schemeData.palette.base08;
|
||||||
|
regular2 = schemeData.palette.base0B;
|
||||||
|
regular3 = schemeData.palette.base0A;
|
||||||
|
regular4 = schemeData.palette.base0D;
|
||||||
|
regular5 = schemeData.palette.base0E;
|
||||||
|
regular6 = schemeData.palette.base0C;
|
||||||
|
regular7 = schemeData.palette.base06;
|
||||||
|
|
||||||
|
bright0 = schemeData.palette.base02;
|
||||||
|
bright1 = schemeData.palette.base08;
|
||||||
|
bright2 = schemeData.palette.base0B;
|
||||||
|
bright3 = schemeData.palette.base0A;
|
||||||
|
bright4 = schemeData.palette.base0D;
|
||||||
|
bright5 = schemeData.palette.base0E;
|
||||||
|
bright6 = schemeData.palette.base0C;
|
||||||
|
bright7 = schemeData.palette.base07;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,8 @@
|
||||||
_: {
|
{
|
||||||
|
config,
|
||||||
|
inputs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
programs.gnome-terminal = {
|
programs.gnome-terminal = {
|
||||||
enable = true;
|
enable = true;
|
||||||
showMenubar = true;
|
showMenubar = true;
|
||||||
|
@ -10,6 +14,14 @@ _: {
|
||||||
boldIsBright = true;
|
boldIsBright = true;
|
||||||
visibleName = "default";
|
visibleName = "default";
|
||||||
font = "Intel One Mono 14";
|
font = "Intel One Mono 14";
|
||||||
|
colors = let
|
||||||
|
inherit (inputs.basix.schemeData.base16.${config.theme.scheme}) palette;
|
||||||
|
in {
|
||||||
|
backgroundColor = "#${palette.base00}";
|
||||||
|
foregroundColor = builtins.trace "#${palette.base05}" "#${palette.base05}";
|
||||||
|
|
||||||
|
palette = builtins.attrValues (builtins.mapAttrs (_: color: "#${color}") palette);
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
38
home/terminal/emulators/konsole.nix
Normal file
38
home/terminal/emulators/konsole.nix
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
inputs,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
programs.konsole = let
|
||||||
|
inherit (config.theme) scheme;
|
||||||
|
schemeData = inputs.basix.schemeData.base16.${scheme};
|
||||||
|
in {
|
||||||
|
enable = true;
|
||||||
|
defaultProfile = "default";
|
||||||
|
profiles = {
|
||||||
|
default = {
|
||||||
|
font = {
|
||||||
|
name = "monospace";
|
||||||
|
size = 14;
|
||||||
|
};
|
||||||
|
colorScheme = schemeData.name;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
extraConfig = {
|
||||||
|
"MainWindow" = {
|
||||||
|
"MenuBar" = "Disabled";
|
||||||
|
"ToolBarsMovable" = "Disabled";
|
||||||
|
};
|
||||||
|
"KonsoleWindow" = {
|
||||||
|
"ShowMenuBarByDefault" = "false";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
customColorSchemes = {
|
||||||
|
"${schemeData.name}" = pkgs.lib.mkKonsoleColorScheme schemeData;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
{
|
_: {
|
||||||
programs.wezterm = {
|
programs.wezterm = {
|
||||||
enable = true;
|
enable = true;
|
||||||
# package = inputs.wezterm.packages.${pkgs.system}.default;
|
# package = inputs.wezterm.packages.${pkgs.system}.default;
|
||||||
|
|
|
@ -1,9 +0,0 @@
|
||||||
_: {
|
|
||||||
programs.bat = {
|
|
||||||
enable = true;
|
|
||||||
config.theme = "ansi";
|
|
||||||
};
|
|
||||||
home.sessionVariables = {
|
|
||||||
MANPAGER = "sh -c 'col -bx | bat -l man -p'";
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,12 +1,11 @@
|
||||||
{pkgs, ...}: {
|
{pkgs, ...}: {
|
||||||
imports = [
|
imports = [
|
||||||
./bat.nix
|
|
||||||
./git.nix
|
./git.nix
|
||||||
./gnupg.nix
|
./gnupg.nix
|
||||||
./tmux.nix
|
./tmux.nix
|
||||||
./direnv.nix
|
./direnv.nix
|
||||||
|
./zellij.nix
|
||||||
./nix-index.nix
|
./nix-index.nix
|
||||||
./yazi.nix
|
|
||||||
];
|
];
|
||||||
|
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{
|
_: {
|
||||||
programs = {
|
programs = {
|
||||||
direnv = {
|
direnv = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|
|
@ -1,26 +0,0 @@
|
||||||
{pkgs, ...}: {
|
|
||||||
programs.yazi = let
|
|
||||||
# https://github.com/iynaix/dotfiles/blob/8bb1568019ea26f034ac1af9c499b3ff102391a5/home-manager/shell/yazi.nix#L9-L11
|
|
||||||
mkYaziPlugin = name: text: {
|
|
||||||
"${name}" = toString (pkgs.writeTextDir "${name}.yazi/init.lua" text) + "/${name}.yazi";
|
|
||||||
};
|
|
||||||
in {
|
|
||||||
enable = true;
|
|
||||||
enableFishIntegration = true;
|
|
||||||
plugins = mkYaziPlugin "smart-enter" ''
|
|
||||||
return {
|
|
||||||
entry = function()
|
|
||||||
local h = cx.active.current.hovered
|
|
||||||
ya.manager_emit(h and h.cha.is_dir and "enter" or "open", { hovered = true })
|
|
||||||
end,
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
keymap.manager.prepend_keymap = [
|
|
||||||
{
|
|
||||||
on = "l";
|
|
||||||
run = "plugin --sync smart-enter";
|
|
||||||
desc = "Enter the child directory, or open the file";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
8
home/terminal/programs/zellij.nix
Normal file
8
home/terminal/programs/zellij.nix
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
_: {
|
||||||
|
programs.zellij = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
pane_frames = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
|
@ -14,10 +14,6 @@
|
||||||
name = "fzf";
|
name = "fzf";
|
||||||
inherit (pkgs.fishPlugins.fzf) src;
|
inherit (pkgs.fishPlugins.fzf) src;
|
||||||
}
|
}
|
||||||
{
|
|
||||||
name = "autopair";
|
|
||||||
inherit (pkgs.fishPlugins.autopair) src;
|
|
||||||
}
|
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{
|
_: {
|
||||||
programs.starship = {
|
programs.starship = {
|
||||||
enable = true;
|
enable = true;
|
||||||
enableTransience = true;
|
enableTransience = true;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{
|
_: {
|
||||||
programs.zoxide = {
|
programs.zoxide = {
|
||||||
enable = true;
|
enable = true;
|
||||||
enableBashIntegration = false;
|
enableBashIntegration = false;
|
||||||
|
|
|
@ -1,15 +1,12 @@
|
||||||
{inputs, ...}: let
|
{self, ...}: let
|
||||||
system = "${inputs.self}/system";
|
mod = "${self}/system";
|
||||||
in {
|
in {
|
||||||
imports = [
|
imports = [
|
||||||
./hardware-configuration.nix
|
./hardware-configuration.nix
|
||||||
./networking.nix # generated at runtime by nixos-infect
|
./networking.nix # generated at runtime by nixos-infect
|
||||||
|
|
||||||
inputs.agenix.nixosModules.default
|
"${mod}/services/forgejo.nix"
|
||||||
|
"${mod}/services/searx.nix"
|
||||||
"${system}/services/forgejo.nix"
|
|
||||||
"${system}/services/searx.nix"
|
|
||||||
"${system}/services/portfolio.nix"
|
|
||||||
];
|
];
|
||||||
|
|
||||||
boot.tmp.cleanOnBoot = true;
|
boot.tmp.cleanOnBoot = true;
|
||||||
|
@ -17,9 +14,6 @@ in {
|
||||||
networking.hostName = "anastacia";
|
networking.hostName = "anastacia";
|
||||||
networking.domain = "";
|
networking.domain = "";
|
||||||
services.openssh.enable = true;
|
services.openssh.enable = true;
|
||||||
users.users.root.openssh.authorizedKeys.keys = [
|
users.users.root.openssh.authorizedKeys.keys = [''ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEzs7SQH0Vjt9JHoXXmWy9fPU1I3rrRWV5magZFrI5al''];
|
||||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEzs7SQH0Vjt9JHoXXmWy9fPU1I3rrRWV5magZFrI5al"
|
|
||||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHKEPlN/GU9nJZPleA77HH5NA+6vyhhM84fTSjEwnEgq"
|
|
||||||
];
|
|
||||||
system.stateVersion = "23.11";
|
system.stateVersion = "23.11";
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,8 @@
|
||||||
{modulesPath, ...}: {
|
{modulesPath, ...}: {
|
||||||
imports = [(modulesPath + "/profiles/qemu-guest.nix")];
|
imports = [(modulesPath + "/profiles/qemu-guest.nix")];
|
||||||
boot = {
|
boot.loader.grub.device = "/dev/sda";
|
||||||
loader.grub.device = "/dev/sda";
|
boot.initrd.availableKernelModules = ["ata_piix" "uhci_hcd" "xen_blkfront" "vmw_pvscsi"];
|
||||||
initrd.availableKernelModules = ["ata_piix" "uhci_hcd" "xen_blkfront" "vmw_pvscsi"];
|
boot.initrd.kernelModules = ["nvme"];
|
||||||
initrd.kernelModules = ["nvme"];
|
|
||||||
};
|
|
||||||
fileSystems."/" = {
|
fileSystems."/" = {
|
||||||
device = "/dev/sda1";
|
device = "/dev/sda1";
|
||||||
fsType = "ext4";
|
fsType = "ext4";
|
||||||
|
|
|
@ -1,27 +1,37 @@
|
||||||
{inputs, ...}: let
|
{
|
||||||
lib' = import ../lib;
|
self,
|
||||||
mkSystem = args:
|
inputs,
|
||||||
inputs.nixpkgs.lib.nixosSystem {
|
...
|
||||||
specialArgs = {inherit inputs lib';};
|
}: let
|
||||||
modules = args.modules or [];
|
inherit (inputs.nixpkgs.lib) nixosSystem;
|
||||||
|
specialArgs = {
|
||||||
|
inherit inputs self;
|
||||||
};
|
};
|
||||||
in {
|
in {
|
||||||
vamos = mkSystem {
|
vamos = nixosSystem {
|
||||||
|
system = "x86_64-linux";
|
||||||
|
inherit specialArgs;
|
||||||
modules = [
|
modules = [
|
||||||
./vamos
|
./vamos
|
||||||
../modules
|
|
||||||
|
self.nixosModules.theme
|
||||||
|
|
||||||
inputs.nixos-hardware.nixosModules.framework-13-7040-amd
|
inputs.nixos-hardware.nixosModules.framework-13-7040-amd
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
solaire = mkSystem {
|
solaire = nixosSystem {
|
||||||
|
system = "x86_64-linux";
|
||||||
|
inherit specialArgs;
|
||||||
modules = [
|
modules = [
|
||||||
./solaire
|
./solaire
|
||||||
../modules
|
self.nixosModules.theme
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
anastacia = mkSystem {
|
anastacia = nixosSystem {
|
||||||
|
system = "x86_64-linux";
|
||||||
|
inherit specialArgs;
|
||||||
modules = [
|
modules = [
|
||||||
./anastacia
|
./anastacia
|
||||||
];
|
];
|
||||||
|
|
|
@ -1,44 +1,28 @@
|
||||||
{
|
{
|
||||||
inputs,
|
self,
|
||||||
specialArgs,
|
specialArgs,
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
system = "${inputs.self}/system";
|
mod = "${self}/system";
|
||||||
home = "${inputs.self}/home";
|
|
||||||
in {
|
in {
|
||||||
imports = [
|
imports = [
|
||||||
./hardware-configuration.nix
|
./hardware-configuration.nix
|
||||||
./modules
|
./modules
|
||||||
|
|
||||||
system
|
"${mod}"
|
||||||
"${system}/hardware/uni-sync.nix"
|
"${mod}/hardware/uni-sync.nix"
|
||||||
|
|
||||||
"${system}/programs/games.nix"
|
"${mod}/programs/gnome.nix"
|
||||||
"${system}/hardware/nvidia.nix"
|
"${mod}/programs/games.nix"
|
||||||
|
"${mod}/hardware/nvidia.nix"
|
||||||
"${system}/services/logind.nix"
|
|
||||||
"${system}/services/greetd.nix"
|
|
||||||
|
|
||||||
"${system}/programs/niri"
|
|
||||||
|
|
||||||
"${system}/services/documentation.nix"
|
|
||||||
];
|
];
|
||||||
|
|
||||||
home-manager = {
|
home-manager = {
|
||||||
users.nezia.imports = [
|
users.nezia.imports = [
|
||||||
"${home}"
|
"${self}/home"
|
||||||
"${home}/services/udiskie.nix"
|
"${self}/home/programs/games"
|
||||||
"${home}/programs/games"
|
|
||||||
|
|
||||||
"${home}/programs/niri"
|
"${self}/home/terminal/emulators/foot.nix"
|
||||||
"${home}/programs/waybar"
|
|
||||||
"${home}/services/swaync"
|
|
||||||
"${home}/programs/fuzzel.nix"
|
|
||||||
"${home}/programs/swaybg.nix"
|
|
||||||
"${home}/programs/swaylock.nix"
|
|
||||||
"${home}/programs/swayidle.nix"
|
|
||||||
|
|
||||||
"${home}/terminal/emulators/foot.nix"
|
|
||||||
];
|
];
|
||||||
extraSpecialArgs = specialArgs;
|
extraSpecialArgs = specialArgs;
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,8 +1,3 @@
|
||||||
{
|
{
|
||||||
theme = {
|
theme.wallpaper = ../../wallpapers/lucy-edgerunners-wallpaper.jpg;
|
||||||
wallpaper = ../../../wallpapers/lucy-edgerunners-wallpaper.jpg;
|
|
||||||
schemeName = "catppuccin-macchiato";
|
|
||||||
enable = true;
|
|
||||||
gtk.enable = false;
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,47 +1,43 @@
|
||||||
{
|
{
|
||||||
inputs,
|
self,
|
||||||
specialArgs,
|
specialArgs,
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
system = "${inputs.self}/system";
|
mod = "${self}/system";
|
||||||
home = "${inputs.self}/home";
|
|
||||||
in {
|
in {
|
||||||
imports = [
|
imports = [
|
||||||
./hardware-configuration.nix
|
./hardware-configuration.nix
|
||||||
./modules
|
./modules
|
||||||
|
|
||||||
"${system}"
|
"${mod}"
|
||||||
"${system}/core/lanzaboote.nix"
|
"${mod}/core/lanzaboote.nix"
|
||||||
|
|
||||||
"${system}/hardware/fprintd.nix"
|
"${mod}/hardware/fprintd.nix"
|
||||||
"${system}/services/power.nix"
|
"${mod}/services/power.nix"
|
||||||
"${system}/services/brightness.nix"
|
"${mod}/services/brightness.nix"
|
||||||
|
"${mod}/services/keyd.nix"
|
||||||
|
|
||||||
"${system}/services/logind.nix"
|
"${mod}/services/logind.nix"
|
||||||
"${system}/services/greetd.nix"
|
"${mod}/services/greetd.nix"
|
||||||
"${system}/services/kanata.nix"
|
|
||||||
|
|
||||||
"${system}/programs/niri"
|
"${mod}/programs/niri"
|
||||||
"${system}/services/gnome.nix"
|
"${mod}/services/gnome.nix"
|
||||||
"${system}/services/mail.nix"
|
"${mod}/services/mail.nix"
|
||||||
|
|
||||||
"${system}/services/syncthing.nix"
|
|
||||||
];
|
];
|
||||||
|
|
||||||
home-manager = {
|
home-manager = {
|
||||||
users.nezia.imports = [
|
users.nezia.imports = [
|
||||||
"${home}"
|
"${self}/home"
|
||||||
"${home}/services/udiskie.nix"
|
"${self}/home/services/udiskie.nix"
|
||||||
|
|
||||||
"${home}/programs/niri"
|
"${self}/home/programs/niri"
|
||||||
"${home}/programs/waybar"
|
"${self}/home/programs/ags"
|
||||||
"${home}/services/swaync"
|
"${self}/home/programs/fuzzel.nix"
|
||||||
"${home}/programs/fuzzel.nix"
|
"${self}/home/programs/swaybg.nix"
|
||||||
"${home}/programs/swaybg.nix"
|
"${self}/home/programs/swaylock.nix"
|
||||||
"${home}/programs/swaylock.nix"
|
"${self}/home/programs/swayidle.nix"
|
||||||
"${home}/programs/swayidle.nix"
|
|
||||||
|
|
||||||
"${home}/terminal/emulators/foot.nix"
|
"${self}/home/terminal/emulators/foot.nix"
|
||||||
];
|
];
|
||||||
extraSpecialArgs = specialArgs;
|
extraSpecialArgs = specialArgs;
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
{pkgs, ...}: {
|
{pkgs, ...}: {
|
||||||
theme = {
|
theme = {
|
||||||
enable = true;
|
|
||||||
wallpaper = pkgs.fetchurl {
|
wallpaper = pkgs.fetchurl {
|
||||||
url = "https://raw.githubusercontent.com/NixOS/nixos-artwork/e0cf0eb237dc5baba86661a3572b20a6183c1876/wallpapers/nix-wallpaper-nineish-catppuccin-frappe.png?raw=true";
|
url = "https://raw.githubusercontent.com/NixOS/nixos-artwork/e0cf0eb237dc5baba86661a3572b20a6183c1876/wallpapers/nix-wallpaper-nineish-catppuccin-frappe.png?raw=true";
|
||||||
hash = "sha256-/HAtpGwLxjNfJvX5/4YZfM8jPNStaM3gisK8+ImRmQ4=";
|
hash = "sha256-/HAtpGwLxjNfJvX5/4YZfM8jPNStaM3gisK8+ImRmQ4=";
|
||||||
|
|
|
@ -1,13 +1,17 @@
|
||||||
let
|
{
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
# convert rrggbb hex to rgba(r, g, b, a)
|
# convert rrggbb hex to rgba(r, g, b, a)
|
||||||
rgba = lib: color: opacity: let
|
rgba = c: let
|
||||||
r = toString (hexToDec lib (builtins.substring 0 2 color));
|
r = toString (hexToDec (builtins.substring 0 2 c));
|
||||||
g = toString (hexToDec lib (builtins.substring 2 2 color));
|
g = toString (hexToDec (builtins.substring 2 2 c));
|
||||||
b = toString (hexToDec lib (builtins.substring 4 2 color));
|
b = toString (hexToDec (builtins.substring 4 2 c));
|
||||||
in "rgba(${r}, ${g}, ${b}, ${opacity})";
|
in "rgba(${r}, ${g}, ${b}, .5)";
|
||||||
|
|
||||||
hexToDec = lib: v: let
|
# Helper function to convert hex color to decimal RGB values
|
||||||
# Map of hex characters to their decimal values
|
hexToDec = v: let
|
||||||
hexToInt = {
|
hexToInt = {
|
||||||
"0" = 0;
|
"0" = 0;
|
||||||
"1" = 1;
|
"1" = 1;
|
||||||
|
@ -32,29 +36,58 @@ let
|
||||||
"E" = 14;
|
"E" = 14;
|
||||||
"F" = 15;
|
"F" = 15;
|
||||||
};
|
};
|
||||||
# Remove any leading `#` from the input
|
chars = lib.strings.stringToCharacters v;
|
||||||
cleanHex =
|
|
||||||
if lib.strings.substring 0 1 v == "#"
|
|
||||||
then lib.strings.substring 1 (builtins.stringLength v - 1) v
|
|
||||||
else v;
|
|
||||||
# Convert the cleaned string into characters
|
|
||||||
chars = lib.strings.stringToCharacters cleanHex;
|
|
||||||
in
|
in
|
||||||
# Fold over the characters to calculate the decimal value
|
lib.foldl' (a: v: a + v) 0
|
||||||
builtins.foldl' (acc: char: acc * 16 + hexToInt."${char}") 0 chars;
|
(lib.imap (k: v: hexToInt."${v}" * (pow 16 (builtins.length chars - k - 1))) chars);
|
||||||
|
|
||||||
blurImage = pkgs: path:
|
# Power function for exponentiation
|
||||||
pkgs.runCommand "${builtins.baseNameOf path}-blurred" {
|
pow = base: exponent: lib.foldl' (acc: _: acc * base) 1 (lib.range 1 exponent);
|
||||||
buildInputs = [pkgs.imagemagick];
|
|
||||||
}
|
|
||||||
''
|
|
||||||
magick ${path} -gaussian-blur 0x12 "$out"
|
|
||||||
'';
|
|
||||||
|
|
||||||
generateGtkColors = lib: palette: (lib.concatLines
|
# Converts hex color to KDE color format
|
||||||
(lib.mapAttrsToList
|
colorToKde = name: hexColor: let
|
||||||
(name: color: "@define-color ${name} ${color};")
|
r = hexToDec (builtins.substring 0 2 hexColor);
|
||||||
palette));
|
g = hexToDec (builtins.substring 2 2 hexColor);
|
||||||
|
b = hexToDec (builtins.substring 4 2 hexColor);
|
||||||
|
in "[${name}]\nColor=${toString r},${toString g},${toString b}\n";
|
||||||
|
|
||||||
|
# Mapping base16 colors to KDE color scheme sections
|
||||||
|
schemeToKonsole = scheme: let
|
||||||
|
inherit (scheme) palette;
|
||||||
|
|
||||||
|
colorMap = {
|
||||||
|
base00 = ["Background" "BackgroundFaint" "BackgroundIntense"];
|
||||||
|
base01 = ["Color0"];
|
||||||
|
base02 = ["Color0Intense"];
|
||||||
|
base04 = ["Color4"];
|
||||||
|
base05 = ["Foreground" "ForegroundFaint" "ForegroundIntense"];
|
||||||
|
base06 = ["Color7"];
|
||||||
|
base07 = ["Color7Intense"];
|
||||||
|
base08 = ["Color1" "Color1Intense"];
|
||||||
|
base09 = ["Color1Intense"];
|
||||||
|
base0A = ["Color3" "Color3Intense"];
|
||||||
|
base0B = ["Color2" "Color2Intense"];
|
||||||
|
base0C = ["Color6" "Color6Intense"];
|
||||||
|
base0D = ["Color4" "Color4Intense"];
|
||||||
|
base0E = ["Color5" "Color5Intense"];
|
||||||
|
};
|
||||||
|
|
||||||
|
colorSections = lib.concatStringsSep "\n" (lib.attrsets.mapAttrsToList
|
||||||
|
(name: value:
|
||||||
|
lib.concatMapStrings (slot: colorToKde slot value) (colorMap.${name} or []))
|
||||||
|
palette);
|
||||||
|
in
|
||||||
|
lib.concatStringsSep "\n" [
|
||||||
|
"[General]"
|
||||||
|
"Description=${scheme.name}"
|
||||||
|
"Opacity=1"
|
||||||
|
"Wallpaper="
|
||||||
|
colorSections
|
||||||
|
];
|
||||||
|
|
||||||
|
# Create a KDE konsole color scheme from base16 colors
|
||||||
|
mkKonsoleColorScheme = scheme:
|
||||||
|
pkgs.writeText "${scheme.name}.colorscheme" (schemeToKonsole scheme);
|
||||||
in {
|
in {
|
||||||
inherit blurImage generateGtkColors rgba;
|
inherit mkKonsoleColorScheme rgba;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
{
|
{
|
||||||
imports = [./theme];
|
theme = import ./theme;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,28 +1,21 @@
|
||||||
{
|
{
|
||||||
inputs,
|
|
||||||
config,
|
|
||||||
lib,
|
lib,
|
||||||
lib',
|
|
||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
inherit (lib) mkEnableOption mkOption mkIf attrNames;
|
inherit (lib) mkOption;
|
||||||
inherit (lib.types) path package enum;
|
inherit (lib.types) string path package;
|
||||||
inherit (lib') generateGtkColors;
|
|
||||||
cfg = config.theme;
|
|
||||||
in {
|
in {
|
||||||
imports = [./gtk.nix];
|
imports = [./gtk.nix];
|
||||||
options.theme = {
|
options.theme = {
|
||||||
enable = mkEnableOption "theme";
|
scheme = mkOption {
|
||||||
schemeName = mkOption {
|
|
||||||
description = ''
|
description = ''
|
||||||
Name of the tinted-theming color scheme to use.
|
Name of the tinted-scheming color scheme to use.
|
||||||
'';
|
'';
|
||||||
type = enum (attrNames inputs.basix.schemeData.base16);
|
type = string;
|
||||||
example = "catppuccin-macchiato";
|
example = lib.literalExpression "catppuccin-macchiato";
|
||||||
default = "catppuccin-macchiato";
|
default = "catppuccin-macchiato";
|
||||||
};
|
};
|
||||||
|
|
||||||
wallpaper = mkOption {
|
wallpaper = mkOption {
|
||||||
description = ''
|
description = ''
|
||||||
Location of the wallpaper that will be used throughout the system.
|
Location of the wallpaper that will be used throughout the system.
|
||||||
|
@ -57,154 +50,4 @@ in {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
config = let
|
|
||||||
scheme = inputs.basix.schemeData.base16.${config.theme.schemeName};
|
|
||||||
in
|
|
||||||
mkIf cfg.enable
|
|
||||||
{
|
|
||||||
home-manager.users.nezia = {
|
|
||||||
home.pointerCursor = {
|
|
||||||
inherit (config.theme.cursorTheme) name package size;
|
|
||||||
};
|
|
||||||
|
|
||||||
gtk = {
|
|
||||||
iconTheme = {
|
|
||||||
inherit (config.theme.gtk.iconTheme) name package;
|
|
||||||
};
|
|
||||||
|
|
||||||
theme = lib.mkIf (!config.services.xserver.desktopManager.gnome.enable) {
|
|
||||||
inherit (config.theme.gtk.theme) name package;
|
|
||||||
};
|
|
||||||
|
|
||||||
gtk3.extraConfig = {
|
|
||||||
gtk-application-prefer-dark-theme = scheme.variant == "dark";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
services.swaync.style =
|
|
||||||
generateGtkColors lib scheme.palette;
|
|
||||||
|
|
||||||
programs = {
|
|
||||||
niri = {
|
|
||||||
settings.layout.focus-ring.active.color = scheme.palette.base0E;
|
|
||||||
};
|
|
||||||
|
|
||||||
foot.settings.colors = let
|
|
||||||
inherit (lib.strings) removePrefix;
|
|
||||||
# because someone thought this was a great idea: https://github.com/tinted-theming/schemes/commit/61058a8d2e2bd4482b53d57a68feb56cdb991f0b
|
|
||||||
palette = builtins.mapAttrs (_: color: removePrefix "#" color) scheme.palette;
|
|
||||||
in {
|
|
||||||
background = palette.base00;
|
|
||||||
foreground = palette.base05;
|
|
||||||
|
|
||||||
regular0 = palette.base01;
|
|
||||||
regular1 = palette.base08;
|
|
||||||
regular2 = palette.base0B;
|
|
||||||
regular3 = palette.base0A;
|
|
||||||
regular4 = palette.base0D;
|
|
||||||
regular5 = palette.base0E;
|
|
||||||
regular6 = palette.base0C;
|
|
||||||
regular7 = palette.base06;
|
|
||||||
|
|
||||||
bright0 = palette.base02;
|
|
||||||
bright1 = palette.base08;
|
|
||||||
bright2 = palette.base0B;
|
|
||||||
bright3 = palette.base0A;
|
|
||||||
bright4 = palette.base0D;
|
|
||||||
bright5 = palette.base0E;
|
|
||||||
bright6 = palette.base0C;
|
|
||||||
bright7 = palette.base07;
|
|
||||||
};
|
|
||||||
|
|
||||||
waybar.style =
|
|
||||||
generateGtkColors lib scheme.palette;
|
|
||||||
fuzzel.settings.colors = {
|
|
||||||
background = "${scheme.palette.base00}ff";
|
|
||||||
text = "${scheme.palette.base05}ff";
|
|
||||||
input = "${scheme.palette.base05}ff";
|
|
||||||
selection = "${scheme.palette.base02}ff";
|
|
||||||
selection-text = "${scheme.palette.base07}ff";
|
|
||||||
selection-match = "${scheme.palette.base0D}ff";
|
|
||||||
border = "${scheme.palette.base0E}ff";
|
|
||||||
};
|
|
||||||
|
|
||||||
swaylock.settings = {
|
|
||||||
inside-color = scheme.palette.base01;
|
|
||||||
inside-clear-color = scheme.palette.base0C;
|
|
||||||
inside-caps-lock-color = scheme.palette.base09;
|
|
||||||
inside-ver-color = scheme.palette.base0D;
|
|
||||||
inside-wrong-color = scheme.palette.base08;
|
|
||||||
key-hl-color = scheme.palette.base0B;
|
|
||||||
layout-bg-color = scheme.palette.base00;
|
|
||||||
layout-border-color = scheme.palette.base05;
|
|
||||||
layout-text-color = scheme.palette.base07;
|
|
||||||
line-color = scheme.palette.base00;
|
|
||||||
line-clear-color = scheme.palette.base0C;
|
|
||||||
line-caps-lock-color = scheme.palette.base09;
|
|
||||||
line-ver-color = scheme.palette.base0D;
|
|
||||||
line-wrong-color = scheme.palette.base08;
|
|
||||||
ring-color = scheme.palette.base02;
|
|
||||||
ring-clear-color = scheme.palette.base0C;
|
|
||||||
ring-caps-lock-color = scheme.palette.base09;
|
|
||||||
ring-ver-color = scheme.palette.base0D;
|
|
||||||
ring-wrong-color = scheme.palette.base08;
|
|
||||||
separator-color = scheme.palette.base02;
|
|
||||||
text-color = scheme.palette.base07;
|
|
||||||
text-clear-color = scheme.palette.base04;
|
|
||||||
text-caps-lock-color = scheme.palette.base04;
|
|
||||||
text-ver-color = scheme.palette.base04;
|
|
||||||
text-wrong-color = scheme.palette.base04;
|
|
||||||
};
|
|
||||||
|
|
||||||
zathura.options = {
|
|
||||||
default-fg = scheme.palette.base05;
|
|
||||||
default-bg = scheme.palette.base00;
|
|
||||||
|
|
||||||
completion-bg = scheme.palette.base02;
|
|
||||||
completion-fg = scheme.palette.base05;
|
|
||||||
completion-highlight-bg = scheme.palette.base03;
|
|
||||||
completion-highlight-fg = scheme.palette.base05;
|
|
||||||
completion-group-bg = scheme.palette.base02;
|
|
||||||
completion-group-fg = scheme.palette.base0D;
|
|
||||||
|
|
||||||
statusbar-fg = scheme.palette.base05;
|
|
||||||
statusbar-bg = scheme.palette.base02;
|
|
||||||
|
|
||||||
notification-bg = scheme.palette.base02;
|
|
||||||
notification-fg = scheme.palette.base05;
|
|
||||||
notification-error-bg = scheme.palette.base02;
|
|
||||||
notification-error-fg = scheme.palette.base08;
|
|
||||||
notification-warning-bg = scheme.palette.base02;
|
|
||||||
notification-warning-fg = scheme.palette.base0A;
|
|
||||||
|
|
||||||
inputbar-fg = scheme.palette.base05;
|
|
||||||
inputbar-bg = scheme.palette.base02;
|
|
||||||
|
|
||||||
recolor = true;
|
|
||||||
recolor-lightcolor = scheme.palette.base00;
|
|
||||||
recolor-darkcolor = scheme.palette.base05;
|
|
||||||
|
|
||||||
index-fg = scheme.palette.base05;
|
|
||||||
index-bg = scheme.palette.base00;
|
|
||||||
index-active-fg = scheme.palette.base05;
|
|
||||||
index-active-bg = scheme.palette.base02;
|
|
||||||
|
|
||||||
render-loading-bg = scheme.palette.base00;
|
|
||||||
render-loading-fg = scheme.palette.base05;
|
|
||||||
|
|
||||||
highlight-color = lib'.rgba lib scheme.palette.base03 ".5";
|
|
||||||
highlight-fg = lib'.rgba lib scheme.palette.base0E ".5";
|
|
||||||
highlight-active-color = lib'.rgba lib scheme.palette.base0E ".5";
|
|
||||||
};
|
|
||||||
|
|
||||||
gnome-terminal.profile = {
|
|
||||||
"4621184a-b921-42cf-80a0-7784516606f2".colors = {
|
|
||||||
backgroundColor = "#${scheme.palette.base00}";
|
|
||||||
foregroundColor = "#${scheme.palette.base05}" "#${scheme.palette.base05}";
|
|
||||||
palette = builtins.attrValues (builtins.mapAttrs (_: color: "#${color}") scheme.palette);
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,14 @@
|
||||||
{inputs, ...}: {
|
{
|
||||||
|
self,
|
||||||
|
inputs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
anastacia = {
|
anastacia = {
|
||||||
hostname = "2a01:4f8:1c1c:8495::1";
|
hostname = "2a01:4f8:1c1c:8495::1";
|
||||||
profiles.system = {
|
profiles.system = {
|
||||||
sshUser = "root";
|
sshUser = "root";
|
||||||
user = "root";
|
user = "root";
|
||||||
path = inputs.deploy-rs.lib.x86_64-linux.activate.nixos inputs.self.nixosConfigurations.anastacia;
|
path = inputs.deploy-rs.lib.x86_64-linux.activate.nixos self.nixosConfigurations.anastacia;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,208 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
stdenv,
|
|
||||||
fetchFromGitHub,
|
|
||||||
makeWrapper,
|
|
||||||
cmake,
|
|
||||||
ninja,
|
|
||||||
libarchive,
|
|
||||||
libz,
|
|
||||||
jdk17,
|
|
||||||
libcef,
|
|
||||||
luajit,
|
|
||||||
xorg,
|
|
||||||
mesa,
|
|
||||||
glib,
|
|
||||||
nss,
|
|
||||||
nspr,
|
|
||||||
atk,
|
|
||||||
at-spi2-atk,
|
|
||||||
libdrm,
|
|
||||||
expat,
|
|
||||||
libxkbcommon,
|
|
||||||
gtk3,
|
|
||||||
pango,
|
|
||||||
cairo,
|
|
||||||
alsa-lib,
|
|
||||||
dbus,
|
|
||||||
at-spi2-core,
|
|
||||||
cups,
|
|
||||||
systemd,
|
|
||||||
buildFHSEnv,
|
|
||||||
copyDesktopItems,
|
|
||||||
makeDesktopItem,
|
|
||||||
}: let
|
|
||||||
cef = libcef.overrideAttrs (_: {
|
|
||||||
installPhase = let
|
|
||||||
gl_rpath = lib.makeLibraryPath [
|
|
||||||
stdenv.cc.cc.lib
|
|
||||||
];
|
|
||||||
rpath = lib.makeLibraryPath [
|
|
||||||
glib
|
|
||||||
nss
|
|
||||||
nspr
|
|
||||||
atk
|
|
||||||
at-spi2-atk
|
|
||||||
libdrm
|
|
||||||
expat
|
|
||||||
xorg.libxcb
|
|
||||||
libxkbcommon
|
|
||||||
xorg.libX11
|
|
||||||
xorg.libXcomposite
|
|
||||||
xorg.libXdamage
|
|
||||||
xorg.libXext
|
|
||||||
xorg.libXfixes
|
|
||||||
xorg.libXrandr
|
|
||||||
mesa
|
|
||||||
gtk3
|
|
||||||
pango
|
|
||||||
cairo
|
|
||||||
alsa-lib
|
|
||||||
dbus
|
|
||||||
at-spi2-core
|
|
||||||
cups
|
|
||||||
xorg.libxshmfence
|
|
||||||
systemd
|
|
||||||
];
|
|
||||||
in ''
|
|
||||||
mkdir -p $out/lib/ $out/share/cef/
|
|
||||||
cp libcef_dll_wrapper/libcef_dll_wrapper.a $out/lib/
|
|
||||||
cp -r ../Resources/* $out/lib/
|
|
||||||
cp -r ../Release/* $out/lib/
|
|
||||||
patchelf --set-rpath "${rpath}" $out/lib/libcef.so
|
|
||||||
patchelf --set-rpath "${gl_rpath}" $out/lib/libEGL.so
|
|
||||||
patchelf --set-rpath "${gl_rpath}" $out/lib/libGLESv2.so
|
|
||||||
cp ../Release/*.bin $out/share/cef/
|
|
||||||
cp -r ../Resources/* $out/share/cef/
|
|
||||||
cp -r ../include $out
|
|
||||||
cp -r ../libcef_dll $out
|
|
||||||
cp -r ../cmake $out
|
|
||||||
'';
|
|
||||||
});
|
|
||||||
|
|
||||||
bolt = stdenv.mkDerivation (finalAttrs: {
|
|
||||||
pname = "bolt-launcher";
|
|
||||||
version = "0.10.0";
|
|
||||||
|
|
||||||
src = fetchFromGitHub {
|
|
||||||
owner = "AdamCake";
|
|
||||||
repo = "bolt";
|
|
||||||
rev = finalAttrs.version;
|
|
||||||
fetchSubmodules = true;
|
|
||||||
hash = "sha256-2IoFzD+yhQv1Y7D+abeNUT23BC4P1xZTALF8Y+Zsg44=";
|
|
||||||
};
|
|
||||||
|
|
||||||
nativeBuildInputs = [
|
|
||||||
cmake
|
|
||||||
ninja
|
|
||||||
luajit
|
|
||||||
makeWrapper
|
|
||||||
copyDesktopItems
|
|
||||||
];
|
|
||||||
|
|
||||||
buildInputs = [
|
|
||||||
mesa
|
|
||||||
xorg.libX11
|
|
||||||
xorg.libxcb
|
|
||||||
libarchive
|
|
||||||
libz
|
|
||||||
cef
|
|
||||||
jdk17
|
|
||||||
];
|
|
||||||
|
|
||||||
desktopItems = [
|
|
||||||
(makeDesktopItem {
|
|
||||||
inherit (bolt) name;
|
|
||||||
desktopName = "Bolt Launcher";
|
|
||||||
keywords = [
|
|
||||||
"Game"
|
|
||||||
];
|
|
||||||
exec = "${bolt.name}";
|
|
||||||
terminal = false;
|
|
||||||
categories = ["Game"];
|
|
||||||
icon = "bolt-launcher";
|
|
||||||
})
|
|
||||||
];
|
|
||||||
|
|
||||||
cmakeFlags = [
|
|
||||||
"-D CMAKE_BUILD_TYPE=Release"
|
|
||||||
"-D BOLT_LUAJIT_INCLUDE_DIR=${luajit}/include"
|
|
||||||
"-G Ninja"
|
|
||||||
];
|
|
||||||
|
|
||||||
preConfigure = ''
|
|
||||||
ls -al
|
|
||||||
mkdir -p cef/dist/Release cef/dist/Resources cef/dist/include
|
|
||||||
|
|
||||||
ln -s ${cef}/lib/* cef/dist/Release
|
|
||||||
|
|
||||||
ln -s ${cef}/share/cef/*.pak cef/dist/Resources
|
|
||||||
ln -s ${cef}/share/cef/icudtl.dat cef/dist/Resources
|
|
||||||
ln -s ${cef}/share/cef/locales cef/dist/Resources
|
|
||||||
|
|
||||||
ln -s ${cef}/include/* cef/dist/include
|
|
||||||
ln -s ${cef}/libcef_dll cef/dist/libcef_dll
|
|
||||||
|
|
||||||
ln -s ${cef}/cmake cef/dist/cmake
|
|
||||||
ln -s ${cef}/CMakeLists.txt cef/dist
|
|
||||||
'';
|
|
||||||
|
|
||||||
postInstall = ''
|
|
||||||
for size in 16 32 64 128 256; do
|
|
||||||
size_dir="''${size}x''${size}"
|
|
||||||
ls -al $src/icon
|
|
||||||
mkdir -p $out/share/icons/hicolor/''${size_dir}/apps
|
|
||||||
cp $src/icon/$size.png $out/share/icons/hicolor/''${size_dir}/apps/bolt-launcher.png
|
|
||||||
done
|
|
||||||
mkdir -p $out/share/icons/hicolor/scalable/apps/
|
|
||||||
cp $src/icon/bolt.svg $out/share/icons/hicolor/scalable/apps/bolt-launcher.svg
|
|
||||||
'';
|
|
||||||
postFixup = ''
|
|
||||||
makeWrapper "$out/opt/bolt-launcher/bolt" "$out/bin/${finalAttrs.pname}-${finalAttrs.version}" \
|
|
||||||
--set JAVA_HOME "${jdk17}"
|
|
||||||
ls -al $out/bin
|
|
||||||
mkdir -p $out/lib
|
|
||||||
cp $out/usr/local/lib/libbolt-plugin.so $out/lib
|
|
||||||
'';
|
|
||||||
});
|
|
||||||
in
|
|
||||||
buildFHSEnv {
|
|
||||||
inherit (bolt) name version;
|
|
||||||
|
|
||||||
targetPkgs = pkgs:
|
|
||||||
[bolt]
|
|
||||||
++ (with pkgs; [
|
|
||||||
xorg.libSM
|
|
||||||
xorg.libXxf86vm
|
|
||||||
xorg.libX11
|
|
||||||
glib
|
|
||||||
pango
|
|
||||||
cairo
|
|
||||||
gdk-pixbuf
|
|
||||||
gtk2-x11
|
|
||||||
libz
|
|
||||||
libcap
|
|
||||||
libsecret
|
|
||||||
openssl_1_1
|
|
||||||
SDL2
|
|
||||||
libGL
|
|
||||||
]);
|
|
||||||
|
|
||||||
extraInstallCommands = ''
|
|
||||||
mkdir -p $out/share/applications $out/share/icons
|
|
||||||
ln -s ${bolt}/share/applications/*.desktop \
|
|
||||||
$out/share/applications/
|
|
||||||
ln -s ${bolt}/share/icons/hicolor \
|
|
||||||
$out/share/icons/hicolor
|
|
||||||
'';
|
|
||||||
|
|
||||||
runScript = "${bolt.name}";
|
|
||||||
meta = {
|
|
||||||
homepage = "https://github.com/Adamcake/Bolt";
|
|
||||||
description = "An alternative launcher for RuneScape";
|
|
||||||
license = lib.licenses.agpl3Plus;
|
|
||||||
maintainers = with lib.maintainers; [nezia];
|
|
||||||
platforms = lib.platforms.linux;
|
|
||||||
mainProgram = "${bolt.name}";
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,15 +0,0 @@
|
||||||
{
|
|
||||||
inputs,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
mcuxpresso = import ./mcuxpresso pkgs;
|
|
||||||
# this is unfortunately needed since bolt-launcher makes use of openssl-1.1.1w, and since it is not part of hosts, we have to add it this way
|
|
||||||
bolt-launcher =
|
|
||||||
(import inputs.nixpkgs {
|
|
||||||
inherit (pkgs) system;
|
|
||||||
config.permittedInsecurePackages = ["openssl-1.1.1w"];
|
|
||||||
})
|
|
||||||
.callPackage
|
|
||||||
./bolt-launcher.nix {};
|
|
||||||
}
|
|
|
@ -1,49 +0,0 @@
|
||||||
{
|
|
||||||
eclipses,
|
|
||||||
stdenv,
|
|
||||||
requireFile,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
name = "mcuxpressotools";
|
|
||||||
version = "v16-1";
|
|
||||||
description = "MCUXpresso Config Tools";
|
|
||||||
filename = "mcuxpresso-config-tools-${version}_amd64.deb";
|
|
||||||
|
|
||||||
src = stdenv.mkDerivation {
|
|
||||||
inherit version description;
|
|
||||||
name = "${name}-src";
|
|
||||||
src = requireFile {
|
|
||||||
url = "https://www.nxp.com/design/software/development-software/mcuxpresso-config-tools-pins-clocks-and-peripherals:MCUXpresso-Config-Tools";
|
|
||||||
name = "${filename}.bin";
|
|
||||||
sha256 = "sha256-BbEwxm1urV2IrgUiTiMBEAPvonQGwdL4fpqFftGgRxI=";
|
|
||||||
};
|
|
||||||
|
|
||||||
buildCommand = ''
|
|
||||||
# Unpack tarball.
|
|
||||||
mkdir -p deb
|
|
||||||
sh $src --target deb || true
|
|
||||||
ar -xv deb/${filename}
|
|
||||||
tar xfvz data.tar.gz -C .
|
|
||||||
|
|
||||||
mkdir -p ./final/eclipse
|
|
||||||
mv ./opt/nxp/MCUX_CFG_v13/bin/.* final/eclipse
|
|
||||||
mv ./usr final/
|
|
||||||
mv final/eclipse/tools final/eclipse/eclipse
|
|
||||||
mv final/eclipse/tools.ini final/eclipse/eclipse.ini
|
|
||||||
|
|
||||||
# Create custom .eclipseproduct file
|
|
||||||
echo "name=${name}
|
|
||||||
id=com.nxp.${name}
|
|
||||||
version=${version}
|
|
||||||
" > final/eclipse/.eclipseproduct
|
|
||||||
|
|
||||||
# Additional files
|
|
||||||
mkdir -p final/usr/share/mime
|
|
||||||
mv ./opt/nxp/MCUX_CFG_v13/mcu_data final/mcu_data
|
|
||||||
|
|
||||||
cd ./final
|
|
||||||
tar -czf $out ./
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
in
|
|
||||||
eclipses.buildEclipse {inherit description name src;}
|
|
|
@ -1,3 +0,0 @@
|
||||||
pkgs: {
|
|
||||||
ide = pkgs.callPackage ./ide.nix {};
|
|
||||||
}
|
|
|
@ -1,100 +0,0 @@
|
||||||
# https://github.com/KoviRobi/nixos-config/blob/3ab3f8372d1fd021a235de4d314ef7147846513e/overlays/mcuxpresso.nix
|
|
||||||
{pkgs, ...}: let
|
|
||||||
name = "mcuxpressoide";
|
|
||||||
version = "24.9.25";
|
|
||||||
description = "MCUXpresso IDE";
|
|
||||||
filename = "${name}-${version}.x86_64.deb";
|
|
||||||
mcuxpressoideSrc = pkgs.stdenv.mkDerivation {
|
|
||||||
inherit version description;
|
|
||||||
name = "${name}-src";
|
|
||||||
src = pkgs.requireFile {
|
|
||||||
url = "https://www.nxp.com/design/design-center/software/development-software/mcuxpresso-software-and-tools-/mcuxpresso-integrated-development-environment-ide:MCUXpresso-IDE";
|
|
||||||
name = "${filename}.bin";
|
|
||||||
hash = "sha256-e3g7rzZQ1WFLcUakkjaufpHMtw3qkw5lwxJuCKs6L+k=";
|
|
||||||
};
|
|
||||||
buildCommand = ''
|
|
||||||
# Unpack tarball.
|
|
||||||
mkdir -p deb
|
|
||||||
sh $src --target deb || true
|
|
||||||
ar -xv deb/${filename}
|
|
||||||
tar xfvz data.tar.gz -C .
|
|
||||||
mkdir -p ./final/eclipse
|
|
||||||
mv ./usr/local/${name}-${version}/ide/* ./usr/local/${name}-${version}/ide/.* final/eclipse
|
|
||||||
mv final/eclipse/mcuxpressoide final/eclipse/eclipse
|
|
||||||
mv final/eclipse/mcuxpressoide.ini final/eclipse/eclipse.ini
|
|
||||||
# Create custom .eclipseproduct file
|
|
||||||
rm final/eclipse/.eclipseproduct
|
|
||||||
echo "name=${name}
|
|
||||||
id=com.nxp.${name}
|
|
||||||
version=${version}
|
|
||||||
" > final/eclipse/.eclipseproduct
|
|
||||||
# Install udev rules
|
|
||||||
mkdir -p final/lib/udev/rules.d
|
|
||||||
mv ./lib/udev/rules.d/56-pemicro.rules ./lib/udev/rules.d/85-mcuxpresso.rules final/lib/udev/rules.d/
|
|
||||||
# Additional files
|
|
||||||
mv ./usr/local/${name}-${version}/mcu_data final/mcu_data
|
|
||||||
cd ./final
|
|
||||||
tar -czf $out ./
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
mcuxpressoide = pkgs.eclipses.buildEclipse {
|
|
||||||
name = "mcuxpresso-eclipse";
|
|
||||||
inherit description;
|
|
||||||
src = mcuxpressoideSrc;
|
|
||||||
};
|
|
||||||
|
|
||||||
# needed because of the integrated toolchain
|
|
||||||
mcuxpressoFhsEnv = pkgs.buildFHSEnv {
|
|
||||||
name = "mcuxpresso-env";
|
|
||||||
targetPkgs = pkgs: [
|
|
||||||
pkgs.stdenv.cc.cc.lib
|
|
||||||
pkgs.gcc
|
|
||||||
pkgs.libgcc
|
|
||||||
pkgs.libstdcxx5
|
|
||||||
pkgs.xorg.libXext
|
|
||||||
pkgs.xorg.libX11
|
|
||||||
pkgs.xorg.libXrender
|
|
||||||
pkgs.xorg.libXtst
|
|
||||||
pkgs.xorg.libXi
|
|
||||||
pkgs.freetype
|
|
||||||
pkgs.alsa-lib
|
|
||||||
pkgs.ncurses
|
|
||||||
pkgs.ncurses5
|
|
||||||
pkgs.libusb1
|
|
||||||
pkgs.readline
|
|
||||||
pkgs.libffi
|
|
||||||
pkgs.zlib
|
|
||||||
pkgs.tcl
|
|
||||||
pkgs.libxcrypt
|
|
||||||
pkgs.libxcrypt-legacy
|
|
||||||
pkgs.libusb-compat-0_1
|
|
||||||
];
|
|
||||||
|
|
||||||
runScript = "${mcuxpressoide}/bin/eclipse";
|
|
||||||
};
|
|
||||||
in
|
|
||||||
# wrapper with desktop entry and udev rules
|
|
||||||
pkgs.stdenv.mkDerivation {
|
|
||||||
inherit name version description;
|
|
||||||
dontUnpack = true;
|
|
||||||
dontConfigure = true;
|
|
||||||
dontBuild = true;
|
|
||||||
nativeBuildInputs = [pkgs.copyDesktopItems];
|
|
||||||
desktopItems = [
|
|
||||||
(pkgs.makeDesktopItem {
|
|
||||||
inherit name;
|
|
||||||
type = "Application";
|
|
||||||
desktopName = "MCUXpresso IDE";
|
|
||||||
exec = "mcuxpresso";
|
|
||||||
})
|
|
||||||
];
|
|
||||||
installPhase = ''
|
|
||||||
runHook preInstall
|
|
||||||
mkdir -p $out/bin $out/lib/udev/rules.d $out/eclipse $out/mcu_data
|
|
||||||
|
|
||||||
cp ${mcuxpressoide}/lib/udev/rules.d/85-mcuxpresso.rules ${mcuxpressoide}/lib/udev/rules.d/56-pemicro.rules $out/lib/udev/rules.d/
|
|
||||||
|
|
||||||
ln -s ${mcuxpressoFhsEnv}/bin/mcuxpresso-env $out/bin/mcuxpresso
|
|
||||||
runHook postInstall
|
|
||||||
'';
|
|
||||||
}
|
|
Binary file not shown.
|
@ -1,5 +0,0 @@
|
||||||
let
|
|
||||||
anastacia = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEplguGeXCbdz++Ry5pwJylmtAMnwtf1+9JoJnCGfw3A root@anastacia";
|
|
||||||
in {
|
|
||||||
"searx-env-file.age".publicKeys = [anastacia];
|
|
||||||
}
|
|
|
@ -30,5 +30,7 @@
|
||||||
"rd.udev.log_level=3"
|
"rd.udev.log_level=3"
|
||||||
"udev.log_priority=3"
|
"udev.log_priority=3"
|
||||||
];
|
];
|
||||||
|
|
||||||
|
kernelPackages = pkgs.linuxPackages_latest;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
./users.nix
|
./users.nix
|
||||||
./security.nix
|
./security.nix
|
||||||
./networking.nix
|
./networking.nix
|
||||||
|
../nix
|
||||||
];
|
];
|
||||||
i18n = {
|
i18n = {
|
||||||
defaultLocale = "en_US.UTF-8";
|
defaultLocale = "en_US.UTF-8";
|
||||||
|
|
|
@ -7,7 +7,6 @@
|
||||||
"audio"
|
"audio"
|
||||||
"video"
|
"video"
|
||||||
"wheel"
|
"wheel"
|
||||||
"plugdev"
|
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
./core
|
./core
|
||||||
./nix
|
|
||||||
|
|
||||||
./hardware/printing.nix
|
./hardware/printing.nix
|
||||||
./hardware/fwupd.nix
|
./hardware/fwupd.nix
|
||||||
|
|
|
@ -1,12 +1,11 @@
|
||||||
{config, ...}: {
|
{config, ...}: {
|
||||||
hardware.graphics.enable = true;
|
|
||||||
services.xserver.videoDrivers = ["nvidia"];
|
services.xserver.videoDrivers = ["nvidia"];
|
||||||
hardware.nvidia = {
|
hardware.nvidia = {
|
||||||
modesetting.enable = true;
|
modesetting.enable = true;
|
||||||
powerManagement.enable = false;
|
powerManagement.enable = false;
|
||||||
powerManagement.finegrained = false;
|
powerManagement.finegrained = false;
|
||||||
open = true;
|
open = false;
|
||||||
nvidiaSettings = true;
|
nvidiaSettings = true;
|
||||||
package = config.boot.kernelPackages.nvidiaPackages.beta;
|
package = config.boot.kernelPackages.nvidiaPackages.stable;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,13 +1,15 @@
|
||||||
{
|
{pkgs, ...}: {
|
||||||
nixpkgs = {
|
nixpkgs = {
|
||||||
config = {
|
config.allowUnfree = true;
|
||||||
allowUnfree = true;
|
overlays = [
|
||||||
permittedInsecurePackages = [
|
(_: prev: {
|
||||||
"cinny-4.2.3"
|
lib =
|
||||||
"cinny-unwrapped-4.2.3"
|
prev.lib
|
||||||
"segger-jlink-qt4-796s"
|
// import ../../lib {
|
||||||
];
|
inherit (prev) lib pkgs;
|
||||||
segger-jlink.acceptLicense = true;
|
|
||||||
};
|
};
|
||||||
|
})
|
||||||
|
];
|
||||||
|
config.permittedInsecurePackages = ["cinny-4.2.2" "cinny-unwrapped-4.2.2"];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,27 +1,19 @@
|
||||||
{
|
{pkgs, ...}: {
|
||||||
inputs,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
fonts = {
|
fonts = {
|
||||||
enableDefaultPackages = false;
|
packages = with pkgs; [
|
||||||
packages = [
|
noto-fonts
|
||||||
pkgs.noto-fonts
|
noto-fonts-cjk
|
||||||
pkgs.noto-fonts-cjk-sans
|
noto-fonts-emoji
|
||||||
pkgs.noto-fonts-extra
|
noto-fonts-extra
|
||||||
pkgs.intel-one-mono
|
(nerdfonts.override {fonts = ["IntelOneMono"];})
|
||||||
pkgs.noto-fonts-color-emoji
|
|
||||||
(pkgs.nerdfonts.override {fonts = ["IntelOneMono" "NerdFontsSymbolsOnly"];})
|
|
||||||
];
|
];
|
||||||
|
enableDefaultPackages = false;
|
||||||
|
|
||||||
fontconfig = {
|
fontconfig.defaultFonts = {
|
||||||
enable = true;
|
|
||||||
defaultFonts = {
|
|
||||||
serif = ["Noto Serif"];
|
serif = ["Noto Serif"];
|
||||||
sansSerif = ["Inter Medium"];
|
sansSerif = ["Inter"];
|
||||||
monospace = ["IntoneMono NF"];
|
monospace = ["IntoneMono NF"];
|
||||||
emoji = ["Noto Color Emoji"];
|
emoji = ["Noto Color Emoji"];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{
|
{pkgs, ...}: {
|
||||||
programs = {
|
programs = {
|
||||||
steam.enable = true;
|
steam.enable = true;
|
||||||
gamemode.enable = true;
|
gamemode.enable = true;
|
||||||
|
|
|
@ -1,9 +1,3 @@
|
||||||
{pkgs, ...}: {
|
{
|
||||||
imports = [
|
imports = [./docker.nix ./gnupg.nix ./pipewire.nix ./kmscon.nix];
|
||||||
./docker.nix
|
|
||||||
./gnupg.nix
|
|
||||||
./pipewire.nix
|
|
||||||
./kmscon.nix
|
|
||||||
];
|
|
||||||
services.udev.packages = [pkgs.segger-jlink];
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
{pkgs, ...}: {
|
_: {
|
||||||
virtualisation.podman = {
|
virtualisation.docker = {
|
||||||
enable = true;
|
enable = true;
|
||||||
dockerCompat = true;
|
rootless = {
|
||||||
|
enable = true;
|
||||||
|
setSocketVariable = true;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
environment.systemPackages = [pkgs.distrobox];
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,12 +0,0 @@
|
||||||
_: {
|
|
||||||
documentation = {
|
|
||||||
enable = true;
|
|
||||||
|
|
||||||
man = {
|
|
||||||
enable = true;
|
|
||||||
man-db.enable = false;
|
|
||||||
mandoc.enable = true;
|
|
||||||
generateCaches = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,86 +1,23 @@
|
||||||
{
|
{
|
||||||
inputs,
|
|
||||||
config,
|
|
||||||
lib,
|
lib,
|
||||||
lib',
|
|
||||||
pkgs,
|
pkgs,
|
||||||
|
config,
|
||||||
...
|
...
|
||||||
}: let
|
}: {
|
||||||
inherit (lib) getExe evalModules;
|
services.greetd = {
|
||||||
inherit (lib') blurImage;
|
|
||||||
inherit (inputs) niri;
|
|
||||||
in {
|
|
||||||
services.greetd = let
|
|
||||||
home-config = config.home-manager.users.nezia;
|
|
||||||
# huge thanks to https://github.com/sodiboo/system/blob/262e7e80ac9ae0511f8565713feaa8315d084025/login.mod.nix#L22-L67
|
|
||||||
# this is needed because we are also importing the default settings
|
|
||||||
niri-cfg-modules = evalModules {
|
|
||||||
modules = [
|
|
||||||
niri.lib.internal.settings-module
|
|
||||||
(let
|
|
||||||
cfg = home-config.programs.niri.settings;
|
|
||||||
in {
|
|
||||||
programs.niri.settings = {
|
|
||||||
inherit (cfg) input outputs layout;
|
|
||||||
hotkey-overlay.skip-at-startup = true;
|
|
||||||
# causes a deprecation warning otherwise
|
|
||||||
cursor = builtins.removeAttrs cfg.cursor ["hide-on-key-press"];
|
|
||||||
|
|
||||||
window-rules = [
|
|
||||||
{
|
|
||||||
draw-border-with-background = false;
|
|
||||||
clip-to-geometry = true;
|
|
||||||
geometry-corner-radius = {
|
|
||||||
top-left = 8.0;
|
|
||||||
top-right = 8.0;
|
|
||||||
bottom-left = 8.0;
|
|
||||||
bottom-right = 8.0;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
})
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
# validates config and creates a derivation
|
|
||||||
niri-config = niri.lib.internal.validated-config-for pkgs config.programs.niri.package niri-cfg-modules.config.programs.niri.finalConfig;
|
|
||||||
in {
|
|
||||||
enable = true;
|
enable = true;
|
||||||
settings = {
|
settings = rec {
|
||||||
default_session = let
|
initial_session = {
|
||||||
niri = getExe config.programs.niri.package;
|
command = ''
|
||||||
regreet = getExe config.programs.regreet.package;
|
${lib.getExe pkgs.greetd.tuigreet}
|
||||||
# needed because we need to run niri msg quit inside of niri itself (it needs the socket)
|
--time
|
||||||
greeterScript = pkgs.writeScript "greeter-script" ''
|
--asterisks
|
||||||
${regreet} && ${niri} msg action quit --skip-confirmation
|
--user-menu
|
||||||
|
--cmd ${lib.getExe config.programs.niri.package} --session
|
||||||
'';
|
'';
|
||||||
in {
|
|
||||||
command = "${niri} -c ${niri-config} -- ${greeterScript}";
|
|
||||||
user = "greeter";
|
user = "greeter";
|
||||||
};
|
};
|
||||||
};
|
default_session = initial_session;
|
||||||
};
|
|
||||||
programs.regreet = {
|
|
||||||
enable = true;
|
|
||||||
theme = {
|
|
||||||
inherit (config.theme.gtk.theme) name package;
|
|
||||||
};
|
|
||||||
iconTheme = {
|
|
||||||
inherit (config.theme.gtk.iconTheme) name package;
|
|
||||||
};
|
|
||||||
cursorTheme = {
|
|
||||||
inherit (config.theme.cursorTheme) name package;
|
|
||||||
};
|
|
||||||
settings = {
|
|
||||||
background = {
|
|
||||||
path = blurImage pkgs config.theme.wallpaper;
|
|
||||||
|
|
||||||
fit = "Fill";
|
|
||||||
};
|
|
||||||
GTK = {
|
|
||||||
application_prefer_dark_theme = true;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
security.pam.services = {
|
security.pam.services = {
|
||||||
|
|
|
@ -1,33 +0,0 @@
|
||||||
{
|
|
||||||
services.kanata = {
|
|
||||||
enable = true;
|
|
||||||
keyboards.default = {
|
|
||||||
extraDefCfg = "process-unmapped-keys yes";
|
|
||||||
config = ''
|
|
||||||
(defsrc
|
|
||||||
caps a s d f j k l ;
|
|
||||||
)
|
|
||||||
(defvar
|
|
||||||
tap-time 150
|
|
||||||
hold-time 200
|
|
||||||
)
|
|
||||||
|
|
||||||
(defalias
|
|
||||||
escctrl (tap-hold 100 100 esc lctl)
|
|
||||||
a (tap-hold $tap-time $hold-time a lmet)
|
|
||||||
s (tap-hold $tap-time $hold-time s lalt)
|
|
||||||
d (tap-hold $tap-time $hold-time d lsft)
|
|
||||||
f (tap-hold $tap-time $hold-time f lctl)
|
|
||||||
j (tap-hold $tap-time $hold-time j rctl)
|
|
||||||
k (tap-hold $tap-time $hold-time k rsft)
|
|
||||||
l (tap-hold $tap-time $hold-time l ralt)
|
|
||||||
; (tap-hold $tap-time $hold-time ; rmet)
|
|
||||||
)
|
|
||||||
|
|
||||||
(deflayer base
|
|
||||||
@escctrl @a @s @d @f @j @k @l @;
|
|
||||||
)
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,9 +1,5 @@
|
||||||
{
|
{
|
||||||
services.logind = {
|
services.logind = {
|
||||||
lidSwitch = "suspend";
|
lidSwitch = "suspend";
|
||||||
extraConfig = ''
|
|
||||||
HandlePowerKey=ignore
|
|
||||||
HandlePowerKeyLongPress=poweroff
|
|
||||||
'';
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{
|
_: {
|
||||||
hardware.pulseaudio.enable = false;
|
hardware.pulseaudio.enable = false;
|
||||||
# rtkit is optional but recommended
|
# rtkit is optional but recommended
|
||||||
security.rtkit.enable = true;
|
security.rtkit.enable = true;
|
||||||
|
|
|
@ -1,21 +0,0 @@
|
||||||
{
|
|
||||||
inputs,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
services.caddy.enable = true;
|
|
||||||
services.caddy.virtualHosts = {
|
|
||||||
"www.nezia.dev" = {
|
|
||||||
extraConfig = ''
|
|
||||||
redir https://nezia.dev{uri}
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
"nezia.dev" = {
|
|
||||||
extraConfig = ''
|
|
||||||
root * ${inputs.portfolio.packages.${pkgs.system}.default}
|
|
||||||
file_server
|
|
||||||
encode gzip
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,5 +1,9 @@
|
||||||
{
|
{
|
||||||
services = {
|
services = {
|
||||||
|
logind.extraConfig = ''
|
||||||
|
HandlePowerKey=suspend
|
||||||
|
'';
|
||||||
|
|
||||||
power-profiles-daemon.enable = true;
|
power-profiles-daemon.enable = true;
|
||||||
|
|
||||||
# battery info
|
# battery info
|
||||||
|
|
|
@ -1,14 +1,8 @@
|
||||||
{
|
{pkgs, ...}: {
|
||||||
config,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
age.secrets.searx-env-file.file = ../../secrets/searx-env-file.age;
|
|
||||||
services = {
|
services = {
|
||||||
searx = {
|
searx = {
|
||||||
enable = true;
|
enable = true;
|
||||||
package = pkgs.searxng;
|
package = pkgs.searxng;
|
||||||
environmentFile = config.age.secrets.searx-env-file.path;
|
|
||||||
settings = {
|
settings = {
|
||||||
search = {
|
search = {
|
||||||
safe_search = 1; # 0 = None, 1 = Moderate, 2 = Strict
|
safe_search = 1; # 0 = None, 1 = Moderate, 2 = Strict
|
||||||
|
@ -16,7 +10,7 @@
|
||||||
default_lang = "en";
|
default_lang = "en";
|
||||||
};
|
};
|
||||||
server = {
|
server = {
|
||||||
secret_key = "@SEARX_SECRET_KEY@";
|
secret_key = "TODO_USE_SOPS_INSTEAD";
|
||||||
port = 8888; # Internal port
|
port = 8888; # Internal port
|
||||||
bind_address = "localhost"; # Only listen locally
|
bind_address = "localhost"; # Only listen locally
|
||||||
base_url = "https://search.nezia.dev/";
|
base_url = "https://search.nezia.dev/";
|
||||||
|
|
|
@ -1,8 +0,0 @@
|
||||||
{
|
|
||||||
services = {
|
|
||||||
syncthing = {
|
|
||||||
enable = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
systemd.services.syncthing.environment.STNODEFAULTFOLDER = "true"; # Don't create default ~/Sync folder
|
|
||||||
}
|
|
8
system/syncthing/default.nix
Normal file
8
system/syncthing/default.nix
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
services = {
|
||||||
|
syncthing = {
|
||||||
|
enable = true;
|
||||||
|
systemd.services.syncthing.environment.STNODEFAULTFOLDER = "true"; # Don't create default ~/Sync folder
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
Loading…
Reference in a new issue