Reinit after agenix setup
This commit is contained in:
commit
a9f8fc01fa
90 changed files with 13492 additions and 0 deletions
2
.directory
Normal file
2
.directory
Normal file
|
@ -0,0 +1,2 @@
|
|||
[Desktop Entry]
|
||||
Icon=nix-snowflake-white
|
651
LICENSE.md
Normal file
651
LICENSE.md
Normal file
|
@ -0,0 +1,651 @@
|
|||
GNU Affero General Public License
|
||||
=================================
|
||||
|
||||
_Version 3, 19 November 2007_
|
||||
_Copyright © 2007 Free Software Foundation, Inc. <<http://fsf.org/>>_
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
## Preamble
|
||||
|
||||
The GNU Affero General Public License is a free, copyleft license for
|
||||
software and other kinds of works, specifically designed to ensure
|
||||
cooperation with the community in the case of network server software.
|
||||
|
||||
The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
our General Public Licenses are intended to guarantee your freedom to
|
||||
share and change all versions of a program--to make sure it remains free
|
||||
software for all its users.
|
||||
|
||||
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.
|
||||
|
||||
Developers that use our General Public Licenses protect your rights
|
||||
with two steps: **(1)** assert copyright on the software, and **(2)** offer
|
||||
you this License which gives you legal permission to copy, distribute
|
||||
and/or modify the software.
|
||||
|
||||
A secondary benefit of defending all users' freedom is that
|
||||
improvements made in alternate versions of the program, if they
|
||||
receive widespread use, become available for other developers to
|
||||
incorporate. Many developers of free software are heartened and
|
||||
encouraged by the resulting cooperation. However, in the case of
|
||||
software used on network servers, this result may fail to come about.
|
||||
The GNU General Public License permits making a modified version and
|
||||
letting the public access it on a server without ever releasing its
|
||||
source code to the public.
|
||||
|
||||
The GNU Affero General Public License is designed specifically to
|
||||
ensure that, in such cases, the modified source code becomes available
|
||||
to the community. It requires the operator of a network server to
|
||||
provide the source code of the modified version running there to the
|
||||
users of that server. Therefore, public use of a modified version, on
|
||||
a publicly accessible server, gives the public access to the source
|
||||
code of the modified version.
|
||||
|
||||
An older license, called the Affero General Public License and
|
||||
published by Affero, was designed to accomplish similar goals. This is
|
||||
a different license, not a version of the Affero GPL, but Affero has
|
||||
released a new version of the Affero GPL which permits relicensing under
|
||||
this license.
|
||||
|
||||
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 Affero 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. Remote Network Interaction; Use with the GNU General Public License
|
||||
|
||||
Notwithstanding any other provision of this License, if you modify the
|
||||
Program, your modified version must prominently offer all users
|
||||
interacting with it remotely through a computer network (if your version
|
||||
supports such interaction) an opportunity to receive the Corresponding
|
||||
Source of your version by providing access to the Corresponding Source
|
||||
from a network server at no charge, through some standard or customary
|
||||
means of facilitating copying of software. This Corresponding Source
|
||||
shall include the Corresponding Source for any work covered by version 3
|
||||
of the GNU General Public License that is incorporated pursuant to the
|
||||
following paragraph.
|
||||
|
||||
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 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 work with which it is combined will remain governed by version
|
||||
3 of the GNU General Public License.
|
||||
|
||||
### 14. Revised Versions of this License
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of
|
||||
the GNU Affero 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 Affero 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 Affero 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 Affero 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 Affero 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 Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If your software can interact with users remotely through a computer
|
||||
network, you should also make sure that it provides a way for users to
|
||||
get its source. For example, if your program is a web application, its
|
||||
interface could display a “Source” link that leads users to an archive
|
||||
of the code. There are many ways you could offer source, and different
|
||||
solutions will be better for different programs; see section 13 for the
|
||||
specific requirements.
|
||||
|
||||
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 AGPL, see
|
||||
<<http://www.gnu.org/licenses/>>.
|
67
NOTES.md
Normal file
67
NOTES.md
Normal file
|
@ -0,0 +1,67 @@
|
|||
# ToDo's
|
||||
|
||||
- Investigate https://crane.dev/examples/quick-start-simple.html for ruszt builds
|
||||
- https://nix.dev/tutorials/packaging-existing-software
|
||||
- this looks awesome: https://github.com/erictossell/nixflakes/tree/main
|
||||
- https://nixos.wiki/wiki/Binary_Cache
|
||||
- build a good abstraction for systems
|
||||
- allows setting nixpkgs.localSystem per systems
|
||||
- should yield a `nixosConfiguration.${hostname} = nixpkgs.lib.nixosSystem {...}`
|
||||
- example module abstraction
|
||||
```nix
|
||||
# TODO think about partitions/hardware/system specific conf
|
||||
# TODO think about hardware.nix like things
|
||||
{ config,
|
||||
inputs,
|
||||
lib,
|
||||
...
|
||||
}: {
|
||||
home_conf = {
|
||||
# ...
|
||||
};
|
||||
os_conf = {
|
||||
# ...
|
||||
};
|
||||
}
|
||||
- example mkSystem abstraction
|
||||
```nix
|
||||
let opts = {
|
||||
hostname = "test";
|
||||
opt = "znver2";
|
||||
users = {
|
||||
{ name = "tristand", groups=[..] },
|
||||
{ name = "tester", groups=[..] },
|
||||
};
|
||||
modules = [
|
||||
./my_module.nix
|
||||
];
|
||||
};
|
||||
in {
|
||||
mylib.mkSystem opts? #
|
||||
# take a path? just let the user call import ?
|
||||
}
|
||||
```
|
||||
- example localSystem conf
|
||||
```nix
|
||||
# to allow building
|
||||
nix.extraOptions = ''
|
||||
system-features = system-features = gccarch-znver2
|
||||
'';
|
||||
# to actually build (after rebuilding with the feature before)
|
||||
localSystem = {
|
||||
inherit system;
|
||||
gcc = {
|
||||
arch = "znver2";
|
||||
tune = "znver2";
|
||||
};
|
||||
};
|
||||
pkgs-args = {
|
||||
inherit localSystem overlays;
|
||||
config = {
|
||||
# ....
|
||||
};
|
||||
};
|
||||
pkgs = import nixpkgs pkgs-args;
|
||||
nixpkgs.pkgs = pkgs;
|
||||
```
|
||||
- switch from security.sudo.* to security.sudo-rs.*
|
102
README.md
Normal file
102
README.md
Normal file
|
@ -0,0 +1,102 @@
|
|||
# My nix conf
|
||||
|
||||
## 🏗️ System Setup
|
||||
|
||||
### 👷 "Manual"
|
||||
|
||||
1. Boot Installer
|
||||
2. Clone repo
|
||||
3. Setup partitions
|
||||
```bash
|
||||
sudo nix run --extra-experimental-features flakes --extra-experimental-features nix-command github:nix-community/disko -- --mode disko --flake path:$PWD#nixos-pulse
|
||||
```
|
||||
4. Run installer
|
||||
```bash
|
||||
sudo nixos-install --flake .#nixos-pulse
|
||||
```
|
||||
|
||||
### 🚀 Fully-Automated
|
||||
|
||||
<sub> 🚨 This will WIPE EVERYTHING on the specified system <br> ⚠️ ensure proper sshd & firewall key setup for remote systems </sub>
|
||||
|
||||
```bash
|
||||
nix run github:numtide/nixos-anywhere -- --flake path:$PWD#nixos-pulse root@1.2.3.4
|
||||
```
|
||||
|
||||
## 🔄 Updates
|
||||
|
||||
Run this to keep your system up-to-date.
|
||||
|
||||
```bash
|
||||
nix flake update
|
||||
sudo nixos-rebuild # this assumes your hostname is the same as in the config
|
||||
```
|
||||
|
||||
Run this to keep your home up-to-date. (Assuming you manage home-manager seperately and don't have it integrated into your osConfiguration)
|
||||
```bash
|
||||
nix flake update
|
||||
home-manager switch --flake .
|
||||
```
|
||||
|
||||
|
||||
## Plasma
|
||||
|
||||
Add GUI settings to plasma.nix
|
||||
|
||||
```bash
|
||||
nix run github:pjones/plasma-manager | rg -v khotkeysrc | rg -v "\[ \]" > plasma.new.nix
|
||||
diff plasma.nix plasma.new.nix
|
||||
# copy over as needed
|
||||
```
|
||||
|
||||
## 🛠️ Nix Configuration Structure
|
||||
|
||||
Here's a brief rundown of the directory structure:
|
||||
|
||||
### Top-Level Files
|
||||
|
||||
- `flake.nix`: Nix Flake configuration file.
|
||||
|
||||
#### `home-mods` Directory
|
||||
|
||||
Stores modules related to specific user applications or environments.
|
||||
|
||||
#### `os-mods` Directory
|
||||
|
||||
Holds system-level modules for network, virtualization, desktop etc.
|
||||
|
||||
#### `users` Directory
|
||||
|
||||
Holds home-manager configuration for the users listed in `users.nix`
|
||||
|
||||
#### `systems` Directory
|
||||
|
||||
Holds system specific nixos configuration (e.g. hardware quirks).
|
||||
|
||||
## 🙏 Made possible by
|
||||
|
||||
- NixOS: https://nixos.org/
|
||||
- https://github.com/nix-community/nixos-anywhere
|
||||
- https://github.com/nix-community/disko
|
||||
- Countless great examples e.g.:
|
||||
- https://github.com/etu/nixconfig
|
||||
- https://github.com/hlissner/dotfiles
|
||||
- Caffeine https://en.wikipedia.org/wiki/Caffeine
|
||||
|
||||
## License
|
||||
|
||||
My nix conf
|
||||
Copyright (C) 2024 Tristan Druyen
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero 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 Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
BIN
ext/background.png
Normal file
BIN
ext/background.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 489 KiB |
33
ext/doom/autoload/lsp-booster.el
Normal file
33
ext/doom/autoload/lsp-booster.el
Normal file
|
@ -0,0 +1,33 @@
|
|||
;;; lsp-booster.el --- Boost emacs-lsp using lsp-booster -*- lexical-binding: t; -*-
|
||||
|
||||
(defun lsp-booster--advice-json-parse (old-fn &rest args)
|
||||
"Try to parse bytecode instead of json."
|
||||
(or
|
||||
(when (equal (following-char) ?#)
|
||||
(let ((bytecode (read (current-buffer))))
|
||||
(when (byte-code-function-p bytecode)
|
||||
(funcall bytecode))))
|
||||
(apply old-fn args)))
|
||||
(advice-add (if (progn (require 'json)
|
||||
(fboundp 'json-parse-buffer))
|
||||
'json-parse-buffer
|
||||
'json-read)
|
||||
:around
|
||||
#'lsp-booster--advice-json-parse)
|
||||
|
||||
(defun lsp-booster--advice-final-command (old-fn cmd &optional test?)
|
||||
"Prepend emacs-lsp-booster command to lsp CMD."
|
||||
(let ((orig-result (funcall old-fn cmd test?)))
|
||||
(if (and (not test?) ;; for check lsp-server-present?
|
||||
(not (file-remote-p default-directory)) ;; see lsp-resolve-final-command, it would add extra shell wrapper
|
||||
lsp-use-plists
|
||||
(not (functionp 'json-rpc-connection)) ;; native json-rpc
|
||||
(executable-find "emacs-lsp-booster"))
|
||||
(progn
|
||||
(message "Using emacs-lsp-booster for %s!" orig-result)
|
||||
(cons "emacs-lsp-booster" orig-result))
|
||||
orig-result)))
|
||||
(advice-add 'lsp-resolve-final-command :around #'lsp-booster--advice-final-command)
|
||||
|
||||
(provide 'lsp-booster)
|
||||
;;; lsp-booster.el ends here
|
471
ext/doom/config.el
Normal file
471
ext/doom/config.el
Normal file
|
@ -0,0 +1,471 @@
|
|||
;;; $DOOMDIR/config.el -*- lexical-binding: t; -*-
|
||||
|
||||
;; Place your private configuration here! Remember, you do not need to run 'doom
|
||||
;; sync' after modifying this file!
|
||||
|
||||
|
||||
;; Some functionality uses this to identify you, e.g. GPG configuration, email
|
||||
;; clients, file templates and snippets. It is optional.
|
||||
;; (setq user-full-name "John Doe"
|
||||
;; user-mail-address "john@doe.com")
|
||||
|
||||
;; Doom exposes five (optional) variables for controlling fonts in Doom:
|
||||
;;
|
||||
;; - `doom-font' -- the primary font to use
|
||||
;; - `doom-variable-pitch-ont' -- a non-monospace font (where applicable)
|
||||
;; - `doom-big-font' -- used for `doom-big-font-mode'; use this for
|
||||
;; presentations or streaming.
|
||||
;; - `doom-unicode-font' -- for unicode glyphs
|
||||
;; - `doom-serif-font' -- for the `fixed-pitch-serif' face
|
||||
;;
|
||||
;; See 'C-h v doom-font' for documentation and more examples of what they
|
||||
;; accept. For example:
|
||||
;;
|
||||
|
||||
(setq nerd-icons-font-names '("SymbolsNerdFontMono-Regular.ttf"))
|
||||
|
||||
(setq doom-font (font-spec :family "Iosevka Nerd Font Mono" :size 16)
|
||||
doom-variable-pitch-font (font-spec :family "Iosevka Nerd Font Mono" :size 16)
|
||||
;; doom-symbol-font (font-spec :family "all-the-icons" :size 13)
|
||||
doom-big-font (font-spec :family "Iosevka Nerd Font Mono" :size 20 :weight 'demibold))
|
||||
|
||||
(defun add-back-emoji-fallback-font-families ()
|
||||
(when (fboundp 'set-fontset-font)
|
||||
(let ((fn (doom-rpartial #'member (font-family-list))))
|
||||
(when-let (font (cl-find-if fn doom-emoji-fallback-font-families))
|
||||
(set-fontset-font t 'unicode font nil 'append)))))
|
||||
|
||||
;; (add-hook 'after-setting-font-hook 'add-back-emoji-fallback-font-families)
|
||||
|
||||
;;
|
||||
;; If you or Emacs can't find your font, use 'M-x describe-font' to look them
|
||||
;; up, `M-x eval-region' to execute elisp code, and 'M-x doom/reload-font' to
|
||||
;; refresh your font settings. If Emacs still can't find your font, it likely
|
||||
;; wasn't installed correctly. Font issues are rarely Doom issues!
|
||||
|
||||
;; There are two ways to load a theme. Both assume the theme is installed and
|
||||
;; available. You can either set `doom-theme' or manually load a theme with the
|
||||
;; `load-theme' function. This is the default:
|
||||
(setq doom-theme 'doom-gruvbox)
|
||||
|
||||
;; This determines the style of line numbers in effect. If set to `nil', line
|
||||
;; numbers are disabled. For relative line numbers, set this to `relative'.
|
||||
(setq display-line-numbers-type t)
|
||||
|
||||
;; If you use `org' and don't want your org files in the default location below,
|
||||
;; change `org-directory'. It must be set before org loads!
|
||||
(setq org-directory "~/org/")
|
||||
|
||||
|
||||
;; Encrypt all roam notes;;;;;;;;;;;;;;;;;
|
||||
|
||||
(after! org-roam
|
||||
;; Org Roam ui is better
|
||||
(setq +org-roam-open-buffer-on-find-file nil)
|
||||
(setq org-roam-link-auto-replace t)
|
||||
(setq-default epa-file-encrypt-to "tristandruyen@vault81.de")
|
||||
;; (setq org-roam-capture-templates '(("d" "default" plain "%?"
|
||||
;; :target
|
||||
;; (file+head "%<%Y%m%d%H%M%S>-${slug}.org.gpg"
|
||||
;; "#+title: ${title}\n")
|
||||
;; :unnarrowed t)))
|
||||
|
||||
;; (setq org-roam-dailies-capture-templates '(("d" "default" entry "* %?"
|
||||
;; :target
|
||||
;; (file+head "%<%Y-%m-%d>.org.gpg"
|
||||
;; "#+title: %<%Y-%m-%d>\n")
|
||||
;; :unnarrowed t)))
|
||||
;;
|
||||
)
|
||||
|
||||
;; Whenever you reconfigure a package, make sure to wrap your config in an
|
||||
;; `after!' block, otherwise Doom's defaults may override your settings. E.g.
|
||||
;;
|
||||
;; (after! PACKAGE
|
||||
;; (setq x y))
|
||||
;;
|
||||
;; The exceptions to this rule:
|
||||
;;
|
||||
;; - Setting file/directory variables (like `org-directory')
|
||||
;; - Setting variables which explicitly tell you to set them before their
|
||||
;; package is loaded (see 'C-h v VARIABLE' to look up their documentation).
|
||||
;; - Setting doom variables (which start with 'doom-' or '+').
|
||||
;;
|
||||
;; Here are some additional functions/macros that will help you configure Doom.
|
||||
;;
|
||||
;; - `load!' for loading external *.el files relative to this one
|
||||
;; - `use-package!' for configuring packages
|
||||
;; - `after!' for running code after a package has loaded
|
||||
;; - `add-load-path!' for adding directories to the `load-path', relative to
|
||||
;; this file. Emacs searches the `load-path' when you load packages with
|
||||
;; `require' or `use-package'.
|
||||
;; - `map!' for binding new keys
|
||||
;;
|
||||
;; To get information about any of these functions/macros, move the cursor over
|
||||
;; the highlighted symbol at press 'K' (non-evil users must press 'C-c c k').
|
||||
;; This will open documentation for it, including demos of how they are used.
|
||||
;; Alternatively, use `C-h o' to look up a symbol (functions, variables, faces,
|
||||
;; etc).
|
||||
;;
|
||||
;; You can also try 'gd' (or 'C-c c d') to jump to their definition and see how
|
||||
;; they are implemented.
|
||||
;; TRAMP
|
||||
|
||||
|
||||
;; (add-to-list 'tramp-connection-properties
|
||||
;; (list (regexp-quote "/sshx:user@host:")
|
||||
;; "remote-shell" "/usr/bin/fish"))
|
||||
;;
|
||||
;; (eval-after-load 'tramp
|
||||
;; '((setenv "SHELL" "/run/current-system/sw/bin/fish")
|
||||
;; (setenv "ESHELL" "/run/current-system/sw/bin/fish")
|
||||
;; (add-to-list 'tramp-remote-path
|
||||
;; "/run/current-system/sw/bin")
|
||||
;; )
|
||||
;; )
|
||||
;; (setq! tramp-default-method "ssh")
|
||||
|
||||
;; awatch
|
||||
|
||||
(use-package! activity-watch-mode
|
||||
:config
|
||||
(global-activity-watch-mode))
|
||||
|
||||
;; lsp-booster
|
||||
|
||||
(use-package lsp-booster
|
||||
:after lsp)
|
||||
|
||||
|
||||
(use-package! eglot-booster
|
||||
:after eglot
|
||||
:config
|
||||
(eglot-booster-mode))
|
||||
|
||||
|
||||
(use-package! treesit-fold
|
||||
:after tree-sitter)
|
||||
|
||||
(use-package! eglot-x
|
||||
:after eglot
|
||||
:commands (eglot-x-setup))
|
||||
|
||||
;; rust
|
||||
(setq! lsp-inlay-hint-enable t)
|
||||
(setq! lsp-rust-analyzer-cargo-run-build-scripts t)
|
||||
(setq! lsp-rust-analyzer-proc-macro-enable t)
|
||||
(setq! lsp-rust-analyzer-server-display-inlay-hints t)
|
||||
(setq! lsp-rust-analyzer-completion-auto-import-enable t)
|
||||
|
||||
;; Nix
|
||||
|
||||
(use-package! nixpkgs-fmt
|
||||
:hook (nix-mode . nixpkgs-fmt-on-save-mode))
|
||||
|
||||
;; Shell stuff;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
(setq shell-file-name (executable-find "bash"))
|
||||
(setq-default vterm-shell (executable-find "fish"))
|
||||
|
||||
;; Background Transparency + Toggling
|
||||
|
||||
(defun set-frame-bg-opacity (opacity)
|
||||
;Interactively change the current frames background opacity.
|
||||
; OPACITY is an integer between 0 to 100, inclusive.
|
||||
(interactive
|
||||
(list (read-number "Opacity (0-100): "
|
||||
(or (frame-parameter nil 'alpha)
|
||||
100))))
|
||||
(set-frame-parameter nil 'alpha-background opacity))
|
||||
|
||||
|
||||
(defun toggle-bg-transparency ()
|
||||
;Toggle between transparent and opaque background.
|
||||
(interactive)
|
||||
(let ((alpha-background (frame-parameter nil 'alpha-background)))
|
||||
(set-frame-bg-opacity
|
||||
(if (eql (cond
|
||||
((numberp alpha-background) alpha-background)
|
||||
(t 100))
|
||||
100)
|
||||
85 100)
|
||||
)))
|
||||
|
||||
(map! :leader
|
||||
(:prefix-map ("t" . "toggle")
|
||||
(:prefix ("T" . "Transparancy")
|
||||
:desc "Toggle background transparancy" "b" #'toggle-bg-transparency)))
|
||||
|
||||
(defun setup-frame-transparency (frame)
|
||||
(set-frame-parameter frame 'alpha-background 85))
|
||||
|
||||
(add-hook 'after-make-frame-functions #'setup-frame-transparency)
|
||||
|
||||
|
||||
;; TABS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
(setq! uniquify-separator "/")
|
||||
(setq! uniquify-buffer-name-style 'forward)
|
||||
|
||||
(use-package centaur-tabs
|
||||
:init
|
||||
(setq centaur-tabs-enable-key-bindings t)
|
||||
:config
|
||||
(setq centaur-tabs-style "wave"
|
||||
centaur-tabs-height 32
|
||||
centaur-tabs-set-icons t
|
||||
centaur-tabs-show-new-tab-button t
|
||||
centaur-tabs-show-navigation-buttons t
|
||||
centaur-tabs-set-bar 'under
|
||||
centaur-tabs-show-count t
|
||||
centaur-tabs-gray-out-icons 'buffer
|
||||
x-underline-at-descent-line t
|
||||
centaur-tabs-set-modified-marker t
|
||||
centaur-tabs-modified-marker "•"
|
||||
centaur-tabs-close-button "x"
|
||||
centaur-tabs-cycle-scope 'tabs
|
||||
centaur-tabs-adjust-buffer-order t
|
||||
centaur-tabs-left-edge-margin nil)
|
||||
|
||||
(centaur-tabs-change-fonts (face-attribute 'default :font) 110)
|
||||
(centaur-tabs-headline-match)
|
||||
(centaur-tabs-group-by-projectile-project)
|
||||
;; (centaur-tabs-enable-buffer-alphabetical-reordering)
|
||||
(centaur-tabs-mode t)
|
||||
|
||||
|
||||
(defvar categories-alist
|
||||
'(
|
||||
(:name "org" :modes (org-mode org-agenda-mode) :buffer-name () :type global)
|
||||
(:name "gptel" :modes nil :buffer-name ("*llama-cpp*" "*llama-cpp-code*" "*llama-cpp-bigchat*" "*llama-cpp-biggerchat*" "*gptel*" "*groq*" "*gptel-context*" "*gptel-query*") :type global)
|
||||
(:name "terminal" :modes (vterm-mode term-mode) :buffer-name () :type per-project)
|
||||
(:name "misc" :modes (+doom-dashboard-mode native-comp-limple-mode messages-buffer-mode) :buffer-name () :type global)
|
||||
(:name "misc" :modes (special-mode fundamental-mode) :buffer-name () :type per-project)
|
||||
)
|
||||
"Mapping of categories to modes with their respective type logic.")
|
||||
|
||||
(defun get-project-name-or-default (default-name)
|
||||
"Return the project name if available, or DEFAULT-NAME."
|
||||
(if-let ((project-root (condition-case _err
|
||||
(projectile-project-root)
|
||||
(error nil))))
|
||||
(concat (projectile-project-name) "::" default-name)
|
||||
default-name))
|
||||
|
||||
(defun get-category-name (buffer)
|
||||
"Get category name for the given BUFFER."
|
||||
(let (category-name)
|
||||
(dolist (category categories-alist category-name)
|
||||
(let ((buffer-names (plist-get category :buffer-name))
|
||||
(modes (plist-get category :modes)))
|
||||
(cond
|
||||
((and buffer-names (member (buffer-name buffer) buffer-names))
|
||||
(setq category-name
|
||||
(if (eq (plist-get category :type) 'per-project)
|
||||
(get-project-name-or-default (plist-get category :name))
|
||||
(plist-get category :name))))
|
||||
((and modes (with-current-buffer buffer (memq major-mode modes)))
|
||||
(setq category-name
|
||||
(if (eq (plist-get category :type) 'per-project)
|
||||
(get-project-name-or-default (plist-get category :name))
|
||||
(plist-get category :name)))))))))
|
||||
|
||||
(defun centaur-tabs-group-name-by-category ()
|
||||
"Get tab group name based on category."
|
||||
(let ((mode-category (get-category-name (current-buffer))))
|
||||
(if mode-category
|
||||
(list mode-category)
|
||||
(list (get-project-name-or-default "main")))))
|
||||
|
||||
(defun centaur-tabs-projectile-buffer-groups ()
|
||||
"Return the list of group names BUFFER belongs to."
|
||||
(if centaur-tabs-projectile-buffer-group-calc
|
||||
(symbol-value 'centaur-tabs-projectile-buffer-group-calc)
|
||||
(set (make-local-variable 'centaur-tabs-projectile-buffer-group-calc)
|
||||
(centaur-tabs-group-name-by-category))))
|
||||
|
||||
(add-hook! '(+doom-dashboard-mode-hook +popup-buffer-mode-hook)
|
||||
(defun +tabs-disable-centaur-tabs-mode-maybe-h ()
|
||||
"Disable `centaur-tabs-mode' in current buffer."
|
||||
(when (centaur-tabs-mode-on-p)
|
||||
(centaur-tabs-local-mode))))
|
||||
)
|
||||
|
||||
;; ruby
|
||||
|
||||
(setq! lsp-ruby-lsp-use-bundler t)
|
||||
|
||||
|
||||
;; Copilot
|
||||
;; accept completion from copilot and fallback to company
|
||||
;; (use-package! copilot
|
||||
;; :hook (prog-mode . copilot-mode)
|
||||
;; :bind (:map copilot-completion-map
|
||||
;; ("<backtab>" . 'copilot-clear-overlay)
|
||||
;; ("<left>" . 'copilot-previous-completion)
|
||||
;; ("<right>" . 'copilot-next-completion)
|
||||
;; ("<tab>" . 'copilot-accept-completion)
|
||||
;; ("TAB" . 'copilot-accept-completion)
|
||||
;; ("C-TAB" . 'copilot-accept-completion-by-word)
|
||||
;; ("C-<tab>" . 'copilot-accept-completion-by-word)))
|
||||
|
||||
;; gptel
|
||||
|
||||
;;(require 'gptel)
|
||||
(use-package! gptel
|
||||
:init
|
||||
:config
|
||||
(defun read-api-secret (secret-file)
|
||||
(with-temp-buffer
|
||||
(insert-file-contents (expand-file-name secret-file "~"))
|
||||
(string-trim (buffer-substring-no-properties (point-min) (point-max)))))
|
||||
|
||||
|
||||
;; Default Model
|
||||
;; TODO Consider switching to coder
|
||||
(setq! gptel-backend
|
||||
(gptel-make-openai "llama-cpp"
|
||||
:stream t
|
||||
:protocol "http"
|
||||
:host "100.64.0.3:18080"
|
||||
:models '("llama-cpp-code")))
|
||||
(setq! gptel-model "llama-cpp-code")
|
||||
|
||||
;; nicer org mode foo
|
||||
(setq! gptel-default-mode 'org-mode)
|
||||
(setq! gptel-org-branching-context t)
|
||||
|
||||
(setf (alist-get 'org-mode gptel-prompt-prefix-alist) "@user ")
|
||||
(setf (alist-get 'org-mode gptel-response-prefix-alist) "@assistant ")
|
||||
|
||||
;; Qwen-2.5-Coder-32B / Tabby model
|
||||
(gptel-make-openai "llama-cpp-biggerchat"
|
||||
:stream t
|
||||
:protocol "http"
|
||||
:host "100.64.0.3:18083"
|
||||
:models '("llama-cpp-biggerchat"))
|
||||
|
||||
;; Groq API
|
||||
(gptel-make-openai "groq"
|
||||
:host "api.groq.com"
|
||||
:endpoint "/openai/v1/chat/completions"
|
||||
:stream t
|
||||
:key (read-api-secret ".groq_api_key")
|
||||
:models '("llama3-70b-8192"
|
||||
"mixtral-8x7b-32768"
|
||||
"llama3-8b-8192"))
|
||||
|
||||
|
||||
(setq! gptel-directives '((default
|
||||
. "You are a large language model living in Emacs and a helpful assistant. Respond concisely.")
|
||||
(programming
|
||||
. "You are a large language model and a careful programmer. Provide code and only code as output without any additional text, prompt or note.")
|
||||
(writing
|
||||
. "You are a large language model and a writing assistant. Respond concisely.")
|
||||
(chat
|
||||
. "You are a large language model and a conversation partner. Respond concisely."))
|
||||
gptel-expert-commands t
|
||||
|
||||
gptel-temperature 0.2)
|
||||
|
||||
(add-hook 'gptel-post-response-functions 'gptel-end-of-response)
|
||||
(add-hook 'gptel-post-stream-hook 'gptel-auto-scroll)
|
||||
|
||||
(map! :leader
|
||||
"<tab>" 'gptel-send
|
||||
"TAB" 'gptel-send))
|
||||
|
||||
(use-package! gptel-extensions
|
||||
:after gptel)
|
||||
|
||||
|
||||
(use-package! llm)
|
||||
(use-package! magit-gptcommit
|
||||
:after magit llm
|
||||
:demand t
|
||||
:bind (:map git-commit-mode-map
|
||||
("C-c C-g" . magit-gptcommit-commit-accept))
|
||||
:init
|
||||
(require 'llm-openai)
|
||||
|
||||
;; Helper function for writing a prompt for Magit GPTCommit
|
||||
(defun join-with-newlines (list)
|
||||
(mapconcat 'identity list "\n"))
|
||||
|
||||
:custom
|
||||
(llm-warn-on-nonfree nil)
|
||||
(magit-gptcommit-llm-provider (make-llm-openai-compatible :key "OPENAI-KEY" :url "http://100.64.0.3:18080/v1/"))
|
||||
|
||||
;; TODO Test different prompts
|
||||
(magit-gptcommit-prompt
|
||||
(join-with-newlines
|
||||
'(
|
||||
"You are an expert programmer writing a commit message"
|
||||
"You went over every file diff that was changed in it."
|
||||
|
||||
"First Determine the best label for the diffs."
|
||||
"Here are the labels you can choose from:"
|
||||
"- build: Changes that affect the build system or external dependencies (example scopes: gulp, broccoli, npm)"
|
||||
"- chore: Updating libraries, copyrights or other repo setting, includes updating dependencies."
|
||||
"- ci: Changes to our CI configuration files and scripts (example scopes: Travis, Circle, GitHub Actions)"
|
||||
"- docs: Non-code changes, such as fixing typos or adding new documentation"
|
||||
"- feat: a commit of the type feat introduces a new feature to the codebase"
|
||||
"- fix: A commit of the type fix patches a bug in your codebase"
|
||||
"- perf: A code change that improves performance"
|
||||
"- refactor: A code change that neither fixes a bug nor adds a feature"
|
||||
"- style: Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)"
|
||||
"- test: Adding missing tests or correcting existing tests"
|
||||
""
|
||||
"Then summarize the commit into a single specific and cohesive theme."
|
||||
"Remember to write a one line summary, no more than 50 characters."
|
||||
"If it is a simple change no need for additional lines."
|
||||
"If there are multiple unrelated or complicated changes summarize them into bullet points"
|
||||
"Remember to write an empty line between the summary and bullet points."
|
||||
""
|
||||
"Write your response using the imperative tense following the kernel git commit style guide."
|
||||
"Write a high level title."
|
||||
""
|
||||
"# Example 1:"
|
||||
"refactor: Rework transaction merging logic"
|
||||
""
|
||||
"- use functional style instead of nested for loops"
|
||||
"- cache intermediate results"
|
||||
"- use refs instead of cloning everywhere"
|
||||
""
|
||||
"# Example 2:"
|
||||
"fix: Fix off-by-one integer in loop"
|
||||
"# Example 3:"
|
||||
"style: Add missing semicolon"
|
||||
"THE FILE DIFFS:"
|
||||
"```"
|
||||
"%s"
|
||||
"```"
|
||||
"Now write Commit message in follow template: [label]:[one line of summary] :"
|
||||
)))
|
||||
;; :init
|
||||
;; (setq magit-gptcommit-llm-provider (make-llm-openai-compatible :key "OPENAI-KEY" :url "http://100.64.0.3:8080/v1/"))
|
||||
:config
|
||||
|
||||
(magit-gptcommit-mode 1)
|
||||
(magit-gptcommit-status-buffer-setup))
|
||||
|
||||
;; (setq! magit-gptcommit-llm-provider (make-llm-openai-compatible :key "OPENAI-KEY" :url "http://100.64.0.3:8080/v1/")
|
||||
|
||||
(defvar my-C-f-funcs '())
|
||||
(defun my-C-f ()
|
||||
(interactive)
|
||||
(unless (call-interactively 'tabby-accept-completion)
|
||||
(forward-char)))
|
||||
|
||||
(use-package! tabby
|
||||
:hook (rustic-mode . tabby-mode)
|
||||
:init
|
||||
(setq tabby-idle-delay 0.5)
|
||||
(setq tabby--connection "http://100.64.0.3:8083")
|
||||
:config
|
||||
(add-to-list 'my-C-f-funcs 'tabby-accept-completion)
|
||||
;; (evil-define-key 'insert tabby-mode-map (kbd "C-f") 'tabby-accept-completion)
|
||||
;; (evil-define-key 'insert tabby-mode-map (kbd "C-f") 'my-C-f)
|
||||
(evil-define-key 'insert tabby-mode-map (kbd "C-f") 'my-C-f)
|
||||
(evil-define-key 'insert tabby-mode-map (kbd "C-M-j") 'tabby-dismiss)
|
||||
(evil-define-key 'insert tabby-mode-map (kbd "C-M-l") 'tabby-accept-completion-by-line))
|
14
ext/doom/custom.el
Normal file
14
ext/doom/custom.el
Normal file
|
@ -0,0 +1,14 @@
|
|||
(custom-set-variables
|
||||
;; custom-set-variables was added by Custom.
|
||||
;; If you edit it by hand, you could mess it up, so be careful.
|
||||
;; Your init file should contain only one such instance.
|
||||
;; If there is more than one, they won't work right.
|
||||
'(custom-safe-themes
|
||||
'("88f7ee5594021c60a4a6a1c275614103de8c1435d6d08cc58882f920e0cec65e" "02f57ef0a20b7f61adce51445b68b2a7e832648ce2e7efb19d217b6454c1b644" "467dc6fdebcf92f4d3e2a2016145ba15841987c71fbe675dcfe34ac47ffb9195" "e3daa8f18440301f3e54f2093fe15f4fe951986a8628e98dcd781efbec7a46f2" default))
|
||||
'(magit-todos-insert-after '(bottom) nil nil "Changed by setter of obsolete option `magit-todos-insert-at'"))
|
||||
(custom-set-faces
|
||||
;; custom-set-faces was added by Custom.
|
||||
;; If you edit it by hand, you could mess it up, so be careful.
|
||||
;; Your init file should contain only one such instance.
|
||||
;; If there is more than one, they won't work right.
|
||||
)
|
227
ext/doom/init.el
Normal file
227
ext/doom/init.el
Normal file
|
@ -0,0 +1,227 @@
|
|||
;;; init.el -*- lexical-binding: t; -*-
|
||||
|
||||
;; This file controls what Doom modules are enabled and what order they load
|
||||
;; in. Remember to run 'doom sync' after modifying it!
|
||||
|
||||
;; NOTE Press 'SPC h d h' (or 'C-h d h' for non-vim users) to access Doom's
|
||||
;; documentation. There you'll find a link to Doom's Module Index where all
|
||||
;; of our modules are listed, including what flags they support.
|
||||
|
||||
;; NOTE Move your cursor over a module's name (or its flags) and press 'K' (or
|
||||
;; 'C-c c k' for non-vim users) to view its documentation. This works on
|
||||
;; flags as well (those symbols that start with a plus).
|
||||
;;
|
||||
;; Alternatively, press 'gd' (or 'C-c c d') on a module to browse its
|
||||
;; directory (for easy access to its source code).
|
||||
|
||||
(doom! :input
|
||||
;;bidi ; (tfel ot) thgir etirw uoy gnipleh
|
||||
;;chinese
|
||||
;;japanese
|
||||
;;layout ; auie,ctsrnm is the superior home row
|
||||
|
||||
:completion
|
||||
(company
|
||||
+childframe) ; the ultimate code completion backend
|
||||
;;helm ; the *other* search engine for love and life
|
||||
;;ido ; the other *other* search engine...
|
||||
;;ivy ; a search engine for love and life
|
||||
(vertico +icons) ; the search engine of the future
|
||||
|
||||
:ui
|
||||
;;deft ; notational velocity for Emacs
|
||||
doom ; what makes DOOM look the way it does
|
||||
;; doom-dashboard ; a nifty splash screen for Emacs
|
||||
doom-quit ; DOOM quit-message prompts when you quit Emacs
|
||||
;; (emoji +unicode) ; 🙂
|
||||
hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW
|
||||
;;hydra
|
||||
indent-guides ; highlighted indent columns
|
||||
ligatures ; ligatures and symbols to make your code pretty again
|
||||
minimap ; show a map of the code on the side
|
||||
modeline ; snazzy, Atom-inspired modeline, plus API
|
||||
nav-flash ; blink cursor line after big motions
|
||||
;;neotree ; a project drawer, like NERDTree for vim
|
||||
ophints ; highlight the region an operation acts on
|
||||
(popup +defaults) ; tame sudden yet inevitable temporary windows
|
||||
;; tabs ; a tab bar for Emacs
|
||||
treemacs ; a project drawer, like neotree but cooler
|
||||
;;unicode ; extended unicode support for various languages
|
||||
(vc-gutter
|
||||
+diff-hl
|
||||
+pretty) ; vcs diff in the fringe
|
||||
vi-tilde-fringe ; fringe tildes to mark beyond EOB
|
||||
(window-select ; visually switch windows
|
||||
+numbers)
|
||||
;; workspaces ; tab emulation, persistence & separate workspaces
|
||||
;;zen ; distraction-free coding or writing
|
||||
|
||||
:editor
|
||||
(evil +everywhere) ; come to the dark side, we have cookies
|
||||
file-templates ; auto-snippets for empty files
|
||||
fold ; (nigh) universal code folding
|
||||
(format +onsave
|
||||
+lsp) ; automated prettiness
|
||||
;;god ; run Emacs commands without modifier keys
|
||||
;;lispy ; vim for lisp, for people who don't like vim
|
||||
;;multiple-cursors ; editing in many places at once
|
||||
;;objed ; text object editing for the innocent
|
||||
;;parinfer ; turn lisp into python, sort of
|
||||
;;rotate-text ; cycle region at point between text candidates
|
||||
;;snippets ; my elves. They type so I don't have to
|
||||
;;word-wrap ; soft wrapping with language-aware indent
|
||||
|
||||
:emacs
|
||||
(dired +icons) ; making dired pretty [functional]
|
||||
electric ; smarter, keyword-based electric-indent
|
||||
(ibuffer +icons) ; interactive buffer management
|
||||
(undo +tree) ; persistent, smarter undo for your inevitable mistakes
|
||||
vc ; version-control and Emacs, sitting in a tree
|
||||
|
||||
:term
|
||||
eshell ; the elisp shell that works everywhere
|
||||
;;shell ; simple shell REPL for Emacs
|
||||
;;term ; basic terminal emulator for Emacs
|
||||
vterm ; the best terminal emulation in Emacs
|
||||
|
||||
:checkers
|
||||
(syntax
|
||||
+childframe) ; tasing you for every semicolon you forget
|
||||
(spell
|
||||
+aspell
|
||||
+flyspell) ; tasing you for misspelling mispelling
|
||||
grammar ; tasing grammar mistake every you make
|
||||
|
||||
:tools
|
||||
;;ansible
|
||||
;;biblio ; Writes a PhD for you (citation needed)
|
||||
;;collab ; buffers with friends
|
||||
;;debugger ; FIXME stepping through code, to help you add bugs
|
||||
direnv
|
||||
docker
|
||||
;;editorconfig ; let someone else argue about tabs vs spaces
|
||||
;;ein ; tame Jupyter notebooks with emacs
|
||||
(eval +overlay) ; run code, run (also, repls)
|
||||
;;gist ; interacting with github gists
|
||||
(lookup
|
||||
+docsets
|
||||
+dictionary) ; navigate your code and its documentation
|
||||
(lsp +eglot) ; M-x vscode
|
||||
magit ; a git porcelain for Emacs
|
||||
;;make ; run make tasks from Emacs
|
||||
;;pass ; password manager for nerds
|
||||
pdf ; pdf enhancements
|
||||
;;prodigy ; FIXME managing external services & code builders
|
||||
rgb ; creating color strings
|
||||
;;taskrunner ; taskrunner for all your projects
|
||||
;;terraform ; infrastructure as code
|
||||
;;tmux ; an API for interacting with tmux
|
||||
tree-sitter ; syntax and parsing, sitting in a tree...
|
||||
;;upload ; map local to remote projects via ssh/ftp
|
||||
|
||||
:os
|
||||
(:if IS-MAC macos) ; improve compatibility with macOS
|
||||
tty ; improve the terminal Emacs experience
|
||||
|
||||
:lang
|
||||
;;agda ; types of types of types of types...
|
||||
;;beancount ; mind the GAAP
|
||||
(cc
|
||||
+lsp ;;;; supports eglot
|
||||
+tree-sitter) ; C > C++ == 1
|
||||
;;clojure ; java with a lisp
|
||||
;;common-lisp ; if you've seen one lisp, you've seen them all
|
||||
;;coq ; proofs-as-programs
|
||||
;;crystal ; ruby at the speed of c
|
||||
;;csharp ; unity, .NET, and mono shenanigans
|
||||
;;data ; config/data formats
|
||||
;;(dart +flutter) ; paint ui and not much else
|
||||
;;dhall
|
||||
;;elixir ; erlang done right
|
||||
;;elm ; care for a cup of TEA?
|
||||
emacs-lisp ; drown in parentheses
|
||||
;;erlang ; an elegant language for a more civilized age
|
||||
ess ; emacs speaks statistics
|
||||
;;factor
|
||||
;;faust ; dsp, but you get to keep your soul
|
||||
;;fortran ; in FORTRAN, GOD is REAL (unless declared INTEGER)
|
||||
;;fsharp ; ML stands for Microsoft's Language
|
||||
;;fstar ; (dependent) types and (monadic) effects and Z3
|
||||
;;gdscript ; the language you waited for
|
||||
;;go ; the hipster dialect
|
||||
graphql ; Give queries a REST
|
||||
;;haskell ; a language that's lazier than I am
|
||||
;;hy ; readability of scheme w/ speed of python
|
||||
;;idris ; a language you can depend on
|
||||
(json
|
||||
+tree-sitter) ; At least it ain't XML
|
||||
;;java ; the poster child for carpal tunnel syndrome
|
||||
(javascript
|
||||
+tree-sitter) ; all(hope(abandon(ye(who(enter(here))))))
|
||||
;;julia ; a better, faster MATLAB
|
||||
;;kotlin ; a better, slicker Java(Script)
|
||||
;;latex ; writing papers in Emacs has never been so fun
|
||||
;;lean ; for folks with too much to prove
|
||||
;;ledger ; be audit you can be
|
||||
;;lua ; one-based indices? one-based indices
|
||||
markdown ; writing docs for people to ignore
|
||||
;;nim ; python + lisp at the speed of c
|
||||
(nix +tree-sitter) ; I hereby declare "nix geht mehr!"
|
||||
;;ocaml ; an objective camel
|
||||
(org ; organize your plain life in plain text
|
||||
+jupyter
|
||||
+pomodoro
|
||||
+journal
|
||||
+pomodoro
|
||||
+dragndrop
|
||||
+gnuplot
|
||||
+roam2
|
||||
+present)
|
||||
;;php ; perl's insecure younger brother
|
||||
;;plantuml ; diagrams for confusing people more
|
||||
;;purescript ; javascript, but functional
|
||||
;;python ; beautiful is better than ugly
|
||||
;;qt ; the 'cutest' gui framework ever
|
||||
;;racket ; a DSL for DSLs
|
||||
;;raku ; the artist formerly known as perl6
|
||||
rest ; Emacs as a REST client
|
||||
;;rst ; ReST in peace
|
||||
;;(ruby +rails) ; 1.step {|i| p "Ruby is #{i.even? ? 'love' : 'life'}"}
|
||||
(rust +lsp ;;;; supports eglot
|
||||
+tree-sitter) ; Fe2O3.unwrap().unwrap().unwrap().unwrap()
|
||||
;;scala ; java, but good
|
||||
;;(scheme +guile) ; a fully conniving family of lisps
|
||||
(sh
|
||||
+fish
|
||||
+tree-sitter) ; she sells {ba,z,fi}sh shells on the C xor
|
||||
;;sml
|
||||
;;solidity ; do you need a blockchain? No.
|
||||
;;swift ; who asked for emoji variables?
|
||||
;;terra ; Earth and Moon in alignment for performance.
|
||||
(web
|
||||
+css
|
||||
+tree-sitter) ; the tubes
|
||||
(yaml
|
||||
+tree-sitter) ; JSON, but readable
|
||||
;;zig ; C, but simpler
|
||||
|
||||
:email
|
||||
;;(mu4e +org +gmail)
|
||||
;;notmuch
|
||||
;;(wanderlust +gmail)
|
||||
|
||||
:app
|
||||
;;calendar
|
||||
;;emms
|
||||
;;everywhere ; *leave* Emacs!? You must be joking
|
||||
;;irc ; how neckbeards socialize
|
||||
;;(rss +org) ; emacs as an RSS reader
|
||||
;;twitter ; twitter client https://twitter.com/vnought
|
||||
|
||||
:config
|
||||
;;literate
|
||||
(default +bindings +smartparens))
|
||||
|
||||
(after! doom-cli-env
|
||||
;; Allow SSH-related environment variables to be set in persistent configuration.
|
||||
(add-to-list 'doom-env-allow "^SSH_"))
|
82
ext/doom/packages.el
Normal file
82
ext/doom/packages.el
Normal file
|
@ -0,0 +1,82 @@
|
|||
;; -*- no-byte-compile: t; -*-
|
||||
;;; $DOOMDIR/packages.el
|
||||
|
||||
;; To install a package with Doom you must declare them here and run 'doom sync'
|
||||
;; on the command line, then restart Emacs for the changes to take effect -- or
|
||||
;; use 'M-x doom/reload'.
|
||||
|
||||
|
||||
;; To install SOME-PACKAGE from MELPA, ELPA or emacsmirror:
|
||||
;;(package! some-package)
|
||||
|
||||
;; To install a package directly from a remote git repo, you must specify a
|
||||
;; `:recipe'. You'll find documentation on what `:recipe' accepts here:
|
||||
;; https://github.com/radian-software/straight.el#the-recipe-format
|
||||
;;(package! another-package
|
||||
;; :recipe (:host github :repo "username/repo"))
|
||||
|
||||
;; If the package you are trying to install does not contain a PACKAGENAME.el
|
||||
;; file, or is located in a subdirectory of the repo, you'll need to specify
|
||||
;; `:files' in the `:recipe':
|
||||
;;(package! this-package
|
||||
;; :recipe (:host github :repo "username/repo"
|
||||
;; :files ("some-file.el" "src/lisp/*.el")))
|
||||
|
||||
;; If you'd like to disable a package included with Doom, you can do so here
|
||||
;; with the `:disable' property:
|
||||
;;(package! builtin-package :disable t)
|
||||
|
||||
;; You can override the recipe of a built in package without having to specify
|
||||
;; all the properties for `:recipe'. These will inherit the rest of its recipe
|
||||
;; from Doom or MELPA/ELPA/Emacsmirror:
|
||||
;;(package! builtin-package :recipe (:nonrecursive t))
|
||||
;;(package! builtin-package-2 :recipe (:repo "myfork/package"))
|
||||
|
||||
;; Specify a `:branch' to install a package from a particular branch or tag.
|
||||
;; This is required for some packages whose default branch isn't 'master' (which
|
||||
;; our package manager can't deal with; see radian-software/straight.el#279)
|
||||
;;(package! builtin-package :recipe (:branch "develop"))
|
||||
|
||||
;; Use `:pin' to specify a particular commit to install.
|
||||
|
||||
;; tabs
|
||||
(package! centaur-tabs)
|
||||
|
||||
;; nix
|
||||
(package! nixpkgs-fmt)
|
||||
|
||||
;; copilot
|
||||
;; (package! copilot
|
||||
;; :recipe (:host github :repo "zerolfx/copilot.el" :files ("*.el" "dist")))
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
;; gptel
|
||||
(package! gptel :recipe (:type git :host nil :repo "https://github.com/karthink/gptel.git" :branch "master"))
|
||||
;; gptel-extensions
|
||||
(package! gptel-extensions :recipe (:host github :repo "kamushadenes/gptel-extensions.el"))
|
||||
;; gptcommit
|
||||
(package! llm)
|
||||
(package! magit-gptcommit :recipe (:host github :repo "douo/magit-gptcommit" :branch "master"))
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
|
||||
;; rust analyzer extensions for eglot + treesit foledr
|
||||
|
||||
(package! treesit-fold :recipe (:host github :repo "emacs-tree-sitter/treesit-fold"))
|
||||
(package! eglot-x :recipe (:host github :repo "nemethf/eglot-x"))
|
||||
(package! eglot-booster :recipe (:type git :host nil :repo "https://github.com/jdtsmith/eglot-booster.git" :branch "main"))
|
||||
|
||||
;;;;;;
|
||||
|
||||
(package! tabby
|
||||
:recipe (:host github :files ("*.el" "node_scripts")
|
||||
:repo "alan-w-255/tabby.el"))
|
||||
|
||||
(package! activity-watch-mode)
|
||||
;; Doom's packages are pinned to a specific commit and updated from release to
|
||||
;; release. The `unpin!' macro allows you to unpin single packages...
|
||||
;;(unpin! pinned-package)
|
||||
;; ...or multiple packages
|
||||
;;(unpin! pinned-package another-pinned-package)
|
||||
;; ...Or *all* packages (NOT RECOMMENDED; will likely break things)
|
||||
;;(unpin! t)
|
10
ext/install-cert-to-moz.sh
Executable file
10
ext/install-cert-to-moz.sh
Executable file
|
@ -0,0 +1,10 @@
|
|||
#/usr/bin/env bash
|
||||
#
|
||||
certificateFile="./internal-ca.crt"
|
||||
certificateName="Ökonzept internal CA"
|
||||
for certDB in $(find ~/.mozilla* ~/.thunderbird -name "cert9.db")
|
||||
do
|
||||
certDir=$(dirname ${certDB});
|
||||
echo "mozilla certificate" "install '${certificateName}' in ${certDir}"
|
||||
certutil -A -n "${certificateName}" -t "TCu,Cuw,Tuw" -i ${certificateFile} -d ${certDir}
|
||||
done
|
19
ext/internal-ca.crt
Normal file
19
ext/internal-ca.crt
Normal file
|
@ -0,0 +1,19 @@
|
|||
-----BEGIN CERTIFICATE-----
|
||||
MIIDGTCCAnqgAwIBAgIBADAKBggqhkjOPQQDBDCBgTELMAkGA1UEBhMCREUxDDAK
|
||||
BgNVBAgMA05SVzEVMBMGA1UEBwwMRMO8c3NlbGRvcmYgMRcwFQYDVQQKDA7Dlmtv
|
||||
bnplcHQgR21iSDEeMBwGCSqGSIb3DQEJARYPdGRAb2Vrb256ZXB0LmRlMRQwEgYD
|
||||
VQQDDAtpbnRlcm5hbC1jYTAeFw0yMzEyMjExNTQ5NDlaFw0yNjAzMjUxNTQ5NDla
|
||||
MIGBMQswCQYDVQQGEwJERTEMMAoGA1UECAwDTlJXMRUwEwYDVQQHDAxEw7xzc2Vs
|
||||
ZG9yZiAxFzAVBgNVBAoMDsOWa29uemVwdCBHbWJIMR4wHAYJKoZIhvcNAQkBFg90
|
||||
ZEBvZWtvbnplcHQuZGUxFDASBgNVBAMMC2ludGVybmFsLWNhMIGbMBAGByqGSM49
|
||||
AgEGBSuBBAAjA4GGAAQA3DJTMO9l/tX2BZMvaYT8UBKQZU0dks1VpirQby2S7Ve2
|
||||
YEQWVzpICigaKdNaJp/vfyMoTLWuPc72J7BoQWjdMBQAZLmMERta0FdeDWKRR1XC
|
||||
QJudrNNu4NWTHvR1n49or7XXXZOVBQHMRIXK6sybZ4f7qrNgGvoHgnII34oLfLHA
|
||||
mZijgZ0wgZowNwYJYIZIAYb4QgENBCoWKE9QTnNlbnNlIEdlbmVyYXRlZCBDZXJ0
|
||||
aWZpY2F0ZSBBdXRob3JpdHkwHQYDVR0OBBYEFAvqn2SyuDp8a8g9isltriGYJ9Bz
|
||||
MB8GA1UdIwQYMBaAFAvqn2SyuDp8a8g9isltriGYJ9BzMA8GA1UdEwEB/wQFMAMB
|
||||
Af8wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMEA4GMADCBiAJCAIrXKSrGMv9c
|
||||
+jxs7EYX6LFYQ5sB0H5Q9LdxFu8VU6zpFGjnj1OpivL+jkEYRddjlho3+LMdaBar
|
||||
+vw5PbXZ0luQAkIBK4djE3TCTJZQJ7sfdDVE97/JwDVwW+L2SFAmhMy9aG9qQ+r2
|
||||
SiPOrOuAJTgxDCctlXSv9KqUxy8eg2lk7cgaYx4=
|
||||
-----END CERTIFICATE-----
|
1415
flake.lock
generated
Normal file
1415
flake.lock
generated
Normal file
File diff suppressed because it is too large
Load diff
275
flake.nix
Normal file
275
flake.nix
Normal file
|
@ -0,0 +1,275 @@
|
|||
{
|
||||
description = "flake for nixos-pulse";
|
||||
|
||||
nixConfig = { };
|
||||
|
||||
inputs = {
|
||||
systems = {
|
||||
url = "github:nix-systems/x86_64-linux";
|
||||
};
|
||||
nixos-hardware = {
|
||||
url = "github:NixOS/nixos-hardware/master";
|
||||
};
|
||||
nixpkgs = {
|
||||
url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||
# url = "github:tristandruyen/nixpkgs/nixos-unstable-small"; # fork for rocm fix
|
||||
# url = "github:NixOS/nixpkgs/nixos-unstable-small";
|
||||
# url = "github:mschwaig/nixpkgs/fix-rocm-build-by-disabling-test";
|
||||
};
|
||||
nixpkgs-stable = {
|
||||
url = "github:NixOS/nixpkgs/nixos-24.05";
|
||||
};
|
||||
nixos-images = {
|
||||
url = "github:nix-community/nixos-images";
|
||||
};
|
||||
agenix = {
|
||||
url = "github:ryantm/agenix";
|
||||
inputs.home-manager.follows = "home-manager";
|
||||
inputs.systems.follows = "systems";
|
||||
};
|
||||
agenix-rekey = {
|
||||
url = "github:oddlama/agenix-rekey";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
inputs.treefmt-nix.follows = "treefmt-nix";
|
||||
inputs.flake-parts.follows = "flake-parts";
|
||||
inputs.devshell.follows = "devshell";
|
||||
};
|
||||
treefmt-nix = {
|
||||
url = "github:numtide/treefmt-nix";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
flake-utils = {
|
||||
url = "github:numtide/flake-utils";
|
||||
inputs.systems.follows = "systems";
|
||||
};
|
||||
flake-parts = {
|
||||
url = "github:hercules-ci/flake-parts";
|
||||
inputs.nixpkgs-lib.follows = "nixpkgs";
|
||||
};
|
||||
gitignore = {
|
||||
url = "github:hercules-ci/gitignore.nix";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
flake-compat.url = "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz";
|
||||
lanzaboote = {
|
||||
url = "github:nix-community/lanzaboote/v0.4.2";
|
||||
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
inputs.flake-compat.follows = "flake-compat";
|
||||
inputs.flake-parts.follows = "flake-parts";
|
||||
};
|
||||
lix-module = {
|
||||
url = "https://git.lix.systems/lix-project/nixos-module/archive/2.91.1-1.tar.gz";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
inputs.flake-utils.follows = "flake-utils";
|
||||
};
|
||||
chaotic = {
|
||||
url = "github:chaotic-cx/nyx/nyxpkgs-unstable";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
inputs.home-manager.follows = "home-manager";
|
||||
};
|
||||
home-manager = {
|
||||
url = "github:nix-community/home-manager";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
emacs-overlay = {
|
||||
url = "github:nix-community/emacs-overlay/7cd35bfbe2fbb2906bc85803eab0bdc499b6f253";
|
||||
inputs.flake-utils.follows = "flake-utils";
|
||||
inputs.nixpkgs-stable.follows = "nixpkgs-stable";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
disko = {
|
||||
url = "github:nix-community/disko";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
nur = {
|
||||
url = "github:nix-community/NUR";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
inputs.treefmt-nix.follows = "treefmt-nix";
|
||||
inputs.flake-parts.follows = "flake-parts";
|
||||
};
|
||||
nix-wallpaper = {
|
||||
url = "github:lunik1/nix-wallpaper";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
inputs.flake-utils.follows = "flake-utils";
|
||||
};
|
||||
nix-index-database = {
|
||||
url = "github:Mic92/nix-index-database";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
plasma-manager = {
|
||||
url = "github:nix-community/plasma-manager";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
inputs.home-manager.follows = "home-manager";
|
||||
};
|
||||
nix-alien = {
|
||||
url = "github:thiagokokada/nix-alien";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
inputs.nix-index-database.follows = "nix-index-database";
|
||||
inputs.flake-compat.follows = "flake-compat";
|
||||
};
|
||||
envfs = {
|
||||
url = "github:Mic92/envfs";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
inputs.flake-parts.follows = "flake-parts";
|
||||
inputs.treefmt-nix.follows = "treefmt-nix";
|
||||
};
|
||||
nix-ld-rs = {
|
||||
url = "github:nix-community/nix-ld-rs";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
inputs.flake-utils.follows = "flake-utils";
|
||||
inputs.flake-compat.follows = "flake-compat";
|
||||
};
|
||||
stylix = {
|
||||
# url = "github:danth/stylix"; # TODO Switch to this once https://github.com/danth/stylix/pull/866 is merged
|
||||
url = "github:brckd/stylix/treewide/add-overlays-option";
|
||||
inputs.flake-compat.follows = "flake-compat";
|
||||
inputs.flake-utils.follows = "flake-utils";
|
||||
inputs.home-manager.follows = "home-manager";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
inputs.systems.follows = "systems";
|
||||
};
|
||||
llama-cpp = {
|
||||
url = "git+https://git.vlt81.de/tristan/llama.cpp.git";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
inputs.flake-parts.follows = "flake-parts";
|
||||
};
|
||||
winapps = {
|
||||
url = "github:winapps-org/winapps";
|
||||
inputs.flake-compat.follows = "flake-compat";
|
||||
inputs.flake-utils.follows = "flake-utils";
|
||||
};
|
||||
devshell.url = "github:numtide/devshell";
|
||||
};
|
||||
|
||||
outputs =
|
||||
{ self
|
||||
, nixpkgs
|
||||
, lanzaboote
|
||||
, nixos-hardware
|
||||
, agenix
|
||||
, agenix-rekey
|
||||
, flake-utils
|
||||
, devshell
|
||||
, lix-module
|
||||
, home-manager
|
||||
, plasma-manager
|
||||
, emacs-overlay
|
||||
, nur
|
||||
, nix-index-database
|
||||
, disko
|
||||
, chaotic
|
||||
, envfs
|
||||
, llama-cpp
|
||||
, stylix
|
||||
, nix-wallpaper
|
||||
, winapps
|
||||
, ...
|
||||
} @ inputs:
|
||||
let
|
||||
system = "x86_64-linux";
|
||||
my-overlay = final: prev: {
|
||||
my = self.packages."${system}";
|
||||
nix-wallpaper = nix-wallpaper.packages."${system}".default;
|
||||
};
|
||||
overlays = [
|
||||
my-overlay
|
||||
emacs-overlay.overlay
|
||||
inputs.nix-alien.overlays.default
|
||||
inputs.nix-ld-rs.overlays.default
|
||||
agenix-rekey.overlays.default
|
||||
devshell.overlays.default
|
||||
];
|
||||
config = {
|
||||
allowUnfree = true;
|
||||
android_sdk.accept_license = true;
|
||||
permittedInsecurePackages = [
|
||||
"jitsi-meet-1.0.8043"
|
||||
# "olm-3.2.16"
|
||||
];
|
||||
};
|
||||
pkgs = import nixpkgs {
|
||||
inherit config system overlays;
|
||||
};
|
||||
lib = pkgs.lib;
|
||||
hmModules = [
|
||||
nix-index-database.hmModules.nix-index
|
||||
nur.modules.homeManager.default
|
||||
plasma-manager.homeManagerModules.plasma-manager
|
||||
# stylix.homeManagerModules.stylix
|
||||
];
|
||||
osModules = [
|
||||
lanzaboote.nixosModules.lanzaboote
|
||||
lix-module.nixosModules.default
|
||||
disko.nixosModules.disko
|
||||
home-manager.nixosModules.home-manager
|
||||
nix-index-database.nixosModules.nix-index
|
||||
nur.modules.nixos.default
|
||||
chaotic.nixosModules.default
|
||||
envfs.nixosModules.envfs
|
||||
stylix.nixosModules.stylix
|
||||
agenix.nixosModules.default
|
||||
agenix-rekey.nixosModules.default
|
||||
];
|
||||
args = {
|
||||
inherit self inputs system;
|
||||
};
|
||||
in
|
||||
{
|
||||
formatter."${system}" = pkgs.nixpkgs-fmt;
|
||||
packages."${system}" = import ./pkgs { inherit pkgs lib config; };
|
||||
diskoConfigurations = {
|
||||
nixos-desk = import ./systems/nixos-desk/disko.nix;
|
||||
nixos-pulse = import ./systems/nixos-pulse/disko.nix;
|
||||
nixos-he4 = import ./systems/nixos-he4/disko.nix;
|
||||
};
|
||||
agenix-rekey = agenix-rekey.configure {
|
||||
userFlake = self;
|
||||
nixosConfigurations = self.nixosConfigurations;
|
||||
};
|
||||
# replace this with a auto-importing variant like the packages decl. above (instead of callPackage we just need to import the path)
|
||||
nixosConfigurations = lib.attrsets.mergeAttrsList (
|
||||
lib.lists.forEach [
|
||||
"nixos-desk"
|
||||
"nixos-pulse"
|
||||
"nixos-fw16"
|
||||
"rescue-iso"
|
||||
]
|
||||
(host: {
|
||||
"${host}" = nixpkgs.lib.nixosSystem {
|
||||
inherit system;
|
||||
specialArgs = args;
|
||||
modules =
|
||||
[
|
||||
./systems/${host}
|
||||
{
|
||||
nixpkgs = {
|
||||
inherit config system overlays;
|
||||
};
|
||||
# nixpkgs.pkgs = pkgs;
|
||||
nix.registry.nixpkgs.flake = nixpkgs;
|
||||
home-manager.sharedModules = hmModules;
|
||||
home-manager.extraSpecialArgs = args;
|
||||
}
|
||||
]
|
||||
++ osModules;
|
||||
};
|
||||
})
|
||||
);
|
||||
hydraJobs =
|
||||
let
|
||||
osConfigs = builtins.mapAttrs (_: system: system.config.system.build.toplevel) self.nixosConfigurations;
|
||||
packages = self.packages."${system}";
|
||||
in
|
||||
{
|
||||
inherit osConfigs packages;
|
||||
};
|
||||
}
|
||||
# Devshell with local dev utils
|
||||
// flake-utils.lib.eachDefaultSystem (system: rec {
|
||||
devShells.default = pkgs.mkShell {
|
||||
packages = [ pkgs.rage pkgs.nh pkgs.agenix-rekey ];
|
||||
# ...
|
||||
};
|
||||
});
|
||||
}
|
34
home-mods/activity-watch/default.nix
Normal file
34
home-mods/activity-watch/default.nix
Normal file
|
@ -0,0 +1,34 @@
|
|||
{ config
|
||||
, pkgs
|
||||
, inputs
|
||||
, ...
|
||||
}: {
|
||||
home.packages = with pkgs; [
|
||||
# aw-watcher-afk
|
||||
# aw-watcher-window-wayland # does not support kwin wayland
|
||||
# aw-webui
|
||||
# python312Packages.aw-core
|
||||
aw-server-rust
|
||||
my.awatcher
|
||||
];
|
||||
|
||||
programs.firefox.profiles.default.extensions.packages = with pkgs.nur.repos.rycee.firefox-addons; [
|
||||
aw-watcher-web
|
||||
];
|
||||
|
||||
services.activitywatch = {
|
||||
enable = true;
|
||||
package = pkgs.aw-server-rust;
|
||||
watchers = {
|
||||
awatcher.package = pkgs.my.awatcher;
|
||||
};
|
||||
};
|
||||
|
||||
systemd.user.services.activitywatch-watcher-awatcher.Service = {
|
||||
Restart = "always";
|
||||
RestartSec = "5";
|
||||
};
|
||||
|
||||
# TODO Add timer for `aw-sync --sync-dir=$HOME/Nextcloud/ActivityWatch/ sync --mode both`
|
||||
# (aw-sync binary is part of aw-server-rust)
|
||||
}
|
772
home-mods/audio/default.json
Normal file
772
home-mods/audio/default.json
Normal file
|
@ -0,0 +1,772 @@
|
|||
{
|
||||
"output": {
|
||||
"autogain#0": {
|
||||
"bypass": true,
|
||||
"input-gain": 0.0,
|
||||
"maximum-history": 15,
|
||||
"output-gain": 0.0,
|
||||
"reference": "Integrated",
|
||||
"silence-threshold": -70.0,
|
||||
"target": -10.0
|
||||
},
|
||||
"bass_enhancer#0": {
|
||||
"amount": -6.0,
|
||||
"blend": -10.0,
|
||||
"bypass": true,
|
||||
"floor": 116.0,
|
||||
"floor-active": true,
|
||||
"harmonics": 10.0,
|
||||
"input-gain": 0.0,
|
||||
"output-gain": 0.0,
|
||||
"scope": 233.0
|
||||
},
|
||||
"blocklist": [],
|
||||
"compressor#0": {
|
||||
"attack": 0.0,
|
||||
"boost-amount": 6.0,
|
||||
"boost-threshold": -72.0,
|
||||
"bypass": true,
|
||||
"dry": -100.0,
|
||||
"hpf-frequency": 10.0,
|
||||
"hpf-mode": "off",
|
||||
"input-gain": 0.0,
|
||||
"knee": 0.0,
|
||||
"lpf-frequency": 20000.0,
|
||||
"lpf-mode": "off",
|
||||
"makeup": 0.0,
|
||||
"mode": "Upward",
|
||||
"output-gain": 0.0,
|
||||
"ratio": 1.5,
|
||||
"release": 200.0,
|
||||
"release-threshold": -100.0,
|
||||
"sidechain": {
|
||||
"lookahead": 0.0,
|
||||
"mode": "RMS",
|
||||
"preamp": 0.0,
|
||||
"reactivity": 250.0,
|
||||
"source": "Middle",
|
||||
"type": "Feed-forward"
|
||||
},
|
||||
"threshold": 0.0,
|
||||
"wet": 0.0
|
||||
},
|
||||
"crossfeed#0": {
|
||||
"bypass": false,
|
||||
"fcut": 1864,
|
||||
"feed": 6.0,
|
||||
"input-gain": 0.0,
|
||||
"output-gain": 0.0
|
||||
},
|
||||
"equalizer#0": {
|
||||
"balance": 0.0,
|
||||
"bypass": true,
|
||||
"input-gain": 0.0,
|
||||
"left": {
|
||||
"band0": {
|
||||
"frequency": 392.0,
|
||||
"gain": -18.0,
|
||||
"mode": "RLC (BT)",
|
||||
"mute": false,
|
||||
"q": 0.0,
|
||||
"slope": "x1",
|
||||
"solo": false,
|
||||
"type": "Bell"
|
||||
}
|
||||
},
|
||||
"mode": "IIR",
|
||||
"num-bands": 1,
|
||||
"output-gain": 0.0,
|
||||
"pitch-left": 0.0,
|
||||
"pitch-right": 0.0,
|
||||
"right": {
|
||||
"band0": {
|
||||
"frequency": 392.0,
|
||||
"gain": -18.0,
|
||||
"mode": "RLC (BT)",
|
||||
"mute": false,
|
||||
"q": 0.0,
|
||||
"slope": "x1",
|
||||
"solo": false,
|
||||
"type": "Bell"
|
||||
}
|
||||
},
|
||||
"split-channels": false
|
||||
},
|
||||
"equalizer#1": {
|
||||
"balance": 0.0,
|
||||
"bypass": true,
|
||||
"input-gain": 0.0,
|
||||
"left": {
|
||||
"band0": {
|
||||
"frequency": 466.0,
|
||||
"gain": 3.0,
|
||||
"mode": "LRX (BT)",
|
||||
"mute": false,
|
||||
"q": 0.0,
|
||||
"slope": "x4",
|
||||
"solo": false,
|
||||
"type": "Bell"
|
||||
},
|
||||
"band1": {
|
||||
"frequency": 1864.0,
|
||||
"gain": 3.0,
|
||||
"mode": "LRX (BT)",
|
||||
"mute": false,
|
||||
"q": 0.0,
|
||||
"slope": "x4",
|
||||
"solo": false,
|
||||
"type": "Bell"
|
||||
},
|
||||
"band2": {
|
||||
"frequency": 7458.0,
|
||||
"gain": 3.0,
|
||||
"mode": "LRX (BT)",
|
||||
"mute": false,
|
||||
"q": 0.0,
|
||||
"slope": "x4",
|
||||
"solo": false,
|
||||
"type": "Bell"
|
||||
}
|
||||
},
|
||||
"mode": "IIR",
|
||||
"num-bands": 3,
|
||||
"output-gain": 0.0,
|
||||
"pitch-left": 0.0,
|
||||
"pitch-right": 0.0,
|
||||
"right": {
|
||||
"band0": {
|
||||
"frequency": 932.0,
|
||||
"gain": 3.0,
|
||||
"mode": "LRX (BT)",
|
||||
"mute": false,
|
||||
"q": 0.0,
|
||||
"slope": "x4",
|
||||
"solo": false,
|
||||
"type": "Bell"
|
||||
},
|
||||
"band1": {
|
||||
"frequency": 3729.0,
|
||||
"gain": 3.0,
|
||||
"mode": "LRX (BT)",
|
||||
"mute": false,
|
||||
"q": 0.0,
|
||||
"slope": "x4",
|
||||
"solo": false,
|
||||
"type": "Bell"
|
||||
},
|
||||
"band2": {
|
||||
"frequency": 14917.0,
|
||||
"gain": 3.0,
|
||||
"mode": "LRX (BT)",
|
||||
"mute": false,
|
||||
"q": 0.0,
|
||||
"slope": "x4",
|
||||
"solo": false,
|
||||
"type": "Bell"
|
||||
}
|
||||
},
|
||||
"split-channels": true
|
||||
},
|
||||
"equalizer#2": {
|
||||
"balance": 0.0,
|
||||
"bypass": true,
|
||||
"input-gain": 0.0,
|
||||
"left": {
|
||||
"band0": {
|
||||
"frequency": 466.0,
|
||||
"gain": 6.0,
|
||||
"mode": "LRX (BT)",
|
||||
"mute": false,
|
||||
"q": 0.0,
|
||||
"slope": "x4",
|
||||
"solo": false,
|
||||
"type": "Bell"
|
||||
},
|
||||
"band1": {
|
||||
"frequency": 1864.0,
|
||||
"gain": 6.0,
|
||||
"mode": "LRX (BT)",
|
||||
"mute": false,
|
||||
"q": 0.0,
|
||||
"slope": "x4",
|
||||
"solo": false,
|
||||
"type": "Bell"
|
||||
},
|
||||
"band2": {
|
||||
"frequency": 7458.0,
|
||||
"gain": 6.0,
|
||||
"mode": "LRX (BT)",
|
||||
"mute": false,
|
||||
"q": 0.0,
|
||||
"slope": "x4",
|
||||
"solo": false,
|
||||
"type": "Bell"
|
||||
}
|
||||
},
|
||||
"mode": "IIR",
|
||||
"num-bands": 3,
|
||||
"output-gain": 0.0,
|
||||
"pitch-left": 0.0,
|
||||
"pitch-right": 0.0,
|
||||
"right": {
|
||||
"band0": {
|
||||
"frequency": 932.0,
|
||||
"gain": 6.0,
|
||||
"mode": "LRX (BT)",
|
||||
"mute": false,
|
||||
"q": 0.0,
|
||||
"slope": "x4",
|
||||
"solo": false,
|
||||
"type": "Bell"
|
||||
},
|
||||
"band1": {
|
||||
"frequency": 3729.0,
|
||||
"gain": 6.0,
|
||||
"mode": "LRX (BT)",
|
||||
"mute": false,
|
||||
"q": 0.0,
|
||||
"slope": "x4",
|
||||
"solo": false,
|
||||
"type": "Bell"
|
||||
},
|
||||
"band2": {
|
||||
"frequency": 14917.0,
|
||||
"gain": 6.0,
|
||||
"mode": "LRX (BT)",
|
||||
"mute": false,
|
||||
"q": 0.0,
|
||||
"slope": "x4",
|
||||
"solo": false,
|
||||
"type": "Bell"
|
||||
}
|
||||
},
|
||||
"split-channels": true
|
||||
},
|
||||
"limiter#0": {
|
||||
"alr": true,
|
||||
"alr-attack": 0.1,
|
||||
"alr-knee": 10.0,
|
||||
"alr-release": 1000.0,
|
||||
"attack": 5.0,
|
||||
"bypass": true,
|
||||
"dithering": "None",
|
||||
"external-sidechain": false,
|
||||
"gain-boost": true,
|
||||
"input-gain": 0.0,
|
||||
"lookahead": 5.0,
|
||||
"mode": "Herm Wide",
|
||||
"output-gain": 0.0,
|
||||
"oversampling": "None",
|
||||
"release": 5.0,
|
||||
"sidechain-preamp": 0.0,
|
||||
"stereo-link": 0.0,
|
||||
"threshold": 0.0
|
||||
},
|
||||
"loudness#0": {
|
||||
"bypass": true,
|
||||
"clipping": false,
|
||||
"clipping-range": 6.0,
|
||||
"fft": "4096",
|
||||
"input-gain": 0.0,
|
||||
"output-gain": 0.0,
|
||||
"std": "ISO226-2003",
|
||||
"volume": -24.0
|
||||
},
|
||||
"multiband_compressor#0": {
|
||||
"band0": {
|
||||
"attack-threshold": 0.0,
|
||||
"attack-time": 0.0,
|
||||
"boost-amount": 6.0,
|
||||
"boost-threshold": -72.0,
|
||||
"compression-mode": "Upward",
|
||||
"compressor-enable": true,
|
||||
"external-sidechain": false,
|
||||
"knee": 0.0,
|
||||
"makeup": 0.0,
|
||||
"mute": false,
|
||||
"ratio": 1.2,
|
||||
"release-threshold": -100.0,
|
||||
"release-time": 100.0,
|
||||
"sidechain-custom-highcut-filter": false,
|
||||
"sidechain-custom-lowcut-filter": false,
|
||||
"sidechain-highcut-frequency": 500.0,
|
||||
"sidechain-lookahead": 0.0,
|
||||
"sidechain-lowcut-frequency": 10.0,
|
||||
"sidechain-mode": "RMS",
|
||||
"sidechain-preamp": 0.0,
|
||||
"sidechain-reactivity": 250.0,
|
||||
"sidechain-source": "Middle",
|
||||
"solo": false
|
||||
},
|
||||
"band1": {
|
||||
"attack-threshold": 0.0,
|
||||
"attack-time": 0.0,
|
||||
"boost-amount": 6.0,
|
||||
"boost-threshold": -72.0,
|
||||
"compression-mode": "Upward",
|
||||
"compressor-enable": true,
|
||||
"enable-band": true,
|
||||
"external-sidechain": false,
|
||||
"knee": 0.0,
|
||||
"makeup": 0.0,
|
||||
"mute": false,
|
||||
"ratio": 1.2,
|
||||
"release-threshold": -100.0,
|
||||
"release-time": 100.0,
|
||||
"sidechain-custom-highcut-filter": false,
|
||||
"sidechain-custom-lowcut-filter": false,
|
||||
"sidechain-highcut-frequency": 1000.0,
|
||||
"sidechain-lookahead": 0.0,
|
||||
"sidechain-lowcut-frequency": 500.0,
|
||||
"sidechain-mode": "RMS",
|
||||
"sidechain-preamp": 0.0,
|
||||
"sidechain-reactivity": 250.0,
|
||||
"sidechain-source": "Middle",
|
||||
"solo": false,
|
||||
"split-frequency": 138.0
|
||||
},
|
||||
"band2": {
|
||||
"attack-threshold": 0.0,
|
||||
"attack-time": 0.0,
|
||||
"boost-amount": 6.0,
|
||||
"boost-threshold": -72.0,
|
||||
"compression-mode": "Upward",
|
||||
"compressor-enable": true,
|
||||
"enable-band": true,
|
||||
"external-sidechain": false,
|
||||
"knee": 0.0,
|
||||
"makeup": 0.0,
|
||||
"mute": false,
|
||||
"ratio": 1.2,
|
||||
"release-threshold": -100.0,
|
||||
"release-time": 100.0,
|
||||
"sidechain-custom-highcut-filter": false,
|
||||
"sidechain-custom-lowcut-filter": false,
|
||||
"sidechain-highcut-frequency": 2000.0,
|
||||
"sidechain-lookahead": 0.0,
|
||||
"sidechain-lowcut-frequency": 1000.0,
|
||||
"sidechain-mode": "RMS",
|
||||
"sidechain-preamp": 0.0,
|
||||
"sidechain-reactivity": 250.0,
|
||||
"sidechain-source": "Middle",
|
||||
"solo": false,
|
||||
"split-frequency": 4434.0
|
||||
},
|
||||
"band3": {
|
||||
"attack-threshold": -12.0,
|
||||
"attack-time": 20.0,
|
||||
"boost-amount": 6.0,
|
||||
"boost-threshold": -72.0,
|
||||
"compression-mode": "Downward",
|
||||
"compressor-enable": false,
|
||||
"enable-band": false,
|
||||
"external-sidechain": false,
|
||||
"knee": -6.0,
|
||||
"makeup": 0.0,
|
||||
"mute": false,
|
||||
"ratio": 1.0,
|
||||
"release-threshold": -100.0,
|
||||
"release-time": 100.0,
|
||||
"sidechain-custom-highcut-filter": false,
|
||||
"sidechain-custom-lowcut-filter": false,
|
||||
"sidechain-highcut-frequency": 4000.0,
|
||||
"sidechain-lookahead": 0.0,
|
||||
"sidechain-lowcut-frequency": 2000.0,
|
||||
"sidechain-mode": "RMS",
|
||||
"sidechain-preamp": 0.0,
|
||||
"sidechain-reactivity": 10.0,
|
||||
"sidechain-source": "Middle",
|
||||
"solo": false,
|
||||
"split-frequency": 2000.0
|
||||
},
|
||||
"band4": {
|
||||
"attack-threshold": -12.0,
|
||||
"attack-time": 20.0,
|
||||
"boost-amount": 6.0,
|
||||
"boost-threshold": -72.0,
|
||||
"compression-mode": "Downward",
|
||||
"compressor-enable": false,
|
||||
"enable-band": false,
|
||||
"external-sidechain": false,
|
||||
"knee": -6.0,
|
||||
"makeup": 0.0,
|
||||
"mute": false,
|
||||
"ratio": 1.0,
|
||||
"release-threshold": -100.0,
|
||||
"release-time": 100.0,
|
||||
"sidechain-custom-highcut-filter": false,
|
||||
"sidechain-custom-lowcut-filter": false,
|
||||
"sidechain-highcut-frequency": 8000.0,
|
||||
"sidechain-lookahead": 0.0,
|
||||
"sidechain-lowcut-frequency": 4000.0,
|
||||
"sidechain-mode": "RMS",
|
||||
"sidechain-preamp": 0.0,
|
||||
"sidechain-reactivity": 10.0,
|
||||
"sidechain-source": "Middle",
|
||||
"solo": false,
|
||||
"split-frequency": 4000.0
|
||||
},
|
||||
"band5": {
|
||||
"attack-threshold": -12.0,
|
||||
"attack-time": 20.0,
|
||||
"boost-amount": 6.0,
|
||||
"boost-threshold": -72.0,
|
||||
"compression-mode": "Downward",
|
||||
"compressor-enable": false,
|
||||
"enable-band": false,
|
||||
"external-sidechain": false,
|
||||
"knee": -6.0,
|
||||
"makeup": 0.0,
|
||||
"mute": false,
|
||||
"ratio": 1.0,
|
||||
"release-threshold": -100.0,
|
||||
"release-time": 100.0,
|
||||
"sidechain-custom-highcut-filter": false,
|
||||
"sidechain-custom-lowcut-filter": false,
|
||||
"sidechain-highcut-frequency": 12000.0,
|
||||
"sidechain-lookahead": 0.0,
|
||||
"sidechain-lowcut-frequency": 8000.0,
|
||||
"sidechain-mode": "RMS",
|
||||
"sidechain-preamp": 0.0,
|
||||
"sidechain-reactivity": 10.0,
|
||||
"sidechain-source": "Middle",
|
||||
"solo": false,
|
||||
"split-frequency": 8000.0
|
||||
},
|
||||
"band6": {
|
||||
"attack-threshold": -12.0,
|
||||
"attack-time": 20.0,
|
||||
"boost-amount": 6.0,
|
||||
"boost-threshold": -72.0,
|
||||
"compression-mode": "Downward",
|
||||
"compressor-enable": false,
|
||||
"enable-band": false,
|
||||
"external-sidechain": false,
|
||||
"knee": -6.0,
|
||||
"makeup": 0.0,
|
||||
"mute": false,
|
||||
"ratio": 1.0,
|
||||
"release-threshold": -100.0,
|
||||
"release-time": 100.0,
|
||||
"sidechain-custom-highcut-filter": false,
|
||||
"sidechain-custom-lowcut-filter": false,
|
||||
"sidechain-highcut-frequency": 16000.0,
|
||||
"sidechain-lookahead": 0.0,
|
||||
"sidechain-lowcut-frequency": 12000.0,
|
||||
"sidechain-mode": "RMS",
|
||||
"sidechain-preamp": 0.0,
|
||||
"sidechain-reactivity": 10.0,
|
||||
"sidechain-source": "Middle",
|
||||
"solo": false,
|
||||
"split-frequency": 12000.0
|
||||
},
|
||||
"band7": {
|
||||
"attack-threshold": -12.0,
|
||||
"attack-time": 20.0,
|
||||
"boost-amount": 6.0,
|
||||
"boost-threshold": -72.0,
|
||||
"compression-mode": "Downward",
|
||||
"compressor-enable": false,
|
||||
"enable-band": false,
|
||||
"external-sidechain": false,
|
||||
"knee": -6.0,
|
||||
"makeup": 0.0,
|
||||
"mute": false,
|
||||
"ratio": 1.0,
|
||||
"release-threshold": -100.0,
|
||||
"release-time": 100.0,
|
||||
"sidechain-custom-highcut-filter": false,
|
||||
"sidechain-custom-lowcut-filter": false,
|
||||
"sidechain-highcut-frequency": 20000.0,
|
||||
"sidechain-lookahead": 0.0,
|
||||
"sidechain-lowcut-frequency": 16000.0,
|
||||
"sidechain-mode": "RMS",
|
||||
"sidechain-preamp": 0.0,
|
||||
"sidechain-reactivity": 10.0,
|
||||
"sidechain-source": "Middle",
|
||||
"solo": false,
|
||||
"split-frequency": 16000.0
|
||||
},
|
||||
"bypass": true,
|
||||
"compressor-mode": "Modern",
|
||||
"dry": -100.0,
|
||||
"envelope-boost": "None",
|
||||
"input-gain": 0.0,
|
||||
"output-gain": 0.0,
|
||||
"wet": 0.0
|
||||
},
|
||||
"multiband_compressor#1": {
|
||||
"band0": {
|
||||
"attack-threshold": -12.0,
|
||||
"attack-time": 20.0,
|
||||
"boost-amount": 6.0,
|
||||
"boost-threshold": -72.0,
|
||||
"compression-mode": "Downward",
|
||||
"compressor-enable": false,
|
||||
"external-sidechain": false,
|
||||
"knee": -6.0,
|
||||
"makeup": 0.0,
|
||||
"mute": false,
|
||||
"ratio": 1.0,
|
||||
"release-threshold": -100.0,
|
||||
"release-time": 100.0,
|
||||
"sidechain-custom-highcut-filter": false,
|
||||
"sidechain-custom-lowcut-filter": false,
|
||||
"sidechain-highcut-frequency": 500.0,
|
||||
"sidechain-lookahead": 0.0,
|
||||
"sidechain-lowcut-frequency": 10.0,
|
||||
"sidechain-mode": "RMS",
|
||||
"sidechain-preamp": 0.0,
|
||||
"sidechain-reactivity": 10.0,
|
||||
"sidechain-source": "Middle",
|
||||
"solo": false
|
||||
},
|
||||
"band1": {
|
||||
"attack-threshold": 0.0,
|
||||
"attack-time": 0.0,
|
||||
"boost-amount": 6.0,
|
||||
"boost-threshold": -72.0,
|
||||
"compression-mode": "Upward",
|
||||
"compressor-enable": true,
|
||||
"enable-band": true,
|
||||
"external-sidechain": false,
|
||||
"knee": 0.0,
|
||||
"makeup": 0.0,
|
||||
"mute": false,
|
||||
"ratio": 1.2,
|
||||
"release-threshold": -100.0,
|
||||
"release-time": 100.0,
|
||||
"sidechain-custom-highcut-filter": true,
|
||||
"sidechain-custom-lowcut-filter": true,
|
||||
"sidechain-highcut-frequency": 329.0,
|
||||
"sidechain-lookahead": 0.0,
|
||||
"sidechain-lowcut-frequency": 20.0,
|
||||
"sidechain-mode": "RMS",
|
||||
"sidechain-preamp": 0.0,
|
||||
"sidechain-reactivity": 250.0,
|
||||
"sidechain-source": "Middle",
|
||||
"solo": false,
|
||||
"split-frequency": 329.0
|
||||
},
|
||||
"band2": {
|
||||
"attack-threshold": 0.0,
|
||||
"attack-time": 0.0,
|
||||
"boost-amount": 6.0,
|
||||
"boost-threshold": -72.0,
|
||||
"compression-mode": "Upward",
|
||||
"compressor-enable": true,
|
||||
"enable-band": true,
|
||||
"external-sidechain": false,
|
||||
"knee": 0.0,
|
||||
"makeup": 0.0,
|
||||
"mute": false,
|
||||
"ratio": 1.2,
|
||||
"release-threshold": -100.0,
|
||||
"release-time": 100.0,
|
||||
"sidechain-custom-highcut-filter": true,
|
||||
"sidechain-custom-lowcut-filter": true,
|
||||
"sidechain-highcut-frequency": 329.0,
|
||||
"sidechain-lookahead": 0.0,
|
||||
"sidechain-lowcut-frequency": 20.0,
|
||||
"sidechain-mode": "RMS",
|
||||
"sidechain-preamp": 0.0,
|
||||
"sidechain-reactivity": 250.0,
|
||||
"sidechain-source": "Middle",
|
||||
"solo": false,
|
||||
"split-frequency": 2637.0
|
||||
},
|
||||
"band3": {
|
||||
"attack-threshold": -12.0,
|
||||
"attack-time": 20.0,
|
||||
"boost-amount": 6.0,
|
||||
"boost-threshold": -72.0,
|
||||
"compression-mode": "Downward",
|
||||
"compressor-enable": false,
|
||||
"enable-band": false,
|
||||
"external-sidechain": false,
|
||||
"knee": -6.0,
|
||||
"makeup": 0.0,
|
||||
"mute": false,
|
||||
"ratio": 1.0,
|
||||
"release-threshold": -100.0,
|
||||
"release-time": 100.0,
|
||||
"sidechain-custom-highcut-filter": false,
|
||||
"sidechain-custom-lowcut-filter": false,
|
||||
"sidechain-highcut-frequency": 4000.0,
|
||||
"sidechain-lookahead": 0.0,
|
||||
"sidechain-lowcut-frequency": 2000.0,
|
||||
"sidechain-mode": "RMS",
|
||||
"sidechain-preamp": 0.0,
|
||||
"sidechain-reactivity": 10.0,
|
||||
"sidechain-source": "Middle",
|
||||
"solo": false,
|
||||
"split-frequency": 2000.0
|
||||
},
|
||||
"band4": {
|
||||
"attack-threshold": -12.0,
|
||||
"attack-time": 20.0,
|
||||
"boost-amount": 6.0,
|
||||
"boost-threshold": -72.0,
|
||||
"compression-mode": "Downward",
|
||||
"compressor-enable": false,
|
||||
"enable-band": false,
|
||||
"external-sidechain": false,
|
||||
"knee": -6.0,
|
||||
"makeup": 0.0,
|
||||
"mute": false,
|
||||
"ratio": 1.0,
|
||||
"release-threshold": -100.0,
|
||||
"release-time": 100.0,
|
||||
"sidechain-custom-highcut-filter": false,
|
||||
"sidechain-custom-lowcut-filter": false,
|
||||
"sidechain-highcut-frequency": 8000.0,
|
||||
"sidechain-lookahead": 0.0,
|
||||
"sidechain-lowcut-frequency": 4000.0,
|
||||
"sidechain-mode": "RMS",
|
||||
"sidechain-preamp": 0.0,
|
||||
"sidechain-reactivity": 10.0,
|
||||
"sidechain-source": "Middle",
|
||||
"solo": false,
|
||||
"split-frequency": 4000.0
|
||||
},
|
||||
"band5": {
|
||||
"attack-threshold": -12.0,
|
||||
"attack-time": 20.0,
|
||||
"boost-amount": 6.0,
|
||||
"boost-threshold": -72.0,
|
||||
"compression-mode": "Downward",
|
||||
"compressor-enable": false,
|
||||
"enable-band": false,
|
||||
"external-sidechain": false,
|
||||
"knee": -6.0,
|
||||
"makeup": 0.0,
|
||||
"mute": false,
|
||||
"ratio": 1.0,
|
||||
"release-threshold": -100.0,
|
||||
"release-time": 100.0,
|
||||
"sidechain-custom-highcut-filter": false,
|
||||
"sidechain-custom-lowcut-filter": false,
|
||||
"sidechain-highcut-frequency": 12000.0,
|
||||
"sidechain-lookahead": 0.0,
|
||||
"sidechain-lowcut-frequency": 8000.0,
|
||||
"sidechain-mode": "RMS",
|
||||
"sidechain-preamp": 0.0,
|
||||
"sidechain-reactivity": 10.0,
|
||||
"sidechain-source": "Middle",
|
||||
"solo": false,
|
||||
"split-frequency": 8000.0
|
||||
},
|
||||
"band6": {
|
||||
"attack-threshold": -12.0,
|
||||
"attack-time": 20.0,
|
||||
"boost-amount": 6.0,
|
||||
"boost-threshold": -72.0,
|
||||
"compression-mode": "Downward",
|
||||
"compressor-enable": false,
|
||||
"enable-band": false,
|
||||
"external-sidechain": false,
|
||||
"knee": -6.0,
|
||||
"makeup": 0.0,
|
||||
"mute": false,
|
||||
"ratio": 1.0,
|
||||
"release-threshold": -100.0,
|
||||
"release-time": 100.0,
|
||||
"sidechain-custom-highcut-filter": false,
|
||||
"sidechain-custom-lowcut-filter": false,
|
||||
"sidechain-highcut-frequency": 16000.0,
|
||||
"sidechain-lookahead": 0.0,
|
||||
"sidechain-lowcut-frequency": 12000.0,
|
||||
"sidechain-mode": "RMS",
|
||||
"sidechain-preamp": 0.0,
|
||||
"sidechain-reactivity": 10.0,
|
||||
"sidechain-source": "Middle",
|
||||
"solo": false,
|
||||
"split-frequency": 12000.0
|
||||
},
|
||||
"band7": {
|
||||
"attack-threshold": -12.0,
|
||||
"attack-time": 20.0,
|
||||
"boost-amount": 6.0,
|
||||
"boost-threshold": -72.0,
|
||||
"compression-mode": "Downward",
|
||||
"compressor-enable": false,
|
||||
"enable-band": false,
|
||||
"external-sidechain": false,
|
||||
"knee": -6.0,
|
||||
"makeup": 0.0,
|
||||
"mute": false,
|
||||
"ratio": 1.0,
|
||||
"release-threshold": -100.0,
|
||||
"release-time": 100.0,
|
||||
"sidechain-custom-highcut-filter": false,
|
||||
"sidechain-custom-lowcut-filter": false,
|
||||
"sidechain-highcut-frequency": 20000.0,
|
||||
"sidechain-lookahead": 0.0,
|
||||
"sidechain-lowcut-frequency": 16000.0,
|
||||
"sidechain-mode": "RMS",
|
||||
"sidechain-preamp": 0.0,
|
||||
"sidechain-reactivity": 10.0,
|
||||
"sidechain-source": "Middle",
|
||||
"solo": false,
|
||||
"split-frequency": 16000.0
|
||||
},
|
||||
"bypass": true,
|
||||
"compressor-mode": "Modern",
|
||||
"dry": -100.0,
|
||||
"envelope-boost": "None",
|
||||
"input-gain": 0.0,
|
||||
"output-gain": 0.0,
|
||||
"wet": 0.0
|
||||
},
|
||||
"plugins_order": [
|
||||
"crossfeed#0",
|
||||
"loudness#0",
|
||||
"equalizer#0",
|
||||
"bass_enhancer#0",
|
||||
"equalizer#1",
|
||||
"equalizer#2",
|
||||
"multiband_compressor#0",
|
||||
"multiband_compressor#1",
|
||||
"compressor#0",
|
||||
"reverb#0",
|
||||
"stereo_tools#0",
|
||||
"autogain#0",
|
||||
"limiter#0"
|
||||
],
|
||||
"reverb#0": {
|
||||
"amount": -6.0,
|
||||
"bass-cut": 196.0,
|
||||
"bypass": true,
|
||||
"decay-time": 0.4,
|
||||
"diffusion": 0.0,
|
||||
"dry": 0.0,
|
||||
"hf-damp": 12543.0,
|
||||
"input-gain": 0.0,
|
||||
"output-gain": 0.0,
|
||||
"predelay": 20.0,
|
||||
"room-size": "Large/smooth",
|
||||
"treble-cut": 12543.0
|
||||
},
|
||||
"stereo_tools#0": {
|
||||
"balance-in": 0.0,
|
||||
"balance-out": 0.0,
|
||||
"bypass": false,
|
||||
"delay": 20.0,
|
||||
"input-gain": 0.0,
|
||||
"middle-level": 0.0,
|
||||
"middle-panorama": 0.0,
|
||||
"mode": "LR > LR (Stereo Default)",
|
||||
"mutel": false,
|
||||
"muter": false,
|
||||
"output-gain": 0.0,
|
||||
"phasel": false,
|
||||
"phaser": true,
|
||||
"sc-level": 1.0,
|
||||
"side-balance": 0.0,
|
||||
"side-level": 0.0,
|
||||
"softclip": false,
|
||||
"stereo-base": 0.0,
|
||||
"stereo-phase": 0.0
|
||||
}
|
||||
}
|
||||
}
|
18
home-mods/audio/default.nix
Normal file
18
home-mods/audio/default.nix
Normal file
|
@ -0,0 +1,18 @@
|
|||
{ config
|
||||
, pkgs
|
||||
, inputs
|
||||
, ...
|
||||
}: {
|
||||
# xdg.configFile."easyeffects/output/default.json".source = ./default.json;
|
||||
services.easyeffects = {
|
||||
enable = true;
|
||||
# preset = "default";
|
||||
package = pkgs.easyeffects;
|
||||
};
|
||||
|
||||
home.packages = with pkgs; [
|
||||
my.spotube
|
||||
spotify
|
||||
ncspot
|
||||
];
|
||||
}
|
31
home-mods/common/default.nix
Normal file
31
home-mods/common/default.nix
Normal file
|
@ -0,0 +1,31 @@
|
|||
{ config
|
||||
, lib
|
||||
, pkgs
|
||||
, ...
|
||||
}: {
|
||||
xdg.enable = true;
|
||||
|
||||
# TODO
|
||||
# remove once stuff is fixed ???
|
||||
# gets rid of annoying warning that shouldn't apply to my setup
|
||||
# ref: https://github.com/danth/stylix/issues/865
|
||||
nixpkgs.overlays = lib.mkForce null;
|
||||
|
||||
stylix = {
|
||||
overlays.enable = false; # Should be set by the nixosConfiguration and causes useGlobalPkgs error
|
||||
targets = {
|
||||
alacritty.enable = true;
|
||||
bat.enable = true;
|
||||
btop.enable = true;
|
||||
firefox.enable = true;
|
||||
firefox.profileNames = [ "default" ];
|
||||
fish.enable = true;
|
||||
fzf.enable = true;
|
||||
gtk.enable = true;
|
||||
kde.enable = true; # ??
|
||||
ncspot.enable = true;
|
||||
neovim.enable = true;
|
||||
zellij.enable = true;
|
||||
};
|
||||
};
|
||||
}
|
141
home-mods/desktop/default.nix
Normal file
141
home-mods/desktop/default.nix
Normal file
|
@ -0,0 +1,141 @@
|
|||
{ config
|
||||
, pkgs
|
||||
, inputs
|
||||
, lib
|
||||
, ...
|
||||
}: {
|
||||
programs.mangohud = {
|
||||
enable = true;
|
||||
settings = {
|
||||
# need to override the stylix font size here
|
||||
font_size = lib.mkForce 32;
|
||||
font_size_text = lib.mkForce 32;
|
||||
font_scale = lib.mkForce 1;
|
||||
|
||||
position = "bottom-left";
|
||||
horizontal_stretch = 0;
|
||||
hud_no_margin = 1;
|
||||
hud_compact = 1;
|
||||
horizontal = 1;
|
||||
cpu_mhz = 1;
|
||||
gpu_core_clock = 1;
|
||||
ram = 1;
|
||||
swap = 1;
|
||||
frametime = 0;
|
||||
frame_timing = 0;
|
||||
};
|
||||
};
|
||||
|
||||
programs.mpv = {
|
||||
enable = true;
|
||||
package = pkgs.mpv;
|
||||
};
|
||||
programs.thunderbird = {
|
||||
enable = true;
|
||||
package = pkgs.thunderbird-128;
|
||||
profiles."main" = {
|
||||
isDefault = true;
|
||||
};
|
||||
};
|
||||
programs.nheko = {
|
||||
# enable = true; # insecure due to downstream olm
|
||||
};
|
||||
programs.obs-studio = {
|
||||
enable = true;
|
||||
plugins = with pkgs.obs-studio-plugins; [
|
||||
wlrobs
|
||||
obs-backgroundremoval
|
||||
obs-pipewire-audio-capture
|
||||
obs-vaapi
|
||||
obs-gstreamer
|
||||
];
|
||||
};
|
||||
|
||||
xdg.desktopEntries = {
|
||||
steam-15 = {
|
||||
name = "Steam (1.5 Scaling)";
|
||||
type = "Application";
|
||||
icon = "steam";
|
||||
comment = "steam with forced 2x scaling for highdpi displays";
|
||||
exec = "steam -forcedesktopscaling 1.5";
|
||||
terminal = false;
|
||||
prefersNonDefaultGPU = true;
|
||||
categories = [ "Network" "FileTransfer" "Game" ];
|
||||
};
|
||||
|
||||
steam-2 = {
|
||||
name = "Steam (2.0 Scaling)";
|
||||
type = "Application";
|
||||
icon = "steam";
|
||||
comment = "steam with forced 2x scaling for highdpi displays";
|
||||
exec = "steam -forcedesktopscaling 2";
|
||||
terminal = false;
|
||||
prefersNonDefaultGPU = true;
|
||||
categories = [ "Network" "FileTransfer" "Game" ];
|
||||
};
|
||||
};
|
||||
|
||||
services.syncthing.enable = true;
|
||||
# services.syncthing.tray.enable = true;
|
||||
home = {
|
||||
file."Pictures/default_background.png".source = config.stylix.image;
|
||||
|
||||
packages = with pkgs; [
|
||||
# Steam#####
|
||||
# steam-tui
|
||||
# steamcmd
|
||||
############
|
||||
bitwarden
|
||||
# airshipper
|
||||
# ardour
|
||||
brave
|
||||
# cavalier
|
||||
ffmpeg
|
||||
freetube
|
||||
filelight
|
||||
# element-desktop
|
||||
inkscape
|
||||
jellyfin-mpv-shim # broken ?
|
||||
jellyfin-media-player
|
||||
warp-terminal
|
||||
libsForQt5.kasts
|
||||
krita
|
||||
kdePackages.kate
|
||||
kdePackages.kdenlive
|
||||
kdePackages.kleopatra
|
||||
kdePackages.plasma-vault
|
||||
kdePackages.plasma-browser-integration
|
||||
kdePackages.kio-admin
|
||||
nextcloud-client
|
||||
onlyoffice-bin
|
||||
protonup-qt
|
||||
signal-desktop
|
||||
# webcord-vencord # broken atm
|
||||
# tome4
|
||||
# shattered-pixel-dungeon
|
||||
gst_all_1.gst-vaapi
|
||||
waypipe
|
||||
veracrypt
|
||||
lutris
|
||||
heroic
|
||||
# kdePackages.konversation
|
||||
unar
|
||||
fuse
|
||||
qbittorrent
|
||||
# pcsx2
|
||||
xdelta
|
||||
winetricks
|
||||
my.zen-browser
|
||||
# my.dbeaver
|
||||
# feather
|
||||
# freecad-wayland
|
||||
# dbeaver-bin
|
||||
# blender
|
||||
# miraclecast
|
||||
# rustdesk
|
||||
# deadbeef-with-plugins
|
||||
# flightgear
|
||||
# orbiter
|
||||
];
|
||||
};
|
||||
}
|
407
home-mods/firefox/default.nix
Normal file
407
home-mods/firefox/default.nix
Normal file
|
@ -0,0 +1,407 @@
|
|||
{ config
|
||||
, lib
|
||||
, pkgs
|
||||
, ...
|
||||
}: {
|
||||
programs.firefox = {
|
||||
enable = true;
|
||||
package = pkgs.firefox;
|
||||
|
||||
profiles = {
|
||||
default = {
|
||||
isDefault = true;
|
||||
|
||||
# userChrome = ''
|
||||
# @-moz-document url(chrome://browser/content/browser.xhtml) {
|
||||
# /* tabs on bottom of window */
|
||||
# /* requires that you set
|
||||
# * toolkit.legacyUserProfileCustomizations.stylesheets = true
|
||||
# * in about:config
|
||||
# */
|
||||
# #main-window body { flex-direction: column-reverse !important; }
|
||||
# #navigator-toolbox { flex-direction: column-reverse !important; }
|
||||
# #urlbar {
|
||||
# top: unset !important;
|
||||
# bottom: calc(var(--urlbar-margin-inline)) !important;
|
||||
# box-shadow: none !important;
|
||||
# display: flex !important;
|
||||
# flex-direction: column !important;
|
||||
# }
|
||||
# #urlbar > * {
|
||||
# flex: none;
|
||||
# }
|
||||
# #urlbar-input-container {
|
||||
# order: 2;
|
||||
# }
|
||||
# #urlbar > .urlbarView {
|
||||
# order: 1;
|
||||
# border-bottom: 1px solid #666;
|
||||
# }
|
||||
# #urlbar-results {
|
||||
# display: flex;
|
||||
# flex-direction: column-reverse;
|
||||
# }
|
||||
# .search-one-offs { display: none !important; }
|
||||
# .tab-background { border-top: none !important; }
|
||||
# #navigator-toolbox::after { border: none; }
|
||||
# #TabsToolbar .tabbrowser-arrowscrollbox,
|
||||
# #tabbrowser-tabs, .tab-stack { min-height: 28px !important; }
|
||||
# .tabbrowser-tab { font-size: 80%; }
|
||||
# .tab-content { padding: 0 5px; }
|
||||
# .tab-close-button .toolbarbutton-icon { width: 12px !important; height: 12px !important; }
|
||||
# toolbox[inFullscreen=true] { display: none; }
|
||||
# /*
|
||||
# * the following makes it so that the on-click panels in the nav-bar
|
||||
# * extend upwards, not downwards. some of them are in the #mainPopupSet
|
||||
# * (hamburger + unified extensions), and the rest are in
|
||||
# * #navigator-toolbox. They all end up with an incorrectly-measured
|
||||
# * max-height (based on the distance to the _bottom_ of the screen), so
|
||||
# * we correct that. The ones in #navigator-toolbox then adjust their
|
||||
# * positioning automatically, so we can just set max-height. The ones
|
||||
# * in #mainPopupSet do _not_, and so we need to give them a
|
||||
# * negative margin-top to offset them *and* a fixed height so their
|
||||
# * bottoms align with the nav-bar. We also calc to ensure they don't
|
||||
# * end up overlapping with the nav-bar itself. The last bit around
|
||||
# * cui-widget-panelview is needed because "new"-style panels (those
|
||||
# * using "unified" panels) don't get flex by default, which results in
|
||||
# * them being the wrong height.
|
||||
# *
|
||||
# * Oh, yeah, and the popup-notification-panel (like biometrics prompts)
|
||||
# * of course follows different rules again, and needs its own special
|
||||
# * rule.
|
||||
# */
|
||||
# #mainPopupSet panel.panel-no-padding { margin-top: calc(-50vh + 40px) !important; }
|
||||
# #mainPopupSet .panel-viewstack, #mainPopupSet popupnotification { max-height: 50vh !important; height: 50vh; }
|
||||
# #mainPopupSet panel.panel-no-padding.popup-notification-panel { margin-top: calc(-50vh - 35px) !important; }
|
||||
# #navigator-toolbox .panel-viewstack { max-height: 75vh !important; }
|
||||
# panelview.cui-widget-panelview { flex: 1; }
|
||||
# panelview.cui-widget-panelview > vbox { flex: 1; min-height: 50vh; }
|
||||
# }
|
||||
# '';
|
||||
settings = {
|
||||
# Disable internal passwod manager
|
||||
"signon.rememberSignons" = false;
|
||||
# Extensions are managed with Nix, so don't update.
|
||||
"extensions.update.autoUpdateDefault" = false;
|
||||
"extensions.update.enabled" = false;
|
||||
|
||||
# Default to dark theme in DevTools panel
|
||||
"devtools.theme" = "dark";
|
||||
|
||||
# Reduce search engine noise in the urlbar's completion window. The
|
||||
# shortcuts and suggestions will still work, but Firefox won't clutter
|
||||
# its UI with reminders that they exist.
|
||||
"browser.urlbar.suggest.searches" = true; # Let's hope duckduckgo doesn't sell it all :)
|
||||
"browser.urlbar.shortcuts.bookmarks" = false;
|
||||
"browser.urlbar.shortcuts.history" = false;
|
||||
"browser.urlbar.shortcuts.tabs" = false;
|
||||
"browser.urlbar.showSearchSuggestionsFirst" = false;
|
||||
"browser.urlbar.speculativeConnect.enabled" = false;
|
||||
"browser.urlbar.suggest.quicksuggest.nonsponsored" = false;
|
||||
"browser.urlbar.suggest.quicksuggest.sponsored" = false;
|
||||
|
||||
# Disable some not so useful functionality.
|
||||
"browser.disableResetPrompt" = true; # "Looks like you haven't started Firefox in a while."
|
||||
"browser.onboarding.enabled" = false; # "New to Firefox? Let's get started!" tour
|
||||
"browser.aboutConfig.showWarning" = false; # Warning when opening about:config
|
||||
"extensions.pocket.enabled" = false;
|
||||
"extensions.shield-recipe-client.enabled" = false;
|
||||
|
||||
# Sync
|
||||
# "services.sync.username" = config.etu.user.email;
|
||||
|
||||
"services.sync.engine.addons" = false; # Do not sync extensions.
|
||||
|
||||
"general.autoScroll" = true; # Middle click to scroll
|
||||
|
||||
"browser.startup.page" = 3; # Restore previous windows and tabs.
|
||||
|
||||
# Security-oriented defaults
|
||||
"security.family_safety.mode" = 0;
|
||||
# https://blog.mozilla.org/security/2016/10/18/phasing-out-sha-1-on-the-public-web/
|
||||
"security.pki.sha1_enforcement_level" = 1;
|
||||
# https://github.com/tlswg/tls13-spec/issues/1001
|
||||
"security.tls.enable_0rtt_data" = false;
|
||||
# Use Mozilla geolocation service instead of Google if given permission
|
||||
"geo.provider.network.url" = "https://location.services.mozilla.com/v1/geolocate?key=%MOZILLA_API_KEY%";
|
||||
"geo.provider.use_gpsd" = false;
|
||||
# https://support.mozilla.org/en-US/kb/extension-recommendations
|
||||
"browser.newtabpage.activity-stream.asrouter.userprefs.cfr" = false;
|
||||
"browser.newtabpage.activity-stream.asrouter.userprefs.cfr.addons" = false;
|
||||
"browser.newtabpage.activity-stream.asrouter.userprefs.cfr.features" = false;
|
||||
"extensions.htmlaboutaddons.recommendations.enabled" = false;
|
||||
"extensions.htmlaboutaddons.discover.enabled" = false;
|
||||
"extensions.htmlaboutaddons.inline-options.enabled" = false;
|
||||
"extensions.getAddons.showPane" = false; # uses Google Analytics
|
||||
"browser.discovery.enabled" = false;
|
||||
|
||||
# Privacy enhancements
|
||||
"browser.newtabpage.activity-stream.feeds.telemetry" = false;
|
||||
"browser.newtabpage.activity-stream.telemetry" = false;
|
||||
"browser.newtabpage.activity-stream.feeds.snippets" = false;
|
||||
"browser.newtabpage.activity-stream.feeds.section.topstories" = false;
|
||||
"browser.newtabpage.activity-stream.section.highlights.includePocket" = false;
|
||||
"browser.newtabpage.activity-stream.showSponsored" = false;
|
||||
"browser.newtabpage.activity-stream.feeds.discoverystreamfeed" = false;
|
||||
"browser.newtabpage.activity-stream.showSponsoredTopSites" = false;
|
||||
|
||||
# Improve performance
|
||||
"gfx.webrender.all" = true;
|
||||
|
||||
# Enable ETP for decent security (makes firefox containers and many
|
||||
# common security/privacy add-ons redundant).
|
||||
"browser.contentblocking.category" = "strict";
|
||||
"privacy.purge_trackers.enabled" = true;
|
||||
# Do Not Track header
|
||||
"privacy.donottrackheader.enabled" = true;
|
||||
"privacy.donottrackheader.value" = 1;
|
||||
# Disable Private Attribution Tracking Foo
|
||||
"dom.private-attribution.submission.enabled" = false;
|
||||
# Your customized toolbar settings are stored in
|
||||
# 'browser.uiCustomization.state'. This tells firefox to sync it between
|
||||
# machines. WARNING: This may not work across OSes. Since I use NixOS on
|
||||
# all the machines I use Firefox on, this is no concern to me.
|
||||
"services.sync.prefs.sync.browser.uiCustomization.state" = true;
|
||||
|
||||
# Enable userChrome customisations
|
||||
"toolkit.legacyUserProfileCustomizations.stylesheets" = false; # TODO Reenable with fixed tabs on bottom css
|
||||
|
||||
# Reduce File IO / SSD abuse
|
||||
# Otherwise, Firefox bombards the HD with writes. Not so nice for SSDs.
|
||||
# This forces it to write every 15 minutes, rather than 15 seconds.
|
||||
"browser.sessionstore.interval" = "900000";
|
||||
# Disable battery API
|
||||
"dom.battery.enabled" = false;
|
||||
# Disable "beacon" asynchronous HTTP transfers (used for analytics)
|
||||
"beacon.enabled" = false;
|
||||
# Disable pinging URIs specified in HTML <a> ping= attributes
|
||||
"browser.send_pings" = false;
|
||||
# Disable gamepad API to prevent USB device enumeration
|
||||
"dom.gamepad.enabled" = false;
|
||||
# Don't try to guess domain names when entering an invalid domain name in URL bar
|
||||
"browser.fixup.alternate.enabled" = false;
|
||||
|
||||
# Disable telemetry
|
||||
"toolkit.telemetry.unified" = false;
|
||||
"toolkit.telemetry.enabled" = false;
|
||||
"toolkit.telemetry.server" = "data:,";
|
||||
"toolkit.telemetry.archive.enabled" = false;
|
||||
"toolkit.telemetry.coverage.opt-out" = true;
|
||||
"toolkit.coverage.opt-out" = true;
|
||||
"toolkit.coverage.endpoint.base" = "";
|
||||
"experiments.supported" = false;
|
||||
"experiments.enabled" = false;
|
||||
"experiments.manifest.uri" = "";
|
||||
"browser.ping-centre.telemetry" = false;
|
||||
# https://mozilla.github.io/normandy/
|
||||
"app.normandy.enabled" = false;
|
||||
"app.normandy.api_url" = "";
|
||||
"app.shield.optoutstudies.enabled" = false;
|
||||
# Disable health reports (basically more telemetry)
|
||||
# https://support.mozilla.org/en-US/kb/firefox-health-report-understand-your-browser-perf
|
||||
# https://gecko.readthedocs.org/en/latest/toolkit/components/telemetry/telemetry/preferences.html
|
||||
"datareporting.healthreport.uploadEnabled" = false;
|
||||
"datareporting.healthreport.service.enabled" = false;
|
||||
"datareporting.policy.dataSubmissionEnabled" = false;
|
||||
|
||||
# Disable crash reports
|
||||
"breakpad.reportURL" = "";
|
||||
"browser.tabs.crashReporting.sendReport" = false;
|
||||
"browser.crashReports.unsubmittedCheck.autoSubmit2" = false; # don't submit backlogged reports
|
||||
|
||||
# Disable Form autofill
|
||||
# https://wiki.mozilla.org/Firefox/Features/Form_Autofill
|
||||
"browser.formfill.enable" = false;
|
||||
"extensions.formautofill.addresses.enabled" = false;
|
||||
"extensions.formautofill.available" = "off";
|
||||
"extensions.formautofill.creditCards.available" = false;
|
||||
"extensions.formautofill.creditCards.enabled" = false;
|
||||
"extensions.formautofill.heuristics.enabled" = false;
|
||||
|
||||
# VAAPI ffmpeg foo
|
||||
"media.ffmpeg.vaapi.enabled" = true;
|
||||
};
|
||||
|
||||
extensions.packages = with pkgs.nur.repos.rycee.firefox-addons; [
|
||||
bitwarden
|
||||
# clearurls
|
||||
consent-o-matic
|
||||
darkreader
|
||||
dearrow
|
||||
deutsch-de-language-pack
|
||||
dictionary-german
|
||||
df-youtube
|
||||
flagfox
|
||||
ipvfoo
|
||||
leechblock-ng
|
||||
localcdn
|
||||
plasma-integration
|
||||
privacy-badger
|
||||
rust-search-extension
|
||||
sidebery
|
||||
skip-redirect
|
||||
sponsorblock
|
||||
tab-stash
|
||||
ublock-origin
|
||||
unpaywall
|
||||
];
|
||||
|
||||
search = {
|
||||
force = true;
|
||||
default = "DuckDuckGo";
|
||||
order = [ "DuckDuckGo" "Nix Packages" "Nix Options" "NixOS Wiki" ];
|
||||
|
||||
engines = {
|
||||
"DuckDuckGo".metaData = {
|
||||
alias = "@ddg";
|
||||
};
|
||||
"Nix Packages" = {
|
||||
urls = [
|
||||
{
|
||||
template = "https://search.nixos.org/packages";
|
||||
params = [
|
||||
{
|
||||
name = "type";
|
||||
value = "packages";
|
||||
}
|
||||
{
|
||||
name = "query";
|
||||
value = "{searchTerms}";
|
||||
}
|
||||
];
|
||||
}
|
||||
];
|
||||
|
||||
icon = "/run/current-system/sw/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
|
||||
|
||||
definedAliases = [ "@np" ];
|
||||
};
|
||||
"Nix Options" = {
|
||||
urls = [
|
||||
{
|
||||
template = "https://search.nixos.org/options";
|
||||
params = [
|
||||
{
|
||||
name = "type";
|
||||
value = "options";
|
||||
}
|
||||
{
|
||||
name = "query";
|
||||
value = "{searchTerms}";
|
||||
}
|
||||
];
|
||||
}
|
||||
];
|
||||
|
||||
icon = "/run/current-system/sw/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
|
||||
|
||||
definedAliases = [ "@no" ];
|
||||
};
|
||||
"Home-Manager Options" = {
|
||||
urls = [
|
||||
{
|
||||
template = "https://mipmip.github.io/home-manager-option-search";
|
||||
params = [
|
||||
{
|
||||
name = "query";
|
||||
value = "{searchTerms}";
|
||||
}
|
||||
{
|
||||
name = "release";
|
||||
value = "master";
|
||||
}
|
||||
];
|
||||
}
|
||||
];
|
||||
|
||||
icon = "/run/current-system/sw/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
|
||||
|
||||
definedAliases = [ "@ho" ];
|
||||
};
|
||||
|
||||
"NixOS Wiki" = {
|
||||
urls = [
|
||||
{
|
||||
template = "https://nixos.wiki/index.php?search={searchTerms}";
|
||||
}
|
||||
];
|
||||
iconUpdateURL = "https://nixos.wiki/favicon.png";
|
||||
updateInterval = 24 * 60 * 60 * 1000;
|
||||
definedAliases = [ "@nw" ];
|
||||
};
|
||||
|
||||
"Bing".metaData.hidden = true;
|
||||
"Amazon.de".metaData.hidden = true;
|
||||
"Google".metaData = {
|
||||
alias = "@g";
|
||||
hidden = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
bookmarks = [
|
||||
{
|
||||
toolbar = true;
|
||||
bookmarks = [
|
||||
{
|
||||
name = "Home Manager";
|
||||
url = "https://nixos.wiki/wiki/Home_Manager";
|
||||
}
|
||||
{
|
||||
name = "Nix PR Channel Tracker";
|
||||
url = "https://nixpk.gs/pr-tracker.html";
|
||||
}
|
||||
{
|
||||
name = "Chaotic Nix";
|
||||
url = "https://www.nyx.chaotic.cx/";
|
||||
}
|
||||
];
|
||||
}
|
||||
{
|
||||
name = "wikipedia";
|
||||
tags = [ "wiki" ];
|
||||
keyword = "wiki";
|
||||
url = "https://en.wikipedia.org/wiki/Special:Search?search=%s&go=Go";
|
||||
}
|
||||
{
|
||||
name = "kernel.org";
|
||||
url = "https://www.kernel.org";
|
||||
}
|
||||
{
|
||||
name = "Nix sites";
|
||||
bookmarks = [
|
||||
{
|
||||
name = "homepage";
|
||||
url = "https://nixos.org/";
|
||||
}
|
||||
{
|
||||
name = "wiki";
|
||||
tags = [ "wiki" "nix" ];
|
||||
url = "https://nixos.wiki/";
|
||||
}
|
||||
{
|
||||
name = "Nix sites";
|
||||
bookmarks = [
|
||||
{
|
||||
name = "homepage";
|
||||
url = "https://nixos.org/";
|
||||
}
|
||||
{
|
||||
name = "wiki";
|
||||
url = "https://nixos.wiki/";
|
||||
}
|
||||
];
|
||||
}
|
||||
];
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
home.sessionVariables = {
|
||||
BROWSER = "firefox";
|
||||
MOZ_USE_XINPUT2 = "1";
|
||||
MOZ_ENABLE_WAYLAND = "1";
|
||||
};
|
||||
}
|
444
home-mods/plasma/default.nix
Normal file
444
home-mods/plasma/default.nix
Normal file
|
@ -0,0 +1,444 @@
|
|||
{ config
|
||||
, lib
|
||||
, ...
|
||||
}: {
|
||||
programs.plasma = {
|
||||
enable = true;
|
||||
overrideConfig = true; # needed for stylix compat sadly
|
||||
workspace = {
|
||||
theme = "breeze-dark";
|
||||
lookAndFeel = "org.kde.breezedark.desktop";
|
||||
wallpaper = config.stylix.image;
|
||||
# wallpaper = "${config.home.homeDirectory}/Pictures/default_background.png"; set by stylix
|
||||
};
|
||||
panels = [
|
||||
# Windows-like panel at the bottom
|
||||
{
|
||||
location = "bottom";
|
||||
screen = "all";
|
||||
height = 42;
|
||||
widgets = [
|
||||
{
|
||||
name = "org.kde.plasma.kicker";
|
||||
config = {
|
||||
General = {
|
||||
icon = "nix-snowflake";
|
||||
alphaSort = true;
|
||||
showIconsRootLevel = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
{
|
||||
name = "org.kde.plasma.pager";
|
||||
config = {
|
||||
General = {
|
||||
displayedText = "None";
|
||||
showWindowIcons = true;
|
||||
showOnlyCurrentScreen = true;
|
||||
wrapPage = true;
|
||||
currentDesktopSelected = "ShowDesktop";
|
||||
};
|
||||
};
|
||||
}
|
||||
{
|
||||
name = "org.kde.plasma.taskmanager";
|
||||
config = {
|
||||
General = {
|
||||
launchers = [
|
||||
"applications:systemsettings.desktop"
|
||||
"preferred://filemanager"
|
||||
"preferred://browser"
|
||||
"applications:Alacritty.desktop"
|
||||
"applications:emacsclient.desktop"
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
"org.kde.plasma.marginsseparator"
|
||||
{
|
||||
systemTray.items = {
|
||||
shown = [
|
||||
"org.kde.plasma.bluetooth"
|
||||
"org.kde.plasma.volume"
|
||||
"org.kde.plasma.networkmanagement"
|
||||
"org.kde.plasma.battery"
|
||||
];
|
||||
hidden = [ ];
|
||||
};
|
||||
}
|
||||
{
|
||||
digitalClock = {
|
||||
calendar.firstDayOfWeek = "monday";
|
||||
time.format = "24h";
|
||||
};
|
||||
}
|
||||
];
|
||||
hiding = "none";
|
||||
}
|
||||
# Application name, Global menu and Song information and playback controls at the top
|
||||
{
|
||||
location = "top";
|
||||
screen = "all";
|
||||
height = 26;
|
||||
widgets = [
|
||||
{
|
||||
applicationTitleBar = {
|
||||
behavior = {
|
||||
activeTaskSource = "activeTask";
|
||||
};
|
||||
layout = {
|
||||
elements = [ "windowTitle" ];
|
||||
horizontalAlignment = "left";
|
||||
showDisabledElements = "deactivated";
|
||||
verticalAlignment = "center";
|
||||
};
|
||||
overrideForMaximized.enable = false;
|
||||
titleReplacements = [
|
||||
{
|
||||
type = "regexp";
|
||||
originalTitle = "^Brave Web Browser$";
|
||||
newTitle = "Brave";
|
||||
}
|
||||
{
|
||||
type = "regexp";
|
||||
originalTitle = ''\\bDolphin\\b'';
|
||||
newTitle = "File manager";
|
||||
}
|
||||
];
|
||||
windowTitle = {
|
||||
font = {
|
||||
bold = false;
|
||||
fit = "fixedSize";
|
||||
size = 13;
|
||||
};
|
||||
hideEmptyTitle = true;
|
||||
undefinedWindowTitle = "";
|
||||
margins = {
|
||||
bottom = 0;
|
||||
left = 10;
|
||||
right = 5;
|
||||
top = 0;
|
||||
};
|
||||
source = "appName";
|
||||
};
|
||||
};
|
||||
}
|
||||
"org.kde.plasma.appmenu"
|
||||
"org.kde.plasma.panelspacer"
|
||||
{
|
||||
plasmusicToolbar = {
|
||||
panelIcon = {
|
||||
albumCover = {
|
||||
useAsIcon = true;
|
||||
radius = 0;
|
||||
};
|
||||
# icon = "view-media-track";
|
||||
};
|
||||
playbackSource = "spotify";
|
||||
musicControls.showPlaybackControls = true;
|
||||
songText = {
|
||||
displayInSeparateLines = false;
|
||||
maximumWidth = 640;
|
||||
scrolling = {
|
||||
behavior = "alwaysScroll";
|
||||
speed = 3;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
];
|
||||
}
|
||||
];
|
||||
shortcuts = {
|
||||
"KDE Keyboard Layout Switcher"."Switch to Next Keyboard Layout" = "Meta+Alt+K";
|
||||
"kaccess"."Toggle Screen Reader On and Off" = "Meta+Alt+S";
|
||||
"kcm_touchpad"."Disable Touchpad" = "Touchpad Off";
|
||||
"kcm_touchpad"."Enable Touchpad" = "Touchpad On";
|
||||
"kcm_touchpad"."Toggle Touchpad" = [ "Touchpad Toggle" "Meta+Ctrl+Zenkaku Hankaku" ];
|
||||
"kded5"."Show System Activity" = "Ctrl+Esc";
|
||||
"kded5"."display" = [ "Display" "Meta+P" ];
|
||||
"kmix"."decrease_microphone_volume" = "Microphone Volume Down";
|
||||
"kmix"."decrease_volume" = "Volume Down";
|
||||
"kmix"."decrease_volume_small" = "Shift+Volume Down";
|
||||
"kmix"."increase_microphone_volume" = "Microphone Volume Up";
|
||||
"kmix"."increase_volume" = "Volume Up";
|
||||
"kmix"."increase_volume_small" = "Shift+Volume Up";
|
||||
"kmix"."mic_mute" = [ "Microphone Mute" "Meta+Volume Mute" ];
|
||||
"kmix"."mute" = "Volume Mute";
|
||||
"ksmserver"."Lock Session" = [ "Meta+L" "Screensaver" ];
|
||||
"ksmserver"."Log Out" = "Ctrl+Alt+Del";
|
||||
"kwin"."Activate Window Demanding Attention" = "Meta+Ctrl+A";
|
||||
"kwin"."ClearLastMouseMark" = "Meta+Shift+F12";
|
||||
"kwin"."ClearMouseMarks" = "Meta+Shift+F11";
|
||||
"kwin"."Cube" = [ "Meta+C" "Meta+Space" ];
|
||||
"kwin"."Edit Tiles" = "Meta+T";
|
||||
"kwin"."Expose" = "Ctrl+F9";
|
||||
"kwin"."ExposeAll" = [ "Ctrl+F10" "Launch (C)" ];
|
||||
"kwin"."ExposeClass" = "Ctrl+F7";
|
||||
"kwin"."Grid View" = "Meta+G";
|
||||
"kwin"."Invert" = "Meta+Ctrl+I";
|
||||
"kwin"."InvertWindow" = "Meta+Ctrl+U";
|
||||
"kwin"."Kill Window" = "Meta+Ctrl+Esc";
|
||||
"kwin"."MoveMouseToCenter" = "Meta+F6";
|
||||
"kwin"."MoveMouseToFocus" = "Meta+F5";
|
||||
"kwin"."Overview" = "Meta+W";
|
||||
"kwin"."Show Desktop" = "Meta+D";
|
||||
"kwin"."ShowDesktopGrid" = "Meta+F8";
|
||||
"kwin"."Suspend Compositing" = "Alt+Shift+F12";
|
||||
"kwin"."Switch Window Down" = "Meta+Alt+Down";
|
||||
"kwin"."Switch Window Left" = "Meta+Alt+Left";
|
||||
"kwin"."Switch Window Right" = "Meta+Alt+Right";
|
||||
"kwin"."Switch Window Up" = "Meta+Alt+Up";
|
||||
"kwin"."Switch One Desktop Down" = "Meta+Ctrl+Down";
|
||||
"kwin"."Switch One Desktop Up" = "Meta+Ctrl+Up";
|
||||
"kwin"."Switch One Desktop to the Left" = "Meta+Ctrl+Left";
|
||||
"kwin"."Switch One Desktop to the Right" = "Meta+Ctrl+Right";
|
||||
"kwin"."Switch to Desktop 1" = "Ctrl+F1";
|
||||
"kwin"."Switch to Desktop 2" = "Ctrl+F2";
|
||||
"kwin"."Switch to Desktop 3" = "Ctrl+F3";
|
||||
"kwin"."Switch to Desktop 4" = "Ctrl+F4";
|
||||
"kwin"."ToggleCurrentThumbnail" = "Meta+Ctrl+T";
|
||||
"kwin"."ToggleMouseClick" = "Meta+*";
|
||||
"kwin"."Walk Through Windows" = "Alt+Tab";
|
||||
"kwin"."Walk Through Windows (Reverse)" = "Alt+Shift+Backtab";
|
||||
"kwin"."Walk Through Windows of Current Application" = "Alt+`";
|
||||
"kwin"."Walk Through Windows of Current Application (Reverse)" = "Alt+~";
|
||||
"kwin"."Window Close" = "Alt+F4";
|
||||
"kwin"."Window Maximize" = "Meta+PgUp";
|
||||
"kwin"."Window Minimize" = "Meta+PgDown";
|
||||
"kwin"."Window One Desktop Down" = "Meta+Ctrl+Shift+Down";
|
||||
"kwin"."Window One Desktop Up" = "Meta+Ctrl+Shift+Up";
|
||||
"kwin"."Window One Desktop to the Left" = "Meta+Ctrl+Shift+Left";
|
||||
"kwin"."Window One Desktop to the Right" = "Meta+Ctrl+Shift+Right";
|
||||
"kwin"."Window Operations Menu" = "Alt+F3";
|
||||
"kwin"."Window Quick Tile Bottom" = "Meta+Down";
|
||||
"kwin"."Window Quick Tile Left" = "Meta+Left";
|
||||
"kwin"."Window Quick Tile Right" = "Meta+Right";
|
||||
"kwin"."Window Quick Tile Top" = "Meta+Up";
|
||||
"kwin"."Window to Next Screen" = "Meta+Shift+Right";
|
||||
"kwin"."Window to Previous Screen" = "Meta+Shift+Left";
|
||||
"kwin"."view_actual_size" = "Meta+0";
|
||||
"kwin"."view_zoom_in" = [ "Meta++" "Meta+=" ];
|
||||
"kwin"."view_zoom_out" = "Meta+-";
|
||||
"mediacontrol"."nextmedia" = "Media Next";
|
||||
"mediacontrol"."pausemedia" = "Media Pause";
|
||||
"mediacontrol"."playpausemedia" = "Media Play";
|
||||
"mediacontrol"."previousmedia" = "Media Previous";
|
||||
"mediacontrol"."stopmedia" = "Media Stop";
|
||||
"org.kde.dolphin.desktop"."_launch" = "Meta+E";
|
||||
"org.kde.konsole.desktop"."_launch" = "Ctrl+Alt+T";
|
||||
"org.kde.krunner.desktop"."RunClipboard" = "Alt+Shift+F2";
|
||||
"org.kde.krunner.desktop"."_launch" = [ "Alt+Space" "Alt+F2" "Search" ];
|
||||
"org.kde.plasma.emojier.desktop"."_launch" = [ "Meta+." "Meta+Ctrl+Alt+Shift+Space" ];
|
||||
"org.kde.spectacle.desktop"."ActiveWindowScreenShot" = "Meta+Print";
|
||||
"org.kde.spectacle.desktop"."FullScreenScreenShot" = "Shift+Print";
|
||||
"org.kde.spectacle.desktop"."RectangularRegionScreenShot" = "Meta+Shift+Print";
|
||||
"org.kde.spectacle.desktop"."WindowUnderCursorScreenShot" = "Meta+Ctrl+Print";
|
||||
"org.kde.spectacle.desktop"."_launch" = "Print";
|
||||
"org_kde_powerdevil"."Decrease Keyboard Brightness" = "Keyboard Brightness Down";
|
||||
"org_kde_powerdevil"."Decrease Screen Brightness" = "Monitor Brightness Down";
|
||||
"org_kde_powerdevil"."Hibernate" = "Hibernate";
|
||||
"org_kde_powerdevil"."Increase Keyboard Brightness" = "Keyboard Brightness Up";
|
||||
"org_kde_powerdevil"."Increase Screen Brightness" = "Monitor Brightness Up";
|
||||
"org_kde_powerdevil"."PowerDown" = "Power Down";
|
||||
"org_kde_powerdevil"."PowerOff" = "Power Off";
|
||||
"org_kde_powerdevil"."Sleep" = "Sleep";
|
||||
"org_kde_powerdevil"."Toggle Keyboard Backlight" = "Keyboard Light On/Off";
|
||||
"plasmashell"."activate task manager entry 1" = "Meta+1";
|
||||
"plasmashell"."activate task manager entry 2" = "Meta+2";
|
||||
"plasmashell"."activate task manager entry 3" = "Meta+3";
|
||||
"plasmashell"."activate task manager entry 4" = "Meta+4";
|
||||
"plasmashell"."activate task manager entry 5" = "Meta+5";
|
||||
"plasmashell"."activate task manager entry 6" = "Meta+6";
|
||||
"plasmashell"."activate task manager entry 7" = "Meta+7";
|
||||
"plasmashell"."activate task manager entry 8" = "Meta+8";
|
||||
"plasmashell"."activate task manager entry 9" = "Meta+9";
|
||||
"plasmashell"."clipboard_action" = "Meta+Ctrl+X";
|
||||
"plasmashell"."cycle-panels" = "Meta+Alt+P";
|
||||
"plasmashell"."manage activities" = "Meta+Q";
|
||||
"plasmashell"."next activity" = "Meta+Tab";
|
||||
"plasmashell"."previous activity" = "Meta+Shift+Tab";
|
||||
"plasmashell"."repeat_action" = "Meta+Ctrl+R";
|
||||
"plasmashell"."show dashboard" = "Ctrl+F12";
|
||||
"plasmashell"."show-on-mouse-pos" = "Meta+V";
|
||||
"plasmashell"."stop current activity" = "Meta+S";
|
||||
"systemsettings.desktop"."_launch" = "Tools";
|
||||
};
|
||||
configFile = {
|
||||
"powerdevilrc" = {
|
||||
"AC/Display" = {
|
||||
TurnOffDisplayIdleTimeoutSec = lib.mkForce (-1);
|
||||
TurnOffDisplayWhenIdle = lib.mkForce false;
|
||||
};
|
||||
|
||||
"AC/SuspendAndShutdown" = {
|
||||
AutoSuspendAction = lib.mkForce 0;
|
||||
AutoSuspendIdleTimeoutSec = lib.mkForce 7200;
|
||||
LidAction = lib.mkForce 0;
|
||||
};
|
||||
"Battery/SuspendAndShutdown".SleepMode = lib.mkForce 2;
|
||||
"LowBattery/SuspendAndShutdown".SleepMode = lib.mkForce 3;
|
||||
|
||||
"AC/Performance".PowerProfile = lib.mkForce "performance";
|
||||
"Battery/Performance".PowerProfile = lib.mkForce "power-saver";
|
||||
"LowBattery/Performance".PowerProfile = lib.mkForce "power-saver";
|
||||
};
|
||||
"baloofilerc"."Basic Settings"."Indexing-Enabled" = false;
|
||||
"baloofilerc"."General"."dbVersion".value = 2;
|
||||
"baloofilerc"."General"."exclude filters".value = "*~,*.part,*.o,*.la,*.lo,*.loT,*.moc,moc_*.cpp,qrc_*.cpp,ui_*.h,cmake_install.cmake,CMakeCache.txt,CTestTestfile.cmake,libtool,config.status,confdefs.h,autom4te,conftest,confstat,Makefile.am,*.gcode,.ninja_deps,.ninja_log,build.ninja,*.csproj,*.m4,*.rej,*.gmo,*.pc,*.omf,*.aux,*.tmp,*.po,*.vm*,*.nvram,*.rcore,*.swp,*.swap,lzo,litmain.sh,*.orig,.histfile.*,.xsession-errors*,*.map,*.so,*.a,*.db,*.qrc,*.ini,*.init,*.img,*.vdi,*.vbox*,vbox.log,*.qcow2,*.vmdk,*.vhd,*.vhdx,*.sql,*.sql.gz,*.ytdl,*.class,*.pyc,*.pyo,*.elc,*.qmlc,*.jsc,*.fastq,*.fq,*.gb,*.fasta,*.fna,*.gbff,*.faa,po,CVS,.svn,.git,_darcs,.bzr,.hg,CMakeFiles,CMakeTmp,CMakeTmpQmake,.moc,.obj,.pch,.uic,.npm,.yarn,.yarn-cache,__pycache__,node_modules,node_packages,nbproject,.venv,venv,core-dumps,lost+found";
|
||||
"baloofilerc"."General"."exclude filters version".value = 8;
|
||||
"dolphinrc"."KFileDialog Settings"."Places Icons Auto-resize".value = false;
|
||||
"dolphinrc"."KFileDialog Settings"."Places Icons Static Size".value = 22;
|
||||
"kactivitymanagerdrc"."activities"."03741afe-0c0e-413a-9f8a-09600a7684e2".value = "Default";
|
||||
"kactivitymanagerdrc"."main"."currentActivity".value = "03741afe-0c0e-413a-9f8a-09600a7684e2";
|
||||
|
||||
# Disable broken mousewheel
|
||||
|
||||
"kcminputrc"."Libinput/1130/49431/Cherry GmbH CHERRY Wireless Device Consumer Control"."ScrollFactor" = 0.0;
|
||||
"kcminputrc"."Libinput/1130/49431/Cherry GmbH CHERRY Wireless Device Mouse"."ScrollFactor" = 0.0;
|
||||
"kcminputrc"."Libinput/1671/49433/CHERRY MW 8C ADVANCED"."ScrollFactor" = 0.0;
|
||||
"kcminputrc"."Libinput/1130/49431/input-remapper Cherry GmbH CHERRY Wireless Device Mouse forwarded"."ScrollFactor" = 0.0;
|
||||
|
||||
"kcminputrc"."Libinput.2362.597.UNIW0001:00 093A:0255 Touchpad"."ClickMethod".value = 2;
|
||||
"kcminputrc"."Libinput.2362.597.UNIW0001:00 093A:0255 Touchpad"."Enabled".value = true;
|
||||
"kcminputrc"."Libinput.2362.597.UNIW0001:00 093A:0255 Touchpad"."TapToClick".value = true;
|
||||
"kcminputrc"."Mouse"."X11LibInputXAccelProfileFlat".value = false;
|
||||
"kcminputrc"."Tmp"."update_info".value = "delete_cursor_old_default_size.upd:DeleteCursorOldDefaultSize";
|
||||
"kded5rc"."Module-appmenu"."autoload".value = true;
|
||||
"kded5rc"."Module-baloosearchmodule"."autoload".value = true;
|
||||
"kded5rc"."Module-bluedevil"."autoload".value = true;
|
||||
"kded5rc"."Module-browserintegrationreminder"."autoload".value = false;
|
||||
"kded5rc"."Module-colorcorrectlocationupdater"."autoload".value = true;
|
||||
"kded5rc"."Module-device_automounter"."autoload".value = false;
|
||||
"kded5rc"."Module-freespacenotifier"."autoload".value = true;
|
||||
"kded5rc"."Module-gtkconfig"."autoload".value = true;
|
||||
"kded5rc"."Module-inotify"."autoload".value = true;
|
||||
"kded5rc"."Module-kded_touchpad"."autoload".value = true;
|
||||
"kded5rc"."Module-keyboard"."autoload".value = true;
|
||||
"kded5rc"."Module-khotkeys"."autoload".value = true;
|
||||
"kded5rc"."Module-kscreen"."autoload".value = true;
|
||||
"kded5rc"."Module-ksysguard"."autoload".value = true;
|
||||
"kded5rc"."Module-ktimezoned"."autoload".value = true;
|
||||
"kded5rc"."Module-networkmanagement"."autoload".value = true;
|
||||
"kded5rc"."Module-networkstatus"."autoload".value = true;
|
||||
"kded5rc"."Module-plasma_accentcolor_service"."autoload".value = true;
|
||||
"kded5rc"."Module-printmanager"."autoload".value = true;
|
||||
"kded5rc"."Module-proxyscout"."autoload".value = true;
|
||||
"kded5rc"."Module-remotenotifier"."autoload".value = true;
|
||||
"kded5rc"."Module-smbwatcher"."autoload".value = true;
|
||||
"kded5rc"."Module-statusnotifierwatcher"."autoload".value = true;
|
||||
"kded5rc"."PlasmaBrowserIntegration"."shownCount".value = 4;
|
||||
"kdeglobals"."General"."TerminalApplication".value = "alacritty";
|
||||
"kdeglobals"."General"."TerminalService".value = "Alacritty.desktop";
|
||||
"kdeglobals"."General"."AccentColor".value = "233,100,58";
|
||||
"kdeglobals"."General"."BrowserApplication".value = "firefox.desktop";
|
||||
"kdeglobals"."General"."LastUsedCustomAccentColor".value = "233,100,58";
|
||||
"kdeglobals"."General"."XftHintStyle".value = "hintmedium";
|
||||
"kdeglobals"."General"."XftSubPixel".value = "rgb";
|
||||
"kdeglobals"."General"."font".value = "Iosevka Nerd Font Propo,11,-1,5,63,0,0,0,0,0,SemiBold";
|
||||
"kdeglobals"."General"."fixed".value = "Iosevka Nerd Font Mono,10,-1,5,50,0,0,0,0,0";
|
||||
"kdeglobals"."General"."menuFont".value = "Iosevka Nerd Font Propo,11,-1,5,63,0,0,0,0,0,SemiBold";
|
||||
"kdeglobals"."General"."smallestReadableFont".value = "Iosevka Nerd Font Propo,8,-1,5,63,0,0,0,0,0,SemiBold";
|
||||
"kdeglobals"."General"."toolBarFont".value = "Iosevka Nerd Font Propo,11,-1,5,63,0,0,0,0,0,SemiBold";
|
||||
"kdeglobals"."KDE"."AnimationDurationFactor".value = 0.35;
|
||||
"kdeglobals"."KDE"."SingleClick".value = true;
|
||||
"kdeglobals"."KDE"."widgetStyle".value = "Breeze";
|
||||
"kdeglobals"."KFileDialog Settings"."Allow Expansion".value = false;
|
||||
"kdeglobals"."KFileDialog Settings"."Automatically select filename extension".value = true;
|
||||
"kdeglobals"."KFileDialog Settings"."Breadcrumb Navigation".value = false;
|
||||
"kdeglobals"."KFileDialog Settings"."Decoration position".value = 2;
|
||||
"kdeglobals"."KFileDialog Settings"."LocationCombo Completionmode".value = 5;
|
||||
"kdeglobals"."KFileDialog Settings"."PathCombo Completionmode".value = 5;
|
||||
"kdeglobals"."KFileDialog Settings"."Show Bookmarks".value = false;
|
||||
"kdeglobals"."KFileDialog Settings"."Show Full Path".value = false;
|
||||
"kdeglobals"."KFileDialog Settings"."Show Inline Previews".value = true;
|
||||
"kdeglobals"."KFileDialog Settings"."Show Preview".value = false;
|
||||
"kdeglobals"."KFileDialog Settings"."Show Speedbar".value = true;
|
||||
"kdeglobals"."KFileDialog Settings"."Show hidden files".value = true;
|
||||
"kdeglobals"."KFileDialog Settings"."Sort by".value = "Name";
|
||||
"kdeglobals"."KFileDialog Settings"."Sort directories first".value = true;
|
||||
"kdeglobals"."KFileDialog Settings"."Sort hidden files last".value = false;
|
||||
"kdeglobals"."KFileDialog Settings"."Sort reversed".value = false;
|
||||
"kdeglobals"."KFileDialog Settings"."Speedbar Width".value = 138;
|
||||
"kdeglobals"."KFileDialog Settings"."View Style".value = "DetailTree";
|
||||
"kdeglobals"."KShortcutsDialog Settings"."Dialog Size".value = "600,480";
|
||||
"kdeglobals"."WM"."activeBackground".value = "39,39,39";
|
||||
"kdeglobals"."WM"."activeBlend".value = "235,219,178";
|
||||
"kdeglobals"."WM"."activeForeground".value = "235,219,178";
|
||||
"kdeglobals"."WM"."inactiveBackground".value = "40,40,40";
|
||||
"kdeglobals"."WM"."inactiveBlend".value = "60,56,54";
|
||||
"kdeglobals"."WM"."inactiveForeground".value = "204,190,155";
|
||||
"kglobalshortcutsrc"."ActivityManager"."_k_friendly_name".value = "Activity Manager";
|
||||
"kglobalshortcutsrc"."KDE Keyboard Layout Switcher"."_k_friendly_name".value = "Keyboard Layout Switcher";
|
||||
"kglobalshortcutsrc"."kaccess"."_k_friendly_name".value = "Accessibility";
|
||||
"kglobalshortcutsrc"."kcm_touchpad"."_k_friendly_name".value = "Touchpad";
|
||||
"kglobalshortcutsrc"."kded5"."_k_friendly_name".value = "KDE Daemon";
|
||||
"kglobalshortcutsrc"."khotkeys"."_k_friendly_name".value = "Custom Shortcuts Service";
|
||||
"kglobalshortcutsrc"."kmix"."_k_friendly_name".value = "Audio Volume";
|
||||
"kglobalshortcutsrc"."ksmserver"."_k_friendly_name".value = "Session Management";
|
||||
"kglobalshortcutsrc"."kwin"."_k_friendly_name".value = "KWin";
|
||||
"kglobalshortcutsrc"."mediacontrol"."_k_friendly_name".value = "Media Controller";
|
||||
"kglobalshortcutsrc"."org.kde.dolphin.desktop"."_k_friendly_name".value = "Dolphin";
|
||||
"kglobalshortcutsrc"."org.kde.konsole.desktop"."_k_friendly_name".value = "Konsole";
|
||||
"kglobalshortcutsrc"."org.kde.krunner.desktop"."_k_friendly_name".value = "KRunner";
|
||||
"kglobalshortcutsrc"."org.kde.plasma.emojier.desktop"."_k_friendly_name".value = "Emoji Selector";
|
||||
"kglobalshortcutsrc"."org.kde.spectacle.desktop"."_k_friendly_name".value = "Spectacle";
|
||||
"kglobalshortcutsrc"."org_kde_powerdevil"."_k_friendly_name".value = "Power Management";
|
||||
"kglobalshortcutsrc"."plasmashell"."_k_friendly_name".value = "Plasma";
|
||||
"kglobalshortcutsrc"."systemsettings.desktop"."_k_friendly_name".value = "System Settings";
|
||||
"kiorc"."Confirmations"."ConfirmDelete".value = false;
|
||||
"kiorc"."Confirmations"."ConfirmEmptyTrash".value = false;
|
||||
"ksplashrc"."KSplash"."Engine".value = "none";
|
||||
"kwalletrc"."Auto Allow"."kdewallet".value = "kded5,kiod5,kwalletmanager5,Brave,Nextcloud";
|
||||
"kwalletrc"."Wallet"."Close When Idle".value = false;
|
||||
"kwalletrc"."Wallet"."Close on Screensaver".value = false;
|
||||
"kwalletrc"."Wallet"."Default Wallet".value = "kdewallet";
|
||||
"kwalletrc"."Wallet"."Enabled".value = true;
|
||||
"kwalletrc"."Wallet"."First Use".value = false;
|
||||
"kwalletrc"."Wallet"."Idle Timeout".value = 10;
|
||||
"kwalletrc"."Wallet"."Launch Manager".value = true;
|
||||
"kwalletrc"."Wallet"."Leave Manager Open".value = false;
|
||||
"kwalletrc"."Wallet"."Leave Open".value = true;
|
||||
"kwalletrc"."Wallet"."Prompt on Open".value = true;
|
||||
"kwalletrc"."Wallet"."Use One Wallet".value = true;
|
||||
"kwalletrc"."org.freedesktop.secrets"."apiEnabled".value = true;
|
||||
"kwinrc"."Compositing"."LatencyPolicy".value = "Medium";
|
||||
"kwinrc"."Desktops"."Id_1".value = "6b86c814-0a63-4a66-83aa-8f923109b8dc";
|
||||
"kwinrc"."Desktops"."Id_2".value = "51266a99-9eeb-4a62-a7f1-8b9ddedc5296";
|
||||
"kwinrc"."Desktops"."Id_3".value = "7b7d4799-86fe-4b40-8951-1eac646f2707";
|
||||
"kwinrc"."Desktops"."Id_4".value = "686aa552-08df-4324-89fd-6f327fc70802";
|
||||
"kwinrc"."Desktops"."Id_5".value = "4bed024c-ec67-426b-8155-30ea753b0bda";
|
||||
"kwinrc"."Desktops"."Id_6".value = "dd242c1f-ba7d-4660-96ee-2e39899021bb";
|
||||
"kwinrc"."Desktops"."Id_7".value = "f9c5fd26-edbc-4d01-9c81-2ea3902c298a";
|
||||
"kwinrc"."Desktops"."Id_8".value = "872f161b-e13e-41eb-a46d-41934fe09083";
|
||||
"kwinrc"."Desktops"."Id_9".value = "223607a5-d111-4e70-94a7-0f989dfd53d4";
|
||||
"kwinrc"."Desktops"."Number".value = 9;
|
||||
"kwinrc"."Desktops"."Rows".value = 3;
|
||||
"kwinrc"."Effect-cube"."BorderActivate".value = 5;
|
||||
"kwinrc"."Effect-cube"."DistanceFactor".value = 1.65;
|
||||
"kwinrc"."Plugins"."cubeEnabled".value = true;
|
||||
"kwinrc"."Plugins"."desktopchangeosdEnabled".value = true;
|
||||
"kwinrc"."Plugins"."glideEnabled".value = true;
|
||||
"kwinrc"."Plugins"."scaleEnabled".value = false;
|
||||
"kwinrc"."Plugins"."shakecursorEnabled".value = true;
|
||||
"kwinrc"."Plugins"."kwin4_effect_fadeEnabled".value = true;
|
||||
"kwinrc"."Plugins"."kwin4_effect_scaleEnabled".value = false;
|
||||
"kwinrc"."Plugins"."kwin4_effect_squashEnabled".value = false;
|
||||
"kwinrc"."Plugins"."magiclampEnabled".value = true;
|
||||
"kwinrc"."Plugins"."mouseclickEnabled".value = true;
|
||||
"kwinrc"."Plugins"."sheetEnabled".value = true;
|
||||
"kwinrc"."Plugins"."wobblywindowsEnabled".value = true;
|
||||
"kwinrc"."Tiling"."padding".value = 4;
|
||||
"kwinrc"."Windows"."RollOverDesktops".value = true;
|
||||
"kwinrc"."Xwayland"."Scale".value = 1.25;
|
||||
"kxkbrc"."Layout"."Options".value = "caps:ctrl_modifier";
|
||||
"kxkbrc"."Layout"."ResetOldOptions".value = true;
|
||||
"plasma-localerc"."Formats"."LANG".value = "en_US.UTF-8";
|
||||
"plasmarc"."Wallpapers"."usersWallpapers".value = "";
|
||||
# "plasmarc"."Theme"."name".value = "breeze-dark";
|
||||
"krunnerrc"."General"."FreeFloating".value = true;
|
||||
#"kscreenlockerrc"."Greeter.Wallpaper.org.kde.image.General"."Image".value = "/home/tristand/.background";
|
||||
#"kscreenlockerrc"."Greeter.Wallpaper.org.kde.image.General"."PreviewImage".value = "/home/tristand/.background"; # TODO rework this with static wallpaper
|
||||
};
|
||||
};
|
||||
}
|
400
home-mods/shell/default.nix
Normal file
400
home-mods/shell/default.nix
Normal file
|
@ -0,0 +1,400 @@
|
|||
{ self
|
||||
, config
|
||||
, pkgs
|
||||
, lib
|
||||
, inputs
|
||||
, ...
|
||||
}:
|
||||
let
|
||||
doomemacsSrc = builtins.fetchGit {
|
||||
url = "https://github.com/doomemacs/doomemacs";
|
||||
ref = "master";
|
||||
rev = "2bc052425ca45a41532be0648ebd976d1bd2e6c1";
|
||||
};
|
||||
neofetchThemesSrc = builtins.fetchGit {
|
||||
url = "https://github.com/Chick2D/neofetch-themes";
|
||||
ref = "main";
|
||||
rev = "c7392136bed264258c9b8788b14410e1ff06d602";
|
||||
};
|
||||
myEmacs = (pkgs.emacsPackagesFor pkgs.emacs-unstable-pgtk).emacsWithPackages (epkgs:
|
||||
with epkgs; [
|
||||
vterm
|
||||
treesit-grammars.with-all-grammars
|
||||
]);
|
||||
in
|
||||
{
|
||||
programs = {
|
||||
alacritty = {
|
||||
enable = true;
|
||||
settings = {
|
||||
window.dimensions = {
|
||||
lines = 40;
|
||||
columns = 150;
|
||||
};
|
||||
};
|
||||
};
|
||||
bash = {
|
||||
enable = true;
|
||||
enableVteIntegration = true;
|
||||
};
|
||||
btop.enable = true;
|
||||
direnv.enable = true;
|
||||
|
||||
fd.enable = true;
|
||||
fzf.enable = true;
|
||||
lsd = {
|
||||
enable = true;
|
||||
enableAliases = true;
|
||||
};
|
||||
|
||||
fish = {
|
||||
enable = true;
|
||||
package = pkgs.fish;
|
||||
|
||||
interactiveShellInit = lib.mkOrder 199 ''
|
||||
############################################
|
||||
# Adds a seperating arrow inbetween commands
|
||||
# ~ ls <----------- at 12:12
|
||||
# some home folders
|
||||
# ~ echo 123 <----------- at 12:13
|
||||
# 123
|
||||
# ~ _
|
||||
############################################
|
||||
function starship_transient_rprompt_func
|
||||
set width "$(calc "($(tput cols)-12)/2")"
|
||||
echo -n " <"
|
||||
string repeat -n$width ─
|
||||
echo -n " "
|
||||
starship module time
|
||||
end
|
||||
|
||||
any-nix-shell fish --info-right | source
|
||||
if test -z $INSIDE_EMACS && test $TERM != linux ;
|
||||
eval (${pkgs.zellij}/bin/zellij setup --generate-auto-start fish | string collect)
|
||||
end
|
||||
|
||||
cat /var/lib/rust-motd/motd
|
||||
'';
|
||||
loginShellInit = ''
|
||||
'';
|
||||
|
||||
functions = {
|
||||
ec = "emacsclient $argv";
|
||||
ecc = "emacsclient -c $argv";
|
||||
ecr = "emacsclient -r $argv";
|
||||
ecrr = "emacsclient -r $argv";
|
||||
};
|
||||
plugins = [
|
||||
{
|
||||
name = "sponge";
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "meaningful-ooo";
|
||||
repo = "sponge";
|
||||
rev = "384299545104d5256648cee9d8b117aaa9a6d7be";
|
||||
sha256 = "31d71950346d349762ca8da5f68e666bb9c05fce311096c616101584af999b5c";
|
||||
};
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
git = {
|
||||
enable = true;
|
||||
userName = "Tristan Druyen";
|
||||
userEmail = "tristan@vault81.de";
|
||||
lfs = {
|
||||
enable = true;
|
||||
};
|
||||
aliases = {
|
||||
ci = "commit";
|
||||
co = "checkout";
|
||||
s = "status";
|
||||
};
|
||||
extraConfig = {
|
||||
user.signingkey = "${config.home.homeDirectory}/.ssh/id_ed25519";
|
||||
commit.gpgsign = true;
|
||||
gpg.format = "ssh";
|
||||
};
|
||||
package = pkgs.git;
|
||||
};
|
||||
|
||||
lazygit.enable = true;
|
||||
|
||||
jujutsu = {
|
||||
enable = true;
|
||||
settings = {
|
||||
user = {
|
||||
email = "tristan@vault81.de";
|
||||
name = "Tristan Druyen";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
nix-index = {
|
||||
enable = true;
|
||||
enableFishIntegration = true;
|
||||
};
|
||||
pandoc.enable = true;
|
||||
|
||||
rbw = {
|
||||
enable = true;
|
||||
settings = {
|
||||
base_url = "https://bw.vlt81.de";
|
||||
email = "tristandruyen@vault81.de";
|
||||
};
|
||||
};
|
||||
|
||||
starship = {
|
||||
enable = true;
|
||||
package = pkgs.starship;
|
||||
enableTransience = true;
|
||||
settings = {
|
||||
format = lib.concatStrings [
|
||||
"$username"
|
||||
"$hostname"
|
||||
"$localip"
|
||||
"$directory"
|
||||
"$vcsh"
|
||||
"$fossil_branch"
|
||||
"$fossil_metrics"
|
||||
"$git_branch"
|
||||
"$git_commit"
|
||||
"$git_state"
|
||||
"$git_metrics"
|
||||
"$git_status"
|
||||
"$docker_context"
|
||||
"$package"
|
||||
"$c"
|
||||
"$cmake"
|
||||
"$cobol"
|
||||
"$daml"
|
||||
"$dart"
|
||||
"$deno"
|
||||
"$dotnet"
|
||||
"$elixir"
|
||||
"$elm"
|
||||
"$erlang"
|
||||
"$fennel"
|
||||
"$gleam"
|
||||
"$golang"
|
||||
"$haskell"
|
||||
"$haxe"
|
||||
"$helm"
|
||||
"$java"
|
||||
"$julia"
|
||||
"$kotlin"
|
||||
"$lua"
|
||||
"$nim"
|
||||
"$nodejs"
|
||||
"$ocaml"
|
||||
"$opa"
|
||||
"$perl"
|
||||
"$php"
|
||||
"$python"
|
||||
"$rlang"
|
||||
"$red"
|
||||
"$ruby"
|
||||
"$rust"
|
||||
"$scala"
|
||||
"$solidity"
|
||||
"$swift"
|
||||
"$terraform"
|
||||
"$typst"
|
||||
"$vlang"
|
||||
"$vagrant"
|
||||
"$zig"
|
||||
"$buf"
|
||||
"$nix_shell"
|
||||
"$conda"
|
||||
"$spack"
|
||||
"$memory_usage"
|
||||
"$aws"
|
||||
"$gcloud"
|
||||
"$openstack"
|
||||
"$azure"
|
||||
"$nats"
|
||||
"$direnv"
|
||||
"$env_var"
|
||||
"$crystal"
|
||||
"$custom"
|
||||
"$sudo"
|
||||
"$cmd_duration"
|
||||
"$line_break"
|
||||
"$jobs"
|
||||
"$battery"
|
||||
"$status"
|
||||
"$os"
|
||||
"$container"
|
||||
"$shell"
|
||||
"$shlvl"
|
||||
"$character"
|
||||
];
|
||||
direnv.disabled = false;
|
||||
memory_usage.disabled = false;
|
||||
shlvl = {
|
||||
disabled = false;
|
||||
format = "[$symbol]($style)";
|
||||
repeat = true;
|
||||
symbol = "❯";
|
||||
repeat_offset = 2;
|
||||
threshold = 0;
|
||||
};
|
||||
time.disabled = false;
|
||||
};
|
||||
};
|
||||
|
||||
ssh = {
|
||||
enable = true;
|
||||
addKeysToAgent = "yes";
|
||||
hashKnownHosts = true;
|
||||
|
||||
extraOptionOverrides = {
|
||||
VerifyHostKeyDNS = "ask";
|
||||
};
|
||||
package = pkgs.openssh;
|
||||
|
||||
matchBlocks = {
|
||||
"he4" = {
|
||||
host = "he4";
|
||||
hostname = "he4.vault81.de";
|
||||
user = "tristand";
|
||||
identityFile = "~/.ssh/id_ed25519";
|
||||
};
|
||||
"he2" = {
|
||||
host = "he2";
|
||||
hostname = "he2.vault81.de";
|
||||
user = "root";
|
||||
identityFile = "~/.ssh/id_v81_ed25519";
|
||||
};
|
||||
# "nixos-desk" = {
|
||||
# host = "nixos-desk";
|
||||
# hostname = "nixos-desk";
|
||||
# user = "tristand";
|
||||
# identityFile = "~/.ssh/id_v81_ed25519";
|
||||
# };
|
||||
};
|
||||
};
|
||||
|
||||
gpg.enable = true;
|
||||
|
||||
ripgrep = {
|
||||
enable = true;
|
||||
package = pkgs.ripgrep.override { withPCRE2 = true; };
|
||||
};
|
||||
|
||||
zellij = {
|
||||
enable = true;
|
||||
enableFishIntegration = false;
|
||||
};
|
||||
|
||||
zoxide.enable = true;
|
||||
# zed-editor = {
|
||||
# enable = true;
|
||||
# };
|
||||
};
|
||||
|
||||
services = {
|
||||
ssh-agent.enable = true;
|
||||
gpg-agent = {
|
||||
enable = false;
|
||||
# enable = true; # misbehaving atm
|
||||
|
||||
enableExtraSocket = true;
|
||||
# enableSshSupport = true;
|
||||
enableSshSupport = false;
|
||||
pinentryPackage = lib.mkForce pkgs.pinentry-qt;
|
||||
};
|
||||
lorri.enable = true;
|
||||
|
||||
emacs = {
|
||||
enable = true;
|
||||
defaultEditor = true;
|
||||
package = myEmacs;
|
||||
socketActivation.enable = true;
|
||||
};
|
||||
};
|
||||
|
||||
home = {
|
||||
activation.setupEmacs = lib.hm.dag.entryAfter [ "writeBoundary" ] ''
|
||||
mkdir ~/.config/emacs -p
|
||||
chmod u+rw -R ~/.config/emacs
|
||||
cp -r ${doomemacsSrc}/. "$HOME/.config/emacs"
|
||||
'';
|
||||
activation.setupNeofetch = lib.hm.dag.entryAfter [ "writeBoundary" ] ''
|
||||
mkdir ~/.config/neofetch -p
|
||||
chmod u+rw -R ~/.config/neofetch
|
||||
cp ${neofetchThemesSrc}/normal/acenoster.conf "$HOME/.config/neofetch/config.conf"
|
||||
'';
|
||||
|
||||
file.".config/doom" = {
|
||||
recursive = true;
|
||||
source = ../../ext/doom;
|
||||
# onChange = "${config.home.homeDirectory}/.config/emacs/bin/doom sync";
|
||||
};
|
||||
|
||||
sessionVariables = {
|
||||
TERMINAL = "alacritty";
|
||||
ZELLIJ_AUTO_EXIT = "true";
|
||||
ZELLIJ_AUTO_ATTACH = "false";
|
||||
};
|
||||
|
||||
# TODO Disable gui apps & switch to emacs-git instead of pgtk on headless systems
|
||||
packages = with pkgs; [
|
||||
myEmacs
|
||||
emacs-lsp-booster
|
||||
any-nix-shell
|
||||
atool
|
||||
aspell
|
||||
aspellDicts.en
|
||||
aspellDicts.en-computers
|
||||
aspellDicts.en-science
|
||||
aspellDicts.de
|
||||
binutils
|
||||
calc
|
||||
cmake
|
||||
curl
|
||||
exercism
|
||||
filezilla
|
||||
gnutls
|
||||
gnumake
|
||||
gcc
|
||||
imagemagick
|
||||
libtool
|
||||
neofetch
|
||||
nil
|
||||
nixpkgs-fmt
|
||||
nodejs_20
|
||||
tree
|
||||
python312Full
|
||||
python312Packages.epc
|
||||
python312Packages.orjson
|
||||
rust-motd
|
||||
rcm
|
||||
(lib.mkIf config.services.gpg-agent.enable
|
||||
pinentry-emacs)
|
||||
shellcheck
|
||||
shfmt
|
||||
statix
|
||||
#texlive.combined.scheme-full
|
||||
texlive.combined.scheme-medium
|
||||
tokei
|
||||
tree-sitter
|
||||
wget
|
||||
wl-clipboard
|
||||
zeal # GUI
|
||||
zstd
|
||||
neovim
|
||||
lazydocker
|
||||
sshx
|
||||
bat
|
||||
lazygit
|
||||
xpipe
|
||||
# surrealist
|
||||
# surrealdb
|
||||
pkgs.rage
|
||||
pkgs.nh
|
||||
pkgs.agenix-rekey
|
||||
# android-studio-full
|
||||
# my.aider-chat # broken on 25.05 (check nixpkgs for update)
|
||||
];
|
||||
};
|
||||
}
|
40
home-mods/virt/default.nix
Normal file
40
home-mods/virt/default.nix
Normal file
|
@ -0,0 +1,40 @@
|
|||
{ config
|
||||
, lib
|
||||
, pkgs
|
||||
, ...
|
||||
}: {
|
||||
dconf.settings = {
|
||||
"org/virt-manager/virt-manager/connections" = {
|
||||
autoconnect = [ "qemu:///system" ];
|
||||
uris = [ "qemu:///system" ];
|
||||
};
|
||||
};
|
||||
|
||||
xdg.desktopEntries = {
|
||||
win10 = {
|
||||
name = "Win 10 VM";
|
||||
type = "Application";
|
||||
icon = "windows";
|
||||
comment = "start the win10 vm";
|
||||
exec = pkgs.lib.strings.concatStrings [
|
||||
"bash -c \""
|
||||
"virsh --connect=qemu:///system start win10; "
|
||||
"virt-viewer -a -w -c qemu:///system win10 "
|
||||
"&& virsh --connect=qemu:///system managedsave win10\""
|
||||
];
|
||||
};
|
||||
win11 = {
|
||||
name = "Win 11 VM";
|
||||
type = "Application";
|
||||
icon = "windows";
|
||||
comment = "start the win11 vm";
|
||||
exec = pkgs.lib.strings.concatStrings [
|
||||
"bash -c \""
|
||||
"virsh --connect=qemu:///system start win11; "
|
||||
"virsh --connect=qemu:///system resume win11; "
|
||||
"virt-viewer -a -w -c qemu:///system win11 "
|
||||
"&& virsh --connect=qemu:///system managedsave win11\""
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
10
monitor_battery.fish
Normal file
10
monitor_battery.fish
Normal file
|
@ -0,0 +1,10 @@
|
|||
#!/usr/bin/env fish
|
||||
|
||||
set sensor_dir /sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:50/PNP0C0A:00/power_supply/BAT1
|
||||
|
||||
while true
|
||||
date -u +"%H:%MZ";
|
||||
echo "Charge: $(calc "($(cat $sensor_dir/charge_now)/1000000)*$(cat $sensor_dir/voltage_min_design)/1000000") Wh";
|
||||
echo "Current: $(calc "($(cat $sensor_dir/voltage_now)/1000000)*($(cat $sensor_dir/current_now)/1000000)") W";
|
||||
sleep 1m;
|
||||
end
|
34
os-mods/age/default.nix
Normal file
34
os-mods/age/default.nix
Normal file
|
@ -0,0 +1,34 @@
|
|||
{ pkgs
|
||||
, lib
|
||||
, config
|
||||
, ...
|
||||
}: {
|
||||
age.secrets =
|
||||
let
|
||||
age-paths-list = lib.fileset.toList (lib.fileset.fromSource (lib.sources.sourceFilesBySuffices ../../secrets/autoimport [ ".age" ]));
|
||||
named-paths =
|
||||
builtins.map
|
||||
(path: {
|
||||
name = lib.strings.removeSuffix ".age" (builtins.baseNameOf path);
|
||||
path = path;
|
||||
})
|
||||
age-paths-list;
|
||||
autoimported-secrets = lib.attrsets.mergeAttrsList (builtins.map
|
||||
(secret: {
|
||||
"${secret.name}".rekeyFile = secret.path;
|
||||
})
|
||||
named-paths);
|
||||
in
|
||||
autoimported-secrets;
|
||||
|
||||
age.rekey = {
|
||||
masterIdentities = [
|
||||
{
|
||||
identity = ../../secrets/master/age_master.age;
|
||||
pubkey = ../../secrets/master/age_master.pub;
|
||||
}
|
||||
];
|
||||
storageMode = "local";
|
||||
localStorageDir = ../../. + "/secrets/rekeyed/${config.networking.hostName}";
|
||||
};
|
||||
}
|
84
os-mods/amdgpu/default.nix
Normal file
84
os-mods/amdgpu/default.nix
Normal file
|
@ -0,0 +1,84 @@
|
|||
{ config
|
||||
, lib
|
||||
, pkgs
|
||||
, inputs
|
||||
, ...
|
||||
}: {
|
||||
programs.corectrl = {
|
||||
enable = true;
|
||||
gpuOverclock.enable = true;
|
||||
};
|
||||
|
||||
systemd.tmpfiles.rules = [
|
||||
"L+ /opt/rocm/hip - - - - ${pkgs.rocmPackages.clr}"
|
||||
"L+ /opt/rocm/rocblas - - - - ${pkgs.rocmPackages.rocblas}"
|
||||
"L+ /opt/rocm/hipblas - - - - ${pkgs.rocmPackages.hipblas}"
|
||||
"L+ /opt/rocm/clang - - - - ${pkgs.rocmPackages.llvm.clang}"
|
||||
"L+ /opt/rocm/runtime - - - - ${pkgs.rocmPackages.rocm-runtime}"
|
||||
];
|
||||
|
||||
chaotic.mesa-git = {
|
||||
enable = false;
|
||||
extraPackages = with pkgs; [
|
||||
mesa_git.opencl
|
||||
libva-vdpau-driver
|
||||
obs-studio-plugins.obs-vaapi # TODO check if obs is enabled
|
||||
gst_all_1.gstreamer
|
||||
gst_all_1.gst-vaapi
|
||||
];
|
||||
extraPackages32 = with pkgs; [
|
||||
mesa32_git.opencl
|
||||
driversi686Linux.libva-vdpau-driver
|
||||
];
|
||||
};
|
||||
hardware = {
|
||||
amdgpu = {
|
||||
opencl.enable = true;
|
||||
initrd.enable = true;
|
||||
};
|
||||
|
||||
graphics = {
|
||||
extraPackages = with pkgs; [
|
||||
# rocmPackages.clr.icd
|
||||
libva-vdpau-driver
|
||||
obs-studio-plugins.obs-vaapi # TODO check if obs is enabled
|
||||
gst_all_1.gstreamer
|
||||
gst_all_1.gst-vaapi
|
||||
];
|
||||
extraPackages32 = with pkgs; [
|
||||
driversi686Linux.libva-vdpau-driver
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
systemd.services.lactd = {
|
||||
enable = true;
|
||||
description = "Radeon GPU monitor";
|
||||
after = [ "syslog.target" "systemd-modules-load.service" ];
|
||||
|
||||
unitConfig = { ConditionPathExists = "${pkgs.lact}/bin/lact"; };
|
||||
|
||||
serviceConfig = {
|
||||
User = "root";
|
||||
ExecStart = "${pkgs.lact}/bin/lact daemon";
|
||||
};
|
||||
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
};
|
||||
|
||||
# Force radv
|
||||
environment.variables.AMD_VULKAN_ICD = "RADV";
|
||||
environment.systemPackages = with pkgs; [
|
||||
## MONITORING TOOLS ##
|
||||
# nvtopPackages.amd # for AMD GPUs # broken ?
|
||||
|
||||
lact
|
||||
vulkan-tools
|
||||
libva-utils
|
||||
glxinfo # TODO right place here or in desktop ?
|
||||
clinfo
|
||||
wayland-utils # TODO move somewhere better ?
|
||||
# nixgl.nixGLIntel
|
||||
# nixgl.nixVulkanIntel
|
||||
];
|
||||
}
|
12
os-mods/cachix/caches/ai.nix
Normal file
12
os-mods/cachix/caches/ai.nix
Normal file
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
nix = {
|
||||
settings = {
|
||||
substituters = [
|
||||
"https://ai.cachix.org"
|
||||
];
|
||||
trusted-public-keys = [
|
||||
"ai.cachix.org-1:N9dzRK+alWwoKXQlnn0H6aUx0lU/mspIoz8hMvGvbbc="
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
11
os-mods/cachix/caches/lix.nix
Normal file
11
os-mods/cachix/caches/lix.nix
Normal file
|
@ -0,0 +1,11 @@
|
|||
{
|
||||
nix = {
|
||||
settings = {
|
||||
substituters = [
|
||||
"https://cache.lix.systems"
|
||||
];
|
||||
trusted-public-keys = [
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
12
os-mods/cachix/caches/nix-community.nix
Normal file
12
os-mods/cachix/caches/nix-community.nix
Normal file
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
nix = {
|
||||
settings = {
|
||||
substituters = [
|
||||
"https://nix-community.cachix.org"
|
||||
];
|
||||
trusted-public-keys = [
|
||||
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
11
os-mods/cachix/caches/nyx.nix
Normal file
11
os-mods/cachix/caches/nyx.nix
Normal file
|
@ -0,0 +1,11 @@
|
|||
{
|
||||
nix = {
|
||||
settings = {
|
||||
substituters = [ "https://nyx.chaotic.cx/" ];
|
||||
trusted-public-keys = [
|
||||
"nyx.chaotic.cx-1:HfnXSw4pj95iI/n17rIDy40agHj12WfF+Gqk6SonIT8="
|
||||
"chaotic-nyx.cachix.org-1:HfnXSw4pj95iI/n17rIDy40agHj12WfF+Gqk6SonIT8="
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
13
os-mods/cachix/caches/vlt81.nix
Normal file
13
os-mods/cachix/caches/vlt81.nix
Normal file
|
@ -0,0 +1,13 @@
|
|||
{
|
||||
nix = {
|
||||
settings = {
|
||||
substituters = [
|
||||
"https://nixcache.vlt81.de"
|
||||
];
|
||||
trusted-public-keys = [
|
||||
"nixcache.vlt81.de:7yRQAvj1jc1DAmV4ZVKob3CnI5z2PV4XNP6qEc9kbhg=" # new
|
||||
"nixcache.vlt81.de:nw0FfUpePtL6P3IMNT9X6oln0Wg9REZINtkkI9SisqQ=" # old
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
8
os-mods/cachix/caches/winapps.nix
Normal file
8
os-mods/cachix/caches/winapps.nix
Normal file
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
nix = {
|
||||
settings = {
|
||||
substituters = [ "https://winapps.cachix.org/" ];
|
||||
trusted-public-keys = [ "winapps.cachix.org-1:HI82jWrXZsQRar/PChgIx1unmuEsiQMQq+zt05CD36g=" ];
|
||||
};
|
||||
};
|
||||
}
|
18
os-mods/cachix/default.nix
Normal file
18
os-mods/cachix/default.nix
Normal file
|
@ -0,0 +1,18 @@
|
|||
# WARN: this file will get overwritten by $ cachix use <name>
|
||||
{ pkgs
|
||||
, lib
|
||||
, ...
|
||||
}:
|
||||
let
|
||||
folder = ./caches;
|
||||
toImport = name: value: folder + ("/" + name);
|
||||
filterCaches = key: value: value == "regular" && lib.hasSuffix ".nix" key;
|
||||
imports = lib.mapAttrsToList toImport (lib.filterAttrs filterCaches (builtins.readDir folder));
|
||||
in
|
||||
{
|
||||
inherit imports;
|
||||
nix.settings = {
|
||||
substituters = [ "https://cache.nixos.org/" ];
|
||||
trusted-users = [ "root" "tristand" ];
|
||||
};
|
||||
}
|
290
os-mods/common/default.nix
Normal file
290
os-mods/common/default.nix
Normal file
|
@ -0,0 +1,290 @@
|
|||
{ config
|
||||
, lib
|
||||
, pkgs
|
||||
, inputs
|
||||
, system
|
||||
, self
|
||||
, ...
|
||||
}:
|
||||
let
|
||||
commitid =
|
||||
if (self ? shortRev)
|
||||
then self.shortRev
|
||||
else "dirty";
|
||||
in
|
||||
{
|
||||
system.switch = {
|
||||
enable = false;
|
||||
enableNg = true;
|
||||
};
|
||||
system.image = {
|
||||
id = "tristnix";
|
||||
version = commitid;
|
||||
};
|
||||
# system.nixos.tags = [ "tristnix_${commitid}" ];
|
||||
nixpkgs.buildPlatform = {
|
||||
inherit system;
|
||||
};
|
||||
nixpkgs.hostPlatform = {
|
||||
inherit system;
|
||||
};
|
||||
# nixpkgs.hostPlatform = {
|
||||
# inherit system;
|
||||
# gcc = {
|
||||
# arch = lib.mkDefault builtins.throw "no arch set";
|
||||
# tune = config.nixpkgs.hostPlatform.gcc.arch;
|
||||
# };
|
||||
# };
|
||||
|
||||
boot.tmp.useTmpfs = true;
|
||||
systemd.services.nix-daemon = {
|
||||
environment.TMPDIR = "/var/tmp";
|
||||
};
|
||||
|
||||
nix = {
|
||||
settings = {
|
||||
auto-optimise-store = true;
|
||||
allow-import-from-derivation = true;
|
||||
};
|
||||
package = pkgs.nixVersions.stable;
|
||||
extraOptions = ''
|
||||
experimental-features = nix-command flakes
|
||||
'';
|
||||
};
|
||||
|
||||
home-manager.backupFileExtension = "bak";
|
||||
|
||||
# locale
|
||||
time.timeZone = "Europe/Berlin";
|
||||
|
||||
i18n = {
|
||||
defaultLocale = "en_US.UTF-8";
|
||||
|
||||
extraLocaleSettings = {
|
||||
LANG = "en_US.UTF-8";
|
||||
LC_ADDRESS = "de_DE.UTF-8";
|
||||
LC_COLLATE = "de_DE.UTF-8";
|
||||
LC_CTYPE = "en_US.UTF-8";
|
||||
LC_IDENTIFICATION = "de_DE.UTF-8";
|
||||
LC_MEASUREMENT = "de_DE.UTF-8";
|
||||
LC_MESSAGES = "en_US.UTF-8";
|
||||
LC_MONETARY = "de_DE.UTF-8";
|
||||
LC_NAME = "de_DE.UTF-8";
|
||||
LC_NUMERIC = "de_DE.UTF-8";
|
||||
LC_PAPER = "de_DE.UTF-8";
|
||||
LC_TELEPHONE = "de_DE.UTF-8";
|
||||
LC_TIME = "de_DE.UTF-8";
|
||||
};
|
||||
};
|
||||
####################
|
||||
|
||||
security = {
|
||||
pki.certificates = [
|
||||
(lib.readFile ../../ext/internal-ca.crt)
|
||||
];
|
||||
rtkit.enable = true;
|
||||
|
||||
sudo.enable = false;
|
||||
sudo-rs = {
|
||||
enable = true;
|
||||
wheelNeedsPassword = lib.mkDefault false;
|
||||
execWheelOnly = true;
|
||||
};
|
||||
};
|
||||
|
||||
environment.sessionVariables = {
|
||||
EDITOR = "nvim";
|
||||
};
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
fclones
|
||||
curl
|
||||
fish
|
||||
figlet
|
||||
neovim # editor
|
||||
nix-alien
|
||||
git
|
||||
vim # fallback ed
|
||||
wget
|
||||
|
||||
## MONITORING TOOLS ##
|
||||
btop # for CPU, RAM, and Disk monitoring
|
||||
iotop # for disk I/O monitoring
|
||||
iftop # for network I/O monitoring
|
||||
];
|
||||
|
||||
fileSystems."/etc/nixos" = {
|
||||
device = lib.mkDefault "/home/tristand/nix";
|
||||
fsType = "none";
|
||||
options = [ "bind" ];
|
||||
};
|
||||
|
||||
programs = {
|
||||
nh = {
|
||||
enable = true;
|
||||
clean.enable = true;
|
||||
clean.extraArgs = "--keep-since 30d --keep 16";
|
||||
flake = "/home/tristand/nix";
|
||||
};
|
||||
rust-motd = {
|
||||
# enable = true; # broken atm
|
||||
enableMotdInSSHD = true;
|
||||
settings = {
|
||||
banner = {
|
||||
color = "green";
|
||||
command = ''
|
||||
${pkgs.inetutils}/bin/hostname | ${pkgs.figlet}/bin/figlet -f slant
|
||||
'';
|
||||
};
|
||||
|
||||
uptime = {
|
||||
prefix = "Up";
|
||||
};
|
||||
|
||||
global = {
|
||||
progress_full_character = "=";
|
||||
progress_empty_character = "-";
|
||||
progress_prefix = "[";
|
||||
progress_suffix = "]";
|
||||
};
|
||||
|
||||
filesystems = {
|
||||
root = "/";
|
||||
home = "/home";
|
||||
};
|
||||
|
||||
memory.swap_pos = "beside";
|
||||
last_login = builtins.listToAttrs (map
|
||||
(user: {
|
||||
name = user;
|
||||
value = 2;
|
||||
})
|
||||
(builtins.attrNames config.home-manager.users));
|
||||
};
|
||||
order = [
|
||||
"global"
|
||||
"banner"
|
||||
"uptime"
|
||||
"memory"
|
||||
"filesystems"
|
||||
"last_login"
|
||||
];
|
||||
};
|
||||
nix-ld.enable = true;
|
||||
# nix-ld.package = pkgs.nix-ld-rs; # Lazy Tempfix
|
||||
nix-ld.package = pkgs.nix-ld;
|
||||
command-not-found.enable = false;
|
||||
nix-index-database.comma.enable = true;
|
||||
|
||||
fish.enable = true;
|
||||
gnupg.agent = {
|
||||
enable = true;
|
||||
# enableSSHSupport = true; # breaks gitea foo
|
||||
pinentryPackage = lib.mkForce pkgs.pinentry-qt;
|
||||
};
|
||||
};
|
||||
|
||||
services = {
|
||||
fwupd.enable = true;
|
||||
fwupd.extraRemotes = [
|
||||
"lvfs-testing"
|
||||
];
|
||||
|
||||
# envfs.enable = true; # not needed due to flake
|
||||
timesyncd.enable = false;
|
||||
ntp.enable = false;
|
||||
ntpd-rs.enable = true;
|
||||
|
||||
openssh = {
|
||||
enable = true;
|
||||
settings = {
|
||||
PasswordAuthentication = false;
|
||||
KbdInteractiveAuthentication = false;
|
||||
PubKeyAuthentication = true;
|
||||
X11Forwarding = false;
|
||||
# KexAlgorithms = [
|
||||
# "sntrup761x25519-sha512@openssh.com"
|
||||
# ]; # TODO Check what juicessh needs
|
||||
};
|
||||
# X11UseLocalhost no
|
||||
extraConfig = ''
|
||||
AllowTcpForwarding yes
|
||||
AllowAgentForwarding no
|
||||
AllowStreamLocalForwarding yes
|
||||
AuthenticationMethods publickey
|
||||
'';
|
||||
};
|
||||
|
||||
gvfs.enable = true;
|
||||
avahi.enable = true;
|
||||
avahi.nssmdns4 = true;
|
||||
};
|
||||
|
||||
networking.firewall = {
|
||||
extraCommands = ''iptables -t raw -A OUTPUT -p udp -m udp --dport 137 -j CT --helper netbios-ns'';
|
||||
allowedTCPPorts = [
|
||||
22
|
||||
# 54817
|
||||
];
|
||||
};
|
||||
|
||||
# TODO Extract into stylix module
|
||||
services.kmscon.enable = true;
|
||||
services.kmscon.hwRender = config.hardware.amdgpu.initrd.enable;
|
||||
fonts.packages = with pkgs.nerd-fonts; [
|
||||
iosevka
|
||||
iosevka-term
|
||||
fira-code
|
||||
droid-sans-mono
|
||||
symbols-only
|
||||
];
|
||||
stylix =
|
||||
let
|
||||
# TODO extract this config somewhere and allow easily generating wallpaper with nixpkgs stable and place it in the local repo
|
||||
# wallpaper = pkgs.nix-wallpaper.override {
|
||||
# logoSize = 24;
|
||||
# preset = "gruvbox-dark-rainbow";
|
||||
# width = 6960;
|
||||
# height = 4320;
|
||||
# };
|
||||
# wallpaperPath = "${wallpaper}/share/wallpapers/nixos-wallpaper.png";
|
||||
# fontpkg = pkgs.nerd-fonts.override { fonts = [ "Iosevka" "IosevkaTerm" "Recursive" "FiraCode" "DroidSansMono" "NerdFontsSymbolsOnly" ]; };
|
||||
in
|
||||
{
|
||||
enable = true;
|
||||
image = ../../ext/background.png;
|
||||
polarity = "dark";
|
||||
base16Scheme = lib.mkForce "${pkgs.base16-schemes}/share/themes/gruvbox-dark-hard.yaml";
|
||||
autoEnable = false;
|
||||
cursor = {
|
||||
package = pkgs.kdePackages.breeze;
|
||||
name = "breeze_cursors";
|
||||
size = 24;
|
||||
};
|
||||
opacity.terminal = 0.88;
|
||||
fonts = {
|
||||
serif = config.stylix.fonts.sansSerif;
|
||||
sansSerif = {
|
||||
package = pkgs.nerd-fonts.iosevka;
|
||||
name = "Iosevka Nerd Font Propo";
|
||||
};
|
||||
|
||||
monospace = {
|
||||
package = pkgs.nerd-fonts.iosevka;
|
||||
name = "Iosevka Nerd Font Mono";
|
||||
};
|
||||
|
||||
emoji = {
|
||||
package = pkgs.noto-fonts-emoji;
|
||||
name = "Noto Color Emoji";
|
||||
};
|
||||
};
|
||||
targets = {
|
||||
console.enable = true;
|
||||
fish.enable = true;
|
||||
gtk.enable = true;
|
||||
kmscon.enable = true;
|
||||
nixos-icons.enable = true;
|
||||
};
|
||||
};
|
||||
}
|
32
os-mods/desktop/audio.nix
Normal file
32
os-mods/desktop/audio.nix
Normal file
|
@ -0,0 +1,32 @@
|
|||
{ config
|
||||
, lib
|
||||
, pkgs
|
||||
, ...
|
||||
}: {
|
||||
services.pipewire = {
|
||||
enable = true;
|
||||
# systemWide = true;
|
||||
audio.enable = true;
|
||||
alsa.enable = true;
|
||||
alsa.support32Bit = true;
|
||||
pulse.enable = true;
|
||||
jack.enable = true;
|
||||
|
||||
wireplumber.enable = true;
|
||||
};
|
||||
|
||||
## audio
|
||||
# sound.enable = true;
|
||||
hardware.bluetooth.enable = true;
|
||||
|
||||
## fix cava
|
||||
services.pipewire.wireplumber.extraConfig."11-bluetooth-policy" = {
|
||||
"wireplumber.settings" = {
|
||||
"bluetooth.autoswitch-to-headset-profile" = false;
|
||||
};
|
||||
};
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
kdePackages.kpipewire # TODO Check if needed
|
||||
];
|
||||
}
|
113
os-mods/desktop/default.nix
Normal file
113
os-mods/desktop/default.nix
Normal file
|
@ -0,0 +1,113 @@
|
|||
{ config
|
||||
, lib
|
||||
, pkgs
|
||||
, ...
|
||||
}: {
|
||||
programs.dconf.enable = true;
|
||||
programs.partition-manager.enable = true;
|
||||
|
||||
fonts = {
|
||||
enableDefaultPackages = true;
|
||||
fontDir.enable = true;
|
||||
fontconfig = {
|
||||
antialias = true;
|
||||
|
||||
defaultFonts = {
|
||||
serif = [ "Iosevka Nerd Font Propo" ];
|
||||
sansSerif = [ "Iosevka Nerd Font Propo" ];
|
||||
monospace = [ "Iosevka Nerd Font Mono" ];
|
||||
emoji = [ "Noto Color Emoji" ];
|
||||
};
|
||||
|
||||
hinting.enable = true;
|
||||
hinting.style = "slight";
|
||||
|
||||
subpixel.rgba = lib.mkDefault "rgb";
|
||||
subpixel.lcdfilter = "default";
|
||||
};
|
||||
packages = with pkgs; [
|
||||
emacs-all-the-icons-fonts
|
||||
corefonts
|
||||
vistafonts
|
||||
noto-fonts
|
||||
noto-fonts-cjk-sans
|
||||
noto-fonts-emoji
|
||||
liberation_ttf
|
||||
fira
|
||||
fira-code
|
||||
fira-code-symbols
|
||||
mplus-outline-fonts.githubRelease
|
||||
dina-font
|
||||
proggyfonts
|
||||
];
|
||||
};
|
||||
|
||||
networking.firewall = {
|
||||
enable = true;
|
||||
allowedTCPPortRanges = [
|
||||
{
|
||||
from = 1714;
|
||||
to = 1764;
|
||||
} # KDE Connect
|
||||
];
|
||||
allowedUDPPortRanges = [
|
||||
{
|
||||
from = 1714;
|
||||
to = 1764;
|
||||
} # KDE Connect
|
||||
];
|
||||
};
|
||||
|
||||
programs.kdeconnect.enable = true;
|
||||
programs.kclock.enable = true;
|
||||
programs.sniffnet.enable = true;
|
||||
|
||||
security.pam.services = {
|
||||
# sddm.kwallet.enable = true; useless due to tty as dm
|
||||
kdewallet.kwallet.enable = true;
|
||||
kdewallet.kwallet.forceRun = true; # tty as dm support
|
||||
};
|
||||
|
||||
services = {
|
||||
desktopManager.plasma6.enable = true;
|
||||
desktopManager.plasma6.enableQt5Integration = true;
|
||||
displayManager.enable = true;
|
||||
xserver = {
|
||||
enable = true;
|
||||
xkb = {
|
||||
layout = "us";
|
||||
variant = "alt-intl";
|
||||
};
|
||||
};
|
||||
|
||||
greetd = {
|
||||
enable = true;
|
||||
settings = {
|
||||
default_session = {
|
||||
command = ''
|
||||
${lib.getExe pkgs.greetd.tuigreet} \
|
||||
--asterisks --asterisks-char • \
|
||||
--greeting "Welcome to NixOS ${config.system.nixos.version} (${config.system.nixos.codeName}) on ${config.system.name}!" \
|
||||
--theme "border=magenta;text=cyan;prompt=green;time=red;action=blue;button=yellow;container=black;input=red" \
|
||||
--time --time-format "%H:%M | %a • %h | %F" \
|
||||
--remember \
|
||||
--cmd ${pkgs.writeShellScript "tuigreet-cmd.sh" ''
|
||||
${pkgs.kdePackages.plasma-workspace}/libexec/plasma-dbus-run-session-if-needed
|
||||
exec 2>/dev/null 1>/dev/null ${pkgs.kdePackages.plasma-workspace}/bin/startplasma-wayland
|
||||
''};
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
systemd.services.greetd.serviceConfig = {
|
||||
Type = "idle";
|
||||
StandardInput = "tty";
|
||||
StandardOutput = "tty";
|
||||
StandardError = "journal";
|
||||
TTYReset = true;
|
||||
TTYVHangup = true;
|
||||
TTYVTDisallocate = true;
|
||||
};
|
||||
}
|
60
os-mods/desktop/gaming.nix
Normal file
60
os-mods/desktop/gaming.nix
Normal file
|
@ -0,0 +1,60 @@
|
|||
{ config
|
||||
, lib
|
||||
, pkgs
|
||||
, ...
|
||||
}: {
|
||||
programs.alvr = {
|
||||
enable = true;
|
||||
openFirewall = true;
|
||||
};
|
||||
|
||||
xdg.portal = {
|
||||
enable = true;
|
||||
xdgOpenUsePortal = true;
|
||||
};
|
||||
|
||||
programs.steam = {
|
||||
enable = true;
|
||||
protontricks.enable = true;
|
||||
|
||||
remotePlay.openFirewall = true;
|
||||
dedicatedServer.openFirewall = true;
|
||||
|
||||
extraPackages = with pkgs; [
|
||||
mangohud
|
||||
];
|
||||
extraCompatPackages = with pkgs; [
|
||||
proton-ge-custom
|
||||
];
|
||||
|
||||
package = pkgs.steam.override {
|
||||
extraPkgs = pkgs:
|
||||
with pkgs; [
|
||||
xorg.libXcursor
|
||||
xorg.libXi
|
||||
xorg.libXinerama
|
||||
xorg.libXScrnSaver
|
||||
libpng
|
||||
libpulseaudio
|
||||
libvorbis
|
||||
stdenv.cc.cc.lib
|
||||
libkrb5
|
||||
keyutils
|
||||
];
|
||||
};
|
||||
};
|
||||
programs.xwayland.enable = true;
|
||||
programs.gamescope.enable = true;
|
||||
programs.immersed.enable = true;
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
protonup-qt
|
||||
xorg.xorgserver
|
||||
wlx-overlay-s
|
||||
];
|
||||
|
||||
# hardware.xone.enable = true; # USB only, not needed ATM, and incompatible with recent kernels, bluetooth FTW
|
||||
# hardware.xpadneo.enable = true; # Wireless # Needed to up to nixos-small to fix
|
||||
hardware.bluetooth.enable = true;
|
||||
hardware.steam-hardware.enable = true;
|
||||
}
|
21
os-mods/desktop/printing.nix
Normal file
21
os-mods/desktop/printing.nix
Normal file
|
@ -0,0 +1,21 @@
|
|||
{ config
|
||||
, lib
|
||||
, pkgs
|
||||
, ...
|
||||
}: {
|
||||
services = {
|
||||
printing = {
|
||||
enable = true;
|
||||
drivers = with pkgs; [
|
||||
gutenprint
|
||||
gutenprintBin
|
||||
# hplipWithPlugin # TODO readd
|
||||
brlaser
|
||||
brgenml1cupswrapper
|
||||
];
|
||||
};
|
||||
};
|
||||
environment.systemPackages = with pkgs; [
|
||||
cifs-utils
|
||||
];
|
||||
}
|
22
os-mods/net_disks/oeko.nix
Normal file
22
os-mods/net_disks/oeko.nix
Normal file
|
@ -0,0 +1,22 @@
|
|||
{ config
|
||||
, lib
|
||||
, ...
|
||||
}: {
|
||||
config = lib.mkMerge (lib.lists.forEach [ "Server_F" "Scans" ] (mount: {
|
||||
systemd.mounts = [
|
||||
{
|
||||
where = "/run/mount/${mount}";
|
||||
what = "//192.168.0.1/${mount}";
|
||||
type = "cifs";
|
||||
options = "vers=3.0,nofail,credentials=${config.age.secrets.oeko-smb.path},uid=1001,gid=100";
|
||||
}
|
||||
];
|
||||
|
||||
systemd.automounts = [
|
||||
{
|
||||
where = "/run/mount/${mount}";
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
}
|
||||
];
|
||||
}));
|
||||
}
|
58
os-mods/netdata/client.nix
Normal file
58
os-mods/netdata/client.nix
Normal file
|
@ -0,0 +1,58 @@
|
|||
{ config
|
||||
, lib
|
||||
, pkgs
|
||||
, modulesPath
|
||||
, system
|
||||
, inputs
|
||||
, ...
|
||||
}: {
|
||||
services.netdata = {
|
||||
enable = true;
|
||||
package = pkgs.netdata;
|
||||
python = {
|
||||
enable = true;
|
||||
|
||||
extraPackages = ps: [
|
||||
ps.psycopg2
|
||||
ps.docker
|
||||
ps.dnspython
|
||||
];
|
||||
};
|
||||
|
||||
configDir = {
|
||||
"stream.conf" = pkgs.writeText "stream.conf" ''
|
||||
[stream]
|
||||
enabled = yes
|
||||
api key = 31de92c9-d863-4c39-af37-72a5c6e0796b
|
||||
destination = 100.64.0.13:19999
|
||||
'';
|
||||
};
|
||||
config = {
|
||||
global = {
|
||||
"page cache size" = 32;
|
||||
|
||||
# update interval
|
||||
"update every" = 2;
|
||||
};
|
||||
db = {
|
||||
# relatively minimal storage conf, as replicate target should save most of the history
|
||||
"update every" = 2;
|
||||
"storage tiers" = 3;
|
||||
"dbengine multihost disk space MB" = 256;
|
||||
"dbengine tier 1 multihost disk space MB" = 256;
|
||||
"dbengine tier 2 multihost disk space MB" = 256;
|
||||
"cleanup obsolete charts after secs" = 600;
|
||||
};
|
||||
plugins = {
|
||||
"go.d" = "yes";
|
||||
};
|
||||
web = {
|
||||
"mode" = "none";
|
||||
};
|
||||
ml = {
|
||||
# disable machine learning, can happen on repl target
|
||||
"enabled" = "no";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
52
os-mods/netdata/default.nix
Normal file
52
os-mods/netdata/default.nix
Normal file
|
@ -0,0 +1,52 @@
|
|||
{ config
|
||||
, lib
|
||||
, pkgs
|
||||
, modulesPath
|
||||
, system
|
||||
, inputs
|
||||
, ...
|
||||
}: {
|
||||
# TODO allow primary/node config option to listen/send metrics to central location
|
||||
services.netdata = {
|
||||
enable = true;
|
||||
package = pkgs.netdata;
|
||||
python = {
|
||||
enable = true;
|
||||
|
||||
extraPackages = ps: [
|
||||
ps.psycopg2
|
||||
ps.docker
|
||||
ps.dnspython
|
||||
];
|
||||
};
|
||||
|
||||
config = {
|
||||
global = {
|
||||
# update interval
|
||||
"update every" = 2;
|
||||
};
|
||||
db = {
|
||||
"update every" = 2;
|
||||
"storage tiers" = 3;
|
||||
"dbengine multihost disk space MB" = 1024;
|
||||
"dbengine tier 1 multihost disk space MB" = 1024;
|
||||
"dbengine tier 2 multihost disk space MB" = 512;
|
||||
"cleanup obsolete charts after secs" = 600;
|
||||
};
|
||||
plugins = {
|
||||
"go.d" = "yes";
|
||||
};
|
||||
ml = {
|
||||
# enable machine learning
|
||||
"enabled" = "yes";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
networking.firewall.allowedTCPPortRanges = [
|
||||
{
|
||||
from = 19999;
|
||||
to = 19999;
|
||||
} # netdata
|
||||
];
|
||||
}
|
86
os-mods/network/default.nix
Normal file
86
os-mods/network/default.nix
Normal file
|
@ -0,0 +1,86 @@
|
|||
{ config
|
||||
, lib
|
||||
, pkgs
|
||||
, ...
|
||||
}: {
|
||||
networking = {
|
||||
firewall.checkReversePath = lib.mkForce false;
|
||||
firewall.trustedInterfaces = [ "tailscale0" ];
|
||||
|
||||
networkmanager.enable = true;
|
||||
networkmanager.dispatcherScripts = [
|
||||
{
|
||||
source = import ./moz-nm-hook.fish.nix {
|
||||
inherit pkgs;
|
||||
vpn_interface = "tailscale0";
|
||||
vpn_network = "100.64.0.0/16";
|
||||
};
|
||||
type = "basic";
|
||||
}
|
||||
{
|
||||
source = import ./moz-nm-hook.fish.nix {
|
||||
inherit pkgs;
|
||||
vpn_interface = "netmaker";
|
||||
vpn_network = "10.231.190.0/24";
|
||||
};
|
||||
type = "basic";
|
||||
}
|
||||
];
|
||||
|
||||
useDHCP = lib.mkDefault true;
|
||||
|
||||
nameservers = [
|
||||
"176.9.242.147#dns.vlt81.de"
|
||||
"2a01:4f8:2200:44a1::baad:c0de#dns.vlt81.de"
|
||||
"1.1.1.1#one.one.one.one"
|
||||
"1.0.0.1#one.one.one.one"
|
||||
# "100.64.0.8#dns.vlt81.de"
|
||||
# "45.90.28.0#921984.dns.nextdns.io"
|
||||
# "45.90.30.0#921984.dns.nextdns.io"
|
||||
# "2a07:a8c0::#921984.dns.nextdns.io"
|
||||
# "2a07:a8c1::#921984.dns.nextdns.io"
|
||||
];
|
||||
};
|
||||
|
||||
# security.wrappers.keybase-redirector = {
|
||||
# setuid = true;
|
||||
# owner = "root";
|
||||
# group = "root";
|
||||
# source = "${pkgs.kbfs}/bin/redirector";
|
||||
# };
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
keybase-gui
|
||||
];
|
||||
services = {
|
||||
keybase.enable = true;
|
||||
kbfs.enable = true;
|
||||
# kbfs.enableRedirector = true;
|
||||
resolved = {
|
||||
enable = true;
|
||||
dnssec = "true";
|
||||
domains = [ "~." ];
|
||||
fallbackDns = [
|
||||
"1.1.1.1#one.one.one.one"
|
||||
"1.0.0.1#one.one.one.one"
|
||||
];
|
||||
extraConfig = ''
|
||||
DNSOverTLS=yes
|
||||
'';
|
||||
};
|
||||
|
||||
netclient = {
|
||||
enable = false;
|
||||
package = pkgs.netclient;
|
||||
};
|
||||
|
||||
tailscale = {
|
||||
enable = true;
|
||||
useRoutingFeatures = "both";
|
||||
};
|
||||
|
||||
mozillavpn = {
|
||||
enable = true;
|
||||
};
|
||||
};
|
||||
}
|
22
os-mods/network/moz-nm-hook.fish.nix
Normal file
22
os-mods/network/moz-nm-hook.fish.nix
Normal file
|
@ -0,0 +1,22 @@
|
|||
# NetworkManager hook to make MozillaVPN work nicely with other overlay networks like netmaker/tailscale/etc
|
||||
{ pkgs
|
||||
, vpn_interface
|
||||
, vpn_network
|
||||
, ...
|
||||
}: (pkgs.writeText "${vpn_interface}-route" ''
|
||||
#!${pkgs.fish}/bin/fish
|
||||
set MOZ_INTERFACE "moz0"
|
||||
set VPN_INTERFACE "${vpn_interface}"
|
||||
set VPN_NETWORK "${vpn_network}"
|
||||
|
||||
sleep 1 # give mozillavpn time to create the rules we want to override
|
||||
logger "NetworkManager dispatcher event: $argv[1], $argv[2]"
|
||||
|
||||
# When MOZ interface comes up, check and add the Tailscale route
|
||||
if test "$argv[1]" = "$MOZ_INTERFACE" -a "$argv[2]" = "up"
|
||||
# Re-creating forces high priority in case the route already exists
|
||||
ip route del $VPN_NETWORK dev $VPN_INTERFACE
|
||||
ip route add $VPN_NETWORK dev $VPN_INTERFACE
|
||||
logger "Added route for $VPN_NETWORK via $VPN_INTERFACE"
|
||||
end
|
||||
'')
|
90
os-mods/ryzenapu/default.nix
Normal file
90
os-mods/ryzenapu/default.nix
Normal file
|
@ -0,0 +1,90 @@
|
|||
{ config
|
||||
, lib
|
||||
, pkgs
|
||||
, system
|
||||
, inputs
|
||||
, ...
|
||||
}: {
|
||||
# This automatically sets the ryzen apu TDP to 45 W on AC and 10W on battery
|
||||
# addionally it enables and configures some general power management stuff like powertop
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
ryzenadj
|
||||
(writers.writeDashBin "set_tdp" ''
|
||||
set -efux
|
||||
watt=$1
|
||||
value=$(( $watt * 1000 ))
|
||||
${ryzenadj}/bin/ryzenadj --stapm-limit="$value" --fast-limit="$value" --slow-limit="$value" --tctl-temp=85
|
||||
'')
|
||||
];
|
||||
|
||||
systemd = {
|
||||
services = {
|
||||
desktop-power-maximum-tdp = {
|
||||
description = "Change TDP to maximum TDP when on AC power";
|
||||
wantedBy = [ "ac.target" ];
|
||||
unitConfig = {
|
||||
RefuseManualStart = true;
|
||||
};
|
||||
path = with pkgs; [
|
||||
coreutils
|
||||
ryzenadj
|
||||
];
|
||||
serviceConfig.Type = "oneshot";
|
||||
preStart = "sleep 2";
|
||||
script = ''
|
||||
ryzenadj --stapm-limit=45000 --fast-limit=45000 --slow-limit=45000 --tctl-temp=85
|
||||
'';
|
||||
};
|
||||
|
||||
portable-power-saving-tdp = {
|
||||
description = "Change TDP to power saving TDP when on battery power";
|
||||
wantedBy = [ "battery.target" ];
|
||||
unitConfig = { RefuseManualStart = true; };
|
||||
path = with pkgs; [
|
||||
coreutils
|
||||
ryzenadj
|
||||
];
|
||||
serviceConfig.Type = "oneshot";
|
||||
preStart = "sleep 2";
|
||||
script = ''
|
||||
ryzenadj --stapm-limit=10000 --fast-limit=10000 --slow-limit=10000 --tctl-temp=85
|
||||
'';
|
||||
};
|
||||
|
||||
# Do not manage HID devices to prevent annoying keyboard/mouse sleeps
|
||||
powertop.postStart = ''
|
||||
HIDDEVICES=$(ls /sys/bus/usb/drivers/usbhid | grep -oE '^[0-9]+-[0-9\.]+' | sort -u)
|
||||
for i in $HIDDEVICES; do
|
||||
echo -n "Enabling " | cat - /sys/bus/usb/devices/$i/product
|
||||
echo 'on' > /sys/bus/usb/devices/$i/power/control
|
||||
done
|
||||
'';
|
||||
};
|
||||
|
||||
targets = {
|
||||
ac = {
|
||||
conflicts = [ "battery.target" ];
|
||||
description = "On AC power";
|
||||
unitConfig = { DefaultDependencies = "false"; };
|
||||
};
|
||||
|
||||
battery = {
|
||||
conflicts = [ "ac.target" ];
|
||||
description = "On battery power";
|
||||
unitConfig = { DefaultDependencies = "false"; };
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
services = {
|
||||
power-profiles-daemon.enable = true;
|
||||
udev.extraRules = ''
|
||||
SUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_NAME}=="AC0", ENV{POWER_SUPPLY_ONLINE}=="1", RUN+="${pkgs.systemd}/bin/systemctl --no-block start ac.target"
|
||||
SUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_NAME}=="AC0", ENV{POWER_SUPPLY_ONLINE}=="0", RUN+="${pkgs.systemd}/bin/systemctl --no-block start battery.target"
|
||||
'';
|
||||
};
|
||||
|
||||
# energy saving stuff
|
||||
powerManagement.powertop.enable = true;
|
||||
}
|
58
os-mods/virt/default.nix
Normal file
58
os-mods/virt/default.nix
Normal file
|
@ -0,0 +1,58 @@
|
|||
{ config
|
||||
, lib
|
||||
, pkgs
|
||||
, inputs
|
||||
, system
|
||||
, ...
|
||||
}: {
|
||||
environment.systemPackages = with pkgs; [
|
||||
virtiofsd
|
||||
virt-manager
|
||||
virt-viewer
|
||||
virt-top
|
||||
spice-gtk
|
||||
inputs.winapps.packages."${system}".winapps
|
||||
inputs.winapps.packages."${system}".winapps-launcher
|
||||
];
|
||||
|
||||
boot.kernelModules = [ "kvm-amd" ]; # TODO check cpu and enable intel kvm if needed
|
||||
|
||||
virtualisation.waydroid.enable = true;
|
||||
virtualisation.docker = {
|
||||
enable = true;
|
||||
package = pkgs.docker;
|
||||
|
||||
storageDriver = lib.mkDefault "overlay2";
|
||||
liveRestore = false;
|
||||
autoPrune.enable = true;
|
||||
};
|
||||
|
||||
security.wrappers.spice-client-glib-usb-acl-helper = {
|
||||
owner = "root";
|
||||
group = "root";
|
||||
# capabilities = "cap_fowner+ep";
|
||||
setuid = true;
|
||||
source = "${pkgs.spice-gtk}/bin/spice-client-glib-usb-acl-helper";
|
||||
};
|
||||
|
||||
virtualisation.libvirtd = {
|
||||
enable = true;
|
||||
package = pkgs.libvirt;
|
||||
|
||||
onShutdown = "suspend";
|
||||
onBoot = "ignore";
|
||||
|
||||
qemu = {
|
||||
package = pkgs.qemu_kvm;
|
||||
vhostUserPackages = [ pkgs.virtiofsd ];
|
||||
ovmf.enable = true;
|
||||
ovmf.packages = [ pkgs.OVMFFull.fd ];
|
||||
swtpm.enable = true;
|
||||
runAsRoot = false;
|
||||
};
|
||||
};
|
||||
|
||||
services.udev.extraRules = ''
|
||||
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0664", GROUP="wheel"
|
||||
'';
|
||||
}
|
21
os-mods/xmrig/default.nix
Normal file
21
os-mods/xmrig/default.nix
Normal file
|
@ -0,0 +1,21 @@
|
|||
{ config
|
||||
, lib
|
||||
, pkgs
|
||||
, ...
|
||||
}: {
|
||||
services.xmrig = {
|
||||
enable = false;
|
||||
package = pkgs.xmrig;
|
||||
settings = {
|
||||
autosave = true;
|
||||
cpu = false;
|
||||
opencl = {
|
||||
enabled = true;
|
||||
cache = true;
|
||||
loader = "${pkgs.ocl-icd}/lib/libOpenCL.so";
|
||||
platform = "AMD";
|
||||
adl = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
120
pkgs/aider-chat.nix
Normal file
120
pkgs/aider-chat.nix
Normal file
|
@ -0,0 +1,120 @@
|
|||
{ lib
|
||||
, stdenv
|
||||
, python311
|
||||
, fetchFromGitHub
|
||||
, gitMinimal
|
||||
, portaudio
|
||||
,
|
||||
}:
|
||||
let
|
||||
python3 = python311.override {
|
||||
self = python3;
|
||||
packageOverrides = _: super: { tree-sitter = super.tree-sitter_0_21; };
|
||||
};
|
||||
version = "0.59.1";
|
||||
in
|
||||
python3.pkgs.buildPythonApplication {
|
||||
pname = "aider-chat";
|
||||
inherit version;
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "paul-gauthier";
|
||||
repo = "aider";
|
||||
rev = "refs/tags/v${version}";
|
||||
hash = "sha256-20LicYj1j5gGzhF+SxPUKu858nHZgwDF1JxXeHRtYe0=";
|
||||
};
|
||||
|
||||
pythonRelaxDeps = true;
|
||||
|
||||
build-system = with python3.pkgs; [ setuptools-scm ];
|
||||
|
||||
dependencies = with python3.pkgs;
|
||||
[
|
||||
aiohappyeyeballs
|
||||
backoff
|
||||
beautifulsoup4
|
||||
configargparse
|
||||
diff-match-patch
|
||||
diskcache
|
||||
flake8
|
||||
gitpython
|
||||
grep-ast
|
||||
importlib-resources
|
||||
json5
|
||||
jsonschema
|
||||
jiter
|
||||
litellm
|
||||
networkx
|
||||
numpy
|
||||
packaging
|
||||
pathspec
|
||||
pexpect
|
||||
pillow
|
||||
playwright
|
||||
prompt-toolkit
|
||||
ptyprocess
|
||||
pypager
|
||||
pypandoc
|
||||
pyperclip
|
||||
pyyaml
|
||||
psutil
|
||||
rich
|
||||
scipy
|
||||
sounddevice
|
||||
soundfile
|
||||
streamlit
|
||||
tokenizers
|
||||
watchdog
|
||||
pydub
|
||||
]
|
||||
++ lib.optionals (!tensorflow.meta.broken) [
|
||||
llama-index-core
|
||||
llama-index-embeddings-huggingface
|
||||
];
|
||||
|
||||
buildInputs = [ portaudio ];
|
||||
|
||||
nativeCheckInputs = (with python3.pkgs; [ pytestCheckHook ]) ++ [ gitMinimal ];
|
||||
|
||||
disabledTestPaths = [
|
||||
# Tests require network access
|
||||
"tests/scrape/test_scrape.py"
|
||||
# Expected 'mock' to have been called once
|
||||
"tests/help/test_help.py"
|
||||
];
|
||||
|
||||
disabledTests =
|
||||
[
|
||||
# Tests require network
|
||||
"test_urls"
|
||||
"test_get_commit_message_with_custom_prompt"
|
||||
# FileNotFoundError
|
||||
"test_get_commit_message"
|
||||
# Expected 'launch_gui' to have been called once
|
||||
"test_browser_flag_imports_streamlit"
|
||||
# AttributeError
|
||||
"test_simple_send_with_retries"
|
||||
# Expected 'check_version' to have been called once
|
||||
"test_main_exit_calls_version_check"
|
||||
]
|
||||
++ lib.optionals stdenv.hostPlatform.isDarwin [
|
||||
# Tests fails on darwin
|
||||
"test_dark_mode_sets_code_theme"
|
||||
"test_default_env_file_sets_automatic_variable"
|
||||
];
|
||||
|
||||
preCheck = ''
|
||||
export HOME=$(mktemp -d)
|
||||
export AIDER_CHECK_UPDATE=false
|
||||
'';
|
||||
|
||||
meta = {
|
||||
description = "AI pair programming in your terminal";
|
||||
homepage = "https://github.com/paul-gauthier/aider";
|
||||
changelog = "https://github.com/paul-gauthier/aider/blob/v${version}/HISTORY.md";
|
||||
license = lib.licenses.asl20;
|
||||
maintainers = with lib.maintainers; [ taha-yassine ];
|
||||
mainProgram = "aider";
|
||||
};
|
||||
}
|
4662
pkgs/awatcher.Cargo.lock
generated
Normal file
4662
pkgs/awatcher.Cargo.lock
generated
Normal file
File diff suppressed because it is too large
Load diff
54
pkgs/awatcher.nix
Normal file
54
pkgs/awatcher.nix
Normal file
|
@ -0,0 +1,54 @@
|
|||
# --- parts/pkgs/awatcher.nix
|
||||
#
|
||||
# Author: tsandrini <tomas.sandrini@seznam.cz>
|
||||
# URL: https://github.com/tsandrini/tensorfiles
|
||||
# License: MIT
|
||||
#
|
||||
# 888 .d888 d8b 888
|
||||
# 888 d88P" Y8P 888
|
||||
# 888 888 888
|
||||
# 888888 .d88b. 88888b. .d8888b .d88b. 888d888 888888 888 888 .d88b. .d8888b
|
||||
# 888 d8P Y8b 888 "88b 88K d88""88b 888P" 888 888 888 d8P Y8b 88K
|
||||
# 888 88888888 888 888 "Y8888b. 888 888 888 888 888 888 88888888 "Y8888b.
|
||||
# Y88b. Y8b. 888 888 X88 Y88..88P 888 888 888 888 Y8b. X88
|
||||
# "Y888 "Y8888 888 888 88888P' "Y88P" 888 888 888 888 "Y8888 88888P'
|
||||
{ lib
|
||||
, rustPlatform
|
||||
, fetchFromGitHub
|
||||
, pkg-config
|
||||
, openssl
|
||||
, ...
|
||||
}:
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "awatcher";
|
||||
version = "0.2.7";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "2e3s";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
hash = "sha256-e65QDbK55q1Pbv/i7bDYRY78jgEUD1q6TLdKD8Gkswk=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ pkg-config ];
|
||||
|
||||
buildInputs = [ openssl ];
|
||||
|
||||
# NOTE needed due to Cargo.lock containing git dependencies
|
||||
cargoLock = {
|
||||
lockFile = ./awatcher.Cargo.lock;
|
||||
outputHashes = {
|
||||
"aw-client-rust-0.1.0" = "sha256-fCjVfmjrwMSa8MFgnC8n5jPzdaqSmNNdMRaYHNbs8Bo=";
|
||||
};
|
||||
};
|
||||
|
||||
meta = with lib; {
|
||||
description = "Awatcher is a window activity and idle watcher for ActivityWatcher with an optional tray and UI for statistics.";
|
||||
homepage = "https://github.com/2e3s/awatcher";
|
||||
changelog = "https://github.com/2e3s/awatcher/releases/tag/${version}";
|
||||
license = licenses.mpl20;
|
||||
maintainers = with tensorfiles.maintainers; [ tsandrini ];
|
||||
platforms = platforms.linux;
|
||||
mainProgram = pname;
|
||||
};
|
||||
}
|
166
pkgs/bisq2.nix
Normal file
166
pkgs/bisq2.nix
Normal file
|
@ -0,0 +1,166 @@
|
|||
{ stdenvNoCC
|
||||
, lib
|
||||
, makeWrapper
|
||||
, runtimeShell
|
||||
, fetchurl
|
||||
, makeDesktopItem
|
||||
, copyDesktopItems
|
||||
, imagemagick
|
||||
, jdk23
|
||||
, dpkg
|
||||
, writeShellScript
|
||||
, bash
|
||||
, tor
|
||||
, zip
|
||||
, gnupg
|
||||
,
|
||||
}:
|
||||
let
|
||||
version = "2.1.2";
|
||||
|
||||
jdk = jdk23.override { enableJavaFX = true; };
|
||||
|
||||
bisq-launcher = args:
|
||||
writeShellScript "bisq-launcher" ''
|
||||
# This is just a comment to convince Nix that Tor is a
|
||||
# runtime dependency; The Tor binary is in a *.jar file,
|
||||
# whereas Nix only scans for hashes in uncompressed text.
|
||||
# ${lib.getExe' tor "tor"}
|
||||
|
||||
rm -fR $HOME/.local/share/Bisq2/tor
|
||||
|
||||
exec "${lib.getExe jdk}" -Djpackage.app-version=@version@ -classpath @out@/lib/app/desktop-app-launcher.jar:@out@/lib/app/* ${args} bisq.desktop_app_launcher.DesktopAppLauncher "$@"
|
||||
'';
|
||||
|
||||
# A given release will be signed by either Alejandro Garcia or Henrik Jannsen
|
||||
# as indicated in the file
|
||||
# https://github.com/bisq-network/bisq2/releases/download/v${version}/signingkey.asc
|
||||
publicKey =
|
||||
{
|
||||
"E222AA02" = fetchurl {
|
||||
url = "https://github.com/bisq-network/bisq2/releases/download/v${version}/E222AA02.asc";
|
||||
sha256 = "sha256-31uBpe/+0QQwFyAsoCt1TUWRm0PHfCFOGOx1M16efoE=";
|
||||
};
|
||||
|
||||
"387C8307" = fetchurl {
|
||||
url = "https://github.com/bisq-network/bisq2/releases/download/v${version}/387C8307.asc";
|
||||
sha256 = "sha256-PrRYZLT0xv82dUscOBgQGKNf6zwzWUDhriAffZbNpmI=";
|
||||
};
|
||||
}."387C8307";
|
||||
in
|
||||
stdenvNoCC.mkDerivation rec {
|
||||
inherit version;
|
||||
|
||||
pname = "bisq2";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/bisq-network/bisq2/releases/download/v${version}/Bisq-${version}.deb";
|
||||
sha256 = "0zgv70xlz3c9mrwmiaa1dgagbc441ppk2vrkgard8zjrvk8rg7va";
|
||||
|
||||
# Verify the upstream Debian package prior to extraction.
|
||||
# See https://bisq.wiki/Bisq_2#Installation
|
||||
# This ensures that a successful build of this Nix package requires the Debian
|
||||
# package to pass verification.
|
||||
nativeBuildInputs = [ gnupg ];
|
||||
downloadToTemp = true;
|
||||
|
||||
postFetch = ''
|
||||
pushd $(mktemp -d)
|
||||
export GNUPGHOME=./gnupg
|
||||
mkdir -m 700 -p $GNUPGHOME
|
||||
ln -s $downloadedFile ./Bisq-${version}.deb
|
||||
ln -s ${signature} ./signature.asc
|
||||
gpg --import ${publicKey}
|
||||
gpg --batch --verify signature.asc Bisq-${version}.deb
|
||||
popd
|
||||
mv $downloadedFile $out
|
||||
'';
|
||||
};
|
||||
|
||||
signature = fetchurl {
|
||||
url = "https://github.com/bisq-network/bisq2/releases/download/v${version}/Bisq-${version}.deb.asc";
|
||||
sha256 = "sha256-WZhI8RDmb7nQqpCQJM86vrp8qQNg+mvRVdSPcDqgzxE=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
copyDesktopItems
|
||||
dpkg
|
||||
imagemagick
|
||||
makeWrapper
|
||||
zip
|
||||
gnupg
|
||||
makeWrapper
|
||||
];
|
||||
|
||||
desktopItems = [
|
||||
(makeDesktopItem {
|
||||
name = "bisq2";
|
||||
exec = "bisq2";
|
||||
icon = "bisq2";
|
||||
desktopName = "Bisq 2";
|
||||
genericName = "Decentralized bitcoin exchange";
|
||||
categories = [
|
||||
"Network"
|
||||
"P2P"
|
||||
];
|
||||
})
|
||||
|
||||
(makeDesktopItem {
|
||||
name = "bisq2-hidpi";
|
||||
exec = "bisq2-hidpi";
|
||||
icon = "bisq2";
|
||||
desktopName = "Bisq 2 (HiDPI)";
|
||||
genericName = "Decentralized bitcoin exchange";
|
||||
categories = [
|
||||
"Network"
|
||||
"P2P"
|
||||
];
|
||||
})
|
||||
];
|
||||
|
||||
unpackPhase = ''
|
||||
dpkg -x $src .
|
||||
'';
|
||||
|
||||
buildPhase = ''
|
||||
# Replace the Tor binary embedded in tor.jar (which is in the zip archive tor.zip)
|
||||
# with the Tor binary from Nixpkgs.
|
||||
|
||||
makeWrapper ${lib.getExe' tor "tor"} ./tor
|
||||
zip tor.zip ./tor
|
||||
zip opt/bisq2/lib/app/tor.jar tor.zip
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
mkdir -p $out/lib $out/bin
|
||||
cp -r opt/bisq2/lib/app $out/lib
|
||||
|
||||
install -D -m 777 ${bisq-launcher ""} $out/bin/bisq2
|
||||
substituteAllInPlace $out/bin/bisq2
|
||||
|
||||
install -D -m 777 ${bisq-launcher "-Dglass.gtk.uiScale=2.0"} $out/bin/bisq2-hidpi
|
||||
substituteAllInPlace $out/bin/bisq2-hidpi
|
||||
|
||||
for n in 16 24 32 48 64 96 128 256; do
|
||||
size=$n"x"$n
|
||||
magick convert opt/bisq2/lib/Bisq2.png -resize $size bisq2.png
|
||||
install -Dm644 -t $out/share/icons/hicolor/$size/apps bisq2.png
|
||||
done;
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "Decentralized bitcoin exchange network";
|
||||
homepage = "https://bisq.network";
|
||||
mainProgram = "bisq2";
|
||||
sourceProvenance = with sourceTypes; [
|
||||
binaryBytecode
|
||||
];
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ emmanuelrosa ];
|
||||
platforms = [ "x86_64-linux" ];
|
||||
};
|
||||
}
|
129
pkgs/dbeaver.nix
Normal file
129
pkgs/dbeaver.nix
Normal file
|
@ -0,0 +1,129 @@
|
|||
{ lib
|
||||
, stdenvNoCC
|
||||
, fetchurl
|
||||
, undmg
|
||||
, makeWrapper
|
||||
, openjdk17
|
||||
, gnused
|
||||
, autoPatchelfHook
|
||||
, wrapGAppsHook3
|
||||
, gtk3
|
||||
, glib
|
||||
, webkitgtk_4_0
|
||||
, glib-networking
|
||||
, override_xmx ? "1024m"
|
||||
,
|
||||
}:
|
||||
stdenvNoCC.mkDerivation (finalAttrs: {
|
||||
pname = "dbeaver-bin";
|
||||
version = "24.2.5";
|
||||
|
||||
src =
|
||||
let
|
||||
inherit (stdenvNoCC.hostPlatform) system;
|
||||
selectSystem = attrs: attrs.${system} or (throw "Unsupported system: ${system}");
|
||||
suffix = selectSystem {
|
||||
x86_64-linux = "linux.gtk.x86_64-nojdk.tar.gz";
|
||||
aarch64-linux = "linux.gtk.aarch64-nojdk.tar.gz";
|
||||
x86_64-darwin = "macos-x86_64.dmg";
|
||||
aarch64-darwin = "macos-aarch64.dmg";
|
||||
};
|
||||
hash = selectSystem {
|
||||
x86_64-linux = "sha256-LnJq23o60c+Ys0V46esP1bIkcnzj26hQUBu3Ut9bMJM=";
|
||||
aarch64-linux = "";
|
||||
x86_64-darwin = "";
|
||||
aarch64-darwin = "";
|
||||
};
|
||||
in
|
||||
fetchurl {
|
||||
url = "https://github.com/dbeaver/dbeaver/releases/download/${finalAttrs.version}/dbeaver-ce-${finalAttrs.version}-${suffix}";
|
||||
inherit hash;
|
||||
};
|
||||
|
||||
sourceRoot = lib.optional stdenvNoCC.hostPlatform.isDarwin "DBeaver.app";
|
||||
|
||||
nativeBuildInputs =
|
||||
[ makeWrapper ]
|
||||
++ lib.optionals (!stdenvNoCC.hostPlatform.isDarwin) [
|
||||
gnused
|
||||
wrapGAppsHook3
|
||||
autoPatchelfHook
|
||||
]
|
||||
++ lib.optionals stdenvNoCC.hostPlatform.isDarwin [ undmg ];
|
||||
|
||||
dontConfigure = true;
|
||||
dontBuild = true;
|
||||
|
||||
prePatch = ''
|
||||
substituteInPlace ${lib.optionalString stdenvNoCC.hostPlatform.isDarwin "Contents/Eclipse/"}dbeaver.ini \
|
||||
--replace-fail '-Xmx1024m' '-Xmx${override_xmx}'
|
||||
'';
|
||||
|
||||
installPhase =
|
||||
if !stdenvNoCC.hostPlatform.isDarwin
|
||||
then ''
|
||||
runHook preInstall
|
||||
|
||||
mkdir -p $out/opt/dbeaver $out/bin
|
||||
cp -r * $out/opt/dbeaver
|
||||
makeWrapper $out/opt/dbeaver/dbeaver $out/bin/dbeaver \
|
||||
--prefix PATH : "${openjdk17}/bin" \
|
||||
--set JAVA_HOME "${openjdk17.home}" \
|
||||
--prefix GIO_EXTRA_MODULES : "${glib-networking}/lib/gio/modules" \
|
||||
--prefix LD_LIBRARY_PATH : "$out/lib:${
|
||||
lib.makeLibraryPath [
|
||||
gtk3
|
||||
glib
|
||||
webkitgtk_4_0
|
||||
glib-networking
|
||||
]
|
||||
}"
|
||||
|
||||
mkdir -p $out/share/icons/hicolor/256x256/apps
|
||||
ln -s $out/opt/dbeaver/dbeaver.png $out/share/icons/hicolor/256x256/apps/dbeaver.png
|
||||
|
||||
mkdir -p $out/share/applications
|
||||
ln -s $out/opt/dbeaver/dbeaver-ce.desktop $out/share/applications/dbeaver.desktop
|
||||
|
||||
substituteInPlace $out/opt/dbeaver/dbeaver-ce.desktop \
|
||||
--replace-fail "/usr/share/dbeaver-ce/dbeaver.png" "dbeaver" \
|
||||
--replace-fail "/usr/share/dbeaver-ce/dbeaver" "$out/bin/dbeaver"
|
||||
|
||||
sed -i '/^Path=/d' $out/share/applications/dbeaver.desktop
|
||||
|
||||
runHook postInstall
|
||||
''
|
||||
else ''
|
||||
runHook preInstall
|
||||
|
||||
mkdir -p $out/{Applications/dbeaver.app,bin}
|
||||
cp -R . $out/Applications/dbeaver.app
|
||||
makeWrapper $out/{Applications/dbeaver.app/Contents/MacOS,bin}/dbeaver \
|
||||
--prefix PATH : "${openjdk17}/bin" \
|
||||
--set JAVA_HOME "${openjdk17.home}"
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
passthru.updateScript = ./update.sh;
|
||||
|
||||
meta = with lib; {
|
||||
homepage = "https://dbeaver.io/";
|
||||
description = "Universal SQL Client for developers, DBA and analysts. Supports MySQL, PostgreSQL, MariaDB, SQLite, and more";
|
||||
longDescription = ''
|
||||
Free multi-platform database tool for developers, SQL programmers, database
|
||||
administrators and analysts. Supports all popular databases: MySQL,
|
||||
PostgreSQL, MariaDB, SQLite, Oracle, DB2, SQL Server, Sybase, MS Access,
|
||||
Teradata, Firebird, Derby, etc.
|
||||
'';
|
||||
sourceProvenance = with sourceTypes; [ binaryNativeCode ];
|
||||
license = licenses.asl20;
|
||||
platforms = platforms.linux ++ platforms.darwin;
|
||||
maintainers = with maintainers; [
|
||||
gepbird
|
||||
mkg20001
|
||||
yzx9
|
||||
];
|
||||
mainProgram = "dbeaver";
|
||||
};
|
||||
})
|
26
pkgs/default.nix
Normal file
26
pkgs/default.nix
Normal file
|
@ -0,0 +1,26 @@
|
|||
{ pkgs
|
||||
, lib
|
||||
, config
|
||||
, ...
|
||||
}:
|
||||
let
|
||||
# list paths
|
||||
pkgs-paths-list = lib.fileset.toList (lib.fileset.fromSource (lib.sources.sourceFilesBySuffices ./. [ ".nix" ]));
|
||||
# no default.nix
|
||||
filtered-paths-list = builtins.filter (path: builtins.baseNameOf path != "default.nix") pkgs-paths-list;
|
||||
# filename-extension parsed out
|
||||
pkgs-paths =
|
||||
builtins.map
|
||||
(path: {
|
||||
name = lib.strings.removeSuffix ".nix" (builtins.baseNameOf path);
|
||||
path = path;
|
||||
})
|
||||
filtered-paths-list;
|
||||
# import each path
|
||||
imported-pkgs = lib.attrsets.mergeAttrsList (builtins.map
|
||||
(pkg: {
|
||||
"${pkg.name}" = pkgs.callPackage pkg.path { };
|
||||
})
|
||||
pkgs-paths);
|
||||
in
|
||||
imported-pkgs
|
28
pkgs/emacs-lsp-booster.nix
Normal file
28
pkgs/emacs-lsp-booster.nix
Normal file
|
@ -0,0 +1,28 @@
|
|||
{ fetchFromGitHub
|
||||
, rustPlatform
|
||||
, lib
|
||||
, ...
|
||||
}:
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "emacs-lsp-booster";
|
||||
version = "0.2.1";
|
||||
cargoHash = "sha256-CvIJ56QrIzQULFeXYQXTpX9PoGx1/DWtgwzfJ+mljEI=";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "blahgeek";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
sha256 = "uP/xJfXQtk8oaG5Zk+dw+C2fVFdjpUZTDASFuj1+eYs=";
|
||||
};
|
||||
|
||||
doCheck = false; # slow as heck, and likely unneded
|
||||
|
||||
meta = with lib; {
|
||||
description = "Improve performance of Emacs LSP servers by converting JSON to bytecode";
|
||||
homepage = "https://github.com/${src.owner}/${pname}";
|
||||
changelog = "https://github.com/${src.owner}/${pname}/releases/tag/${version}";
|
||||
license = [ licenses.mit ];
|
||||
maintainers = [ ];
|
||||
mainProgram = "emacs-lsp-booster";
|
||||
};
|
||||
}
|
0
pkgs/kexec-pkgs
Normal file
0
pkgs/kexec-pkgs
Normal file
72
pkgs/spotube.nix
Normal file
72
pkgs/spotube.nix
Normal file
|
@ -0,0 +1,72 @@
|
|||
{ lib
|
||||
, stdenv
|
||||
, fetchurl
|
||||
, autoPatchelfHook
|
||||
, dpkg
|
||||
, makeWrapper
|
||||
, wrapGAppsHook
|
||||
, libappindicator
|
||||
, libnotify
|
||||
, libsecret
|
||||
, mpv-unwrapped
|
||||
, xdg-user-dirs
|
||||
,
|
||||
}:
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "spotube";
|
||||
version = "3.4.0";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/KRTirtho/spotube/releases/download/v${finalAttrs.version}/Spotube-linux-x86_64.deb";
|
||||
hash = "sha256-XBciTNWsmaY1C8ji+SCWWP/M/uIDZHM9fi9wucHJsBY=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
autoPatchelfHook
|
||||
dpkg
|
||||
makeWrapper
|
||||
wrapGAppsHook
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
libappindicator
|
||||
libnotify
|
||||
libsecret
|
||||
mpv-unwrapped
|
||||
];
|
||||
|
||||
dontWrapGApps = true;
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
mkdir -p $out
|
||||
mv usr/* $out
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
preFixup = ''
|
||||
patchelf $out/share/spotube/lib/libmedia_kit_native_event_loop.so \
|
||||
--replace-needed libmpv.so.1 libmpv.so.2
|
||||
'';
|
||||
|
||||
postFixup = ''
|
||||
makeWrapper $out/share/spotube/spotube $out/bin/spotube \
|
||||
"''${gappsWrapperArgs[@]}" \
|
||||
--prefix LD_LIBRARY_PATH : $out/share/spotube/lib:${lib.makeLibraryPath [mpv-unwrapped]} \
|
||||
--prefix PATH : ${lib.makeBinPath [xdg-user-dirs]}
|
||||
'';
|
||||
|
||||
meta = {
|
||||
changelog = "https://github.com/KRTirtho/spotube/blob/v${finalAttrs.version}/CHANGELOG.md";
|
||||
description = "An open source Spotify client";
|
||||
longDescription = ''
|
||||
Spotube is an open source, cross-platform Spotify client that
|
||||
doesn't require Premium nor uses Electron
|
||||
'';
|
||||
homepage = "https://spotube.netlify.app/";
|
||||
license = lib.licenses.bsdOriginal;
|
||||
maintainers = with lib.maintainers; [ tomasajt ];
|
||||
platforms = [ "x86_64-linux" ];
|
||||
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
|
||||
};
|
||||
})
|
22
pkgs/update-zen-browser.sh
Executable file
22
pkgs/update-zen-browser.sh
Executable file
|
@ -0,0 +1,22 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
set -exuo pipefail
|
||||
|
||||
info=zen-browser.json
|
||||
latestVersion=$(curl -s "https://api.github.com/repos/zen-browser/desktop/releases/latest" | jq --raw-output '.tag_name | sub("^v"; "")')
|
||||
currentVersion=$(jq -r '.version' "$info")
|
||||
|
||||
if [[ "$currentVersion" == "$latestVersion" ]]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
url="https://github.com/zen-browser/desktop/releases/download/$latestVersion/zen-x86_64.AppImage"
|
||||
|
||||
hash=$(nix-prefetch-url --type sha256 "$url" | xargs nix hash to-sri --type sha256)
|
||||
|
||||
jq --arg version "$latestVersion" \
|
||||
--arg hash "$hash" \
|
||||
'.version = $version | .hash = $hash' \
|
||||
"$info" >"${info}.tmp"
|
||||
|
||||
mv "${info}.tmp" "$info"
|
12
pkgs/xmrig-donate-level.patch
Normal file
12
pkgs/xmrig-donate-level.patch
Normal file
|
@ -0,0 +1,12 @@
|
|||
diff --git a/src/donate.h b/src/donate.h
|
||||
--- a/src/donate.h
|
||||
+++ b/src/donate.h
|
||||
@@ -46,6 +46,6 @@
|
||||
*/
|
||||
-constexpr const int kDefaultDonateLevel = 1;
|
||||
-constexpr const int kMinimumDonateLevel = 1;
|
||||
+constexpr const int kDefaultDonateLevel = @donateLevel@;
|
||||
+constexpr const int kMinimumDonateLevel = @donateLevel@;
|
||||
|
||||
|
||||
#endif /* XMRIG_DONATE_H */
|
4
pkgs/zen-browser.json
Normal file
4
pkgs/zen-browser.json
Normal file
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": "1.7.6b",
|
||||
"hash": "sha256-GJuxooMV6h3xoYB9hA9CaF4g7JUIJ2ck5/hiQp89Y5o="
|
||||
}
|
37
pkgs/zen-browser.nix
Normal file
37
pkgs/zen-browser.nix
Normal file
|
@ -0,0 +1,37 @@
|
|||
{ lib
|
||||
, appimageTools
|
||||
, fetchurl
|
||||
,
|
||||
}:
|
||||
let
|
||||
pname = "zen-browser";
|
||||
metadata = builtins.fromJSON (builtins.readFile ./zen-browser.json);
|
||||
version = metadata.version;
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/zen-browser/desktop/releases/download/${version}/zen-x86_64.AppImage";
|
||||
hash = metadata.hash;
|
||||
};
|
||||
|
||||
extracted = appimageTools.extract {
|
||||
inherit pname version src;
|
||||
};
|
||||
in
|
||||
appimageTools.wrapType2 {
|
||||
inherit pname version src;
|
||||
|
||||
extraInstallCommands = ''
|
||||
install -Dm 644 ${extracted}/zen.desktop $out/share/applications/zen.desktop
|
||||
install -Dm 644 {${extracted}/usr/,$out}/share/icons/hicolor/128x128/apps/zen.png
|
||||
substituteInPlace $out/share/applications/zen.desktop --replace-fail 'Exec=zen' 'Exec=${pname}'
|
||||
'';
|
||||
|
||||
updateScript = ./update.sh;
|
||||
|
||||
meta = with lib; {
|
||||
description = "Experience tranquillity while browsing the web without people tracking you!";
|
||||
homepage = "https://zen-browser.app";
|
||||
license = licenses.mpl20;
|
||||
platforms = [ "x86_64-linux" ];
|
||||
};
|
||||
}
|
5
push_cache.sh
Executable file
5
push_cache.sh
Executable file
|
@ -0,0 +1,5 @@
|
|||
#!/usr/bin/env fish
|
||||
|
||||
nix copy --substitute-on-destination --to ssh://root@he4 /run/booted-system
|
||||
nix copy --substitute-on-destination --to ssh://root@he4 /run/current-system
|
||||
nix copy --substitute-on-destination --to ssh://root@he4 /nix/var/nix/profiles/system
|
8
secrets/autoimport/oeko-smb.age
Normal file
8
secrets/autoimport/oeko-smb.age
Normal file
|
@ -0,0 +1,8 @@
|
|||
age-encryption.org/v1
|
||||
-> X25519 jFG9C82DItvSb+SOksANAGlXUtWZZlX8Ra4izwnRY0E
|
||||
5uXroeBf4xIRpP1EGL7MRaJzAHuBOfma+REDL0feths
|
||||
-> a$E_@*{-grease
|
||||
uVrpLCr1m6U
|
||||
--- 3mlDCxkEduHqb7pKtSjiApbNsVUcPInKHNu3CgEMYtM
|
||||
€·IùÿÀÚþA`€;×JßJPgXö‘`JTÆÉ—î<ÉsŠ¦Ü›~µ–ÅðsnE¬ûœ˜ÈD
|
||||
AüÙüæv؇9ùg]\¨z
|
BIN
secrets/autoimport/tester_passwd_hash.age
Normal file
BIN
secrets/autoimport/tester_passwd_hash.age
Normal file
Binary file not shown.
BIN
secrets/autoimport/tristand_passwd_hash.age
Normal file
BIN
secrets/autoimport/tristand_passwd_hash.age
Normal file
Binary file not shown.
BIN
secrets/master/age_master.age
Normal file
BIN
secrets/master/age_master.age
Normal file
Binary file not shown.
1
secrets/master/age_master.pub
Normal file
1
secrets/master/age_master.pub
Normal file
|
@ -0,0 +1 @@
|
|||
age1vx98rqycfxzenc4u8n6kaqvpy7tvdzksrywr2z9h5jc5e5e6q37syn9q5l
|
|
@ -0,0 +1,11 @@
|
|||
age-encryption.org/v1
|
||||
-> ssh-ed25519 MF6k1Q anxlHZVUMoBs6OwR6PyOUtYwO2vHAfKQnyG3863r9Tw
|
||||
CesSIeCpIWCJwJhMh9WehNXVNbmrj3pqh5Tx5kUuvg8
|
||||
-> 8{S'rs-grease 8WdWqhw x,dBQ&
|
||||
wq1S08nFpLYcK79a6VUzWXEmt+LRwFzWhKJurnqfEWeEouLipLYqVGDTHR1csFTk
|
||||
rABA0BFZVCEJfXA
|
||||
--- HXgrXmDf5iA92//WzKgOTWAj9c11ihHASTmP4Y0VrkI
|
||||
Ç#C‰KGcÍoÓºx#å9Ã
|
||||
VUÍÈ÷"
|
||||
—|ªž‹/Û=ߺâ<C2BA>ý<OqðáÓ¡IqÊ}?+¬o–Ã>æ
|
||||
¡Æ~~º4Vx{3ÍzÉM&GŒ®Q<><51>¿—9.Ic:~‰¥å™Ä}ÇÖ/<_ë5;|ïã꾑ß_áoÈ%’õX†•í¿Q.ý1ʱ
|
|
@ -0,0 +1,9 @@
|
|||
age-encryption.org/v1
|
||||
-> ssh-ed25519 MF6k1Q 2HucQQQNnyJE0kn4RuuUgwQIGdXU4d/DszhFtZOa4Q8
|
||||
v+ENtdglbejsSDmyNSsYd57E8ecDO8Ghuk7ZISgCSLQ
|
||||
-> DafUPnwm-grease oZbxI; pw\ }|o)!<T
|
||||
ZWjNlZ+RnsfUYkGiU6GB4+POjMOONncKTSzrn1BVvwA499A1E/WcZDmNvKaifi1q
|
||||
6HjWXkqG7E51MYsSNMOeEqbscXue2FwLurqoR7oND25z/e5YF+Fgtw
|
||||
--- zfmzCMb3f3IDlnpyK4e4BwRelGU6rfWNZI3JWusQt0A
|
||||
å;‡ *…ïJUŽD!Ènƒ¬[‚¶QN pÓdʵíK¶X3vž1Û#gZËE…½†9{°
|
||||
¹y><3E>ÉÞÍ89ûˆ¿d²Á|zi¬áÝ*R9÷F(WÛßdúÙÔ‹{©©âzüØe‡Åî8<¬è¨«eÐz¯‘<>¡ÃŽçŸyhãõ¹î
|
|
@ -0,0 +1,7 @@
|
|||
age-encryption.org/v1
|
||||
-> ssh-ed25519 MF6k1Q yoBilB1k3lGv86kA5ZsVT96u9fem7ixI74U0nHXH0RQ
|
||||
T6Tn+92NMyOaFN37KfgNW2MMCwOyQwzV+qZx82Xv1qI
|
||||
-> Y7Gy(6L-grease 2IDyf#6"
|
||||
4iPvuA/ID+9KQIqzYuK9
|
||||
--- galOUJ+zWFZJIsyO9rk9mhfQEy1LXrX+jrbPVOVnX+c
|
||||
rK3K°Îl"Ž• Q&;€öÄ;¡^â<>“Œ¨Ó–<Ú¿“ñi+n;j9Χ‡ö¾˜ÿO>Qù7~$6¨²èüŠÅ\
|
Binary file not shown.
|
@ -0,0 +1,9 @@
|
|||
age-encryption.org/v1
|
||||
-> ssh-ed25519 MqgTQA kHKU7lp3SvhVlgDk8qBbQU+nrV8O84CLtR32ZGATDw4
|
||||
1E9KyKzKwio7ltF1H36tSLWSao0TPNNlbwJAwxhw3CI
|
||||
-> +&-grease
|
||||
y1YrcXJ8+mGdSTrJywOZM/E8jbHPSX9rARC6uKOHgESGkH1NWsINbEk0/1fYHi62
|
||||
6Y+k9Ig9oX7taekoNCU
|
||||
--- lgK5w16T9LaMc6yoWW+h+zVNyuKuoEoeJi8p7lura1Q
|
||||
X
|
||||
¢ò&ÃbZ[IßC>ÊԘОWp¼²ˆŠŠ?èµ ä[˜š-]À)
HY¦(u/Ý°šÄû¹É–Ý÷Þ^摨à@„9öõýxVG.¾n
£9»°‡Rr¡ŸàŽxzJf<4A>±ÛwK‡zbq÷ZÖ©ùf»FÎÓ‹ê=†½¼Œ„P
|
|
@ -0,0 +1,8 @@
|
|||
age-encryption.org/v1
|
||||
-> ssh-ed25519 MqgTQA 7y3on/Y6P89gncEtSzn6dak659D+C0jT0Lo711yQaQ0
|
||||
bsILI8jRG8MFJ2xSowtYyNYHPbcZmS+OFBbTrn7vNgo
|
||||
-> a-grease /3
|
||||
faRjVzpKpTOBeDIZVd+uK9AGzVH7LYbIH3QiTZMHE+zE21fI6yjGEQyIE2jsVhTq
|
||||
q/PxcbNtJ9fZ2JCU43lGX7DveIYT7Z84vX955I3BkIppgQ4
|
||||
--- dNDrqjg89dlNEf3ZkyW0fU7OyETfVPtRAw7JcRJxQ1o
|
||||
ŠâCد<11>“
DXo¤Ø‚Á?9±ÿ©u°iÉÝ”s„çrºÞ©wyB¶~umȹ¶3Dæ€MÓëÏÅbé2táì€j`zDñXù
|
|
@ -0,0 +1,8 @@
|
|||
age-encryption.org/v1
|
||||
-> X25519 OFjbqRctUAtGyBEVWBsqkxAqEFBEjqPsAAihBE7Gphs
|
||||
QG/gC3m+L6wqvlX+Dz/folLwnPuj/U8rV5IfMHe8dg4
|
||||
-> Sw-grease Q+i0n ScImd sozfa J4C^w\;J
|
||||
1d5CjCdcl7c61CQqrjoxPnEeByXRxGfzjDgS/RT/Dws
|
||||
--- MsWiJ70U6l6jdNJFpk0I86Zg0RL976YNqzVXkIjOZio
|
||||
ÈþÓeÓÆ>Å?<3F>aÀä‘@¦ì¯ù{'z=Xõ<²ðÌM<03>Š<—
ĺÝ<C2BA>NíÄãËûŸ
G4õ<34>œ\»)@½y˽߈Q
|
||||
{°5¾¶3ÍJó.)êJbfù½àI©X¥‹Õ5âSÀü½‘é¶~&´kMV-‡My]C(Z‡?ò6¥b<mÔ3
|
|
@ -0,0 +1,9 @@
|
|||
age-encryption.org/v1
|
||||
-> X25519 xeJaD6yDB9eAHsIPOTBxy/ElEcnxWUBVOhWZpxU3DQU
|
||||
jKUtEAa1TiwluihaB9P4a4wIjTAQdizwibdg2nxoGX4
|
||||
-> WQ?(7@H7-grease J} -$@ a!
|
||||
IaTsmenxfDBQyH2NiMgtxknv9rxMF9k7J4FVg5o4Eji4TXS0Suf/A1RURERWKOWw
|
||||
HydNZSb8HaXRplbAHlNXIJhTmFrflHzqiCokoLfyjw
|
||||
--- a/z16/kiznB+4igG6xZM1cE74oJm2fG0AxNtcRWU6pk
|
||||
ƒ3&]MHÎhá<>X·L#<Z|S¯%×uyõž©äÑóoðo*r¶‰HÚ$‚© x:
|
||||
wUz%9„A†«tž3šd/«óÈfëŠßï<C39F>GÚÍ éÇŒ;ù}ö»‚—²w‰ua¨2 6P^S|QH&ѽ}ýî
aÌÉ'´^aÄL
|
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,8 @@
|
|||
age-encryption.org/v1
|
||||
-> X25519 MTkyfchfKiSDgE7spey5A63M+HL154+9IQMME9W4+Qs
|
||||
WgmrIPubkRuOaiL2Xg128YwlBC0zm745/AWnamOFw2k
|
||||
-> 1*xAmJG9-grease b /e8:M
|
||||
ww8Q6PpTmXLX/JUUQM9i
|
||||
--- bZEquotGS4bqDJrshA0x/ayVf9dFNXLNQJzBMAo/rho
|
||||
÷eXOðŠ˜"Ž—÷•3¢›k¶â¤Ý™Í¼ì<>Û³mȱ<à£Iú‡à*ƒÞÅš6Qpó¢ð*Þˆ¨hí3"E$z-Û×.}n<§xw³ãP¶åÇñ_šWÈCߟÈ×æbë¼®i†1
|
||||
eDÚþoP™É&+ÒÍ“›ÿ%Î{áMε3Áé]¶ÞTø<54>Õ
|
|
@ -0,0 +1,8 @@
|
|||
age-encryption.org/v1
|
||||
-> X25519 qk4Rd7hySOiIptLofRGxAnyG3S9sv5jua60FNppGX3Y
|
||||
9pglJxn8jiaFiHfYQcZwgTwSgLMeUek931YIzqB1J7U
|
||||
-> LV-grease `g4
|
||||
dOXc+jLqdU+atxho8PrrhaT0IPE8ZvI1Cf2CjLSZVyri721UNW4yQSdxEOnFi/wy
|
||||
LbR2iQrCTTZtL5jKYsqyMWsfq4eQK0AgE4K/r3N9jw
|
||||
--- L1+iuf4GpS1uKVNZK3PTLploW4+ZU6tt+JpWjrT+yi0
|
||||
$={Š%=<3D>á;çFjíkƒ¨jº”ukMó€§6jø×.Û{Dk[ªG„ò‰õ£úo4%®¨÷A,õý?ƒ;ª$TœÆCµ<‹
|
150
systems/nixos-desk/default.nix
Normal file
150
systems/nixos-desk/default.nix
Normal file
|
@ -0,0 +1,150 @@
|
|||
{ confin
|
||||
, lib
|
||||
, pkgs
|
||||
, modulesPath
|
||||
, system
|
||||
, inputs
|
||||
, ...
|
||||
}: {
|
||||
imports = [
|
||||
(modulesPath + "/installer/scan/not-detected.nix")
|
||||
inputs.nixos-hardware.nixosModules.common-cpu-amd
|
||||
inputs.nixos-hardware.nixosModules.common-cpu-amd-pstate
|
||||
inputs.nixos-hardware.nixosModules.common-gpu-amd
|
||||
inputs.nixos-hardware.nixosModules.common-pc
|
||||
inputs.nixos-hardware.nixosModules.common-pc-ssd
|
||||
../../os-mods/age
|
||||
../../os-mods/amdgpu
|
||||
../../os-mods/cachix
|
||||
../../os-mods/common
|
||||
../../os-mods/desktop
|
||||
../../os-mods/desktop/audio.nix
|
||||
../../os-mods/desktop/gaming.nix
|
||||
../../os-mods/desktop/printing.nix
|
||||
../../os-mods/netdata/client.nix
|
||||
../../os-mods/network
|
||||
../../os-mods/virt
|
||||
../../os-mods/xmrig
|
||||
../../users
|
||||
./disko.nix
|
||||
];
|
||||
|
||||
config =
|
||||
let
|
||||
# hid-fanatecff = pkgs.callPackage ./hid-fanatecff.nix { kernelPackages = config.boot.kernelPackages; };
|
||||
in
|
||||
{
|
||||
system.stateVersion = "23.05";
|
||||
age.rekey.hostPubkey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINHvqEPN39Brd3SYJxVYROwtv0UXl/7fW6z3otUWEaEU root@nixos-desk";
|
||||
|
||||
nix.settings.system-features = [
|
||||
"benchmark"
|
||||
"big-parallel"
|
||||
"kvm"
|
||||
"nixos-test"
|
||||
"gccarch-x86-64-v3"
|
||||
"gccarch-znver3"
|
||||
];
|
||||
|
||||
boot = {
|
||||
# kernelPackages = pkgs.linuxPackages_latest;
|
||||
# kernelPackages = pkgs.linuxPackages_zen;
|
||||
|
||||
# kernelPackages = pkgs.linuxPackages_cachyos;
|
||||
kernelPackages = pkgs.pkgsx86_64_v3.linuxPackages_cachyos;
|
||||
kernelModules = [ "nct6775" ];
|
||||
# extraModulePackages = [ hid-fanatecff ];
|
||||
loader = {
|
||||
systemd-boot = {
|
||||
enable = lib.mkForce false; #lanzaboote
|
||||
configurationLimit = 16;
|
||||
};
|
||||
|
||||
efi.canTouchEfiVariables = true;
|
||||
};
|
||||
|
||||
# TODO Extract secureboot module
|
||||
lanzaboote = {
|
||||
enable = true;
|
||||
configurationLimit = 16;
|
||||
pkiBundle = "/etc/secureboot";
|
||||
};
|
||||
|
||||
initrd = {
|
||||
availableKernelModules = [ "ahci" "nvme" "xhci_pci" "uas" "usbhid" "usb_storage" "sd_mod" ];
|
||||
kernelModules = [ ];
|
||||
systemd.enable = true;
|
||||
};
|
||||
};
|
||||
|
||||
programs.fuse.userAllowOther = true;
|
||||
environment.systemPackages = with pkgs; [
|
||||
input-remapper
|
||||
lm_sensors
|
||||
sshfs
|
||||
coreutils-full
|
||||
cpu-x
|
||||
sbctl # secureboot debugging/config/mgmt
|
||||
];
|
||||
environment.etc = {
|
||||
"sysconfig/lm_sensors".text = ''
|
||||
HWMON_MODULES="nct6775"
|
||||
'';
|
||||
};
|
||||
|
||||
# TODO nixify current mousewheel workaround config
|
||||
# likely just need to add json to home-manager
|
||||
services.input-remapper.enable = true;
|
||||
|
||||
services.btrfs.autoScrub.enable = true;
|
||||
# services.udev.packages = [ hid-fanatecff ];
|
||||
|
||||
networking = {
|
||||
# tailscale docker test
|
||||
firewall.allowedTCPPorts = [ 80 443 3478 41641 ];
|
||||
firewall.allowedUDPPorts = [ 80 443 3478 41641 ];
|
||||
firewall.allowedTCPPortRanges = [
|
||||
{
|
||||
from = 39000;
|
||||
to = 42000;
|
||||
}
|
||||
{
|
||||
from = 18000;
|
||||
to = 19000;
|
||||
}
|
||||
];
|
||||
firewall.allowedUDPPortRanges = [
|
||||
{
|
||||
from = 39000;
|
||||
to = 42000;
|
||||
}
|
||||
{
|
||||
from = 18000;
|
||||
to = 19000;
|
||||
}
|
||||
];
|
||||
|
||||
hostName = "nixos-desk";
|
||||
useDHCP = lib.mkDefault true;
|
||||
extraHosts = ''
|
||||
100.64.0.1 oekonzept.net
|
||||
100.64.0.1 camt.oekonzept.net
|
||||
100.64.0.1 camt-cbg.oekonzept.net
|
||||
100.64.0.1 camt-eth.oekonzept.net
|
||||
100.64.0.1 camt-pro.oekonzept.net
|
||||
100.64.0.1 camt-swbfk.oekonzept.net
|
||||
100.64.0.1 cloud.oekonzept.net
|
||||
100.64.0.1 office.oekonzept.net
|
||||
100.64.0.1 llama.oekonzept.net
|
||||
100.64.0.1 netdata.oekonzept.net
|
||||
100.64.0.1 oproject.oekonzept.net
|
||||
100.64.0.1 leantime.oekonzept.net
|
||||
'';
|
||||
};
|
||||
hardware = {
|
||||
enableRedistributableFirmware = true;
|
||||
};
|
||||
|
||||
zramSwap.enable = true;
|
||||
};
|
||||
}
|
192
systems/nixos-desk/disko.nix
Normal file
192
systems/nixos-desk/disko.nix
Normal file
|
@ -0,0 +1,192 @@
|
|||
let
|
||||
cryptOpenArgs = [
|
||||
"--allow-discards"
|
||||
"--perf-same_cpu_crypt"
|
||||
"--perf-submit_from_crypt_cpus"
|
||||
"--perf-no_read_workqueue"
|
||||
"--perf-no_write_workqueue"
|
||||
];
|
||||
in
|
||||
{
|
||||
disko.devices = {
|
||||
disk = {
|
||||
cryptboot_1 = {
|
||||
type = "disk";
|
||||
device = "/dev/disk/by-id/nvme-CT1000P1SSD8_2003E28202D0";
|
||||
content = {
|
||||
type = "gpt";
|
||||
partitions = {
|
||||
luks = {
|
||||
# size = "831.5G";
|
||||
end = "-100G";
|
||||
# label = "Linux LUKS";
|
||||
type = "8309";
|
||||
content = {
|
||||
type = "luks";
|
||||
name = "cryptboot_1";
|
||||
extraOpenArgs = cryptOpenArgs;
|
||||
passwordFile = "/tmp/secret.key";
|
||||
additionalKeyFiles = [ ];
|
||||
# content is empty here as the btrfs partition will be created via extraArgs of the cryptroot_1 partition def
|
||||
};
|
||||
};
|
||||
luksSwap = {
|
||||
size = "32G";
|
||||
content = {
|
||||
type = "luks";
|
||||
name = "cryptswap_1";
|
||||
extraOpenArgs = cryptOpenArgs;
|
||||
passwordFile = "/tmp/secret.key";
|
||||
additionalKeyFiles = [ ];
|
||||
content = {
|
||||
type = "swap";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
cryptboot_0 = {
|
||||
type = "disk";
|
||||
device = "/dev/disk/by-id/nvme-Samsung_SSD_970_EVO_Plus_1TB_S4EWNX0NB42209Z";
|
||||
content = {
|
||||
type = "gpt";
|
||||
partitions = {
|
||||
luks = {
|
||||
# size = "831.5G";
|
||||
end = "-100G";
|
||||
# label = "Linux LUKS";
|
||||
type = "8309";
|
||||
content = {
|
||||
type = "luks";
|
||||
name = "cryptboot_0";
|
||||
extraOpenArgs = cryptOpenArgs;
|
||||
passwordFile = "/tmp/secret.key";
|
||||
additionalKeyFiles = [ ];
|
||||
content = {
|
||||
# this partiton needs to be in the last parent part alphabetically to ensure the referenced dev already exists
|
||||
type = "btrfs";
|
||||
extraArgs = [
|
||||
"-L cryptboot_btrfs"
|
||||
"-f"
|
||||
"-m raid1"
|
||||
"-d raid1"
|
||||
"/dev/mapper/cryptboot_0"
|
||||
];
|
||||
subvolumes = {
|
||||
"/" = {
|
||||
mountpoint = "/media/@btrfsroot";
|
||||
mountOptions = [
|
||||
"rw"
|
||||
"autodefrag"
|
||||
"compress=zstd"
|
||||
"discard=async"
|
||||
"relatime"
|
||||
"space_cache=v2"
|
||||
"ssd"
|
||||
];
|
||||
};
|
||||
"/_active" = { };
|
||||
"/_active/rootvol" = { };
|
||||
"/_active/pkgvol" = { };
|
||||
"/_active/nix_rootvol" = {
|
||||
mountpoint = "/";
|
||||
mountOptions = [
|
||||
"rw"
|
||||
"autodefrag"
|
||||
"compress=zstd"
|
||||
"discard=async"
|
||||
"relatime"
|
||||
"space_cache=v2"
|
||||
"ssd"
|
||||
];
|
||||
};
|
||||
"/_active/homevol" = {
|
||||
mountpoint = "/home";
|
||||
mountOptions = [
|
||||
"rw"
|
||||
"autodefrag"
|
||||
"compress=zstd"
|
||||
"discard=async"
|
||||
"relatime"
|
||||
"space_cache=v2"
|
||||
"ssd"
|
||||
];
|
||||
};
|
||||
"/_active/nixvol" = {
|
||||
mountpoint = "/nix";
|
||||
mountOptions = [
|
||||
"rw"
|
||||
"autodefrag"
|
||||
"compress=zstd"
|
||||
"discard=async"
|
||||
"relatime"
|
||||
"space_cache=v2"
|
||||
"ssd"
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
ESP = {
|
||||
label = "EFI_0";
|
||||
name = "ESP";
|
||||
size = "1024M";
|
||||
type = "EF00";
|
||||
content = {
|
||||
type = "filesystem";
|
||||
format = "vfat";
|
||||
mountpoint = "/boot";
|
||||
mountOptions = [
|
||||
"rw"
|
||||
"relatime"
|
||||
"fmask=0022"
|
||||
"dmask=0022"
|
||||
"codepage=437"
|
||||
"iocharset=ascii"
|
||||
"shortname=mixed"
|
||||
"utf8"
|
||||
"errors=remount-ro"
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
sandisk = {
|
||||
type = "disk";
|
||||
device = "/dev/disk/by-id/ata-SanDisk_SDSSDH3_4T00_211011800267";
|
||||
content = {
|
||||
type = "gpt";
|
||||
partitions = {
|
||||
luks = {
|
||||
# ~size = "3.4T";
|
||||
end = "-250G";
|
||||
label = "SanDisk";
|
||||
type = "8300";
|
||||
content = {
|
||||
type = "btrfs";
|
||||
extraArgs = [ ];
|
||||
subvolumes = {
|
||||
"/" = {
|
||||
mountpoint = "/media/SanDisk";
|
||||
mountOptions = [
|
||||
"rw"
|
||||
"autodefrag"
|
||||
"compress=zstd"
|
||||
"discard=async"
|
||||
"relatime"
|
||||
"space_cache=v2"
|
||||
"ssd"
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
301
systems/nixos-fw16/default.nix
Normal file
301
systems/nixos-fw16/default.nix
Normal file
|
@ -0,0 +1,301 @@
|
|||
{ config
|
||||
, lib
|
||||
, pkgs
|
||||
, modulesPath
|
||||
, system
|
||||
, inputs
|
||||
, ...
|
||||
}: {
|
||||
imports = [
|
||||
(modulesPath + "/installer/scan/not-detected.nix")
|
||||
inputs.nixos-hardware.nixosModules.common-hidpi
|
||||
inputs.nixos-hardware.nixosModules.framework-16-7040-amd
|
||||
../../os-mods/age
|
||||
../../os-mods/net_disks/oeko.nix
|
||||
../../os-mods/amdgpu
|
||||
../../os-mods/cachix
|
||||
../../os-mods/common
|
||||
../../os-mods/desktop
|
||||
../../os-mods/desktop/audio.nix
|
||||
../../os-mods/desktop/gaming.nix
|
||||
../../os-mods/desktop/printing.nix
|
||||
../../os-mods/netdata/client.nix
|
||||
../../os-mods/network
|
||||
# ../../os-mods/ryzenapu
|
||||
../../os-mods/virt
|
||||
../../users
|
||||
./disks.nix
|
||||
];
|
||||
|
||||
age.rekey.hostPubkey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIRFEtmoq36QmvAwv/xIVdvaf+B9Scbm5cUFFkP/c1nS root@nixos-f16";
|
||||
nix.settings.builders-use-substitutes = true;
|
||||
nix.distributedBuilds = true;
|
||||
nix.buildMachines = [ ];
|
||||
# [
|
||||
# {
|
||||
# hostName = "nixremote@nixos-desk";
|
||||
# system = "x86_64-linux";
|
||||
# protocol = "ssh";
|
||||
# maxJobs = 0;
|
||||
# speedFactor = 0;
|
||||
# supportedFeatures = [
|
||||
# "benchmark"
|
||||
# "big-parallel"
|
||||
# "kvm"
|
||||
# "nixos-test"
|
||||
# "gccarch-x86-64-v3"
|
||||
# "gccarch-znver3"
|
||||
# ];
|
||||
# mandatoryFeatures = [ ];
|
||||
# }
|
||||
# {
|
||||
# hostName = "nixremote@nixos-pulse";
|
||||
# system = "x86_64-linux";
|
||||
# protocol = "ssh";
|
||||
# maxJobs = 0;
|
||||
# speedFactor = 1;
|
||||
# supportedFeatures = [
|
||||
# "benchmark"
|
||||
# "big-parallel"
|
||||
# "kvm"
|
||||
# "nixos-test"
|
||||
# "gccarch-x86-64-v3"
|
||||
# "gccarch-znver2"
|
||||
# ];
|
||||
# mandatoryFeatures = [ ];
|
||||
# }
|
||||
# ];
|
||||
|
||||
####################
|
||||
systemd.user = {
|
||||
services.modprobed-db = {
|
||||
description = "modprobed-db service to scan and store new kernel modules";
|
||||
wants = [ "modprobed-db.timer" ];
|
||||
wantedBy = [ "default.target" ];
|
||||
serviceConfig = {
|
||||
ExecStart = "${pkgs.modprobed-db}/bin/modprobed-db storesilent";
|
||||
ExecStop = "${pkgs.modprobed-db}/bin/modprobed-db storesilent";
|
||||
Type = "simple";
|
||||
};
|
||||
path = builtins.attrValues {
|
||||
inherit (pkgs) gawk getent coreutils gnugrep gnused kmod;
|
||||
};
|
||||
};
|
||||
timers.modprobed-db = {
|
||||
wantedBy = [ "timers.target" ];
|
||||
partOf = [ "modprobed-db.service" ];
|
||||
timerConfig = {
|
||||
Persistent = true;
|
||||
OnUnitActiveSec = "1h";
|
||||
};
|
||||
};
|
||||
};
|
||||
################
|
||||
|
||||
security.sudo-rs.wheelNeedsPassword = lib.mkForce true; # unneded due to fp sensor
|
||||
|
||||
# Power mgmt
|
||||
services.input-remapper.enable = true;
|
||||
services.power-profiles-daemon.enable = true;
|
||||
powerManagement.powertop.enable = true;
|
||||
programs.corectrl.gpuOverclock.enable = lib.mkForce false; # TODO Check if needed
|
||||
programs.adb.enable = true;
|
||||
####
|
||||
|
||||
nix.settings.system-features = [
|
||||
"benchmark"
|
||||
"big-parallel"
|
||||
"kvm"
|
||||
"nixos-test"
|
||||
"gccarch-znver4"
|
||||
];
|
||||
# nixpkgs.hostPlatform.gcc.arch = "znver2";
|
||||
|
||||
chaotic = {
|
||||
# scx = {
|
||||
# enable = false; # temp
|
||||
# scheduler = "scx_bpfland";
|
||||
# package = pkgs.scx;
|
||||
# };
|
||||
nyx = {
|
||||
overlay.enable = true;
|
||||
# overlay.onTopOf = "user-pkgs"; # needed ?
|
||||
# overlay.flakeNixpkgs.config = pkgs.config; # needed ?
|
||||
};
|
||||
};
|
||||
|
||||
boot = {
|
||||
# kernelPackages = pkgs.linuxPackages_latest; # bootstrap
|
||||
# kernelPackages = pkgs.linuxPackages_zen; # bootstrap
|
||||
# kernelPackages = pkgs.linuxPackages_cachyos; # bootstrap
|
||||
# kernelPackages = pkgs.pkgsAMD64Microarchs.znver4.linuxPackages_cachyos;
|
||||
|
||||
# 6.14 rc wohooo
|
||||
kernelPackages = pkgs.pkgsAMD64Microarchs.znver4.linuxPackages_cachyos-rc;
|
||||
|
||||
kernelPatches = [ ];
|
||||
kernelParams = [
|
||||
# "systemd.unit=emergency.target"
|
||||
# "amdgpu.ppfeaturemask=0xfffd7fff" # gpu overclockfoo # TODO Readd if crashes continue 20/02/2025
|
||||
"systemd.setenv=SYSTEMD_SULOGIN_FORCE=1"
|
||||
# "rescue"
|
||||
"pcie_aspm=force" # TODO Check hibernate without
|
||||
# "pcie_aspm.policy=powersupersave"
|
||||
"rtc_cmos.use_acpi_alarm=1" # reduce S0 sleep wakeups
|
||||
"gpiolib_acpi.ignore_interrupt=AMDI0009:00@9" # mask IRQ 9 ?
|
||||
];
|
||||
loader = {
|
||||
timeout = 0;
|
||||
systemd-boot = {
|
||||
enable = false; # due to lanzaboote
|
||||
configurationLimit = 12;
|
||||
|
||||
memtest86.enable = true;
|
||||
# bootCounting.enable = true; # reverted atm
|
||||
};
|
||||
efi.canTouchEfiVariables = true;
|
||||
};
|
||||
|
||||
lanzaboote = {
|
||||
enable = true;
|
||||
configurationLimit = 12;
|
||||
# pkiBundle = "/etc/secureboot";
|
||||
pkiBundle = "/var/lib/sbctl";
|
||||
};
|
||||
initrd = {
|
||||
availableKernelModules = [
|
||||
"nvme"
|
||||
"xhci_pci"
|
||||
"thunderbolt"
|
||||
"uas" # needed ?
|
||||
"usbhid"
|
||||
"usb_storage"
|
||||
"sd_mod"
|
||||
];
|
||||
kernelModules = [ ];
|
||||
systemd.enable = true;
|
||||
};
|
||||
|
||||
extraModulePackages = [ ];
|
||||
};
|
||||
|
||||
networking = {
|
||||
hostName = "nixos-fw16";
|
||||
extraHosts = ''
|
||||
192.168.0.75 monitor.oekonzept.de
|
||||
192.168.0.151 rosa.oekonzept.de
|
||||
192.168.0.171 karl.oekonzept.de
|
||||
192.168.0.206 vewadb.oekonzept.de
|
||||
192.168.0.191 vewadb2.oekonzept.de
|
||||
192.168.0.190 vpn.oekonzept.de
|
||||
192.168.0.180 vewasmb.oekonzept.de
|
||||
192.168.0.91 puppet.oekonzept.de
|
||||
100.64.0.1 oekonzept.net
|
||||
100.64.0.1 camt.oekonzept.net
|
||||
100.64.0.1 camt-cbg.oekonzept.net
|
||||
100.64.0.1 camt-eth.oekonzept.net
|
||||
100.64.0.1 camt-pro.oekonzept.net
|
||||
100.64.0.1 camt-swbfk.oekonzept.net
|
||||
100.64.0.1 cloud.oekonzept.net
|
||||
100.64.0.1 office.oekonzept.net
|
||||
100.64.0.1 llama.oekonzept.net
|
||||
100.64.0.1 netdata.oekonzept.net
|
||||
100.64.0.1 oproject.oekonzept.net
|
||||
100.64.0.1 leantime.oekonzept.net
|
||||
100.64.0.1 nixos-karl-kvm-guest.oekonzept.de
|
||||
176.9.242.147 fe3f3294-c93a-4aca-895e-abe6c858dbd5-llama-cpp.redvau.lt
|
||||
'';
|
||||
interfaces = {
|
||||
eth0 = {
|
||||
useDHCP = false;
|
||||
ipv4.addresses = [
|
||||
{
|
||||
address = "192.168.0.21";
|
||||
prefixLength = 24;
|
||||
}
|
||||
];
|
||||
ipv4.routes = [
|
||||
{
|
||||
address = "192.168.0.0";
|
||||
prefixLength = 24;
|
||||
}
|
||||
{
|
||||
address = "0.0.0.0";
|
||||
prefixLength = 0;
|
||||
via = "192.168.0.5";
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
systemd = {
|
||||
services = {
|
||||
ryzenadj = {
|
||||
enable = true;
|
||||
description = "RyzenAdj Autoset";
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
User = "root";
|
||||
ExecStart = "${pkgs.ryzenadj}/bin/ryzenadj -f90 --set-coall=1048566"; # 1048566 = 0x100000 - 10(mV)
|
||||
};
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
};
|
||||
|
||||
# Do not manage HID devices with powertop to prevent annoying keyboard/mouse sleeps
|
||||
powertop.postStart = ''
|
||||
HIDDEVICES=$(ls /sys/bus/usb/drivers/usbhid | grep -oE '^[0-9]+-[0-9\.]+' | sort -u)
|
||||
for i in $HIDDEVICES; do
|
||||
echo -n "Enabling " | cat - /sys/bus/usb/devices/$i/product
|
||||
echo 'on' > /sys/bus/usb/devices/$i/power/control
|
||||
done
|
||||
'';
|
||||
|
||||
# This manually configures the automatically created network-adresses service to be more flexible
|
||||
# regarding booting without the the device being available on boot
|
||||
# It prevents slow timeouts & errors on boot while preserving Plug & Play ability
|
||||
network-addresses-eth0.unitConfig = {
|
||||
ConditionPathExists = "/sys/class/net/eth0";
|
||||
BindsTo = lib.mkForce null;
|
||||
};
|
||||
};
|
||||
};
|
||||
services.udev.extraRules = ''
|
||||
# Framework Laptop 16 - LED Matrix
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="32ac", ATTRS{idProduct}=="0020", MODE="0660", TAG+="uaccess"
|
||||
# C1 Minimal Microcontroller Module (Template for DIY Module)
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="32ac", ATTRS{idProduct}=="0022", MODE="0660", TAG+="uaccess"
|
||||
# USB-C dock ethernet
|
||||
ACTION=="add", KERNEL=="eth0", TAG+="systemd", ENV{SYSTEMD_WANTS}="network-addresses-eth0.service"
|
||||
ACTION=="remove", KERNEL=="eth0", RUN+="${pkgs.systemd}/bin/systemctl stop network-addresses-eth0.service"
|
||||
# TODO check needed? FIXME helps suspend?
|
||||
SUBSYSTEM=="pci", ATTR{power/control}="auto"
|
||||
# ACTION=="add", SUBSYSTEM=="serio", DRIVERS=="atkbd", ATTR{power/wakeup}="disabled"
|
||||
'';
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
ryzenadj
|
||||
lm_sensors
|
||||
coreutils-full
|
||||
cpu-x
|
||||
fw-ectool
|
||||
sbctl # secureboot debugging/config/mgmt
|
||||
# android-tools
|
||||
input-remapper
|
||||
];
|
||||
|
||||
hardware = {
|
||||
enableRedistributableFirmware = true;
|
||||
i2c.enable = true;
|
||||
|
||||
cpu.amd = {
|
||||
updateMicrocode = true;
|
||||
ryzen-smu.enable = true;
|
||||
};
|
||||
sensor.iio.enable = true;
|
||||
};
|
||||
|
||||
zramSwap.enable = true;
|
||||
|
||||
system.stateVersion = "24.05";
|
||||
}
|
84
systems/nixos-fw16/disks.nix
Normal file
84
systems/nixos-fw16/disks.nix
Normal file
|
@ -0,0 +1,84 @@
|
|||
{ config
|
||||
, lib
|
||||
, pkgs
|
||||
, modulesPath
|
||||
, system
|
||||
, inputs
|
||||
, ...
|
||||
}: {
|
||||
# bcachefs format \
|
||||
# --metadata_replicas=2 \
|
||||
# --data_replicas=1 \
|
||||
# --background_compression=zstd \
|
||||
# --discard \
|
||||
# --label=ssd.ssd_4t /dev/mapper/crypt_ssd_4t_data \
|
||||
# --label=ssd.ssd_2t /dev/mapper/crypt_ssd_2t_data
|
||||
|
||||
config = {
|
||||
boot = {
|
||||
supportedFilesystems = [ "bcachefs" "vfat" ];
|
||||
initrd.supportedFilesystems = [ "bcachefs" "vfat" ];
|
||||
initrd.luks.devices =
|
||||
lib.attrsets.mergeAttrsList
|
||||
(
|
||||
lib.lists.forEach [
|
||||
"crypt_ssd_4t_data"
|
||||
"crypt_ssd_4t_swap"
|
||||
"crypt_ssd_2t_data"
|
||||
"crypt_ssd_2t_swap"
|
||||
]
|
||||
(drive: {
|
||||
"${drive}" = {
|
||||
device = "/dev/disk/by-partlabel/${drive}";
|
||||
allowDiscards = true;
|
||||
bypassWorkqueues = true;
|
||||
# crypttabExtraOpts = [ "nofail" ];
|
||||
};
|
||||
})
|
||||
);
|
||||
};
|
||||
|
||||
fileSystems =
|
||||
let
|
||||
automount_opts = "x-systemd.automount,noauto,x-systemd.idle-timeout=60,x-systemd.device-timeout=5s,x-systemd.mount-timeout=5s";
|
||||
perm_opts = "uid=1001,gid=100";
|
||||
smb_opts = [
|
||||
"vers=3,credentials=/home/tristand/.smb-secrets"
|
||||
perm_opts
|
||||
automount_opts
|
||||
];
|
||||
sshfs_opts = [
|
||||
"allow_other,_netdev,reconnect,ServerAliveInterval=15,IdentityFile=/var/secrets/id_ed25519"
|
||||
perm_opts
|
||||
automount_opts
|
||||
];
|
||||
in
|
||||
{
|
||||
"/" = {
|
||||
device = "/dev/mapper/crypt_ssd_4t_data";
|
||||
# device = "UUID=f89215ba-3313-42d3-8f68-051ad2453870";
|
||||
fsType = "bcachefs";
|
||||
options = [ "relatime" ];
|
||||
};
|
||||
|
||||
"/boot" = {
|
||||
device = "/dev/disk/by-uuid/05A2-6A8A";
|
||||
fsType = "vfat";
|
||||
options = [ "fmask=0022" "dmask=0022" ];
|
||||
};
|
||||
|
||||
# "/mnt/media_v2" = {
|
||||
# device = "root@23.88.68.113:/media_v2";
|
||||
# fsType = "sshfs";
|
||||
# options = sshfs_opts;
|
||||
# };
|
||||
};
|
||||
|
||||
swapDevices = [
|
||||
{ device = "/dev/disk/by-uuid/a8f478f0-ad5e-47ae-8e18-63060f7e5706"; }
|
||||
{ device = "/dev/disk/by-uuid/59987b2a-c5c5-4547-95ad-f0d1dcdf8458"; }
|
||||
];
|
||||
|
||||
system.fsPackages = [ pkgs.sshfs ];
|
||||
};
|
||||
}
|
244
systems/nixos-pulse/default.nix
Normal file
244
systems/nixos-pulse/default.nix
Normal file
|
@ -0,0 +1,244 @@
|
|||
{ config
|
||||
, lib
|
||||
, pkgs
|
||||
, modulesPath
|
||||
, system
|
||||
, inputs
|
||||
, ...
|
||||
}: {
|
||||
imports = [
|
||||
(modulesPath + "/installer/scan/not-detected.nix")
|
||||
inputs.nixos-hardware.nixosModules.common-cpu-amd
|
||||
inputs.nixos-hardware.nixosModules.common-cpu-amd-pstate
|
||||
inputs.nixos-hardware.nixosModules.common-hidpi
|
||||
inputs.nixos-hardware.nixosModules.tuxedo-pulse-15-gen2
|
||||
../../os-mods/age
|
||||
../../os-mods/amdgpu
|
||||
../../os-mods/cachix
|
||||
../../os-mods/common
|
||||
# ../../os-mods/desktop
|
||||
# ../../os-mods/desktop/audio.nix
|
||||
# ../../os-mods/desktop/printing.nix
|
||||
../../os-mods/netdata/client.nix
|
||||
../../os-mods/network
|
||||
../../os-mods/ryzenapu
|
||||
../../os-mods/virt
|
||||
];
|
||||
|
||||
nix.settings = {
|
||||
trusted-users = [ "nixremote" "root" "tristand" ];
|
||||
system-features = [
|
||||
"benchmark"
|
||||
"big-parallel"
|
||||
"kvm"
|
||||
"nixos-test"
|
||||
"gccarch-x86-64-v3"
|
||||
"gccarch-znver2"
|
||||
];
|
||||
};
|
||||
|
||||
programs.corectrl.gpuOverclock.enable = lib.mkForce false;
|
||||
networking = {
|
||||
useDHCP = lib.mkForce false;
|
||||
useNetworkd = true;
|
||||
wireless = {
|
||||
enable = true;
|
||||
networks."DruyenWLAN" = {
|
||||
psk = "DidWvTDruyenH4";
|
||||
};
|
||||
};
|
||||
networkmanager.unmanaged = [ "wlp3s0" ];
|
||||
};
|
||||
systemd.network = {
|
||||
enable = true;
|
||||
networks."10-homewifi" = {
|
||||
name = "wlp3s0";
|
||||
matchConfig = {
|
||||
SSID = "DruyenWLAN";
|
||||
};
|
||||
DHCP = "yes"; # both ipv4 & 6
|
||||
};
|
||||
};
|
||||
|
||||
home-manager = {
|
||||
useUserPackages = true;
|
||||
useGlobalPkgs = true;
|
||||
users.tristand = import ../../users/admin-shell.nix {
|
||||
username = "tristand";
|
||||
|
||||
inherit pkgs config inputs system lib;
|
||||
};
|
||||
};
|
||||
|
||||
users.groups.nixremote = { };
|
||||
users.users = {
|
||||
tristand = {
|
||||
isNormalUser = true;
|
||||
description = "Tristan Druyen";
|
||||
extraGroups = [ "audio" "corectrl" "dialout" "docker" "networkmanager" "i2c" "wheel" "libvirtd" "qemu-libvirtd" "input" ];
|
||||
shell = pkgs.fish;
|
||||
home = "/home/tristand";
|
||||
hashedPassword = "$6$Wj.XY8JgH5EWuog4$HnbtPJXDEqKXFrzkPVEjih3PytcpBCrkfL7TAwkXd0IFced7kGMlZNliNsAqQ3XqfyUzAYiiKTIqoPVJEk.s..";
|
||||
openssh.authorizedKeys.keys = [
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO4xz3EgIRiRb/gmnCSq17kHd4MLilf05zYOFZrwOIrA tristand@nixos-fw16"
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGDS/4JFRaAPoUaDiwDRbbNoaJqsBzaE+DEdaQH9OezM root@nixos-fw16"
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIRFEtmoq36QmvAwv/xIVdvaf+B9Scbm5cUFFkP/c1nS root@nixos-f16"
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHowJtKj3ohrYjyeWwQ8Lj6UMSPI390SwLRuVIlojcGM tristand@nixos-desk"
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO4fBDj1/He/uimO97RgjGWZLAimTrLmIlYS2ekD73GC tristan@arch-pulse"
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDP8ztBIgQsYh7LefSKtuDRYDWNheZWbmIr51T/Np/jc tristand@nixos-pulse"
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJ/tkVxnPZB+C6sK9A12pUsB38OhXieMNaij6pC3foSH admin@vault81.de"
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMuH8L7mQDg86uJME6jndOu4niwLMASuJKpdbJU8Hfet tristan+desktop@vault81.de"
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKJ6wPntg8+kVLU4M+ykRuBb37SQd1csUtO3ZIStoW+4 root@he2.vault82.de"
|
||||
];
|
||||
};
|
||||
|
||||
nixremote = {
|
||||
isSystemUser = true;
|
||||
group = "nixremote";
|
||||
description = "remote builder user";
|
||||
extraGroups = [ "docker" "networkmanager" "wheel" ];
|
||||
shell = pkgs.bash;
|
||||
openssh.authorizedKeys.keys = [
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO4xz3EgIRiRb/gmnCSq17kHd4MLilf05zYOFZrwOIrA tristand@nixos-fw16"
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGDS/4JFRaAPoUaDiwDRbbNoaJqsBzaE+DEdaQH9OezM root@nixos-fw16"
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIRFEtmoq36QmvAwv/xIVdvaf+B9Scbm5cUFFkP/c1nS root@nixos-f16"
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
boot = {
|
||||
# kernelPackages = pkgs.pkgsx86_64_v3.linuxPackages_cachyos;
|
||||
kernelPackages = pkgs.pkgsAMD64Microarchs.znver2.linuxPackages_cachyos;
|
||||
kernelPatches = [ ];
|
||||
kernelParams = [
|
||||
# "systemd.unit=emergency.target"
|
||||
# "systemd.setenv=SYSTEMD_SULOGIN_FORCE=1"
|
||||
# "rescue"
|
||||
# "pcie_aspm=force"
|
||||
# "pcie_aspm.policy=powersupersave"
|
||||
# "rtc_cmos.use_acpi_alarm=1" # reduce S0 sleep wakeups
|
||||
# "gpiolib_acpi.ignore_interrupt=AMDI0030:00@9" # mask IRQ 9 ?
|
||||
];
|
||||
loader = {
|
||||
systemd-boot = {
|
||||
enable = true;
|
||||
configurationLimit = 16;
|
||||
};
|
||||
efi.canTouchEfiVariables = true;
|
||||
};
|
||||
|
||||
supportedFilesystems = [ "btrfs" "vfat" ];
|
||||
|
||||
initrd = {
|
||||
availableKernelModules = [ "nvme" "xhci_pci" "uas" "usbhid" "usb_storage" "sd_mod" ];
|
||||
kernelModules = [ ];
|
||||
systemd.enable = true;
|
||||
supportedFilesystems = [ "btrfs" "vfat" ];
|
||||
|
||||
luks.devices = {
|
||||
"crypted_1" = {
|
||||
device = "/dev/disk/by-uuid/9cca6269-6afa-4f77-92ff-2e9eb8fc9bc7";
|
||||
allowDiscards = true;
|
||||
bypassWorkqueues = true;
|
||||
crypttabExtraOpts = [ "nofail" ];
|
||||
};
|
||||
"crypted_swap_1" = {
|
||||
device = "/dev/disk/by-uuid/7b19e61a-20cd-47ae-9da2-0f40c9be86fe";
|
||||
allowDiscards = true;
|
||||
bypassWorkqueues = true;
|
||||
crypttabExtraOpts = [ "nofail" ];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
extraModulePackages = [ ];
|
||||
};
|
||||
|
||||
swapDevices = [
|
||||
{ device = "/dev/disk/by-uuid/83b6aa0a-ff9f-40ef-b728-6540bd5c9365"; }
|
||||
];
|
||||
|
||||
services.btrfs.autoScrub.enable = true;
|
||||
|
||||
networking = {
|
||||
hostName = "nixos-pulse";
|
||||
extraHosts = ''
|
||||
176.9.242.147 he4.redvau.lt
|
||||
'';
|
||||
};
|
||||
|
||||
fileSystems =
|
||||
let
|
||||
automount_opts = "x-systemd.automount,noauto,x-systemd.idle-timeout=60,x-systemd.device-timeout=5s,x-systemd.mount-timeout=5s";
|
||||
perm_opts = "uid=1000,gid=100";
|
||||
btrfs_opts = "autodefrag,compress=zstd,discard=async,noatime,space_cache=v2,ssd";
|
||||
sshfs_opts = [
|
||||
"allow_other,_netdev,reconnect,ServerAliveInterval=15,IdentityFile=/var/secrets/id_ed25519"
|
||||
perm_opts
|
||||
automount_opts
|
||||
];
|
||||
in
|
||||
{
|
||||
"/" = {
|
||||
device = "/dev/mapper/crypted_1";
|
||||
fsType = "btrfs";
|
||||
options = [
|
||||
btrfs_opts
|
||||
"subvol=_active/root"
|
||||
];
|
||||
};
|
||||
"/boot" = {
|
||||
device = "/dev/disk/by-uuid/3226-7E38";
|
||||
fsType = "vfat";
|
||||
options = [ "fmask=0022" "dmask=0022" ];
|
||||
};
|
||||
"/home" = {
|
||||
device = "/dev/mapper/crypted_1";
|
||||
fsType = "btrfs";
|
||||
options = [
|
||||
btrfs_opts
|
||||
"subvol=_active/home"
|
||||
];
|
||||
};
|
||||
"/nix" = {
|
||||
device = "/dev/mapper/crypted_1";
|
||||
fsType = "btrfs";
|
||||
options = [
|
||||
btrfs_opts
|
||||
"subvol=_active/nix"
|
||||
];
|
||||
};
|
||||
|
||||
# "/mnt/media_v2" = {
|
||||
# device = "root@23.88.68.113:/media_v2";
|
||||
# fsType = "sshfs";
|
||||
# options = sshfs_opts;
|
||||
# };
|
||||
};
|
||||
system.fsPackages = [ pkgs.sshfs ];
|
||||
|
||||
services.udev.extraRules = ''
|
||||
SUBSYSTEM=="pci", ATTR{power/control}="auto"
|
||||
ACTION=="add", SUBSYSTEM=="serio", DRIVERS=="atkbd", ATTR{power/wakeup}="disabled"
|
||||
'';
|
||||
|
||||
hardware = {
|
||||
enableRedistributableFirmware = true;
|
||||
i2c.enable = true;
|
||||
# tuxedo-keyboard.enable = true; // not needed for server use
|
||||
|
||||
cpu.amd.updateMicrocode = true;
|
||||
sensor.iio.enable = true;
|
||||
# tuxedo-rs = { // not needed for server use
|
||||
# enable = true;
|
||||
# tailor-gui.enable = false; # used headless atm
|
||||
# } ;
|
||||
};
|
||||
|
||||
zramSwap.enable = true;
|
||||
environment.systemPackages = with pkgs; [
|
||||
firefox
|
||||
];
|
||||
|
||||
system.stateVersion = "23.05";
|
||||
}
|
86
systems/rescue-iso/default.nix
Normal file
86
systems/rescue-iso/default.nix
Normal file
|
@ -0,0 +1,86 @@
|
|||
{ lib
|
||||
, pkgs
|
||||
, inputs
|
||||
, ...
|
||||
}: {
|
||||
imports = [
|
||||
# "${inputs.nixpkgs}/nixos/modules/installer/cd-dvd/installation-cd-graphical-plasma5.nix"
|
||||
../../os-mods/age
|
||||
"${inputs.nixpkgs}/nixos/modules/installer/cd-dvd/installation-cd-minimal.nix"
|
||||
"${inputs.nixpkgs}/nixos/modules/installer/cd-dvd/channel.nix"
|
||||
];
|
||||
|
||||
nix = {
|
||||
settings.experimental-features = [ "nix-command" "flakes" ];
|
||||
extraOptions = "experimental-features = nix-command flakes";
|
||||
};
|
||||
|
||||
services = {
|
||||
openssh.settings.PermitRootLogin = lib.mkForce "yes";
|
||||
# TODO Add authorized Keys
|
||||
};
|
||||
|
||||
boot =
|
||||
let
|
||||
version = "6.12-rc1";
|
||||
# version = "6.12-rc3";
|
||||
kernelPatches = pkgs.callPackage "${inputs.nixpkgs}/pkgs/os-specific/linux/kernel/patches.nix" { };
|
||||
# ref = "6efbea77b390604a7be7364583e19cd2d6a1291b";
|
||||
ref = "bc6d2d10418e1bfdb95b16f5dd4cca42d5dec766";
|
||||
linux_mainline =
|
||||
{ buildLinux
|
||||
, fetchzip
|
||||
, ...
|
||||
} @ args:
|
||||
buildLinux {
|
||||
version = version;
|
||||
src = fetchzip {
|
||||
# url = "https://git.kernel.org/torvalds/t/linux-${ref}.tar.gz";
|
||||
# hash = "";
|
||||
url = "https://github.com/koverstreet/bcachefs/archive/${ref}.tar.gz";
|
||||
hash = "sha256-tq0dXKVtW1R+Yenv7HG4Qqc1P49OzcJgICpoZLkA/K4=";
|
||||
};
|
||||
modDirVersion = lib.versions.pad 3 version;
|
||||
kernelPatches = [
|
||||
kernelPatches.bridge_stp_helper
|
||||
kernelPatches.request_key_helper
|
||||
];
|
||||
extraMeta.branch = "master";
|
||||
};
|
||||
linuxMainlinePkg = pkgs.callPackage linux_mainline { };
|
||||
linuxMainlinePkgs = pkgs.recurseIntoAttrs (pkgs.linuxPackagesFor linuxMainlinePkg);
|
||||
in
|
||||
{
|
||||
kernelPackages = linuxMainlinePkgs;
|
||||
supportedFilesystems = lib.mkForce [ "bcachefs" "btrfs" "vfat" "f2fs" "xfs" "ntfs" "cifs" ];
|
||||
};
|
||||
|
||||
users.users.root.openssh.authorizedKeys.keys = [
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO4xz3EgIRiRb/gmnCSq17kHd4MLilf05zYOFZrwOIrA tristand@nixos-fw16"
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGDS/4JFRaAPoUaDiwDRbbNoaJqsBzaE+DEdaQH9OezM root@nixos-fw16"
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHowJtKj3ohrYjyeWwQ8Lj6UMSPI390SwLRuVIlojcGM tristand@nixos-desk"
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDP8ztBIgQsYh7LefSKtuDRYDWNheZWbmIr51T/Np/jc tristand@nixos-pulse"
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJ/tkVxnPZB+C6sK9A12pUsB38OhXieMNaij6pC3foSH admin@vault81.de"
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMuH8L7mQDg86uJME6jndOu4niwLMASuJKpdbJU8Hfet tristan+desktop@vault81.de"
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKokTPK/Gm30kqFAd+u5AT0BL7bG/eNt6pmGf40U8j03 arch-h1"
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKJ6wPntg8+kVLU4M+ykRuBb37SQd1csUtO3ZIStoW+4 root@he2.vault82.de"
|
||||
];
|
||||
|
||||
users.extraUsers.root.hashedPassword = "$y$j9T$6eIwRNXAtlsVCP4x8GrQi1$PDbhjsbOGyIArOYtxtgc6u.w7I.M4iZbfk3pc7a4b93"; # nixos
|
||||
users.extraUsers.root.initialPassword = lib.mkForce null;
|
||||
users.extraUsers.root.initialHashedPassword = lib.mkForce null;
|
||||
|
||||
systemd = {
|
||||
services.sshd.wantedBy = pkgs.lib.mkForce [ "multi-user.target" ];
|
||||
targets = {
|
||||
sleep.enable = false;
|
||||
suspend.enable = false;
|
||||
hibernate.enable = false;
|
||||
hybrid-sleep.enable = false;
|
||||
};
|
||||
};
|
||||
|
||||
networking = {
|
||||
hostName = "rescue-iso";
|
||||
};
|
||||
}
|
91
systems/rescue-kexec/default.nix
Normal file
91
systems/rescue-kexec/default.nix
Normal file
|
@ -0,0 +1,91 @@
|
|||
{ lib
|
||||
, pkgs
|
||||
, inputs
|
||||
, ...
|
||||
}: {
|
||||
imports = [
|
||||
../../os-mods/age
|
||||
# "${inputs.nixpkgs}/nixos/modules/installer/cd-dvd/installation-cd-graphical-plasma5.nix"
|
||||
# "${inputs.nixpkgs}/nixos/modules/installer/cd-dvd/installation-cd-minimal.nix"
|
||||
# "${inputs.nixpkgs}/nixos/modules/installer/cd-dvd/channel.nix"
|
||||
# "${inputs.nixos-images}/nix/kexec-installer/module.nix"
|
||||
];
|
||||
|
||||
nix = {
|
||||
settings.experimental-features = [ "nix-command" "flakes" ];
|
||||
extraOptions = "experimental-features = nix-command flakes";
|
||||
};
|
||||
|
||||
services = {
|
||||
openssh.settings.PermitRootLogin = lib.mkForce "yes";
|
||||
# TODO Add authorized Keys
|
||||
};
|
||||
|
||||
boot =
|
||||
let
|
||||
version = "6.12-rc1";
|
||||
# version = "6.12-rc3";
|
||||
kernelPatches = pkgs.callPackage "${inputs.nixpkgs}/pkgs/os-specific/linux/kernel/patches.nix" { };
|
||||
# ref = "6efbea77b390604a7be7364583e19cd2d6a1291b";
|
||||
# ref = "bc6d2d10418e1bfdb95b16f5dd4cca42d5dec766";
|
||||
ref = "81f8ef6863d2a40bd67b604d46f9a63b6e708818";
|
||||
linux_mainline =
|
||||
{ buildLinux
|
||||
, fetchzip
|
||||
, ...
|
||||
} @ args:
|
||||
buildLinux {
|
||||
version = version;
|
||||
src = fetchzip {
|
||||
# url = "https://git.kernel.org/torvalds/t/linux-${ref}.tar.gz";
|
||||
# hash = "";
|
||||
# url = "https://github.com/koverstreet/bcachefs/archive/${ref}.tar.gz";
|
||||
# hash = "sha256-tq0dXKVtW1R+Yenv7HG4Qqc1P49OzcJgICpoZLkA/K4=";
|
||||
|
||||
url = "https://github.com/koverstreet/bcachefs/archive/${ref}.tar.gz";
|
||||
hash = "sha256-kwPeZEpwIOPoLIEBQydyJqzHGpLoJdGqvHqkKaq03oU=";
|
||||
};
|
||||
modDirVersion = lib.versions.pad 3 version;
|
||||
kernelPatches = [
|
||||
kernelPatches.bridge_stp_helper
|
||||
kernelPatches.request_key_helper
|
||||
];
|
||||
extraMeta.branch = "master";
|
||||
};
|
||||
linuxMainlinePkg = pkgs.callPackage linux_mainline { };
|
||||
linuxMainlinePkgs = pkgs.recurseIntoAttrs (pkgs.linuxPackagesFor linuxMainlinePkg);
|
||||
in
|
||||
{
|
||||
kernelPackages = lib.mkForce linuxMainlinePkgs;
|
||||
supportedFilesystems = lib.mkForce [ "bcachefs" "btrfs" "vfat" "f2fs" "xfs" "ntfs" "cifs" ];
|
||||
};
|
||||
|
||||
users.users.root.openssh.authorizedKeys.keys = [
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO4xz3EgIRiRb/gmnCSq17kHd4MLilf05zYOFZrwOIrA tristand@nixos-fw16"
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGDS/4JFRaAPoUaDiwDRbbNoaJqsBzaE+DEdaQH9OezM root@nixos-fw16"
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHowJtKj3ohrYjyeWwQ8Lj6UMSPI390SwLRuVIlojcGM tristand@nixos-desk"
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDP8ztBIgQsYh7LefSKtuDRYDWNheZWbmIr51T/Np/jc tristand@nixos-pulse"
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJ/tkVxnPZB+C6sK9A12pUsB38OhXieMNaij6pC3foSH admin@vault81.de"
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMuH8L7mQDg86uJME6jndOu4niwLMASuJKpdbJU8Hfet tristan+desktop@vault81.de"
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKokTPK/Gm30kqFAd+u5AT0BL7bG/eNt6pmGf40U8j03 arch-h1"
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKJ6wPntg8+kVLU4M+ykRuBb37SQd1csUtO3ZIStoW+4 root@he2.vault82.de"
|
||||
];
|
||||
|
||||
users.extraUsers.root.hashedPassword = "$y$j9T$6eIwRNXAtlsVCP4x8GrQi1$PDbhjsbOGyIArOYtxtgc6u.w7I.M4iZbfk3pc7a4b93"; # nixos
|
||||
users.extraUsers.root.initialPassword = lib.mkForce null;
|
||||
users.extraUsers.root.initialHashedPassword = lib.mkForce null;
|
||||
|
||||
systemd = {
|
||||
services.sshd.wantedBy = pkgs.lib.mkForce [ "multi-user.target" ];
|
||||
targets = {
|
||||
sleep.enable = false;
|
||||
suspend.enable = false;
|
||||
hibernate.enable = false;
|
||||
hybrid-sleep.enable = false;
|
||||
};
|
||||
};
|
||||
|
||||
networking = {
|
||||
hostName = "rescue-kexec";
|
||||
};
|
||||
}
|
0
test
Normal file
0
test
Normal file
0
test2
Normal file
0
test2
Normal file
27
users/admin-fat.nix
Normal file
27
users/admin-fat.nix
Normal file
|
@ -0,0 +1,27 @@
|
|||
{ pkgs
|
||||
, config
|
||||
, inputs
|
||||
, system
|
||||
, username
|
||||
, ...
|
||||
}: {
|
||||
imports = [
|
||||
../home-mods/activity-watch
|
||||
../home-mods/audio
|
||||
../home-mods/common
|
||||
../home-mods/desktop
|
||||
../home-mods/firefox
|
||||
../home-mods/plasma
|
||||
../home-mods/shell
|
||||
../home-mods/virt
|
||||
];
|
||||
|
||||
config = {
|
||||
home = {
|
||||
inherit username;
|
||||
homeDirectory = "/home/${username}";
|
||||
|
||||
stateVersion = "23.05";
|
||||
};
|
||||
};
|
||||
}
|
19
users/admin-shell.nix
Normal file
19
users/admin-shell.nix
Normal file
|
@ -0,0 +1,19 @@
|
|||
{ pkgs
|
||||
, config
|
||||
, inputs
|
||||
, system
|
||||
, username
|
||||
, ...
|
||||
}: {
|
||||
imports = [
|
||||
../home-mods/common
|
||||
../home-mods/shell
|
||||
];
|
||||
|
||||
config.home = {
|
||||
inherit username;
|
||||
homeDirectory = "/home/${username}";
|
||||
|
||||
stateVersion = "23.05";
|
||||
};
|
||||
}
|
22
users/admin-thin.nix
Normal file
22
users/admin-thin.nix
Normal file
|
@ -0,0 +1,22 @@
|
|||
{ pkgs
|
||||
, config
|
||||
, inputs
|
||||
, system
|
||||
, username
|
||||
, ...
|
||||
}: {
|
||||
imports = [
|
||||
../home-mods/audio
|
||||
../home-mods/common
|
||||
../home-mods/firefox
|
||||
# ../home-mods/plasma
|
||||
../home-mods/shell
|
||||
];
|
||||
|
||||
config.home = {
|
||||
inherit username;
|
||||
homeDirectory = "/home/${username}";
|
||||
|
||||
stateVersion = "23.05";
|
||||
};
|
||||
}
|
60
users/default.nix
Normal file
60
users/default.nix
Normal file
|
@ -0,0 +1,60 @@
|
|||
{ pkgs
|
||||
, config
|
||||
, inputs
|
||||
, system
|
||||
, lib
|
||||
, ...
|
||||
}: {
|
||||
nix.settings.trusted-users = [ "@wheel" ];
|
||||
users.users = {
|
||||
tester = {
|
||||
isNormalUser = true;
|
||||
description = "Testa Test";
|
||||
extraGroups = [ "audio" "corectrl" "docker" "networkmanager" "i2c" "wheel" "libvirtd" "qemu-libvirtd" "input" ];
|
||||
shell = pkgs.fish;
|
||||
home = "/home/tester";
|
||||
hashedPasswordFile = config.age.secrets.tester_passwd_hash.path;
|
||||
};
|
||||
tristand = {
|
||||
isNormalUser = true;
|
||||
description = "Tristan Druyen";
|
||||
extraGroups = [ "audio" "corectrl" "dialout" "docker" "networkmanager" "i2c" "wheel" "libvirtd" "qemu-libvirtd" "input" ];
|
||||
shell = pkgs.fish;
|
||||
home = "/home/tristand";
|
||||
hashedPasswordFile = config.age.secrets.tristand_passwd_hash.path;
|
||||
openssh.authorizedKeys.keys = [
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO4xz3EgIRiRb/gmnCSq17kHd4MLilf05zYOFZrwOIrA tristand@nixos-fw16"
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGDS/4JFRaAPoUaDiwDRbbNoaJqsBzaE+DEdaQH9OezM root@nixos-fw16"
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHowJtKj3ohrYjyeWwQ8Lj6UMSPI390SwLRuVIlojcGM tristand@nixos-desk"
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDP8ztBIgQsYh7LefSKtuDRYDWNheZWbmIr51T/Np/jc tristand@nixos-pulse"
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJ/tkVxnPZB+C6sK9A12pUsB38OhXieMNaij6pC3foSH admin@vault81.de"
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMuH8L7mQDg86uJME6jndOu4niwLMASuJKpdbJU8Hfet tristan+desktop@vault81.de"
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKJ6wPntg8+kVLU4M+ykRuBb37SQd1csUtO3ZIStoW+4 root@he2.vault82.de"
|
||||
];
|
||||
};
|
||||
|
||||
nixremote = {
|
||||
isSystemUser = true;
|
||||
group = "nixremote";
|
||||
description = "remote builder user";
|
||||
extraGroups = [ "docker" "networkmanager" "wheel" ];
|
||||
shell = pkgs.bash;
|
||||
openssh.authorizedKeys.keys = [
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO4xz3EgIRiRb/gmnCSq17kHd4MLilf05zYOFZrwOIrA tristand@nixos-fw16"
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGDS/4JFRaAPoUaDiwDRbbNoaJqsBzaE+DEdaQH9OezM root@nixos-fw16"
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIRFEtmoq36QmvAwv/xIVdvaf+B9Scbm5cUFFkP/c1nS root@nixos-f16"
|
||||
];
|
||||
};
|
||||
};
|
||||
users.groups.nixremote = { };
|
||||
|
||||
home-manager = {
|
||||
useUserPackages = true;
|
||||
useGlobalPkgs = true;
|
||||
users.tristand = import ./admin-fat.nix {
|
||||
username = "tristand";
|
||||
|
||||
inherit pkgs config inputs system lib;
|
||||
};
|
||||
};
|
||||
}
|
Loading…
Add table
Reference in a new issue