Added nixos configs
@@ -0,0 +1,6 @@
|
||||
use flake
|
||||
|
||||
watch_file .envrc.private
|
||||
if [[ -f .envrc.private ]]; then
|
||||
source_env .envrc.private
|
||||
fi
|
||||
|
After Width: | Height: | Size: 11 KiB |
@@ -0,0 +1,187 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="535"
|
||||
height="535"
|
||||
viewBox="0 0 501.56251 501.56249"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)"
|
||||
sodipodi:docname="nix-snowflake-colours.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
<defs
|
||||
id="defs4">
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient5562">
|
||||
<stop
|
||||
style="stop-color:#699ad7;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop5564" />
|
||||
<stop
|
||||
id="stop5566"
|
||||
offset="0.24345198"
|
||||
style="stop-color:#7eb1dd;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#7ebae4;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop5568" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient5053">
|
||||
<stop
|
||||
style="stop-color:#415e9a;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop5055" />
|
||||
<stop
|
||||
id="stop5057"
|
||||
offset="0.23168644"
|
||||
style="stop-color:#4a6baf;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#5277c3;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop5059" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5562"
|
||||
id="linearGradient4328"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(70.650339,-1055.1511)"
|
||||
x1="200.59668"
|
||||
y1="351.41116"
|
||||
x2="290.08701"
|
||||
y2="506.18814" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5053"
|
||||
id="linearGradient4330"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(864.69589,-1491.3405)"
|
||||
x1="-584.19934"
|
||||
y1="782.33563"
|
||||
x2="-496.29703"
|
||||
y2="937.71399" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.70904368"
|
||||
inkscape:cx="99.429699"
|
||||
inkscape:cy="195.33352"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer3"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1050"
|
||||
inkscape:window-x="1920"
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-global="true"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1" />
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer3"
|
||||
inkscape:label="gradient-logo"
|
||||
style="display:inline;opacity:1"
|
||||
transform="translate(-156.41121,933.30685)">
|
||||
<g
|
||||
id="g2"
|
||||
transform="matrix(0.99994059,0,0,0.99994059,-0.06321798,33.188377)"
|
||||
style="stroke-width:1.00006">
|
||||
<path
|
||||
sodipodi:nodetypes="cccccccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3336-6"
|
||||
d="m 309.54892,-710.38827 122.19683,211.67512 -56.15706,0.5268 -32.6236,-56.8692 -32.85645,56.5653 -27.90237,-0.011 -14.29086,-24.6896 46.81047,-80.4901 -33.22946,-57.8257 z"
|
||||
style="opacity:1;fill:url(#linearGradient4328);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.00018;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<use
|
||||
height="100%"
|
||||
width="100%"
|
||||
transform="rotate(60,407.11155,-715.78724)"
|
||||
id="use3439-6"
|
||||
inkscape:transform-center-y="151.59082"
|
||||
inkscape:transform-center-x="124.43045"
|
||||
xlink:href="#path3336-6"
|
||||
y="0"
|
||||
x="0"
|
||||
style="stroke-width:1.00006" />
|
||||
<use
|
||||
height="100%"
|
||||
width="100%"
|
||||
transform="rotate(-60,407.31177,-715.70016)"
|
||||
id="use3445-0"
|
||||
inkscape:transform-center-y="75.573958"
|
||||
inkscape:transform-center-x="-168.20651"
|
||||
xlink:href="#path3336-6"
|
||||
y="0"
|
||||
x="0"
|
||||
style="stroke-width:1.00006" />
|
||||
<use
|
||||
height="100%"
|
||||
width="100%"
|
||||
transform="rotate(180,407.41868,-715.7565)"
|
||||
id="use3449-5"
|
||||
inkscape:transform-center-y="-139.94592"
|
||||
inkscape:transform-center-x="59.669705"
|
||||
xlink:href="#path3336-6"
|
||||
y="0"
|
||||
x="0"
|
||||
style="stroke-width:1.00006" />
|
||||
<path
|
||||
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:url(#linearGradient4330);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.00018;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||
d="m 309.54892,-710.38827 122.19683,211.67512 -56.15706,0.5268 -32.6236,-56.8692 -32.85645,56.5653 -27.90237,-0.011 -14.29086,-24.6896 46.81047,-80.4901 -33.22946,-57.8256 z"
|
||||
id="path4260-0"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccccccc" />
|
||||
<use
|
||||
height="100%"
|
||||
width="100%"
|
||||
transform="rotate(120,407.33916,-716.08356)"
|
||||
id="use4354-5"
|
||||
xlink:href="#path4260-0"
|
||||
y="0"
|
||||
x="0"
|
||||
style="display:inline;stroke-width:1.00006" />
|
||||
<use
|
||||
height="100%"
|
||||
width="100%"
|
||||
transform="rotate(-120,407.28823,-715.86995)"
|
||||
id="use4362-2"
|
||||
xlink:href="#path4260-0"
|
||||
y="0"
|
||||
x="0"
|
||||
style="display:inline;stroke-width:1.00006" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.4 KiB |
|
After Width: | Height: | Size: 188 B |
|
After Width: | Height: | Size: 466 KiB |
|
After Width: | Height: | Size: 7.3 KiB |
@@ -0,0 +1,27 @@
|
||||
name: Tangle Code
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
paths:
|
||||
- 'README.org'
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
jobs:
|
||||
tangle:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Setup Emacs
|
||||
uses: purcell/setup-emacs@master
|
||||
with:
|
||||
version: snapshot
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
- name: Tangle
|
||||
run: emacs README.org --batch --eval "(setq org-confirm-babel-evaluate nil)" --eval "(progn (require 'org) (org-babel-goto-named-src-block \"startup\") (org-babel-execute-src-block))" -f org-babel-tangle
|
||||
- name: Commit
|
||||
uses: stefanzweifel/git-auto-commit-action@v5
|
||||
with:
|
||||
commit_message: Tangle files from the README.
|
||||
@@ -0,0 +1,4 @@
|
||||
/.direnv/
|
||||
*.md
|
||||
/.envrc-private
|
||||
/.envrc.private
|
||||
@@ -0,0 +1,7 @@
|
||||
#keys:
|
||||
# - &primary age1yq35g6mmlem0rhr47u6ewh8dctlwp9hj0s0ac60e4hrw9hjzlqms6crf7n
|
||||
#creation_rules:
|
||||
# - path_regex: secrets/secrets.yaml$
|
||||
# key_groups:
|
||||
# - age:
|
||||
# - *primary
|
||||
@@ -0,0 +1,674 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The GNU General Public License is a free, copyleft license for
|
||||
software and other kinds of works.
|
||||
|
||||
The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
the GNU General Public License is intended to guarantee your freedom to
|
||||
share and change all versions of a program--to make sure it remains free
|
||||
software for all its users. We, the Free Software Foundation, use the
|
||||
GNU General Public License for most of our software; it applies also to
|
||||
any other work released this way by its authors. You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
them if you wish), that you receive source code or can get it if you
|
||||
want it, that you can change the software or use pieces of it in new
|
||||
free programs, and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to prevent others from denying you
|
||||
these rights or asking you to surrender the rights. Therefore, you have
|
||||
certain responsibilities if you distribute copies of the software, or if
|
||||
you modify it: responsibilities to respect the freedom of others.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must pass on to the recipients the same
|
||||
freedoms that you received. You must make sure that they, too, receive
|
||||
or can get the source code. And you must show them these terms so they
|
||||
know their rights.
|
||||
|
||||
Developers that use the GNU GPL protect your rights with two steps:
|
||||
(1) assert copyright on the software, and (2) offer you this License
|
||||
giving you legal permission to copy, distribute and/or modify it.
|
||||
|
||||
For the developers' and authors' protection, the GPL clearly explains
|
||||
that there is no warranty for this free software. For both users' and
|
||||
authors' sake, the GPL requires that modified versions be marked as
|
||||
changed, so that their problems will not be attributed erroneously to
|
||||
authors of previous versions.
|
||||
|
||||
Some devices are designed to deny users access to install or run
|
||||
modified versions of the software inside them, although the manufacturer
|
||||
can do so. This is fundamentally incompatible with the aim of
|
||||
protecting users' freedom to change the software. The systematic
|
||||
pattern of such abuse occurs in the area of products for individuals to
|
||||
use, which is precisely where it is most unacceptable. Therefore, we
|
||||
have designed this version of the GPL to prohibit the practice for those
|
||||
products. If such problems arise substantially in other domains, we
|
||||
stand ready to extend this provision to those domains in future versions
|
||||
of the GPL, as needed to protect the freedom of users.
|
||||
|
||||
Finally, every program is threatened constantly by software patents.
|
||||
States should not allow patents to restrict development and use of
|
||||
software on general-purpose computers, but in those that do, we wish to
|
||||
avoid the special danger that patents applied to a free program could
|
||||
make it effectively proprietary. To prevent this, the GPL assures that
|
||||
patents cannot be used to render the program non-free.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
0. Definitions.
|
||||
|
||||
"This License" refers to version 3 of the GNU General Public License.
|
||||
|
||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||
works, such as semiconductor masks.
|
||||
|
||||
"The Program" refers to any copyrightable work licensed under this
|
||||
License. Each licensee is addressed as "you". "Licensees" and
|
||||
"recipients" may be individuals or organizations.
|
||||
|
||||
To "modify" a work means to copy from or adapt all or part of the work
|
||||
in a fashion requiring copyright permission, other than the making of an
|
||||
exact copy. The resulting work is called a "modified version" of the
|
||||
earlier work or a work "based on" the earlier work.
|
||||
|
||||
A "covered work" means either the unmodified Program or a work based
|
||||
on the Program.
|
||||
|
||||
To "propagate" a work means to do anything with it that, without
|
||||
permission, would make you directly or secondarily liable for
|
||||
infringement under applicable copyright law, except executing it on a
|
||||
computer or modifying a private copy. Propagation includes copying,
|
||||
distribution (with or without modification), making available to the
|
||||
public, and in some countries other activities as well.
|
||||
|
||||
To "convey" a work means any kind of propagation that enables other
|
||||
parties to make or receive copies. Mere interaction with a user through
|
||||
a computer network, with no transfer of a copy, is not conveying.
|
||||
|
||||
An interactive user interface displays "Appropriate Legal Notices"
|
||||
to the extent that it includes a convenient and prominently visible
|
||||
feature that (1) displays an appropriate copyright notice, and (2)
|
||||
tells the user that there is no warranty for the work (except to the
|
||||
extent that warranties are provided), that licensees may convey the
|
||||
work under this License, and how to view a copy of this License. If
|
||||
the interface presents a list of user commands or options, such as a
|
||||
menu, a prominent item in the list meets this criterion.
|
||||
|
||||
1. Source Code.
|
||||
|
||||
The "source code" for a work means the preferred form of the work
|
||||
for making modifications to it. "Object code" means any non-source
|
||||
form of a work.
|
||||
|
||||
A "Standard Interface" means an interface that either is an official
|
||||
standard defined by a recognized standards body, or, in the case of
|
||||
interfaces specified for a particular programming language, one that
|
||||
is widely used among developers working in that language.
|
||||
|
||||
The "System Libraries" of an executable work include anything, other
|
||||
than the work as a whole, that (a) is included in the normal form of
|
||||
packaging a Major Component, but which is not part of that Major
|
||||
Component, and (b) serves only to enable use of the work with that
|
||||
Major Component, or to implement a Standard Interface for which an
|
||||
implementation is available to the public in source code form. A
|
||||
"Major Component", in this context, means a major essential component
|
||||
(kernel, window system, and so on) of the specific operating system
|
||||
(if any) on which the executable work runs, or a compiler used to
|
||||
produce the work, or an object code interpreter used to run it.
|
||||
|
||||
The "Corresponding Source" for a work in object code form means all
|
||||
the source code needed to generate, install, and (for an executable
|
||||
work) run the object code and to modify the work, including scripts to
|
||||
control those activities. However, it does not include the work's
|
||||
System Libraries, or general-purpose tools or generally available free
|
||||
programs which are used unmodified in performing those activities but
|
||||
which are not part of the work. For example, Corresponding Source
|
||||
includes interface definition files associated with source files for
|
||||
the work, and the source code for shared libraries and dynamically
|
||||
linked subprograms that the work is specifically designed to require,
|
||||
such as by intimate data communication or control flow between those
|
||||
subprograms and other parts of the work.
|
||||
|
||||
The Corresponding Source need not include anything that users
|
||||
can regenerate automatically from other parts of the Corresponding
|
||||
Source.
|
||||
|
||||
The Corresponding Source for a work in source code form is that
|
||||
same work.
|
||||
|
||||
2. Basic Permissions.
|
||||
|
||||
All rights granted under this License are granted for the term of
|
||||
copyright on the Program, and are irrevocable provided the stated
|
||||
conditions are met. This License explicitly affirms your unlimited
|
||||
permission to run the unmodified Program. The output from running a
|
||||
covered work is covered by this License only if the output, given its
|
||||
content, constitutes a covered work. This License acknowledges your
|
||||
rights of fair use or other equivalent, as provided by copyright law.
|
||||
|
||||
You may make, run and propagate covered works that you do not
|
||||
convey, without conditions so long as your license otherwise remains
|
||||
in force. You may convey covered works to others for the sole purpose
|
||||
of having them make modifications exclusively for you, or provide you
|
||||
with facilities for running those works, provided that you comply with
|
||||
the terms of this License in conveying all material for which you do
|
||||
not control copyright. Those thus making or running the covered works
|
||||
for you must do so exclusively on your behalf, under your direction
|
||||
and control, on terms that prohibit them from making any copies of
|
||||
your copyrighted material outside their relationship with you.
|
||||
|
||||
Conveying under any other circumstances is permitted solely under
|
||||
the conditions stated below. Sublicensing is not allowed; section 10
|
||||
makes it unnecessary.
|
||||
|
||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
|
||||
No covered work shall be deemed part of an effective technological
|
||||
measure under any applicable law fulfilling obligations under article
|
||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||
similar laws prohibiting or restricting circumvention of such
|
||||
measures.
|
||||
|
||||
When you convey a covered work, you waive any legal power to forbid
|
||||
circumvention of technological measures to the extent such circumvention
|
||||
is effected by exercising rights under this License with respect to
|
||||
the covered work, and you disclaim any intention to limit operation or
|
||||
modification of the work as a means of enforcing, against the work's
|
||||
users, your or third parties' legal rights to forbid circumvention of
|
||||
technological measures.
|
||||
|
||||
4. Conveying Verbatim Copies.
|
||||
|
||||
You may convey verbatim copies of the Program's source code as you
|
||||
receive it, in any medium, provided that you conspicuously and
|
||||
appropriately publish on each copy an appropriate copyright notice;
|
||||
keep intact all notices stating that this License and any
|
||||
non-permissive terms added in accord with section 7 apply to the code;
|
||||
keep intact all notices of the absence of any warranty; and give all
|
||||
recipients a copy of this License along with the Program.
|
||||
|
||||
You may charge any price or no price for each copy that you convey,
|
||||
and you may offer support or warranty protection for a fee.
|
||||
|
||||
5. Conveying Modified Source Versions.
|
||||
|
||||
You may convey a work based on the Program, or the modifications to
|
||||
produce it from the Program, in the form of source code under the
|
||||
terms of section 4, provided that you also meet all of these conditions:
|
||||
|
||||
a) The work must carry prominent notices stating that you modified
|
||||
it, and giving a relevant date.
|
||||
|
||||
b) The work must carry prominent notices stating that it is
|
||||
released under this License and any conditions added under section
|
||||
7. This requirement modifies the requirement in section 4 to
|
||||
"keep intact all notices".
|
||||
|
||||
c) You must license the entire work, as a whole, under this
|
||||
License to anyone who comes into possession of a copy. This
|
||||
License will therefore apply, along with any applicable section 7
|
||||
additional terms, to the whole of the work, and all its parts,
|
||||
regardless of how they are packaged. This License gives no
|
||||
permission to license the work in any other way, but it does not
|
||||
invalidate such permission if you have separately received it.
|
||||
|
||||
d) If the work has interactive user interfaces, each must display
|
||||
Appropriate Legal Notices; however, if the Program has interactive
|
||||
interfaces that do not display Appropriate Legal Notices, your
|
||||
work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent
|
||||
works, which are not by their nature extensions of the covered work,
|
||||
and which are not combined with it such as to form a larger program,
|
||||
in or on a volume of a storage or distribution medium, is called an
|
||||
"aggregate" if the compilation and its resulting copyright are not
|
||||
used to limit the access or legal rights of the compilation's users
|
||||
beyond what the individual works permit. Inclusion of a covered work
|
||||
in an aggregate does not cause this License to apply to the other
|
||||
parts of the aggregate.
|
||||
|
||||
6. Conveying Non-Source Forms.
|
||||
|
||||
You may convey a covered work in object code form under the terms
|
||||
of sections 4 and 5, provided that you also convey the
|
||||
machine-readable Corresponding Source under the terms of this License,
|
||||
in one of these ways:
|
||||
|
||||
a) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by the
|
||||
Corresponding Source fixed on a durable physical medium
|
||||
customarily used for software interchange.
|
||||
|
||||
b) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by a
|
||||
written offer, valid for at least three years and valid for as
|
||||
long as you offer spare parts or customer support for that product
|
||||
model, to give anyone who possesses the object code either (1) a
|
||||
copy of the Corresponding Source for all the software in the
|
||||
product that is covered by this License, on a durable physical
|
||||
medium customarily used for software interchange, for a price no
|
||||
more than your reasonable cost of physically performing this
|
||||
conveying of source, or (2) access to copy the
|
||||
Corresponding Source from a network server at no charge.
|
||||
|
||||
c) Convey individual copies of the object code with a copy of the
|
||||
written offer to provide the Corresponding Source. This
|
||||
alternative is allowed only occasionally and noncommercially, and
|
||||
only if you received the object code with such an offer, in accord
|
||||
with subsection 6b.
|
||||
|
||||
d) Convey the object code by offering access from a designated
|
||||
place (gratis or for a charge), and offer equivalent access to the
|
||||
Corresponding Source in the same way through the same place at no
|
||||
further charge. You need not require recipients to copy the
|
||||
Corresponding Source along with the object code. If the place to
|
||||
copy the object code is a network server, the Corresponding Source
|
||||
may be on a different server (operated by you or a third party)
|
||||
that supports equivalent copying facilities, provided you maintain
|
||||
clear directions next to the object code saying where to find the
|
||||
Corresponding Source. Regardless of what server hosts the
|
||||
Corresponding Source, you remain obligated to ensure that it is
|
||||
available for as long as needed to satisfy these requirements.
|
||||
|
||||
e) Convey the object code using peer-to-peer transmission, provided
|
||||
you inform other peers where the object code and Corresponding
|
||||
Source of the work are being offered to the general public at no
|
||||
charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded
|
||||
from the Corresponding Source as a System Library, need not be
|
||||
included in conveying the object code work.
|
||||
|
||||
A "User Product" is either (1) a "consumer product", which means any
|
||||
tangible personal property which is normally used for personal, family,
|
||||
or household purposes, or (2) anything designed or sold for incorporation
|
||||
into a dwelling. In determining whether a product is a consumer product,
|
||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||
product received by a particular user, "normally used" refers to a
|
||||
typical or common use of that class of product, regardless of the status
|
||||
of the particular user or of the way in which the particular user
|
||||
actually uses, or expects or is expected to use, the product. A product
|
||||
is a consumer product regardless of whether the product has substantial
|
||||
commercial, industrial or non-consumer uses, unless such uses represent
|
||||
the only significant mode of use of the product.
|
||||
|
||||
"Installation Information" for a User Product means any methods,
|
||||
procedures, authorization keys, or other information required to install
|
||||
and execute modified versions of a covered work in that User Product from
|
||||
a modified version of its Corresponding Source. The information must
|
||||
suffice to ensure that the continued functioning of the modified object
|
||||
code is in no case prevented or interfered with solely because
|
||||
modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or
|
||||
specifically for use in, a User Product, and the conveying occurs as
|
||||
part of a transaction in which the right of possession and use of the
|
||||
User Product is transferred to the recipient in perpetuity or for a
|
||||
fixed term (regardless of how the transaction is characterized), the
|
||||
Corresponding Source conveyed under this section must be accompanied
|
||||
by the Installation Information. But this requirement does not apply
|
||||
if neither you nor any third party retains the ability to install
|
||||
modified object code on the User Product (for example, the work has
|
||||
been installed in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a
|
||||
requirement to continue to provide support service, warranty, or updates
|
||||
for a work that has been modified or installed by the recipient, or for
|
||||
the User Product in which it has been modified or installed. Access to a
|
||||
network may be denied when the modification itself materially and
|
||||
adversely affects the operation of the network or violates the rules and
|
||||
protocols for communication across the network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided,
|
||||
in accord with this section must be in a format that is publicly
|
||||
documented (and with an implementation available to the public in
|
||||
source code form), and must require no special password or key for
|
||||
unpacking, reading or copying.
|
||||
|
||||
7. Additional Terms.
|
||||
|
||||
"Additional permissions" are terms that supplement the terms of this
|
||||
License by making exceptions from one or more of its conditions.
|
||||
Additional permissions that are applicable to the entire Program shall
|
||||
be treated as though they were included in this License, to the extent
|
||||
that they are valid under applicable law. If additional permissions
|
||||
apply only to part of the Program, that part may be used separately
|
||||
under those permissions, but the entire Program remains governed by
|
||||
this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option
|
||||
remove any additional permissions from that copy, or from any part of
|
||||
it. (Additional permissions may be written to require their own
|
||||
removal in certain cases when you modify the work.) You may place
|
||||
additional permissions on material, added by you to a covered work,
|
||||
for which you have or can give appropriate copyright permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you
|
||||
add to a covered work, you may (if authorized by the copyright holders of
|
||||
that material) supplement the terms of this License with terms:
|
||||
|
||||
a) Disclaiming warranty or limiting liability differently from the
|
||||
terms of sections 15 and 16 of this License; or
|
||||
|
||||
b) Requiring preservation of specified reasonable legal notices or
|
||||
author attributions in that material or in the Appropriate Legal
|
||||
Notices displayed by works containing it; or
|
||||
|
||||
c) Prohibiting misrepresentation of the origin of that material, or
|
||||
requiring that modified versions of such material be marked in
|
||||
reasonable ways as different from the original version; or
|
||||
|
||||
d) Limiting the use for publicity purposes of names of licensors or
|
||||
authors of the material; or
|
||||
|
||||
e) Declining to grant rights under trademark law for use of some
|
||||
trade names, trademarks, or service marks; or
|
||||
|
||||
f) Requiring indemnification of licensors and authors of that
|
||||
material by anyone who conveys the material (or modified versions of
|
||||
it) with contractual assumptions of liability to the recipient, for
|
||||
any liability that these contractual assumptions directly impose on
|
||||
those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered "further
|
||||
restrictions" within the meaning of section 10. If the Program as you
|
||||
received it, or any part of it, contains a notice stating that it is
|
||||
governed by this License along with a term that is a further
|
||||
restriction, you may remove that term. If a license document contains
|
||||
a further restriction but permits relicensing or conveying under this
|
||||
License, you may add to a covered work material governed by the terms
|
||||
of that license document, provided that the further restriction does
|
||||
not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you
|
||||
must place, in the relevant source files, a statement of the
|
||||
additional terms that apply to those files, or a notice indicating
|
||||
where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the
|
||||
form of a separately written license, or stated as exceptions;
|
||||
the above requirements apply either way.
|
||||
|
||||
8. Termination.
|
||||
|
||||
You may not propagate or modify a covered work except as expressly
|
||||
provided under this License. Any attempt otherwise to propagate or
|
||||
modify it is void, and will automatically terminate your rights under
|
||||
this License (including any patent licenses granted under the third
|
||||
paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your
|
||||
license from a particular copyright holder is reinstated (a)
|
||||
provisionally, unless and until the copyright holder explicitly and
|
||||
finally terminates your license, and (b) permanently, if the copyright
|
||||
holder fails to notify you of the violation by some reasonable means
|
||||
prior to 60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is
|
||||
reinstated permanently if the copyright holder notifies you of the
|
||||
violation by some reasonable means, this is the first time you have
|
||||
received notice of violation of this License (for any work) from that
|
||||
copyright holder, and you cure the violation prior to 30 days after
|
||||
your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the
|
||||
licenses of parties who have received copies or rights from you under
|
||||
this License. If your rights have been terminated and not permanently
|
||||
reinstated, you do not qualify to receive new licenses for the same
|
||||
material under section 10.
|
||||
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
|
||||
You are not required to accept this License in order to receive or
|
||||
run a copy of the Program. Ancillary propagation of a covered work
|
||||
occurring solely as a consequence of using peer-to-peer transmission
|
||||
to receive a copy likewise does not require acceptance. However,
|
||||
nothing other than this License grants you permission to propagate or
|
||||
modify any covered work. These actions infringe copyright if you do
|
||||
not accept this License. Therefore, by modifying or propagating a
|
||||
covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
|
||||
Each time you convey a covered work, the recipient automatically
|
||||
receives a license from the original licensors, to run, modify and
|
||||
propagate that work, subject to this License. You are not responsible
|
||||
for enforcing compliance by third parties with this License.
|
||||
|
||||
An "entity transaction" is a transaction transferring control of an
|
||||
organization, or substantially all assets of one, or subdividing an
|
||||
organization, or merging organizations. If propagation of a covered
|
||||
work results from an entity transaction, each party to that
|
||||
transaction who receives a copy of the work also receives whatever
|
||||
licenses to the work the party's predecessor in interest had or could
|
||||
give under the previous paragraph, plus a right to possession of the
|
||||
Corresponding Source of the work from the predecessor in interest, if
|
||||
the predecessor has it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the
|
||||
rights granted or affirmed under this License. For example, you may
|
||||
not impose a license fee, royalty, or other charge for exercise of
|
||||
rights granted under this License, and you may not initiate litigation
|
||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||
any patent claim is infringed by making, using, selling, offering for
|
||||
sale, or importing the Program or any portion of it.
|
||||
|
||||
11. Patents.
|
||||
|
||||
A "contributor" is a copyright holder who authorizes use under this
|
||||
License of the Program or a work on which the Program is based. The
|
||||
work thus licensed is called the contributor's "contributor version".
|
||||
|
||||
A contributor's "essential patent claims" are all patent claims
|
||||
owned or controlled by the contributor, whether already acquired or
|
||||
hereafter acquired, that would be infringed by some manner, permitted
|
||||
by this License, of making, using, or selling its contributor version,
|
||||
but do not include claims that would be infringed only as a
|
||||
consequence of further modification of the contributor version. For
|
||||
purposes of this definition, "control" includes the right to grant
|
||||
patent sublicenses in a manner consistent with the requirements of
|
||||
this License.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||
patent license under the contributor's essential patent claims, to
|
||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||
propagate the contents of its contributor version.
|
||||
|
||||
In the following three paragraphs, a "patent license" is any express
|
||||
agreement or commitment, however denominated, not to enforce a patent
|
||||
(such as an express permission to practice a patent or covenant not to
|
||||
sue for patent infringement). To "grant" such a patent license to a
|
||||
party means to make such an agreement or commitment not to enforce a
|
||||
patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license,
|
||||
and the Corresponding Source of the work is not available for anyone
|
||||
to copy, free of charge and under the terms of this License, through a
|
||||
publicly available network server or other readily accessible means,
|
||||
then you must either (1) cause the Corresponding Source to be so
|
||||
available, or (2) arrange to deprive yourself of the benefit of the
|
||||
patent license for this particular work, or (3) arrange, in a manner
|
||||
consistent with the requirements of this License, to extend the patent
|
||||
license to downstream recipients. "Knowingly relying" means you have
|
||||
actual knowledge that, but for the patent license, your conveying the
|
||||
covered work in a country, or your recipient's use of the covered work
|
||||
in a country, would infringe one or more identifiable patents in that
|
||||
country that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or
|
||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||
covered work, and grant a patent license to some of the parties
|
||||
receiving the covered work authorizing them to use, propagate, modify
|
||||
or convey a specific copy of the covered work, then the patent license
|
||||
you grant is automatically extended to all recipients of the covered
|
||||
work and works based on it.
|
||||
|
||||
A patent license is "discriminatory" if it does not include within
|
||||
the scope of its coverage, prohibits the exercise of, or is
|
||||
conditioned on the non-exercise of one or more of the rights that are
|
||||
specifically granted under this License. You may not convey a covered
|
||||
work if you are a party to an arrangement with a third party that is
|
||||
in the business of distributing software, under which you make payment
|
||||
to the third party based on the extent of your activity of conveying
|
||||
the work, and under which the third party grants, to any of the
|
||||
parties who would receive the covered work from you, a discriminatory
|
||||
patent license (a) in connection with copies of the covered work
|
||||
conveyed by you (or copies made from those copies), or (b) primarily
|
||||
for and in connection with specific products or compilations that
|
||||
contain the covered work, unless you entered into that arrangement,
|
||||
or that patent license was granted, prior to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting
|
||||
any implied license or other defenses to infringement that may
|
||||
otherwise be available to you under applicable patent law.
|
||||
|
||||
12. No Surrender of Others' Freedom.
|
||||
|
||||
If conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot convey a
|
||||
covered work so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you may
|
||||
not convey it at all. For example, if you agree to terms that obligate you
|
||||
to collect a royalty for further conveying from those to whom you convey
|
||||
the Program, the only way you could satisfy both those terms and this
|
||||
License would be to refrain entirely from conveying the Program.
|
||||
|
||||
13. Use with the GNU Affero General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, you have
|
||||
permission to link or combine any covered work with a work licensed
|
||||
under version 3 of the GNU Affero General Public License into a single
|
||||
combined work, and to convey the resulting work. The terms of this
|
||||
License will continue to apply to the part which is the covered work,
|
||||
but the special requirements of the GNU Affero General Public License,
|
||||
section 13, concerning interaction through a network will apply to the
|
||||
combination as such.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of
|
||||
the GNU General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Program specifies that a certain numbered version of the GNU General
|
||||
Public License "or any later version" applies to it, you have the
|
||||
option of following the terms and conditions either of that numbered
|
||||
version or of any later version published by the Free Software
|
||||
Foundation. If the Program does not specify a version number of the
|
||||
GNU General Public License, you may choose any version ever published
|
||||
by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future
|
||||
versions of the GNU General Public License can be used, that proxy's
|
||||
public statement of acceptance of a version permanently authorizes you
|
||||
to choose that version for the Program.
|
||||
|
||||
Later license versions may give you additional or different
|
||||
permissions. However, no additional obligations are imposed on any
|
||||
author or copyright holder as a result of your choosing to follow a
|
||||
later version.
|
||||
|
||||
15. Disclaimer of Warranty.
|
||||
|
||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. Limitation of Liability.
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGES.
|
||||
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
|
||||
If the disclaimer of warranty and limitation of liability provided
|
||||
above cannot be given local legal effect according to their terms,
|
||||
reviewing courts shall apply local law that most closely approximates
|
||||
an absolute waiver of all civil liability in connection with the
|
||||
Program, unless a warranty or assumption of liability accompanies a
|
||||
copy of the Program in return for a fee.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
state the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program does terminal interaction, make it output a short
|
||||
notice like this when it starts in an interactive mode:
|
||||
|
||||
<program> Copyright (C) <year> <name of author>
|
||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, your program's commands
|
||||
might be different; for a GUI interface, you would use an "about box".
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||
For more information on this, and how to apply and follow the GNU GPL, see
|
||||
<https://www.gnu.org/licenses/>.
|
||||
|
||||
The GNU General Public License does not permit incorporating your program
|
||||
into proprietary programs. If your program is a subroutine library, you
|
||||
may consider it more useful to permit linking proprietary applications with
|
||||
the library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License. But first, please read
|
||||
<https://www.gnu.org/licenses/why-not-lgpl.html>.
|
||||
|
After Width: | Height: | Size: 2.7 MiB |
@@ -0,0 +1,72 @@
|
||||
# IMPORTANT:
|
||||
# Only packages/attributes that exist in Nixpkgs can be installed.
|
||||
# Check names on https://search.nixos.org/packages
|
||||
# A wrong package name (or attribute path) will cause the Nix build to fail.
|
||||
|
||||
|
||||
# system
|
||||
waybar
|
||||
wofi
|
||||
dunst
|
||||
xdg-utils
|
||||
desktop-file-utils
|
||||
playerctl
|
||||
pamixer
|
||||
brightnessctl
|
||||
rofi
|
||||
home-manager
|
||||
|
||||
# browsers
|
||||
brave
|
||||
vivaldi
|
||||
chromium
|
||||
|
||||
# hyprland
|
||||
hyprpaper
|
||||
|
||||
# utils
|
||||
wget
|
||||
flatpak
|
||||
nextcloud-client
|
||||
kdePackages.okular
|
||||
kdePackages.gwenview
|
||||
kdePackages.kdeconnect-kde
|
||||
_1password-gui
|
||||
|
||||
docker
|
||||
tree
|
||||
ripgrep
|
||||
gparted
|
||||
file
|
||||
htop
|
||||
wev
|
||||
solaar
|
||||
|
||||
# terminal
|
||||
kitty
|
||||
starship
|
||||
kdePackages.konsole
|
||||
kdePackages.yakuake
|
||||
|
||||
# office
|
||||
obsidian
|
||||
onlyoffice-desktopeditors
|
||||
|
||||
# development
|
||||
git
|
||||
vscode-with-extensions
|
||||
kdePackages.kate
|
||||
jetbrains.pycharm
|
||||
python3
|
||||
|
||||
# communication
|
||||
nextcloud-talk-desktop
|
||||
signal-desktop
|
||||
|
||||
# multimedia
|
||||
spotify
|
||||
vlc
|
||||
|
||||
# graphic
|
||||
gimp2
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
app.zen_browser.zen
|
||||
com.github.tchx84.Flatseal
|
||||
eu.betterbird.Betterbird
|
||||
com.todoist.Todoist
|
||||
@@ -0,0 +1,68 @@
|
||||
# IMPORTANT:
|
||||
# Only packages/attributes that exist in Nixpkgs can be installed.
|
||||
# Check names on https://search.nixos.org/packages
|
||||
# A wrong package name (or attribute path) will cause the Nix build to fail.
|
||||
|
||||
|
||||
# system
|
||||
waybar
|
||||
wofi
|
||||
dunst
|
||||
xdg-utils
|
||||
desktop-file-utils
|
||||
playerctl
|
||||
pamixer
|
||||
brightnessctl
|
||||
rofi
|
||||
home-manager
|
||||
|
||||
# browsers
|
||||
brave
|
||||
vivaldi
|
||||
chromium
|
||||
|
||||
# hyprland
|
||||
hyprpaper
|
||||
|
||||
# utils
|
||||
wget
|
||||
flatpak
|
||||
nextcloud-client
|
||||
kdePackages.okular
|
||||
kdePackages.gwenview
|
||||
kdePackages.kdeconnect-kde
|
||||
_1password-gui
|
||||
docker
|
||||
tree
|
||||
ripgrep
|
||||
gparted
|
||||
file
|
||||
htop
|
||||
wev
|
||||
solaar
|
||||
|
||||
# terminal
|
||||
kitty
|
||||
starship
|
||||
kdePackages.konsole
|
||||
kdePackages.yakuake
|
||||
|
||||
# office
|
||||
obsidian
|
||||
onlyoffice-desktopeditors
|
||||
|
||||
# development
|
||||
git
|
||||
vscode-with-extensions
|
||||
kdePackages.kate
|
||||
#jetbrains.pycharm
|
||||
python3
|
||||
|
||||
# communication
|
||||
nextcloud-talk-desktop
|
||||
signal-desktop
|
||||
|
||||
# multimedia
|
||||
spotify
|
||||
vlc
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
# Minimal Hyprland config for greetd
|
||||
|
||||
monitor = , preferred, auto, 1
|
||||
|
||||
misc {
|
||||
disable_hyprland_logo = true
|
||||
disable_splash_rendering = true
|
||||
}
|
||||
|
||||
# Start qtgreet and point it at the correct session paths for NixOS
|
||||
exec-once = sh -lc 'source /etc/greetd/qtgreet-session-paths; exec qtgreet -w "$WAYLAND_SESSIONS" -x "$X11_SESSIONS"'
|
||||
@@ -0,0 +1,122 @@
|
||||
###############
|
||||
# Keybindings #
|
||||
###############
|
||||
|
||||
$mod = SUPER
|
||||
|
||||
# Terminal / launcher / kill / reload
|
||||
bind = $mod, RETURN, exec, kitty
|
||||
bind = $mod, D, exec, wofi --show drun
|
||||
bind = $mod, Q, killactive,
|
||||
bind = $mod SHIFT, Q, exit,
|
||||
bind = $mod SHIFT, R, exec, hyprctl reload
|
||||
|
||||
# Default browser
|
||||
bind = $mod, W, exec, xdg-open https://about:blank
|
||||
# Focus movement
|
||||
bind = $mod, H, movefocus, l
|
||||
bind = $mod, L, movefocus, r
|
||||
bind = $mod, K, movefocus, u
|
||||
bind = $mod, J, movefocus, d
|
||||
bind = $mod, left, movefocus, l
|
||||
bind = $mod, right, movefocus, r
|
||||
bind = $mod, up, movefocus, u
|
||||
bind = $mod, down, movefocus, d
|
||||
|
||||
# Move windows
|
||||
bind = $mod SHIFT, H, movewindow, l
|
||||
bind = $mod SHIFT, L, movewindow, r
|
||||
bind = $mod SHIFT, K, movewindow, u
|
||||
bind = $mod SHIFT, J, movewindow, d
|
||||
bind = $mod SHIFT, left, movewindow, l
|
||||
bind = $mod SHIFT, right, movewindow, r
|
||||
bind = $mod SHIFT, up, movewindow, u
|
||||
bind = $mod SHIFT, down, movewindow, d
|
||||
|
||||
# Resize windows
|
||||
bind = $mod CTRL, H, resizeactive, -30 0
|
||||
bind = $mod CTRL, L, resizeactive, 30 0
|
||||
bind = $mod CTRL, K, resizeactive, 0 -30
|
||||
bind = $mod CTRL, J, resizeactive, 0 30
|
||||
|
||||
# Floating / fullscreen
|
||||
bind = $mod, V, togglefloating,
|
||||
bind = $mod, F, fullscreen, 0
|
||||
bind = $mod SHIFT, F, fullscreen, 1
|
||||
|
||||
# Workspaces
|
||||
bind = $mod, 1, workspace, 1
|
||||
bind = $mod, 2, workspace, 2
|
||||
bind = $mod, 3, workspace, 3
|
||||
bind = $mod, 4, workspace, 4
|
||||
bind = $mod, 5, workspace, 5
|
||||
bind = $mod, 6, workspace, 6
|
||||
bind = $mod, 7, workspace, 7
|
||||
bind = $mod, 8, workspace, 8
|
||||
bind = $mod, 9, workspace, 9
|
||||
bind = $mod, 0, workspace, 10
|
||||
|
||||
bind = $mod SHIFT, 1, movetoworkspace, 1
|
||||
bind = $mod SHIFT, 2, movetoworkspace, 2
|
||||
bind = $mod SHIFT, 3, movetoworkspace, 3
|
||||
bind = $mod SHIFT, 4, movetoworkspace, 4
|
||||
bind = $mod SHIFT, 5, movetoworkspace, 5
|
||||
bind = $mod SHIFT, 6, movetoworkspace, 6
|
||||
bind = $mod SHIFT, 7, movetoworkspace, 7
|
||||
bind = $mod SHIFT, 8, movetoworkspace, 8
|
||||
bind = $mod SHIFT, 9, movetoworkspace, 9
|
||||
bind = $mod SHIFT, 0, movetoworkspace, 10
|
||||
|
||||
# Cycle workspaces
|
||||
bind = $mod, mouse_down, workspace, e+1
|
||||
bind = $mod, mouse_up, workspace, e-1
|
||||
|
||||
# Mouse drag
|
||||
bindm = $mod, mouse:272, movewindow
|
||||
bindm = $mod, mouse:273, resizewindow
|
||||
|
||||
#########################
|
||||
# Screenshots
|
||||
#########################
|
||||
bind = $mod SHIFT, s, exec, grim -g "$(slurp)" - | wl-copy
|
||||
bind = , XF86Screenshot, exec, grim - | wl-copy
|
||||
|
||||
#########################
|
||||
# Audio (pamixer)
|
||||
#########################
|
||||
bind = , XF86AudioRaiseVolume, exec, pamixer -i 5
|
||||
bind = , XF86AudioLowerVolume, exec, pamixer -d 5
|
||||
bind = , XF86AudioMute, exec, pamixer -t
|
||||
bind = , XF86AudioMicMute, exec, pamixer --default-source -t
|
||||
|
||||
#########################
|
||||
# Media (playerctl)
|
||||
#########################
|
||||
bind = , XF86AudioPlay, exec, playerctl play-pause
|
||||
bind = , XF86AudioPause, exec, playerctl pause
|
||||
bind = , XF86AudioNext, exec, playerctl next
|
||||
bind = , XF86AudioPrev, exec, playerctl previous
|
||||
bind = , XF86AudioStop, exec, playerctl stop
|
||||
|
||||
#########################
|
||||
# Brightness (brightnessctl)
|
||||
#########################
|
||||
bind = , XF86MonBrightnessUp, exec, brightnessctl set +10%
|
||||
bind = , XF86MonBrightnessDown, exec, brightnessctl set 10%-
|
||||
bind = , XF86KbdBrightnessUp, exec, brightnessctl -d '*kbd_backlight*' set +10%
|
||||
bind = , XF86KbdBrightnessDown, exec, brightnessctl -d '*kbd_backlight*' set 10%-
|
||||
|
||||
#########################
|
||||
# Power / session
|
||||
#########################
|
||||
bind = , XF86Sleep, exec, systemctl suspend
|
||||
bind = , XF86PowerOff, exec, systemctl poweroff
|
||||
bind = , XF86WakeUp, exec, systemctl suspend
|
||||
|
||||
#########################
|
||||
# Start apps
|
||||
#########################
|
||||
bind = $mod, E, exec, dolphin
|
||||
bind = CTRLALT, B, exec, flatpak run eu.betterbird.Betterbird
|
||||
bind = CTRLALT, S, exec, spotify
|
||||
bind = CTRLALT, z, exec, flatpak run app.zen_browser.zen
|
||||
@@ -0,0 +1,58 @@
|
||||
|
||||
# --- Variables ---
|
||||
$mod = SUPER
|
||||
$term = kitty
|
||||
$menu = hyprshell run
|
||||
|
||||
|
||||
# --- Environment ---
|
||||
env = XDG_CURRENT_DESKTOP,Hyprland
|
||||
env = XDG_SESSION_TYPE,wayland
|
||||
env = XDG_SESSION_DESKTOP,Hyprland
|
||||
env = MOZ_ENABLE_WAYLAND,1
|
||||
|
||||
# --- Monitor (safe default) ---
|
||||
monitor = , preferred, auto, 1
|
||||
|
||||
# --- Input ---
|
||||
input {
|
||||
kb_layout = us
|
||||
follow_mouse = 1
|
||||
touchpad {
|
||||
natural_scroll = true
|
||||
}
|
||||
}
|
||||
|
||||
# --- General ---
|
||||
general {
|
||||
gaps_in = 5
|
||||
gaps_out = 10
|
||||
border_size = 2
|
||||
layout = dwindle
|
||||
}
|
||||
|
||||
animations {
|
||||
enabled = true
|
||||
}
|
||||
|
||||
decoration {
|
||||
blur {
|
||||
enabled = true
|
||||
size = 8
|
||||
passes = 2
|
||||
new_optimizations = true
|
||||
}
|
||||
}
|
||||
|
||||
misc {
|
||||
disable_hyprland_logo = false
|
||||
disable_splash_rendering = false
|
||||
}
|
||||
|
||||
# --- Keybindings live here ---
|
||||
source = /etc/xdg/hypr/bindings.conf
|
||||
|
||||
|
||||
# --- Autostart ---
|
||||
exec-once = waybar
|
||||
#exec-once = sleep 2 & /run/current-system/sw/bin/hyprshell run
|
||||
@@ -0,0 +1,61 @@
|
||||
# =========================
|
||||
# Hyprland config (generated by Nix)
|
||||
# =========================
|
||||
|
||||
# --- Variables ---
|
||||
$mod = SUPER
|
||||
$term = kitty
|
||||
$menu = hyprshell run
|
||||
|
||||
|
||||
# --- Environment ---
|
||||
env = XDG_CURRENT_DESKTOP,Hyprland
|
||||
env = XDG_SESSION_TYPE,wayland
|
||||
env = XDG_SESSION_DESKTOP,Hyprland
|
||||
env = MOZ_ENABLE_WAYLAND,1
|
||||
|
||||
# --- Monitor (safe default) ---
|
||||
monitor = , preferred, auto, 1
|
||||
|
||||
# --- Input ---
|
||||
input {
|
||||
kb_layout = us
|
||||
follow_mouse = 1
|
||||
touchpad {
|
||||
natural_scroll = true
|
||||
}
|
||||
}
|
||||
|
||||
# --- General ---
|
||||
general {
|
||||
gaps_in = 5
|
||||
gaps_out = 10
|
||||
border_size = 2
|
||||
layout = dwindle
|
||||
}
|
||||
|
||||
animations {
|
||||
enabled = true
|
||||
}
|
||||
|
||||
decoration {
|
||||
blur {
|
||||
enabled = false
|
||||
size = 8
|
||||
passes = 2
|
||||
new_optimizations = true
|
||||
}
|
||||
}
|
||||
|
||||
misc {
|
||||
disable_hyprland_logo = false
|
||||
disable_splash_rendering = false
|
||||
}
|
||||
|
||||
# --- Keybindings live here ---
|
||||
source = /etc/xdg/hypr/bindings.conf
|
||||
|
||||
|
||||
# --- Autostart ---
|
||||
exec-once = waybar
|
||||
#exec-once = sleep 2 & /run/current-system/sw/bin/hyprshell run
|
||||
@@ -0,0 +1,4 @@
|
||||
Host *
|
||||
AddKeysToAgent yes
|
||||
ServerAliveInterval 30
|
||||
ServerAliveCountMax 3
|
||||
@@ -0,0 +1,17 @@
|
||||
alias ll='ls -lah'
|
||||
alias gs='git status'
|
||||
alias ga='git add'
|
||||
alias gc='git commit'
|
||||
alias reb-switch='cd ~/nixos && sudo nixos-rebuild switch --flake ~/nixos#traveldroid'
|
||||
alias reb-test='cd ~/nixos && sudo nixos-rebuild test --flake ~/nixos#traveldroid'
|
||||
alias reb-vm='cd ~/nixos && sudo nixos-rebuild build-vm --flake ~/nixos#traveldroid && "$(ls -1 ./result/bin/run-*-vm | head -n 1)"'
|
||||
alias rb='systemctl reboot'
|
||||
alias po='systemctl poweroff'
|
||||
alias fpl='flatpak search'
|
||||
alias fpi='flatpak install'
|
||||
alias fpr='flatpak run'
|
||||
alias nxc='ssh henrov@nextcloud.data-pro.nu'
|
||||
alias nps='xdg-open https://search.nixos.org'
|
||||
alias vs='code'
|
||||
alias saveme='sudo nix-env -p /nix/var/nix/profiles/system --set /nix/var/nix/profiles/system-123-link && sudo /nix/var/nix/profiles/system/bin/switch-to-configuration boot'
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
# ~/nixos/files/conf/terminal/kitty.conf
|
||||
# Kitty config (https://sw.kovidgoyal.net/kitty/conf/)
|
||||
#
|
||||
# Edit freely; NixOS will inject this file verbatim via programs.kitty.extraConfig.
|
||||
|
||||
# Example baseline settings:
|
||||
background_opacity 0.60
|
||||
dynamic_background_opacity yes
|
||||
|
||||
# Suggested: allow ctrl+shift+v paste (many distros default this already)
|
||||
map ctrl+shift+v paste_from_clipboard
|
||||
map ctrl+shift+c copy_to_clipboard
|
||||
@@ -0,0 +1,279 @@
|
||||
"$schema" = 'https://starship.rs/config-schema.json'
|
||||
|
||||
format = """
|
||||
[](red)\
|
||||
$os\
|
||||
$username\
|
||||
[](bg:peach fg:red)\
|
||||
$directory\
|
||||
[](bg:yellow fg:peach)\
|
||||
$git_branch\
|
||||
$git_status\
|
||||
[](fg:yellow bg:green)\
|
||||
$c\
|
||||
$rust\
|
||||
$golang\
|
||||
$nodejs\
|
||||
$php\
|
||||
$java\
|
||||
$kotlin\
|
||||
$haskell\
|
||||
$python\
|
||||
[](fg:green bg:sapphire)\
|
||||
$conda\
|
||||
[](fg:sapphire bg:lavender)\
|
||||
$time\
|
||||
[ ](fg:lavender)\
|
||||
$cmd_duration\
|
||||
$line_break\
|
||||
$character"""
|
||||
|
||||
palette = 'catppuccin_mocha'
|
||||
|
||||
[os]
|
||||
disabled = false
|
||||
style = "bg:red fg:crust"
|
||||
|
||||
[os.symbols]
|
||||
Windows = ""
|
||||
Ubuntu = ""
|
||||
SUSE = ""
|
||||
Raspbian = ""
|
||||
Mint = ""
|
||||
Macos = ""
|
||||
Manjaro = ""
|
||||
Linux = ""
|
||||
Gentoo = ""
|
||||
Fedora = ""
|
||||
Alpine = ""
|
||||
Amazon = ""
|
||||
Android = ""
|
||||
AOSC = ""
|
||||
Arch = ""
|
||||
Artix = ""
|
||||
CentOS = ""
|
||||
Debian = ""
|
||||
Redhat = ""
|
||||
RedHatEnterprise = ""
|
||||
|
||||
[username]
|
||||
show_always = true
|
||||
style_user = "bg:red fg:crust"
|
||||
style_root = "bg:red fg:crust"
|
||||
format = '[ $user]($style)'
|
||||
|
||||
[directory]
|
||||
style = "bg:peach fg:crust"
|
||||
format = "[ $path ]($style)"
|
||||
truncation_length = 3
|
||||
truncation_symbol = "…/"
|
||||
|
||||
[directory.substitutions]
|
||||
"Documents" = " "
|
||||
"Downloads" = " "
|
||||
"Music" = " "
|
||||
"Pictures" = " "
|
||||
"Developer" = " "
|
||||
|
||||
[git_branch]
|
||||
symbol = ""
|
||||
style = "bg:yellow"
|
||||
format = '[[ $symbol $branch ](fg:crust bg:yellow)]($style)'
|
||||
|
||||
[git_status]
|
||||
style = "bg:yellow"
|
||||
format = '[[($all_status$ahead_behind )](fg:crust bg:yellow)]($style)'
|
||||
|
||||
[nodejs]
|
||||
symbol = ""
|
||||
style = "bg:green"
|
||||
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'
|
||||
|
||||
[c]
|
||||
symbol = " "
|
||||
style = "bg:green"
|
||||
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'
|
||||
|
||||
[rust]
|
||||
symbol = ""
|
||||
style = "bg:green"
|
||||
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'
|
||||
|
||||
[golang]
|
||||
symbol = ""
|
||||
style = "bg:green"
|
||||
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'
|
||||
|
||||
[php]
|
||||
symbol = ""
|
||||
style = "bg:green"
|
||||
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'
|
||||
|
||||
[java]
|
||||
symbol = " "
|
||||
style = "bg:green"
|
||||
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'
|
||||
|
||||
[kotlin]
|
||||
symbol = ""
|
||||
style = "bg:green"
|
||||
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'
|
||||
|
||||
[haskell]
|
||||
symbol = ""
|
||||
style = "bg:green"
|
||||
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'
|
||||
|
||||
[python]
|
||||
symbol = ""
|
||||
style = "bg:green"
|
||||
format = '[[ $symbol( $version)(\(#$virtualenv\)) ](fg:crust bg:green)]($style)'
|
||||
|
||||
[docker_context]
|
||||
symbol = ""
|
||||
style = "bg:sapphire"
|
||||
format = '[[ $symbol( $context) ](fg:crust bg:sapphire)]($style)'
|
||||
|
||||
[conda]
|
||||
symbol = " "
|
||||
style = "fg:crust bg:sapphire"
|
||||
format = '[$symbol$environment ]($style)'
|
||||
ignore_base = false
|
||||
|
||||
[time]
|
||||
disabled = false
|
||||
time_format = "%R"
|
||||
style = "bg:lavender"
|
||||
format = '[[ $time ](fg:crust bg:lavender)]($style)'
|
||||
|
||||
[line_break]
|
||||
disabled = false
|
||||
|
||||
[character]
|
||||
disabled = false
|
||||
success_symbol = '[❯](bold fg:green)'
|
||||
error_symbol = '[❯](bold fg:red)'
|
||||
vimcmd_symbol = '[❮](bold fg:green)'
|
||||
vimcmd_replace_one_symbol = '[❮](bold fg:lavender)'
|
||||
vimcmd_replace_symbol = '[❮](bold fg:lavender)'
|
||||
vimcmd_visual_symbol = '[❮](bold fg:yellow)'
|
||||
|
||||
[cmd_duration]
|
||||
show_milliseconds = true
|
||||
format = " in $duration "
|
||||
style = "bg:lavender"
|
||||
disabled = false
|
||||
show_notifications = true
|
||||
min_time_to_notify = 45000
|
||||
|
||||
[palettes.catppuccin_mocha]
|
||||
rosewater = "#f5e0dc"
|
||||
flamingo = "#f2cdcd"
|
||||
pink = "#f5c2e7"
|
||||
mauve = "#cba6f7"
|
||||
red = "#f38ba8"
|
||||
maroon = "#eba0ac"
|
||||
peach = "#fab387"
|
||||
yellow = "#f9e2af"
|
||||
green = "#a6e3a1"
|
||||
teal = "#94e2d5"
|
||||
sky = "#89dceb"
|
||||
sapphire = "#74c7ec"
|
||||
blue = "#89b4fa"
|
||||
lavender = "#b4befe"
|
||||
text = "#cdd6f4"
|
||||
subtext1 = "#bac2de"
|
||||
subtext0 = "#a6adc8"
|
||||
overlay2 = "#9399b2"
|
||||
overlay1 = "#7f849c"
|
||||
overlay0 = "#6c7086"
|
||||
surface2 = "#585b70"
|
||||
surface1 = "#45475a"
|
||||
surface0 = "#313244"
|
||||
base = "#1e1e2e"
|
||||
mantle = "#181825"
|
||||
crust = "#11111b"
|
||||
|
||||
[palettes.catppuccin_frappe]
|
||||
rosewater = "#f2d5cf"
|
||||
flamingo = "#eebebe"
|
||||
pink = "#f4b8e4"
|
||||
mauve = "#ca9ee6"
|
||||
red = "#e78284"
|
||||
maroon = "#ea999c"
|
||||
peach = "#ef9f76"
|
||||
yellow = "#e5c890"
|
||||
green = "#a6d189"
|
||||
teal = "#81c8be"
|
||||
sky = "#99d1db"
|
||||
sapphire = "#85c1dc"
|
||||
blue = "#8caaee"
|
||||
lavender = "#babbf1"
|
||||
text = "#c6d0f5"
|
||||
subtext1 = "#b5bfe2"
|
||||
subtext0 = "#a5adce"
|
||||
overlay2 = "#949cbb"
|
||||
overlay1 = "#838ba7"
|
||||
overlay0 = "#737994"
|
||||
surface2 = "#626880"
|
||||
surface1 = "#51576d"
|
||||
surface0 = "#414559"
|
||||
base = "#303446"
|
||||
mantle = "#292c3c"
|
||||
crust = "#232634"
|
||||
|
||||
[palettes.catppuccin_latte]
|
||||
rosewater = "#dc8a78"
|
||||
flamingo = "#dd7878"
|
||||
pink = "#ea76cb"
|
||||
mauve = "#8839ef"
|
||||
red = "#d20f39"
|
||||
maroon = "#e64553"
|
||||
peach = "#fe640b"
|
||||
yellow = "#df8e1d"
|
||||
green = "#40a02b"
|
||||
teal = "#179299"
|
||||
sky = "#04a5e5"
|
||||
sapphire = "#209fb5"
|
||||
blue = "#1e66f5"
|
||||
lavender = "#7287fd"
|
||||
text = "#4c4f69"
|
||||
subtext1 = "#5c5f77"
|
||||
subtext0 = "#6c6f85"
|
||||
overlay2 = "#7c7f93"
|
||||
overlay1 = "#8c8fa1"
|
||||
overlay0 = "#9ca0b0"
|
||||
surface2 = "#acb0be"
|
||||
surface1 = "#bcc0cc"
|
||||
surface0 = "#ccd0da"
|
||||
base = "#eff1f5"
|
||||
mantle = "#e6e9ef"
|
||||
crust = "#dce0e8"
|
||||
|
||||
[palettes.catppuccin_macchiato]
|
||||
rosewater = "#f4dbd6"
|
||||
flamingo = "#f0c6c6"
|
||||
pink = "#f5bde6"
|
||||
mauve = "#c6a0f6"
|
||||
red = "#ed8796"
|
||||
maroon = "#ee99a0"
|
||||
peach = "#f5a97f"
|
||||
yellow = "#eed49f"
|
||||
green = "#a6da95"
|
||||
teal = "#8bd5ca"
|
||||
sky = "#91d7e3"
|
||||
sapphire = "#7dc4e4"
|
||||
blue = "#8aadf4"
|
||||
lavender = "#b7bdf8"
|
||||
text = "#cad3f5"
|
||||
subtext1 = "#b8c0e0"
|
||||
subtext0 = "#a5adcb"
|
||||
overlay2 = "#939ab7"
|
||||
overlay1 = "#8087a2"
|
||||
overlay0 = "#6e738d"
|
||||
surface2 = "#5b6078"
|
||||
surface1 = "#494d64"
|
||||
surface0 = "#363a4f"
|
||||
base = "#24273a"
|
||||
mantle = "#1e2030"
|
||||
crust = "#181926"
|
||||
@@ -0,0 +1,14 @@
|
||||
# ~/nixos/files/conf/terminal/zsh.conf
|
||||
# Additional zsh configuration sourced for every interactive zsh shell.
|
||||
# Keep this file POSIX-ish; it is sourced by zsh.
|
||||
|
||||
# Example: history settings
|
||||
HISTFILE="$HOME/.zsh_history"
|
||||
HISTSIZE=10000
|
||||
SAVEHIST=10000
|
||||
|
||||
setopt HIST_IGNORE_ALL_DUPS
|
||||
setopt SHARE_HISTORY
|
||||
|
||||
# Example: enable starship if you ever disable the zsh integration module
|
||||
# eval "$(starship init zsh)"
|
||||
@@ -0,0 +1,8 @@
|
||||
# transition type: fade, wipe, simple, any, etc.
|
||||
TRANSITION_TYPE=fade
|
||||
# duration in seconds (can be decimal)
|
||||
TRANSITION_DURATION=2
|
||||
# frames per second
|
||||
TRANSITION_FPS=60
|
||||
# override source dir if you ever move it
|
||||
# SRC_DIR=~/nixos/files/wallpapers/picture
|
||||
|
After Width: | Height: | Size: 406 KiB |
|
After Width: | Height: | Size: 425 KiB |
|
After Width: | Height: | Size: 962 KiB |
|
After Width: | Height: | Size: 5.3 MiB |
|
After Width: | Height: | Size: 173 KiB |
|
After Width: | Height: | Size: 270 KiB |
@@ -0,0 +1,14 @@
|
||||
{ pkgs, ...}:
|
||||
{
|
||||
environment.systemPackages = with pkgs; [ pamixer ];
|
||||
services.pipewire = {
|
||||
enable = true;
|
||||
alsa.enable = true;
|
||||
alsa.support32Bit = true;
|
||||
pulse.enable = true;
|
||||
jack.enable = true;
|
||||
};
|
||||
|
||||
# pipewire needs realtime scheduling access
|
||||
security.rtkit.enable = true;
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{ pkgs, ... } :
|
||||
{
|
||||
boot = {
|
||||
initrd = {
|
||||
verbose = false; # its a lot of logs. dont need it, unless we do.
|
||||
kernelModules = [ ]; # no kernel modules on boot
|
||||
};
|
||||
|
||||
extraModulePackages = [ ]; # no extra packages on boot either
|
||||
kernelPackages = pkgs.linuxPackages_latest; # latest greatest linux kernel
|
||||
kernelParams = [ "silent" ]; # quiet those logs
|
||||
|
||||
consoleLogLevel = 0; # quiten more logs
|
||||
plymouth.enable = true; # graphical boot animation instead
|
||||
|
||||
supportedFilesystems = [ "ntfs" ]; # should see the ntfs (windows)
|
||||
|
||||
loader = {
|
||||
systemd-boot.enable = true; # systemd-boot
|
||||
systemd-boot.configurationLimit = 2;
|
||||
efi.canTouchEfiVariables = true; # allow editing efi to edit the boot loader
|
||||
|
||||
|
||||
timeout = 5; # grub timeout to make a selection
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{ pkgs, user, ... }:
|
||||
{
|
||||
console.useXkbConfig = true;
|
||||
users.users.${user.username}.shell = pkgs.zsh;
|
||||
|
||||
environment.shells = with pkgs; [ zsh ];
|
||||
programs.zsh.enable = true;
|
||||
environment.pathsToLink = [ "/share/zsh" ];
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
{ pkgs, user, ... } :
|
||||
{
|
||||
imports = [
|
||||
./boot.nix
|
||||
./login.nix
|
||||
./cli.nix
|
||||
./files.nix
|
||||
./locale.nix
|
||||
./nix-settings.nix
|
||||
./networking.nix
|
||||
./hyprland.nix
|
||||
./services.nix
|
||||
./audio.nix
|
||||
#./steam.nix
|
||||
#./sops.nix
|
||||
./packages.nix
|
||||
./flatpak.nix
|
||||
];
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
wget # fetch utility
|
||||
curl # more fetch utility
|
||||
binutils # executable utilities, like ld
|
||||
dmidecode # tool for dumping system info
|
||||
libnotify # notification daemon
|
||||
python3 # nice to have this ready for quick things
|
||||
cacert # certificate authority
|
||||
remmina # remote desktop app
|
||||
#rg # ripgrep
|
||||
wev # for finding keypresses
|
||||
tree # list foldetrtree's
|
||||
file # filinfo
|
||||
htop # sysmonitor
|
||||
solaar # logitech controller
|
||||
git # source control
|
||||
# jetbrains.pycharm # Dev and course environment
|
||||
|
||||
|
||||
];
|
||||
|
||||
# to enable icons with wlogout
|
||||
# https://github.com/catppuccin/nix/issues/584
|
||||
programs.gdk-pixbuf.modulePackages = [ pkgs.librsvg ];
|
||||
|
||||
users.users.${user.username} = {
|
||||
isNormalUser = true;
|
||||
description = "henrov";
|
||||
extraGroups = [
|
||||
"networkmanager" # allow editing network connections
|
||||
"wheel" # can do sudo
|
||||
"scanner" # access to the network scanner
|
||||
"lp" # access to the printer
|
||||
];
|
||||
};
|
||||
|
||||
programs = {
|
||||
nix-ld.enable = true; # helps with linking troubles with dynamic libraries
|
||||
appimage.enable = true; # allow appimage installations
|
||||
dconf.enable = true; # to save user settings
|
||||
gnupg.agent = {
|
||||
# pgp client
|
||||
enable = true;
|
||||
enableSSHSupport = true;
|
||||
};
|
||||
firefox.enable = true; # browser
|
||||
wireshark.enable = true; # vpn
|
||||
};
|
||||
|
||||
fonts.packages = with pkgs; [
|
||||
aporetic
|
||||
nerd-fonts.iosevka
|
||||
];
|
||||
|
||||
# enable the catppuccin theme for everything with mocha + blue accents
|
||||
catppuccin.enable = true;
|
||||
catppuccin.flavor = "mocha";
|
||||
catppuccin.accent = "blue";
|
||||
|
||||
system.stateVersion = user.stateVersion;
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
{ pkgs, user, config, ... } :
|
||||
{
|
||||
environment.systemPackages = with pkgs; [
|
||||
zip
|
||||
unzip
|
||||
p7zip
|
||||
usbutils
|
||||
udiskie
|
||||
];
|
||||
|
||||
programs.thunar = {
|
||||
enable = true;
|
||||
plugins = with pkgs.xfce; [
|
||||
thunar-archive-plugin
|
||||
thunar-media-tags-plugin
|
||||
thunar-volman
|
||||
];
|
||||
};
|
||||
|
||||
programs.file-roller.enable = true; # thunar zip support
|
||||
programs.xfconf.enable = true; # to save thunar settings
|
||||
|
||||
services = {
|
||||
gvfs.enable = true; # Mount, trash, and other functionalities
|
||||
tumbler.enable = true; # Thumbnail support for images
|
||||
udisks2.enable = true; # Auto mount usb drives
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
{ config, pkgs, lib, ... }:
|
||||
|
||||
let
|
||||
# Adjust this path if your module lives elsewhere in the repo
|
||||
flatpakConfPath = ../assets/conf/apps/flatpak.conf;
|
||||
|
||||
# Parse flatpak.conf: ignore empty lines and comments
|
||||
flatpakApps =
|
||||
let
|
||||
lines = lib.splitString "\n" (builtins.readFile flatpakConfPath);
|
||||
cleaned = map (l: lib.strings.trim l) lines;
|
||||
in
|
||||
builtins.filter (l: l != "" && !(lib.hasPrefix "#" l)) cleaned;
|
||||
|
||||
# Shell script that:
|
||||
# - adds Flathub if missing
|
||||
# - installs missing apps
|
||||
# - (optional) removes apps not in the list
|
||||
syncFlatpaks = pkgs.writeShellScript "sync-flatpaks" ''
|
||||
set -euo pipefail
|
||||
|
||||
# Ensure Flathub remote exists (system-wide)
|
||||
if ! flatpak remotes --system --columns=name | grep -qx flathub; then
|
||||
flatpak remote-add --system --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
|
||||
fi
|
||||
|
||||
desired_apps=(
|
||||
${lib.concatStringsSep "\n" (map (a: ''"${a}"'') flatpakApps)}
|
||||
)
|
||||
|
||||
# Install desired apps if missing
|
||||
for app in "''${desired_apps[@]}"; do
|
||||
if ! flatpak info --system "$app" >/dev/null 2>&1; then
|
||||
flatpak install --system -y --noninteractive flathub "$app"
|
||||
fi
|
||||
done
|
||||
|
||||
# OPTIONAL: remove system apps not listed (uncomment to enforce strictly)
|
||||
# installed="$(flatpak list --system --app --columns=application | sed '/^$/d')"
|
||||
# for app in $installed; do
|
||||
# keep=0
|
||||
# for want in "''${desired_apps[@]}"; do
|
||||
# if [ "$app" = "$want" ]; then keep=1; break; fi
|
||||
# done
|
||||
# if [ "$keep" -eq 0 ]; then
|
||||
# flatpak uninstall --system -y --noninteractive "$app" || true
|
||||
# fi
|
||||
# done
|
||||
'';
|
||||
in
|
||||
{
|
||||
# Native NixOS Flatpak support
|
||||
services.flatpak.enable = true; # enables Flatpak on NixOS :contentReference[oaicite:1]{index=1}
|
||||
|
||||
# Strongly recommended for Flatpak desktop integration
|
||||
# (Adjust portals to your DE/WM if you want, this is a safe default.)
|
||||
xdg.portal = {
|
||||
enable = true;
|
||||
extraPortals = [ pkgs.xdg-desktop-portal-gtk ];
|
||||
};
|
||||
|
||||
# Ensure the config file is present on the system (optional but convenient)
|
||||
environment.etc."flatpak/flatpak.conf".source = flatpakConfPath;
|
||||
|
||||
# Run sync after boot and after rebuilds, once networking is up
|
||||
systemd.services.flatpak-sync = {
|
||||
description = "Install Flatpak apps listed in flatpak.conf";
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
wants = [ "network-online.target" ];
|
||||
after = [ "network-online.target" ];
|
||||
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
ExecStart = syncFlatpaks;
|
||||
};
|
||||
|
||||
# Re-run when the config changes (best-effort)
|
||||
restartTriggers = [ flatpakConfPath ];
|
||||
path = [ pkgs.flatpak pkgs.coreutils pkgs.gnugrep pkgs.gnused ];
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
nix.settings = {
|
||||
# add the hyprland cache so that we dont build hyprland from source
|
||||
substituters = [ "https://hyprland.cachix.org" ];
|
||||
trusted-public-keys = [
|
||||
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
|
||||
];
|
||||
};
|
||||
|
||||
# these extra portals allow for things like screen sharing
|
||||
xdg = {
|
||||
portal = {
|
||||
enable = true;
|
||||
extraPortals = [
|
||||
pkgs.xdg-desktop-portal-wlr
|
||||
pkgs.xdg-desktop-portal-gtk
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
hyprland # the actual package
|
||||
walker # launcher
|
||||
uwsm # wayland session manager
|
||||
hyprland-qtutils # needed by hyprland
|
||||
hyprpolkitagent # polkit agent
|
||||
grimblast # screenshot
|
||||
];
|
||||
|
||||
# we use uwsm to manage launching hyprland
|
||||
# uswm will add hyprland to the login sessions with tuigreet.
|
||||
programs = {
|
||||
uwsm.enable = true;
|
||||
uwsm.waylandCompositors = {
|
||||
hyprland = {
|
||||
prettyName = "Hyprland";
|
||||
comment = "Hyprland compositor managed by UWSM";
|
||||
binPath = "/run/current-system/sw/bin/Hyprland";
|
||||
};
|
||||
};
|
||||
|
||||
hyprland = {
|
||||
withUWSM = true;
|
||||
enable = true;
|
||||
xwayland.enable = true;
|
||||
};
|
||||
};
|
||||
|
||||
# this is mainly for the lock screen
|
||||
# lock.png is provided elsewhere
|
||||
services.xserver = {
|
||||
enable = true;
|
||||
|
||||
desktopManager = {
|
||||
xterm.enable = false;
|
||||
};
|
||||
|
||||
|
||||
displayManager = {
|
||||
lightdm.background = ./lock.png;
|
||||
};
|
||||
};
|
||||
|
||||
# this is a lot of env vars.
|
||||
# and this requires some cleanup
|
||||
# but hyprland moves fast and some of these are probably outdated already
|
||||
environment.sessionVariables = {
|
||||
XDG_SESSION_TYPE="wayland";
|
||||
XDG_CURRENT_DESKTOP="Hyprland";
|
||||
XDG_SESSION_DESKTOP="Hyprland";
|
||||
NIXOS_OZONE_WL="1";
|
||||
XCURSOR_SIZE="24";
|
||||
};
|
||||
|
||||
# allow hyprlock (lockscreen) to lock user session
|
||||
security.pam.services.hyprlock = { };
|
||||
security.polkit.enable = true;
|
||||
security.pam.services.gdm.enableGnomeKeyring = true;
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{ user, ... } :
|
||||
let
|
||||
locale = user.locale;
|
||||
defaultLocale = "nl_NL.UTF-8";
|
||||
in
|
||||
{
|
||||
# Set your time zone.
|
||||
time.timeZone = "Europe/Amsterdam";
|
||||
|
||||
# Select internationalisation properties.
|
||||
i18n.defaultLocale = defaultLocale;
|
||||
|
||||
i18n.extraLocaleSettings = {
|
||||
LC_ADDRESS = locale;
|
||||
LC_IDENTIFICATION = locale;
|
||||
LC_MEASUREMENT = locale;
|
||||
LC_MONETARY = locale;
|
||||
LC_NAME = locale;
|
||||
LC_NUMERIC = locale;
|
||||
LC_PAPER = locale;
|
||||
LC_TELEPHONE = locale;
|
||||
LC_TIME = defaultLocale;
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
{ pkgs, user, ... } :
|
||||
{
|
||||
environment.systemPackages = with pkgs; [
|
||||
tuigreet
|
||||
];
|
||||
|
||||
services.greetd = {
|
||||
enable = true;
|
||||
settings = {
|
||||
default_session = {
|
||||
command = pkgs.lib.mkForce "${pkgs.tuigreet}/bin/tuigreet --remember --time --time-format '%I:%M %p | %a • %h | %F'";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{ pkgs, ... } : {
|
||||
networking = {
|
||||
# allow automatic ip assignment when connecting to a network
|
||||
useDHCP = pkgs.lib.mkDefault true;
|
||||
networkmanager.enable = true;
|
||||
firewall.enable = true;
|
||||
|
||||
# let wifi info be NOT declarative, allowing user to configure wifi.
|
||||
wireless.userControlled.enable = true;
|
||||
wireless.iwd.enable = true;
|
||||
networkmanager.wifi.backend = "wpa_supplicant";
|
||||
};
|
||||
|
||||
# tui to manage wifi networks
|
||||
environment.systemPackages = with pkgs; [ impala ];
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
{ pkgs, user, ... } :
|
||||
{
|
||||
nix.settings = {
|
||||
# enable flakes
|
||||
experimental-features = ["nix-command" "flakes"];
|
||||
|
||||
# add a cache that speed up new applications by downloading binaries
|
||||
# from the trusted cache instead of compiling from sourcer
|
||||
substituters = [
|
||||
"https://nix-community.cachix.org"
|
||||
];
|
||||
# trust the cache public key
|
||||
trusted-public-keys = [
|
||||
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
|
||||
];
|
||||
};
|
||||
|
||||
# allow proprietary software on this machine. I'm not a purist.
|
||||
nixpkgs.config.allowUnfree = true;
|
||||
# unityhub depends on this... for now
|
||||
nixpkgs.config.permittedInsecurePackages = [ "libxml2-2.13.8" ];
|
||||
|
||||
# this declares how often old configurations are cleared up.
|
||||
# i cleanup anything older than a week, every week.
|
||||
nix.gc = {
|
||||
automatic = true;
|
||||
options = "--delete-older-than 7d";
|
||||
dates = "weekly";
|
||||
};
|
||||
|
||||
programs = {
|
||||
# command line utility that makes applying changes easy and pretty
|
||||
nh = {
|
||||
enable = true;
|
||||
flake = "/home/${user.username}/system";
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
{ lib, pkgs, ... }:
|
||||
|
||||
let
|
||||
# Adjust this path if you place apps.nix elsewhere in the repo.
|
||||
# Best practice: keep it relative to the flake repo so flakes can read it.
|
||||
packagesConfPath = ../assets/conf/apps/packages.conf;
|
||||
|
||||
raw = builtins.readFile packagesConfPath;
|
||||
|
||||
# Split into lines, trim whitespace, drop empty lines and comment lines.
|
||||
lines =
|
||||
let
|
||||
all = lib.splitString "\n" raw;
|
||||
trimmed = map lib.strings.trim all;
|
||||
in
|
||||
builtins.filter (l: l != "" && !(lib.hasPrefix "#" l)) trimmed;
|
||||
|
||||
# Resolve a name like:
|
||||
# "wget" -> pkgs.wget
|
||||
# "kdePackages.okular" -> pkgs.kdePackages.okular
|
||||
# "_1password-gui" -> pkgs."_1password-gui"
|
||||
resolvePkg = name:
|
||||
let
|
||||
parts = lib.splitString "." name;
|
||||
found = lib.attrByPath parts null pkgs;
|
||||
in
|
||||
if found == null then
|
||||
throw ''
|
||||
apps.nix: Package "${name}" from ${toString packagesConfPath} not found in pkgs.
|
||||
Only packages available on https://search.nixos.org/packages can be installed.
|
||||
Fix the name (or attribute path) and rebuild.
|
||||
''
|
||||
else
|
||||
found;
|
||||
|
||||
packages = map resolvePkg lines;
|
||||
|
||||
in
|
||||
{
|
||||
environment.systemPackages = packages;
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{ user, ...} :
|
||||
{
|
||||
services = {
|
||||
blueman.enable = true; # bluetooth manager
|
||||
fwupd.enable = true; # firmware updating service
|
||||
fstrim.enable = true; # ssd maintenance service
|
||||
thermald.enable = true; # thermal regulation service
|
||||
printing.enable = true; # printing services, cups
|
||||
gnome.gnome-keyring.enable = true; # keyring
|
||||
flatpak.enable = true; # allow installing things from flatpaks
|
||||
#flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
|
||||
|
||||
# printer discovery
|
||||
avahi = {
|
||||
enable = true;
|
||||
nssmdns4 = true;
|
||||
openFirewall = true;
|
||||
};
|
||||
};
|
||||
|
||||
virtualisation.docker.enable = true; # enable docker
|
||||
users.users.${user.username}.extraGroups = [ "docker" ]; # add self to docker user group
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
# { user, ...} :
|
||||
# {
|
||||
# sops.defaultSopsFile = ../secrets/secrets.yaml;
|
||||
# sops.defaultSopsFormat = "yaml";
|
||||
# sops.age.keyFile = "/home/${user.username}/.config/sops/age/keys.txt";
|
||||
#
|
||||
# sops.secrets.claude_key = { # anthropic claude api key, used in emacs
|
||||
# owner = "${user.username}";
|
||||
# };
|
||||
# }
|
||||
@@ -0,0 +1,80 @@
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
nix.settings = {
|
||||
# add the hyprland cache so that we dont build hyprland from source
|
||||
substituters = [ "https://hyprland.cachix.org" ];
|
||||
trusted-public-keys = [
|
||||
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
|
||||
];
|
||||
};
|
||||
|
||||
# these extra portals allow for things like screen sharing
|
||||
xdg = {
|
||||
portal = {
|
||||
enable = true;
|
||||
extraPortals = [
|
||||
pkgs.xdg-desktop-portal-wlr
|
||||
pkgs.xdg-desktop-portal-gtk
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
hyprland # the actual package
|
||||
walker # launcher
|
||||
uwsm # wayland session manager
|
||||
hyprland-qtutils # needed by hyprland
|
||||
hyprpolkitagent # polkit agent
|
||||
grimblast # screenshot
|
||||
];
|
||||
|
||||
# we use uwsm to manage launching hyprland
|
||||
# uswm will add hyprland to the login sessions with tuigreet.
|
||||
programs = {
|
||||
uwsm.enable = true;
|
||||
uwsm.waylandCompositors = {
|
||||
hyprland = {
|
||||
prettyName = "Hyprland";
|
||||
comment = "Hyprland compositor managed by UWSM";
|
||||
binPath = "/run/current-system/sw/bin/Hyprland";
|
||||
};
|
||||
};
|
||||
|
||||
hyprland = {
|
||||
withUWSM = true;
|
||||
enable = true;
|
||||
xwayland.enable = true;
|
||||
};
|
||||
};
|
||||
|
||||
# this is mainly for the lock screen
|
||||
# lock.png is provided elsewhere
|
||||
services.xserver = {
|
||||
enable = true;
|
||||
|
||||
desktopManager = {
|
||||
xterm.enable = false;
|
||||
};
|
||||
|
||||
|
||||
displayManager = {
|
||||
lightdm.background = ./lock.png;
|
||||
};
|
||||
};
|
||||
|
||||
# this is a lot of env vars.
|
||||
# and this requires some cleanup
|
||||
# but hyprland moves fast and some of these are probably outdated already
|
||||
environment.sessionVariables = {
|
||||
XDG_SESSION_TYPE="wayland";
|
||||
XDG_CURRENT_DESKTOP="Hyprland";
|
||||
XDG_SESSION_DESKTOP="Hyprland";
|
||||
NIXOS_OZONE_WL="1";
|
||||
XCURSOR_SIZE="24";
|
||||
};
|
||||
|
||||
# allow hyprlock (lockscreen) to lock user session
|
||||
security.pam.services.hyprlock = { };
|
||||
security.polkit.enable = true;
|
||||
security.pam.services.gdm.enableGnomeKeyring = true;
|
||||
}
|
||||
@@ -0,0 +1,107 @@
|
||||
{
|
||||
"nodes": {
|
||||
"catppuccin": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1758956381,
|
||||
"narHash": "sha256-ROUw5E8CibG3jEy6oHjrkF6/P60eiaUJmc2s2ecC/LM=",
|
||||
"owner": "catppuccin",
|
||||
"repo": "nix",
|
||||
"rev": "02dee881c3e644e2b561f407742f1fd927c40b83",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "catppuccin",
|
||||
"repo": "nix",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"emacs-overlay": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
],
|
||||
"nixpkgs-stable": "nixpkgs-stable"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1759079154,
|
||||
"narHash": "sha256-ViNoTyurHYed96NA9sWCxKegtF4JPFXLcD2A4EOp444=",
|
||||
"owner": "nix-community",
|
||||
"repo": "emacs-overlay",
|
||||
"rev": "ae2a59490e94c38d917d1e1bc479bdab6c9c8f1c",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "emacs-overlay",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"home-manager": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1759043321,
|
||||
"narHash": "sha256-Efi3THvsIS6Qd97s52/PSSHWybDlSbtUZXP8l3AR9Ps=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "c75fd8e300b79502b8eecdacd8a426b12fadb460",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1758690382,
|
||||
"narHash": "sha256-NY3kSorgqE5LMm1LqNwGne3ZLMF2/ILgLpFr1fS4X3o=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "e643668fd71b949c53f8626614b21ff71a07379d",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs-stable": {
|
||||
"locked": {
|
||||
"lastModified": 1758791193,
|
||||
"narHash": "sha256-F8WmEwFoHsnix7rt290R0rFXNJiMbClMZyIC/e+HYf0=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "25e53aa156d47bad5082ff7618f5feb1f5e02d01",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-25.05",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"catppuccin": "catppuccin",
|
||||
"emacs-overlay": "emacs-overlay",
|
||||
"home-manager": "home-manager",
|
||||
"nixpkgs": "nixpkgs"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
||||
@@ -0,0 +1,89 @@
|
||||
{
|
||||
description = "Henrov's nixos configuration";
|
||||
|
||||
inputs = {
|
||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||
|
||||
home-manager = {
|
||||
url = "github:nix-community/home-manager";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
emacs-overlay = {
|
||||
url = "github:nix-community/emacs-overlay";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
# sops-nix = {
|
||||
# url = "github:Mic92/sops-nix";
|
||||
# inputs.nixpkgs.follows = "nixpkgs";
|
||||
# };
|
||||
#
|
||||
catppuccin = {
|
||||
url = "github:catppuccin/nix";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
};
|
||||
|
||||
outputs = {
|
||||
nixpkgs,
|
||||
home-manager,
|
||||
emacs-overlay,
|
||||
# sops-nix,
|
||||
catppuccin,
|
||||
...
|
||||
}:
|
||||
let
|
||||
user = import ./user.nix;
|
||||
lib = nixpkgs.lib;
|
||||
machines = [
|
||||
"traveldroid"
|
||||
];
|
||||
pkgs = import nixpkgs {
|
||||
inherit (user) system;
|
||||
};
|
||||
in
|
||||
{
|
||||
nixosConfigurations = builtins.listToAttrs (
|
||||
builtins.map (machine: {
|
||||
name = machine;
|
||||
value = lib.nixosSystem {
|
||||
modules = [
|
||||
({ ... }: {
|
||||
nixpkgs.overlays = [ emacs-overlay.overlays.default ];
|
||||
})
|
||||
./machines/${machine}/configuration.nix
|
||||
home-manager.nixosModules.home-manager
|
||||
{
|
||||
home-manager.useGlobalPkgs = true;
|
||||
home-manager.useUserPackages = true;
|
||||
home-manager.extraSpecialArgs = {
|
||||
inherit user;
|
||||
};
|
||||
home-manager.backupFileExtension = "backup";
|
||||
home-manager.users.${user.username} = {
|
||||
imports = [
|
||||
./machines/${machine}/home.nix
|
||||
catppuccin.homeModules.catppuccin
|
||||
];
|
||||
};
|
||||
}
|
||||
#sops-nix.nixosModules.sops # sops
|
||||
catppuccin.nixosModules.catppuccin # theme
|
||||
];
|
||||
specialArgs = {
|
||||
hostname = machine;
|
||||
inherit user;
|
||||
};
|
||||
};
|
||||
}) machines
|
||||
);
|
||||
devShells.${user.system}.default = pkgs.mkShell {
|
||||
buildInputs = with pkgs; [
|
||||
nil # nix lsp server
|
||||
nixfmt-rfc-style # nix formatter
|
||||
#sops # used to edit secrets
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{ pkgs, lib, user, config, ...} :
|
||||
{
|
||||
nixpkgs.hostPlatform = lib.mkDefault user.system; # x86_64-linux
|
||||
powerManagement.cpuFreqGovernor = lib.mkDefault "powersave"; # enable power saving on the cpu
|
||||
|
||||
# update cpu microcode with firmware that allows redistribution
|
||||
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||
|
||||
hardware = {
|
||||
# always enable bluetooth
|
||||
bluetooth.enable = true;
|
||||
|
||||
# always enable graphics drivers and enable a bunch of layers for it (including vulkan validation)
|
||||
graphics = {
|
||||
enable = true;
|
||||
extraPackages = with pkgs; [
|
||||
vulkan-validation-layers # helps catch and debug vulkan crashes
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
hardware.enableAllFirmware = true; # enable all firmware regardless of license
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
{ pkgs, user, ... } :
|
||||
{
|
||||
imports = [
|
||||
./waybar.nix
|
||||
./wallpaper.nix
|
||||
./lock.nix
|
||||
./unity.nix
|
||||
./hyprland.nix
|
||||
./walker.nix
|
||||
./theme.nix
|
||||
./terminal.nix
|
||||
./dev.nix
|
||||
./emacs
|
||||
];
|
||||
|
||||
home.username = "${user.username}";
|
||||
home.homeDirectory = pkgs.lib.mkDefault "/home/${user.username}";
|
||||
home.stateVersion = user.stateVersion;
|
||||
|
||||
home.packages = with pkgs; [
|
||||
audacity # audio recording
|
||||
handbrake # video transcoding
|
||||
xdg-utils # utils, for screensharing
|
||||
vlc # media player
|
||||
pavucontrol # audio control
|
||||
# everdo # gtd tool
|
||||
spotify # music player
|
||||
simple-scan # scanner software
|
||||
# gimp2 # image editor
|
||||
mpv # media player
|
||||
kdePackages.kate # best texteditor
|
||||
libreoffice # office suite
|
||||
obsidian # knowegde base
|
||||
vivaldi # browser
|
||||
brave # browser
|
||||
kdePackages.kdeconnect-kde # KDE Connect
|
||||
pamixer # volumemixer
|
||||
|
||||
];
|
||||
|
||||
services.dunst.enable = true; # notifications daemon
|
||||
|
||||
programs.obs-studio.enable = true; # screen recording tool
|
||||
|
||||
programs.home-manager.enable = true;
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
{ user, pkgs, ... }:
|
||||
{
|
||||
programs = {
|
||||
vscode.enable = true; # yes, sometimes i like to dabble
|
||||
vim.enable = true; # and this one too
|
||||
ripgrep.enable = true; # fast text search across projects
|
||||
btop.enable = true; # even better task manager
|
||||
|
||||
# nicer terminal info
|
||||
starship = {
|
||||
enable = true;
|
||||
enableZshIntegration = true;
|
||||
enableBashIntegration = true;
|
||||
};
|
||||
|
||||
# fuzzy finder
|
||||
fzf = {
|
||||
enable = true;
|
||||
enableZshIntegration = true;
|
||||
enableBashIntegration = true;
|
||||
};
|
||||
|
||||
# better cd
|
||||
zoxide = {
|
||||
enable = true;
|
||||
enableZshIntegration = true;
|
||||
enableBashIntegration = true;
|
||||
};
|
||||
|
||||
# better ls
|
||||
eza = {
|
||||
enable = true;
|
||||
enableZshIntegration = true;
|
||||
enableBashIntegration = true;
|
||||
};
|
||||
|
||||
# this is mainly for integration with nix flakes in individual projects
|
||||
direnv = {
|
||||
enable = true;
|
||||
enableZshIntegration = true;
|
||||
enableBashIntegration = true;
|
||||
nix-direnv.enable = true;
|
||||
};
|
||||
|
||||
# zsh everywhere with oh-my-zsh
|
||||
zsh = {
|
||||
enable = true;
|
||||
oh-my-zsh = {
|
||||
enable = true;
|
||||
plugins = [ "git" ];
|
||||
theme = "robbyrussell";
|
||||
};
|
||||
|
||||
shellAliases = {
|
||||
cd = "z"; # zoxide
|
||||
};
|
||||
|
||||
# for emacs-eat package
|
||||
initContent = pkgs.lib.mkOrder 1200 ''
|
||||
[ -n "$EAT_SHELL_INTEGRATION_DIR" ] && \
|
||||
source "$EAT_SHELL_INTEGRATION_DIR/zsh"
|
||||
'';
|
||||
};
|
||||
|
||||
# git with lfs
|
||||
git = {
|
||||
lfs.enable = true;
|
||||
enable = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
programs.emacs = {
|
||||
enable = true;
|
||||
# install with tree sitter enabled
|
||||
package = (pkgs.emacs-pgtk.override { withTreeSitter = true; });
|
||||
extraPackages = epkgs: [
|
||||
# also install all tree sitter grammars
|
||||
epkgs.manualPackages.treesit-grammars.with-all-grammars
|
||||
epkgs.nerd-icons # nerd fonts support
|
||||
epkgs.doom-modeline # model line
|
||||
epkgs.diminish # hides modes from modeline
|
||||
epkgs.eldoc # doc support
|
||||
epkgs.pulsar # pulses the cursor when jumping about
|
||||
epkgs.which-key # help porcelain
|
||||
epkgs.expreg # expand region
|
||||
epkgs.vundo # undo tree
|
||||
epkgs.puni # structured editing
|
||||
epkgs.avy # jumping utility
|
||||
epkgs.consult # emacs right click
|
||||
epkgs.vertico # minibuffer completion
|
||||
epkgs.marginalia # annotations for completions
|
||||
epkgs.crux # utilities
|
||||
epkgs.magit # git porcelain
|
||||
epkgs.nerd-icons-corfu # nerd icons for completion
|
||||
epkgs.corfu # completion
|
||||
epkgs.cape # completion extensions
|
||||
epkgs.orderless # search paradigm
|
||||
epkgs.yasnippet # snippets support
|
||||
epkgs.yasnippet-snippets # commonly used snippets
|
||||
epkgs.rg # ripgrep
|
||||
epkgs.exec-path-from-shell # load env and path
|
||||
epkgs.eat # better shell
|
||||
epkgs.rust-mode # rust mode (when rust-ts doesn't cut it)
|
||||
epkgs.rustic # more rust things
|
||||
epkgs.nix-mode # nix lang
|
||||
epkgs.hcl-mode # hashicorp file mode
|
||||
epkgs.shell-pop # quick shell popup
|
||||
epkgs.envrc # support for loading .envrc
|
||||
epkgs.nixpkgs-fmt # format nix files
|
||||
epkgs.f # string + file utilities
|
||||
epkgs.gptel # llm chat (mainly claude)
|
||||
|
||||
epkgs.catppuccin-theme # catppuccin theme
|
||||
epkgs.eldoc-box # docs in a box
|
||||
epkgs.sideline # mainly for flymake errors on the side
|
||||
epkgs.sideline-flymake # mainly for flymake errors on the side
|
||||
epkgs.sideline-eglot # mainly for flymake errors on the side
|
||||
];
|
||||
};
|
||||
|
||||
home.sessionVariables = {
|
||||
EDITOR = "emacs";
|
||||
XDG_SCREENSHOTS_DIR = "~/screenshots";
|
||||
};
|
||||
|
||||
home.file = {
|
||||
emacs-init = {
|
||||
source = ./early-init.el;
|
||||
target = ".emacs.d/early-init.el";
|
||||
};
|
||||
|
||||
emacs = {
|
||||
source = ./init.el;
|
||||
target = ".emacs.d/init.el";
|
||||
};
|
||||
};
|
||||
|
||||
services.nextcloud-client = {
|
||||
enable = true;
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,118 @@
|
||||
;;; package --- early init -*- lexical-binding: t -*-
|
||||
|
||||
;;; Commentary:
|
||||
;;; Prevents white flash and better Emacs defaults
|
||||
|
||||
;;; Code:
|
||||
(set-language-environment "UTF-8")
|
||||
|
||||
(setq-default
|
||||
default-frame-alist
|
||||
'((background-color . "#1e1e2e")
|
||||
(bottom-divider-width . 1) ; Thin horizontal window divider
|
||||
(foreground-color . "#bac2de") ; Default foreground color
|
||||
(fullscreen . maximized) ; Maximize the window by default
|
||||
(horizontal-scroll-bars . nil) ; No horizontal scroll-bars
|
||||
(left-fringe . 8) ; Thin left fringe
|
||||
(menu-bar-lines . 0) ; No menu bar
|
||||
(right-divider-width . 1) ; Thin vertical window divider
|
||||
(right-fringe . 8) ; Thin right fringe
|
||||
(tool-bar-lines . 0) ; No tool bar
|
||||
(undecorated . t) ; Remove extraneous X decorations
|
||||
(vertical-scroll-bars . nil)) ; No vertical scroll-bars
|
||||
|
||||
user-full-name "Henrov henrov" ; ME!
|
||||
|
||||
;; memory configuration
|
||||
;; Higher garbage collection threshold, prevents frequent gc locks, reset later
|
||||
gc-cons-threshold most-positive-fixnum
|
||||
;; Ignore warnings for (obsolete) elisp compilations
|
||||
byte-compile-warnings '(not obsolete)
|
||||
;; And other log types completely
|
||||
warning-suppress-log-types '((comp) (bytecomp))
|
||||
;; Large files are okay in the new millenium.
|
||||
large-file-warning-threshold 100000000
|
||||
;; dont show garbage collection messages at startup, will reset later
|
||||
garbage-collection-messages nil
|
||||
;; native compilation
|
||||
package-native-compile t
|
||||
native-comp-warning-on-missing-source nil
|
||||
native-comp-async-report-warnings-errors 'silent
|
||||
|
||||
|
||||
;; Read more based on system pipe capacity
|
||||
read-process-output-max (max (* 10240 10240) read-process-output-max)
|
||||
|
||||
;; scroll configuration
|
||||
scroll-margin 0 ; Lets scroll to the end of the margin
|
||||
scroll-conservatively 100000 ; Never recenter the window
|
||||
scroll-preserve-screen-position 1 ; Scrolling back and forth
|
||||
|
||||
;; frame config
|
||||
;; Improve emacs startup time by not resizing to adjust for custom settings
|
||||
frame-inhibit-implied-resize t
|
||||
;; Dont resize based on character height / width but to exact pixels
|
||||
frame-resize-pixelwise t
|
||||
|
||||
;; backups & files
|
||||
backup-directory-alist '(("." . "~/.backups/")) ; Don't clutter
|
||||
backup-by-copying t ; Don't clobber symlinks
|
||||
create-lockfiles nil ; Don't have temp files
|
||||
delete-old-versions t ; Cleanup automatically
|
||||
kept-new-versions 6 ; Update every few times
|
||||
kept-old-versions 2 ; And cleanup even more
|
||||
version-control t ; Version them backups
|
||||
delete-by-moving-to-trash t ; Dont delete, send to trash instead
|
||||
|
||||
;; startup
|
||||
inhibit-startup-screen t ; I have already done the tutorial. Twice
|
||||
inhibit-startup-message t ; I know I am ready
|
||||
inhibit-startup-echo-area-message t ; Yep, still know it
|
||||
initial-scratch-message nil ; I know it is the scratch buffer!
|
||||
initial-buffer-choice nil
|
||||
inhibit-startup-buffer-menu t
|
||||
inhibit-x-resources t
|
||||
initial-major-mode 'fundamental-mode
|
||||
|
||||
pgtk-wait-for-event-timeout 0.001 ; faster child frames
|
||||
|
||||
ad-redefinition-action 'accept ; dont care about legacy things being redefined
|
||||
inhibit-compacting-font-caches t
|
||||
|
||||
;; tabs
|
||||
tab-width 4 ; Always tab 4 spaces.
|
||||
indent-tabs-mode nil ; Never use actual tabs.
|
||||
|
||||
;; rendering
|
||||
cursor-in-non-selected-windows nil ; dont render cursors other windows
|
||||
|
||||
;; packages
|
||||
use-package-always-defer t
|
||||
|
||||
load-prefer-newer t
|
||||
|
||||
default-input-method nil
|
||||
|
||||
use-dialog-box nil
|
||||
|
||||
use-file-dialog nil
|
||||
|
||||
use-package-expand-minimally t
|
||||
|
||||
package-enable-at-startup nil
|
||||
|
||||
use-package-enable-imenu-support t
|
||||
|
||||
auto-mode-case-fold nil ; No second pass of case-insensitive search over auto-mode-alist.
|
||||
|
||||
package-archives '(("melpa" . "https://melpa.org/packages/")
|
||||
("gnu" . "https://elpa.gnu.org/packages/")
|
||||
("nongnu" . "https://elpa.nongnu.org/nongnu/")
|
||||
("melpa-stable" . "https://stable.melpa.org/packages/"))
|
||||
|
||||
package-archive-priorities '(("gnu" . 99)
|
||||
("nongnu" . 80)
|
||||
("melpa" . 70)
|
||||
("melpa-stable" . 50))
|
||||
)
|
||||
;;; early-init.el ends here
|
||||
@@ -0,0 +1,400 @@
|
||||
;;; package --- Summary - My minimal Emacs init file -*- lexical-binding: t -*-
|
||||
|
||||
;;; Commentary:
|
||||
;;; Simple Emacs setup I carry everywhere
|
||||
|
||||
;;; Code:
|
||||
(setq custom-file (locate-user-emacs-file "custom.el"))
|
||||
(load custom-file 'noerror) ;; no error on missing custom file
|
||||
|
||||
(require 'package)
|
||||
(package-initialize)
|
||||
|
||||
(defun reset-custom-vars ()
|
||||
"Resets the custom variables that were set to crazy numbers"
|
||||
(setopt gc-cons-threshold (* 1024 1024 100))
|
||||
(setopt garbage-collection-messages t))
|
||||
|
||||
(use-package emacs
|
||||
:custom
|
||||
(native-comp-async-query-on-exit t)
|
||||
(read-answer-short t)
|
||||
(use-short-answers t)
|
||||
(enable-recursive-minibuffers t)
|
||||
(which-func-update-delay 1.0)
|
||||
(visible-bell nil)
|
||||
(custom-buffer-done-kill t)
|
||||
(whitespace-line-column nil)
|
||||
(x-underline-at-descent-line t)
|
||||
(imenu-auto-rescan t)
|
||||
(uniquify-buffer-name-style 'forward)
|
||||
(confirm-nonexistent-file-or-buffer nil)
|
||||
(create-lockfiles nil)
|
||||
(make-backup-files nil)
|
||||
(kill-do-not-save-duplicates t)
|
||||
(sentence-end-double-space nil)
|
||||
(treesit-enabled-modes t)
|
||||
:init
|
||||
;; base visual
|
||||
(menu-bar-mode -1) ;; no menu bar
|
||||
(toggle-scroll-bar -1) ;; no scroll bar
|
||||
(tool-bar-mode -1) ;; no tool bar either
|
||||
(blink-cursor-mode -1) ;; stop blinking
|
||||
|
||||
;; font of the century
|
||||
(set-frame-font "Aporetic Sans Mono 12" nil t)
|
||||
|
||||
:bind
|
||||
(("C-<wheel-up>" . pixel-scroll-precision) ; dont zoom in please, just scroll
|
||||
("C-<wheel-down>" . pixel-scroll-precision) ; dont zoom in either, just scroll
|
||||
("C-x k" . kill-current-buffer)) ; kill the buffer, dont ask
|
||||
:hook
|
||||
(text-mode . delete-trailing-whitespace-mode)
|
||||
(prog-mode . delete-trailing-whitespace-mode)
|
||||
(after-init . global-display-line-numbers-mode) ;; always show line numbers
|
||||
(after-init . column-number-mode) ;; column number in the mode line
|
||||
(after-init . size-indication-mode) ;; file size in the mode line
|
||||
(after-init . pixel-scroll-precision-mode) ;; smooth mouse scroll
|
||||
(after-init . electric-pair-mode) ;; i mean ... parens should auto create
|
||||
(after-init . reset-custom-vars)
|
||||
)
|
||||
|
||||
(use-package autorevert
|
||||
:ensure nil
|
||||
:custom
|
||||
(auto-revert-interval 3)
|
||||
(auto-revert-remote-files nil)
|
||||
(auto-revert-use-notify t)
|
||||
(auto-revert-avoid-polling nil)
|
||||
(auto-revert-verbose t)
|
||||
:hook
|
||||
(after-init . global-auto-revert-mode))
|
||||
|
||||
(use-package recentf
|
||||
:ensure nil
|
||||
:commands (recentf-mode recentf-cleanup)
|
||||
:hook
|
||||
(after-init . recentf-mode)
|
||||
:custom
|
||||
(recentf-auto-cleanup 'never)
|
||||
(recentf-exclude
|
||||
(list "\\.tar$" "\\.tbz2$" "\\.tbz$" "\\.tgz$" "\\.bz2$"
|
||||
"\\.bz$" "\\.gz$" "\\.gzip$" "\\.xz$" "\\.zip$"
|
||||
"\\.7z$" "\\.rar$"
|
||||
"COMMIT_EDITMSG\\'"
|
||||
"\\.\\(?:gz\\|gif\\|svg\\|png\\|jpe?g\\|bmp\\|xpm\\)$"
|
||||
"-autoloads\\.el$" "autoload\\.el$"))
|
||||
|
||||
:config
|
||||
;; A cleanup depth of -90 ensures that `recentf-cleanup' runs before
|
||||
;; `recentf-save-list', allowing stale entries to be removed before the list
|
||||
;; is saved by `recentf-save-list', which is automatically added to
|
||||
;; `kill-emacs-hook' by `recentf-mode'.
|
||||
(add-hook 'kill-emacs-hook #'recentf-cleanup -90))
|
||||
|
||||
(use-package savehist
|
||||
:ensure nil
|
||||
:commands (savehist-mode savehist-save)
|
||||
:hook
|
||||
(after-init . savehist-mode)
|
||||
:custom
|
||||
(savehist-autosave-interval 600)
|
||||
(savehist-additional-variables
|
||||
'(kill-ring ; clipboard
|
||||
register-alist ; macros
|
||||
mark-ring global-mark-ring ; marks
|
||||
search-ring regexp-search-ring)))
|
||||
|
||||
(use-package hl-line
|
||||
:ensure nil
|
||||
:custom
|
||||
(hl-line-sticky-flag nil)
|
||||
(global-hl-line-sticky-flag nil)
|
||||
:hook
|
||||
(after-init . global-hl-line-mode))
|
||||
|
||||
(use-package saveplace
|
||||
:ensure nil
|
||||
:commands (save-place-mode save-place-local-mode)
|
||||
:hook
|
||||
(after-init . save-place-mode)
|
||||
:custom
|
||||
(save-place-limit 400))
|
||||
|
||||
(use-package nerd-icons
|
||||
:custom
|
||||
;; disable bright icon colors
|
||||
(nerd-icons-color-icons nil))
|
||||
|
||||
(use-package doom-modeline
|
||||
:custom
|
||||
(inhibit-compacting-font-caches t) ;; speed
|
||||
(doom-modeline-buffer-file-name-style 'relative-from-project)
|
||||
(doom-modeline-major-mode-icon nil) ;; distracting icons, no thank you
|
||||
(doom-modeline-buffer-encoding nil) ;; everything is utf-8 anyway
|
||||
(doom-modeline-buffer-state-icon nil) ;; the filename already shows me
|
||||
(doom-modeline-lsp nil) ;; lsp state is too distracting, too often
|
||||
:hook (after-init . doom-modeline-mode))
|
||||
|
||||
(load-theme 'catppuccin :no-confirm)
|
||||
|
||||
(use-package diminish :demand t) ;; declutter the modeline
|
||||
(use-package eldoc
|
||||
:diminish eldoc-mode
|
||||
:custom
|
||||
(eldoc-echo-area-use-multiline-p nil)) ;; docs for everything
|
||||
|
||||
(use-package eldoc-box
|
||||
:defer t
|
||||
:config
|
||||
(set-face-background 'eldoc-box-border (catppuccin-color 'green))
|
||||
(set-face-background 'eldoc-box-body (catppuccin-color 'base))
|
||||
:bind
|
||||
(("M-h" . eldoc-box-help-at-point)))
|
||||
|
||||
(use-package pulsar
|
||||
:commands pulsar-global-mode pulsar-recenter-top pulsar-reveal-entry
|
||||
:init
|
||||
(defface pulsar-catppuccin
|
||||
`((default :extend t)
|
||||
(((class color) (min-colors 88) (background light))
|
||||
:background ,(catppuccin-color 'sapphire))
|
||||
(((class color) (min-colors 88) (background dark))
|
||||
:background ,(catppuccin-color 'sapphire))
|
||||
(t :inverse-video t))
|
||||
"Alternative nord face for `pulsar-face'."
|
||||
:group 'pulsar-faces)
|
||||
:custom
|
||||
(pulsar-face 'pulsar-catppuccin)
|
||||
:hook
|
||||
(after-init . pulsar-global-mode))
|
||||
|
||||
(use-package which-key
|
||||
:commands which-key-mode
|
||||
:diminish which-key-mode
|
||||
:hook
|
||||
(after-init . which-key-mode))
|
||||
|
||||
(use-package expreg
|
||||
:bind ("M-m" . expreg-expand))
|
||||
|
||||
(use-package vundo) ;; undo tree
|
||||
|
||||
;; better structured editing
|
||||
(use-package puni
|
||||
:commands puni-global-mode
|
||||
:hook
|
||||
(after-init . puni-global-mode))
|
||||
|
||||
(use-package avy
|
||||
:bind
|
||||
("M-i" . avy-goto-char-2)
|
||||
:custom
|
||||
(avy-background t))
|
||||
|
||||
(use-package consult
|
||||
:bind
|
||||
("C-x b" . consult-buffer) ;; orig. switch-to-buffer
|
||||
("M-y" . consult-yank-pop) ;; orig. yank-pop
|
||||
("M-g M-g" . consult-goto-line) ;; orig. goto-line
|
||||
("M-g i" . consult-imenu) ;; consult version is interactive
|
||||
("M-g r" . consult-ripgrep) ;; find in project also works
|
||||
:custom
|
||||
(consult-narrow-key "<"))
|
||||
|
||||
(use-package vertico
|
||||
:commands vertico-mode
|
||||
:custom
|
||||
(read-file-name-completion-ignore-case t)
|
||||
(read-buffer-completion-ignore-case t)
|
||||
(completion-ignore-case t)
|
||||
(enable-recursive-minibuffers t)
|
||||
(minibuffer-prompt-properties '(read-only t cursor-intangible t face minibuffer-prompt))
|
||||
:init
|
||||
(vertico-mode)
|
||||
:hook
|
||||
(minibuffer-setup-hook . cursor-intangible-mode))
|
||||
|
||||
(use-package marginalia
|
||||
:commands marginalia-mode
|
||||
:hook (after-init . marginalia-mode))
|
||||
|
||||
(use-package crux
|
||||
:bind
|
||||
("C-c M-e" . crux-find-user-init-file)
|
||||
("C-c C-w" . crux-transpose-windows)
|
||||
("C-c M-d" . crux-find-current-directory-dir-locals-file)
|
||||
("C-a" . crux-move-beginning-of-line))
|
||||
|
||||
(use-package magit
|
||||
:bind (("C-M-g" . magit-status)))
|
||||
|
||||
(use-package nerd-icons-corfu
|
||||
:commands nerd-icons-corfu-formatter
|
||||
:defines corfu-margin-formatters)
|
||||
|
||||
(use-package corfu
|
||||
:commands global-corfu-mode
|
||||
:custom
|
||||
(corfu-cycle t)
|
||||
(corfu-auto t)
|
||||
(corfu-auto-delay 1)
|
||||
(corfu-auto-prefix 3)
|
||||
(corfu-separator ?_)
|
||||
:hook
|
||||
(after-init . global-corfu-mode)
|
||||
:config
|
||||
(add-to-list 'corfu-margin-formatters #'nerd-icons-corfu-formatter))
|
||||
|
||||
(use-package cape)
|
||||
|
||||
(use-package orderless
|
||||
:custom
|
||||
(completion-styles '(orderless partial-completion basic))
|
||||
(completion-category-defaults nil)
|
||||
(completion-category-overrides nil))
|
||||
|
||||
(use-package yasnippet
|
||||
:commands yas-global-mode
|
||||
:diminish yas-minor-mode
|
||||
:hook
|
||||
(after-init . yas-global-mode))
|
||||
|
||||
(use-package yasnippet-snippets :after yasnippet)
|
||||
|
||||
(use-package exec-path-from-shell
|
||||
:commands exec-path-from-shell-initialize
|
||||
:custom
|
||||
(exec-path-from-shell-arguments nil)
|
||||
:hook
|
||||
(after-init . exec-path-from-shell-initialize))
|
||||
|
||||
(use-package nixpkgs-fmt
|
||||
:custom
|
||||
(nixpkgs-fmt-command "nixfmt"))
|
||||
|
||||
(use-package eat
|
||||
:bind
|
||||
(("C-c e p" . eat-project)
|
||||
("C-c e t" . eat)))
|
||||
|
||||
(use-package f :demand t)
|
||||
|
||||
(use-package envrc
|
||||
:commands envrc-global-mode
|
||||
:hook
|
||||
(after-init . envrc-global-mode))
|
||||
|
||||
(use-package gptel
|
||||
:commands gptel-make-anthropic f-read-text
|
||||
:config
|
||||
(gptel-make-anthropic "Claude"
|
||||
:stream t :key (f-read-text "/run/secrets/claude_key")))
|
||||
|
||||
(use-package sideline-flymake)
|
||||
(use-package sideline-eglot)
|
||||
(use-package sideline
|
||||
:custom
|
||||
(sideline-backends-right '(sideline-flymake sideline-eglot))
|
||||
:hook
|
||||
(eglot-managed-mode . sideline-mode)
|
||||
(flymake-mode . sideline-mode))
|
||||
|
||||
(use-package eglot
|
||||
:custom
|
||||
(eglot-extend-to-xref t)
|
||||
(eglot-ignored-server-capabilities '(:inlayHintProvider))
|
||||
(jsonrpc-event-hook nil)
|
||||
:hook
|
||||
(eglot-managed-mode . eldoc-box-hover-mode)
|
||||
(before-save . eldoc-format-buffer)
|
||||
:bind
|
||||
(:map eglot-mode-map
|
||||
("C-c l a" . eglot-code-actions)
|
||||
("C-c l r" . eglot-rename)
|
||||
("C-c l h" . eldoc)
|
||||
("C-c l g" . xref-find-references)
|
||||
("C-c l w" . eglot-reconnect)))
|
||||
|
||||
(use-package proced
|
||||
:custom
|
||||
(proced-auto-update-flag t)
|
||||
(proced-auto-update-interval 3)
|
||||
(proced-enable-color-flag t)
|
||||
(proced-show-remote-processes t))
|
||||
|
||||
(use-package org
|
||||
:ensure t
|
||||
:defer t
|
||||
:commands (org-mode org-capture org-agenda)
|
||||
:init
|
||||
(defvar org-journal-file "~/nextcloud/org/journal.org")
|
||||
(defvar org-archive-file "~/nextcloud/org/archive.org")
|
||||
(defvar org-notes-file "~/nextcloud/org/notes.org")
|
||||
(defvar org-inbox-file "~/nextcloud/org/inbox.org")
|
||||
(defvar org-work-file "~/nextcloud/org/work.org")
|
||||
(defun my/org-capture-project-target-heading ()
|
||||
"Determine Org target headings from the current file's project path.
|
||||
|
||||
This function assumes a directory structure like '~/projects/COMPANY/PROJECT/'.
|
||||
It extracts 'COMPANY' and 'PROJECT' to use as nested headlines
|
||||
for an Org capture template.
|
||||
|
||||
If the current buffer is not visi
|
||||
ting a file within such a
|
||||
project structure, it returns nil, causing capture to default to
|
||||
the top of the file."
|
||||
(when-let* ((path (buffer-file-name))) ; Ensure we are in a file-visiting buffer
|
||||
(let ((path-parts (split-string path "/" t " ")))
|
||||
(when-let* ((projects-pos (cl-position "projects" path-parts :test #'string=))
|
||||
(company (nth (+ 1 projects-pos) path-parts))
|
||||
(project (nth (+ 2 projects-pos) path-parts)))
|
||||
;; Return a list of headlines for Org to find or create.
|
||||
(list company project)))))
|
||||
:bind
|
||||
(("C-c c" . org-capture)
|
||||
("C-c i" . org-store-link)
|
||||
("C-c a" . org-agenda)
|
||||
:map org-mode-map
|
||||
("C-c t" . org-toggle-inline-images)
|
||||
("C-c l" . org-toggle-link-display))
|
||||
:custom
|
||||
(org-agenda-files (list org-inbox-file org-journal-file))
|
||||
(org-directory "~/nextcloud/org")
|
||||
(org-default-notes-file org-inbox-file)
|
||||
(org-archive-location (concat org-archive-file "::* From %s"))
|
||||
(org-log-done 'time)
|
||||
(org-log-into-drawer t)
|
||||
(org-hide-emphasis-markers t)
|
||||
(org-src-fontify-natively t)
|
||||
(org-src-tab-acts-natively t)
|
||||
(org-capture-templates '(("t" "Todo" entry (file org-inbox-file)
|
||||
"* TODO %?\n:PROPERTIES:\n:CREATED: %U\n:END:\n\n%a\n\n)")
|
||||
("j" "Journal" entry (file+olp+datetree org-journal-file)
|
||||
"* %?\n:PROPERTIES:\n:CREATED: %U\n:END:\n\n%a\n\n")
|
||||
("n" "Note" entry (file org-notes-file)
|
||||
"* %?\n:PROPERTIES:\n:CREATED: %U\n:END:\n\n%a\n\n")
|
||||
("p" "Project Task" item
|
||||
(file+function org-work-file my/org-capture-project-target-heading)
|
||||
"* TODO %? \n CLOCK: %U"
|
||||
))
|
||||
)
|
||||
:config
|
||||
;; Enable syntax highlighting in code blocks
|
||||
(add-hook 'org-mode-hook 'turn-on-font-lock)
|
||||
(add-hook 'org-mode-hook 'org-indent-mode))
|
||||
|
||||
;; extras
|
||||
(use-package comp-run
|
||||
:ensure nil
|
||||
:config
|
||||
(push "tramp-loaddefs.el.gz" native-comp-jit-compilation-deny-list)
|
||||
(push "cl-loaddefs.el.gz" native-comp-jit-compilation-deny-list))
|
||||
|
||||
(use-package rustic
|
||||
:custom
|
||||
(rustic-lsp-client 'eglot))
|
||||
|
||||
(provide 'init)
|
||||
|
||||
;;; init.el ends here
|
||||
@@ -0,0 +1,215 @@
|
||||
{
|
||||
# required for the default Hyprland config
|
||||
programs.kitty.enable = true;
|
||||
|
||||
services.hyprpolkitagent.enable = true;
|
||||
|
||||
# enable Hyprland
|
||||
wayland.windowManager.hyprland.enable = true;
|
||||
|
||||
# we start hyprland using uwsm
|
||||
wayland.windowManager.hyprland.systemd.enable = false;
|
||||
|
||||
# hyprland.conf
|
||||
wayland.windowManager.hyprland.settings = {
|
||||
exec-once = [
|
||||
# read in env vars
|
||||
"dbus-update-activation-environment --systemd --all"
|
||||
# start waybar
|
||||
"uwsm app -- waybar"
|
||||
];
|
||||
|
||||
input = {
|
||||
follow_mouse = "1";
|
||||
|
||||
touchpad = {
|
||||
natural_scroll = "no";
|
||||
scroll_factor = 0.5;
|
||||
};
|
||||
|
||||
scroll_factor = 0.5;
|
||||
|
||||
accel_profile = "adaptive";
|
||||
sensitivity = -0.5; # -1.0 - 1.0, 0 means no modification.
|
||||
|
||||
kb_layout = "us";
|
||||
|
||||
# very emacs specific, i use caps as an extra ctrl key
|
||||
kb_options = "ctrl:nocaps";
|
||||
};
|
||||
|
||||
cursor = {
|
||||
no_hardware_cursors = "true";
|
||||
};
|
||||
|
||||
general = {
|
||||
gaps_in = 2;
|
||||
gaps_out = 4;
|
||||
border_size = 2;
|
||||
"col.active_border" = "$blue $green 45deg";
|
||||
"col.inactive_border" = "$base";
|
||||
|
||||
layout = "dwindle";
|
||||
};
|
||||
|
||||
decoration = {
|
||||
rounding = 5;
|
||||
};
|
||||
|
||||
animations = {
|
||||
enabled = "yes";
|
||||
bezier = "myBezier, 0.05, 0.9, 0.1, 1.05";
|
||||
|
||||
animation = [
|
||||
"windows, 1, 7, myBezier"
|
||||
"windowsOut, 1, 7, default, popin 80%"
|
||||
"border, 1, 10, default"
|
||||
"borderangle, 1, 8, default"
|
||||
"fade, 1, 7, default"
|
||||
"workspaces, 1, 6, default"
|
||||
];
|
||||
};
|
||||
|
||||
dwindle = {
|
||||
pseudotile = "yes";
|
||||
preserve_split = "yes";
|
||||
};
|
||||
|
||||
misc = {
|
||||
disable_hyprland_logo = true;
|
||||
focus_on_activate = true;
|
||||
};
|
||||
|
||||
"$mainMod" = "SUPER";
|
||||
|
||||
bind = [
|
||||
"$mainMod, Return, exec, uwsm app -- kitty"
|
||||
# use walker to show exec menu
|
||||
"$mainMod, Space, exec, walker"
|
||||
"$mainMod, P, pseudo"
|
||||
"$mainMod, J, togglesplit"
|
||||
|
||||
# grimblast
|
||||
"$mainMod_SHIFT, p, exec, grimblast -n -f copysave active"
|
||||
"$mainMod_SHIFT, a, exec, grimblast -n -f copysave area"
|
||||
"$mainMod_ALT, p, exec, grimblast -n -f copysave output"
|
||||
"$mainMod_CTRL, p, exec, grimblast -n -f copysave screen"
|
||||
|
||||
# Terminal / launcher / kill / reload
|
||||
"$mainMod, RETURN, exec, kitty"
|
||||
"$mainMod, D, exec, wofi --show drun"
|
||||
"$mainMod, Q, killactive"
|
||||
"$mainMod_SHIFT, Q, exit"
|
||||
"$mainMod_SHIFT, R, exec, hyprctl reload"
|
||||
"$mainMod_SHIFT, S, exec, wlogout"
|
||||
|
||||
# Default browser
|
||||
"$mainMod, W, exec, xdg-open https://about:blank"
|
||||
|
||||
# Focus movement
|
||||
"$mainMod, H, movefocus, l"
|
||||
"$mainMod, L, movefocus, r"
|
||||
"$mainMod, K, movefocus, u"
|
||||
"$mainMod, J, movefocus, d"
|
||||
"$mainMod, left, movefocus, l"
|
||||
"$mainMod, right, movefocus, r"
|
||||
"$mainMod, up, movefocus, u"
|
||||
"$mainMod, down, movefocus, d"
|
||||
# Keybindings #
|
||||
|
||||
# Move windows
|
||||
"$mainMod_SHIFT, H, movewindow, l"
|
||||
"$mainMod_SHIFT, L, movewindow, r"
|
||||
"$mainMod_SHIFT, K, movewindow, u"
|
||||
"$mainMod_SHIFT, J, movewindow, d"
|
||||
"$mainMod_SHIFT, left, movewindow, l"
|
||||
"$mainMod_SHIFT, right, movewindow, r"
|
||||
"$mainMod_SHIFT, up, movewindow, u"
|
||||
"$mainMod_SHIFT, down, movewindow, d"
|
||||
|
||||
# Resize windows
|
||||
"$mainMod CTRL, H, resizeactive, -30 0"
|
||||
"$mainMod CTRL, L, resizeactive, 30 0"
|
||||
"$mainMod CTRL, K, resizeactive, 0 -30"
|
||||
"$mainMod CTRL, J, resizeactive, 0 30"
|
||||
|
||||
# Floating / fullscreen
|
||||
"$mainMod, V, togglefloating"
|
||||
"$mainMod, F, fullscreen, 0"
|
||||
"$mainMod_SHIFT, F, fullscreen, 1"
|
||||
|
||||
# Workspaces
|
||||
"$mainMod, 1, workspace, 1"
|
||||
"$mainMod, 2, workspace, 2"
|
||||
"$mainMod, 3, workspace, 3"
|
||||
"$mainMod, 4, workspace, 4"
|
||||
"$mainMod, 5, workspace, 5"
|
||||
"$mainMod, 6, workspace, 6"
|
||||
"$mainMod, 7, workspace, 7"
|
||||
"$mainMod, 8, workspace, 8"
|
||||
"$mainMod, 9, workspace, 9"
|
||||
"$mainMod, 0, workspace, 10"
|
||||
|
||||
"$mainMod_SHIFT, 1, movetoworkspace, 1"
|
||||
"$mainMod_SHIFT, 2, movetoworkspace, 2"
|
||||
"$mainMod_SHIFT, 3, movetoworkspace, 3"
|
||||
"$mainMod_SHIFT, 4, movetoworkspace, 4"
|
||||
"$mainMod_SHIFT, 5, movetoworkspace, 5"
|
||||
"$mainMod_SHIFT, 6, movetoworkspace, 6"
|
||||
"$mainMod_SHIFT, 7, movetoworkspace, 7"
|
||||
"$mainMod_SHIFT, 8, movetoworkspace, 8"
|
||||
"$mainMod_SHIFT, 9, movetoworkspace, 9"
|
||||
"$mainMod_SHIFT, 0, movetoworkspace, 10"
|
||||
|
||||
# Cycle workspaces
|
||||
"$mainMod, mouse_down, workspace, e+1"
|
||||
"$mainMod, mouse_up, workspace, e-1"
|
||||
|
||||
# Mouse drag
|
||||
"$mainMod, mouse:272, movewindow"
|
||||
"$mainMod, mouse:273, resizewindow"
|
||||
|
||||
#########################
|
||||
# Audio (pamixer)
|
||||
#########################
|
||||
"XF86AudioRaiseVolume, exec, pamixer -i 5"
|
||||
"XF86AudioLowerVolume, exec, pamixer -d 5"
|
||||
"XF86AudioMute, exec, pamixer -t"
|
||||
"XF86AudioMicMute, exec, pamixer --default-source -t"
|
||||
|
||||
#########################
|
||||
# Media (playerctl)
|
||||
#########################
|
||||
"XF86AudioPlay, exec, playerctl play-pause"
|
||||
"XF86AudioPause, exec, playerctl pause"
|
||||
"XF86AudioNext, exec, playerctl next"
|
||||
"XF86AudioPrev, exec, playerctl previous"
|
||||
"XF86AudioStop, exec, playerctl stop"
|
||||
|
||||
#########################
|
||||
# Brightness (brightnessctl)
|
||||
#########################
|
||||
"XF86MonBrightnessUp, exec, brightnessctl set +10%"
|
||||
"XF86MonBrightnessDown, exec, brightnessctl set 10%-"
|
||||
"XF86KbdBrightnessUp, exec, brightnessctl -d '*kbd_backlight*' set +10%"
|
||||
"XF86KbdBrightnessDown, exec, brightnessctl -d '*kbd_backlight*' set 10%-"
|
||||
|
||||
#########################
|
||||
# Power / session
|
||||
#########################
|
||||
"XF86Sleep, exec, systemctl suspend"
|
||||
"XF86PowerOff, exec, systemctl poweroff"
|
||||
"XF86WakeUp, exec, systemctl suspend"
|
||||
|
||||
|
||||
#########################
|
||||
# Start apps
|
||||
#########################
|
||||
"CTRLALT, B, exec, flatpak run eu.betterbird.Betterbird"
|
||||
"CTRLALT, S, exec, spotify"
|
||||
"CTRLALT, z, exec, flatpak run app.zen_browser.zen"
|
||||
|
||||
"$mainMod_SHIFT, S, exec, wlogout"
|
||||
];
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,155 @@
|
||||
{ pkgs, ... } :
|
||||
{
|
||||
home.packages = with pkgs; [
|
||||
hyprlock
|
||||
hypridle
|
||||
wlogout
|
||||
];
|
||||
|
||||
|
||||
home.file = {
|
||||
lock = {
|
||||
source = ../assets/lock.png;
|
||||
target = ".lock.png";
|
||||
};
|
||||
};
|
||||
|
||||
services = {
|
||||
# hypridle to
|
||||
# 150 seconds - turn of monitor
|
||||
# 300 seconds - lock screen
|
||||
# 330 seconds - turn of monitor
|
||||
# 30 minutes - put to sleep
|
||||
hypridle = {
|
||||
enable = true;
|
||||
settings = {
|
||||
general = {
|
||||
lock_cmd = "pidof hyprlock || hyprlock"; # avoid starting multiple hyprlock instances.
|
||||
before_sleep_cmd = "loginctl lock-session"; # lock before suspend.
|
||||
after_sleep_cmd = "hyprctl dispatch dpms on"; # to avoid having to press a key twice to turn on the display.
|
||||
};
|
||||
|
||||
listener = [
|
||||
{
|
||||
timeout = 150; # 2.5min.
|
||||
on-timeout = "brightnessctl -s set 10"; # set monitor backlight to minimum, avoid 0 on OLED monitor.
|
||||
on-resume = "brightnessctl -r"; # monitor backlight restore.
|
||||
}
|
||||
{
|
||||
timeout = 300; # 5min
|
||||
on-timeout = "loginctl lock-session"; # lock screen when timeout has passed
|
||||
}
|
||||
{
|
||||
timeout = 330; # 5.5min
|
||||
on-timeout = "hyprctl dispatch dpms off"; # screen off when timeout has passed
|
||||
on-resume = "hyprctl dispatch dpms on && brightnessctl -r"; # screen on when activity is detected after timeout has fired.
|
||||
}
|
||||
{
|
||||
timeout = 1800; # 30min
|
||||
on-timeout = "systemctl suspend"; # suspend pc
|
||||
}
|
||||
];
|
||||
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
|
||||
programs.wlogout = {
|
||||
enable = true;
|
||||
layout = [
|
||||
{
|
||||
"label" = "lock";
|
||||
"action" = "hyprlock";
|
||||
"text" = "Lock";
|
||||
"keybind" = "l";
|
||||
}
|
||||
{
|
||||
"label" = "shutdown";
|
||||
"action" = "systemctl poweroff";
|
||||
"text" = "Shutdown";
|
||||
"keybind" = "s";
|
||||
}
|
||||
{
|
||||
"label" = "suspend";
|
||||
"action" = "systemctl suspend";
|
||||
"text" = "Suspend";
|
||||
"keybind" = "u";
|
||||
}
|
||||
{
|
||||
"label" = "reboot";
|
||||
"action" = "systemctl reboot";
|
||||
"text" = "Reboot";
|
||||
"keybind" = "r";
|
||||
}
|
||||
{
|
||||
"label" = "hibernate";
|
||||
"action" = "systemctl hibernate";
|
||||
"text" = "Hibernate";
|
||||
"keybind" = "h";
|
||||
}
|
||||
{
|
||||
"label" = "reboot";
|
||||
"action" = "systemctl reboot";
|
||||
"text" = "Reboot";
|
||||
"keybind" = "r";
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
catppuccin.wlogout.iconStyle = "wleave";
|
||||
|
||||
programs.hyprlock = {
|
||||
enable = true;
|
||||
settings = {
|
||||
auth = {
|
||||
fingerprint = {
|
||||
enabled = true;
|
||||
};
|
||||
};
|
||||
|
||||
background = {
|
||||
path = "~/.lock.png";
|
||||
color = "$base";
|
||||
};
|
||||
|
||||
label = {
|
||||
monitor = "";
|
||||
text = "$TIME";
|
||||
color = "$text";
|
||||
font_size = 90;
|
||||
position = "0, 0";
|
||||
halign = "center";
|
||||
valign = "top";
|
||||
};
|
||||
|
||||
input-field = {
|
||||
monitor = "";
|
||||
size = "300, 60";
|
||||
outline_thickness = 4;
|
||||
dots_size = 0.2;
|
||||
dots_spacing = 0.2;
|
||||
dots_center = true;
|
||||
outer_color = "$accent";
|
||||
inner_color = "$surface0";
|
||||
font_color = "$text";
|
||||
fade_on_empty = true;
|
||||
placeholder_text = ''<span foreground="##$textAlpha"><i> Logged in as </i><span foreground="##$accentAlpha">$USER</span></span>'';
|
||||
hide_input = false;
|
||||
check_color = "$accent";
|
||||
fail_color = "$red";
|
||||
fail_text = ''<i>$FAIL <b>($ATTEMPTS)</b></i>'';
|
||||
capslock_color = "$yellow";
|
||||
position = "0, -47";
|
||||
halign = "center";
|
||||
valign = "center";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
catppuccin.hyprlock.enable = true;
|
||||
catppuccin.hyprlock.flavor = "mocha";
|
||||
catppuccin.hyprlock.accent = "blue";
|
||||
catppuccin.hyprlock.useDefaultConfig = false; # we use our own
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
programs = {
|
||||
# <henrov: I need to setup kitty here>
|
||||
alacritty = {
|
||||
enable = true;
|
||||
settings = {
|
||||
font.normal.family = "Aporetic Sans Mono";
|
||||
font.size = 12;
|
||||
terminal.shell.program = "zsh";
|
||||
|
||||
window = {
|
||||
padding.x = 4;
|
||||
padding.y = 4;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
catppuccin.alacritty.enable = true;
|
||||
catppuccin.alacritty.flavor = "mocha";
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{ pkgs, ...}:
|
||||
{
|
||||
gtk = {
|
||||
enable = true;
|
||||
colorScheme = "dark";
|
||||
theme = {
|
||||
name = "Catppuccin-GTK-Grey-Dark-Compact";
|
||||
package = (pkgs.magnetic-catppuccin-gtk.override {
|
||||
accent = [ "grey" ];
|
||||
shade = "dark";
|
||||
tweaks = [ "black" ];
|
||||
size = "compact";
|
||||
});
|
||||
};
|
||||
|
||||
iconTheme.name = "Papirus-Dark";
|
||||
};
|
||||
|
||||
catppuccin.enable = true;
|
||||
catppuccin.flavor = "mocha";
|
||||
catppuccin.accent = "blue";
|
||||
catppuccin.gtk.icon.enable = true;
|
||||
catppuccin.cursors.enable = true;
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
home.packages = with pkgs; [
|
||||
(pkgs.unityhub.override {
|
||||
extraPkgs = pkgs: with pkgs; [
|
||||
dotnet-sdk
|
||||
];
|
||||
})
|
||||
];
|
||||
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
services.walker.enable = true;
|
||||
services.walker.settings = {
|
||||
close = "ctrl g";
|
||||
next = "ctrl n";
|
||||
previous = "ctrl p";
|
||||
quick_activate = ["1" "2" "3" "4"];
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
home.packages = with pkgs; [
|
||||
hyprpaper
|
||||
];
|
||||
|
||||
services.hyprpaper.enable = true;
|
||||
services.hyprpaper.settings = {
|
||||
ipc = "on";
|
||||
splash = false;
|
||||
splash_offset = 2.0;
|
||||
|
||||
preload = [ "~/.background-image.png" ];
|
||||
wallpaper = [ ",~/.background-image.png" ];
|
||||
};
|
||||
|
||||
home.file = {
|
||||
background = {
|
||||
source = ../assets/background.png;
|
||||
target = ".background-image.png";
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,165 @@
|
||||
{
|
||||
programs.waybar = {
|
||||
enable = true;
|
||||
settings = {
|
||||
mainBar = {
|
||||
layer = "top";
|
||||
height = 34;
|
||||
modules-left = [ "hyprland/workspaces" "hyprland/window" ];
|
||||
modules-right = [
|
||||
"idle_inhibitor"
|
||||
"pulseaudio"
|
||||
"network"
|
||||
"cpu"
|
||||
"memory"
|
||||
"temperature"
|
||||
"battery"
|
||||
"tray"
|
||||
"clock"
|
||||
];
|
||||
"idle_inhibitor" = {
|
||||
format = "{icon}";
|
||||
format-icons = {
|
||||
activated = " ";
|
||||
deactivated = " ";
|
||||
};
|
||||
};
|
||||
"pulseaudio" = {
|
||||
"format" = "{volume}% {icon}";
|
||||
"format-bluetooth" = "{volume}% {icon}";
|
||||
"format-muted" = "";
|
||||
"format-icons"= {
|
||||
"headphones"= "";
|
||||
"headset"= "";
|
||||
"phone"= "";
|
||||
"portab le"= "";
|
||||
"default"= ["" ""];
|
||||
};
|
||||
"on-click"= "pavucontrol";
|
||||
};
|
||||
"network" = {
|
||||
"format-wifi" = " ({bandwidthDownBits})";
|
||||
"format-ethernet" = " ({bandwidthDownBits})";
|
||||
"format-disconnected" = "Disconnected ⚠";
|
||||
"tooltip-format-wifi" = "{essid} ({signalStrength}%)";
|
||||
"tooltip-format-ethernet" = "{ifname}: {ipaddr}/{cidr}";
|
||||
"on-click" = "impala";
|
||||
};
|
||||
"cpu".format = "{usage}% ";
|
||||
"cpu".tooltip = false;
|
||||
"temperature" = {
|
||||
"format" = "{temperatureC}°C ";
|
||||
};
|
||||
"temperature".tooltip = false;
|
||||
"tray".spacing = 10;
|
||||
"tray".icon-size = 14;
|
||||
"clock".format = "{:%a, %d %b %Y - %H:%M}";
|
||||
"clock".tooltip = false;
|
||||
"battery" = {
|
||||
"bat" = "BAT0";
|
||||
"states" = {
|
||||
"good" = 95;
|
||||
"warning" = 30;
|
||||
"critical" = 15;
|
||||
};
|
||||
"format" = "{capacity}% {icon}";
|
||||
"format-charging" = "{capacity}% ";
|
||||
"format-plugged" = "{capacity}% ";
|
||||
"format-icons" = ["" "" "" "" " "];
|
||||
};
|
||||
"memory".format = "{percentage}% ";
|
||||
};
|
||||
};
|
||||
style = ''
|
||||
* {
|
||||
font-family: Aporetic Sans Mono, Iosevka Nerd Font, Roboto, Helvetica, Arial, sans-serif;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
window#waybar {
|
||||
background-color: @base;
|
||||
color: @text;
|
||||
transition-property: background-color;
|
||||
border-bottom: 0px solid rgba(0, 0, 0, 0);
|
||||
transition-duration: .5s;
|
||||
}
|
||||
|
||||
#workspaces button {
|
||||
padding: 0 5px;
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
border-radius: 0;
|
||||
color: @text;
|
||||
}
|
||||
|
||||
#workspaces button:hover {
|
||||
background: @surface1;
|
||||
color: @text;
|
||||
}
|
||||
|
||||
#workspaces button.active {
|
||||
background-color: @green;
|
||||
color: @base;
|
||||
box-shadow: inset 0 -3px @subtext1;
|
||||
}
|
||||
|
||||
#clock,
|
||||
#idle_inhibitor
|
||||
#battery,
|
||||
#cpu,
|
||||
#memory,
|
||||
#temperature,
|
||||
#network,
|
||||
#pulseaudio,
|
||||
#tray {
|
||||
margin: 0 5px;
|
||||
padding: 0 2px;
|
||||
}
|
||||
|
||||
#idle_inhibitor.activated {
|
||||
background-color: @green;
|
||||
}
|
||||
|
||||
#battery.charging {
|
||||
color: @green;
|
||||
}
|
||||
|
||||
@keyframes blink {
|
||||
to {
|
||||
background-color: #ffffff;
|
||||
color: black;
|
||||
}
|
||||
}
|
||||
|
||||
#battery.warning:not(.charging) {
|
||||
color: white;
|
||||
animation-name: blink;
|
||||
animation-duration: 0.5s;
|
||||
animation-timing-function: linear;
|
||||
animation-iteration-count: infinite;
|
||||
animation-direction: alternate;
|
||||
}
|
||||
|
||||
#window,
|
||||
#workspaces {
|
||||
margin: 0 4px;
|
||||
}
|
||||
|
||||
.modules-left > widget:first-child > #workspaces {
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.modules-right > widget:last-child > #workspaces {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
#network.disconnected {
|
||||
background-color: @red;
|
||||
}
|
||||
|
||||
#temperature.critical {
|
||||
background-color: @red;
|
||||
}
|
||||
'';
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
{ user, ... } : {
|
||||
imports =
|
||||
[
|
||||
./hardware-configuration.nix
|
||||
../../configuration
|
||||
];
|
||||
|
||||
# sops.secrets."ssh/traveldroid/private" = { # ssh private key
|
||||
# owner = "${user.username}";
|
||||
# mode = "600";
|
||||
# path = "/home/${user.username}/.ssh/id_ed25519";
|
||||
# };
|
||||
# sops.secrets."ssh/traveldroid/public" = { # ssh public key
|
||||
# owner = "${user.username}";
|
||||
# mode = "644";
|
||||
# path = "/home/${user.username}/.ssh/id_ed25519.pub";
|
||||
# };
|
||||
# sops.secrets."ssh/wavefunk/private" = { # ssh private key
|
||||
# owner = "${user.username}";
|
||||
# mode = "600";
|
||||
# path = "/home/${user.username}/.ssh/wavefunk";
|
||||
# };
|
||||
# sops.secrets."ssh/wavefunk/public" = { # ssh public key
|
||||
# owner = "${user.username}";
|
||||
# mode = "644";
|
||||
# path = "/home/${user.username}/.ssh/wavefunk.pub";
|
||||
# };
|
||||
# sops.secrets."ssh/wavefunk_dev/private" = { # ssh private key
|
||||
# owner = "${user.username}";
|
||||
# mode = "600";
|
||||
# path = "/home/${user.username}/.ssh/wavefunk_dev";
|
||||
# };
|
||||
# sops.secrets."ssh/wavefunk_dev/public" = { # ssh public key
|
||||
# owner = "${user.username}";
|
||||
# mode = "644";
|
||||
# path = "/home/${user.username}/.ssh/wavefunk_dev.pub";
|
||||
# };
|
||||
|
||||
programs._1password.enable = true;
|
||||
programs._1password-gui = {
|
||||
enable = true;
|
||||
polkitPolicyOwners = [ "${user.username}" ];
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
{
|
||||
hostname,
|
||||
pkgs,
|
||||
lib,
|
||||
modulesPath,
|
||||
user,
|
||||
config,
|
||||
...
|
||||
}:
|
||||
{
|
||||
imports = [
|
||||
(modulesPath + "/installer/scan/not-detected.nix")
|
||||
../../hardware/hardware.nix
|
||||
];
|
||||
|
||||
boot.initrd.availableKernelModules = [ "xhci_pci" "nvme" "usb_storage" "sd_mod" "rtsx_usb_sdmmc" ];
|
||||
boot.initrd.kernelModules = [ ];
|
||||
boot.kernelModules = [ "kvm-intel" ];
|
||||
boot.extraModulePackages = [ ];
|
||||
|
||||
fileSystems."/" =
|
||||
{ device = "/dev/disk/by-uuid/69433a14-fbaf-401b-af85-cd1bbf02b4e2";
|
||||
fsType = "ext4";
|
||||
};
|
||||
|
||||
fileSystems."/boot" =
|
||||
{ device = "/dev/disk/by-uuid/811D-0676";
|
||||
fsType = "vfat";
|
||||
options = [ "fmask=0077" "dmask=0077" ];
|
||||
};
|
||||
|
||||
swapDevices =
|
||||
[ { device = "/dev/disk/by-uuid/b6c557c2-7682-460b-a5e7-8f6f2f429a3a"; }
|
||||
];
|
||||
|
||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
{ pkgs, ... } : {
|
||||
imports = [
|
||||
../../home
|
||||
];
|
||||
|
||||
home.packages = with pkgs; [
|
||||
brightnessctl
|
||||
];
|
||||
|
||||
wayland.windowManager.hyprland.settings = {
|
||||
bind = [
|
||||
"XF86MonBrightnessUp, exec, brightnessctl set 5%+"
|
||||
"XF86MonBrightnessDown, exec, brightnessctl set 5%-"
|
||||
"XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+"
|
||||
"XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"
|
||||
"XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
|
||||
"XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"
|
||||
];
|
||||
|
||||
bindl = [
|
||||
'', switch:on:Lid Switch, exec, hyprctl keyword monitor "eDP-1, disable"''
|
||||
'', switch:off:Lid Switch, exec, hyprctl keyword monitor "eDP-1, preferred, 0x0, 1"''
|
||||
];
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
claude_key: ENC[AES256_GCM,data:PMPcEfsKZCALRdgQf5J12k8IsxlNT7R+zfSgmy3LbVhvQQzpCEVr5Xjh6ABhDRGjsTssXc1Vh7FA03oud40i5YxoYwJ2i2EqrRmpp/QNVAfbPrOzfCcwUxlbgJOUEMVv/1RJFYeqddi+bf1F,iv:lD1bRtBtnBf0ub5mGznVuoxLcFcJhxdp+mGv5TMBcKQ=,tag:TP6YLujPHFmFnK5gWwTREg==,type:str]
|
||||
gemini_key: ENC[AES256_GCM,data:dqoIwHtS1aIFKSy3NSbJOjJj/s0uc82KX5OQMUXq0RrJ0VNERDl9,iv:hnmYy0Vh8DAxKkDI4aBT/Ustuj8d0ViQk4liSQUrBAo=,tag:dOV6fHRxmfWCcfutE9dt5g==,type:str]
|
||||
davfs: ENC[AES256_GCM,data:cVyKjZRwildsaxX8rYVkmPl5YtBRPt2GWPbG4XRuZJcJPnLx4mfGVGlsfhHP+J5U9ThZgNm0mnxxrd4z+4kLzegi4S0bBoqrK1M4lS8Wmk/o4P7UdCSo/+viAyXX+XkWUkBjS4Xl4Q==,iv:dCZtFu/FFCS86nWfBYBjs4V+FgT2wmC4XIPypVXe8lA=,tag:gp9nlD3vHgKF/63wwlfs/g==,type:str]
|
||||
davfs_mount: ENC[AES256_GCM,data:NbXq1457Wdlq/49jiJopA9qenwqDCb57lPyHGciucs5cenzdX32nKWoB7hPWj844Vvx9os8jK7WCLEjuA4gedxrl5O5RgYK7bPzZc2EvHUtFlQULvdPCFIceafrJvzmNK4CKytY/K7Ja3FLDj71JjjLXx6yY9GtDbTD2kM+rXTbmSQOil+C4vtkSMFzOW3DQNmpTD154uFdplJJ7xN3z911vzc9UQSER9lCoZl1cRGJcItyy,iv:uP83ZLA2Fxxk3PwFSzce+I7h7+d/zSsejf+i1djDwr8=,tag:s14vRJi7EzCdMhjk6hziSg==,type:str]
|
||||
ssh:
|
||||
smallbox:
|
||||
private: ENC[AES256_GCM,data:YxDFGYAFJzayuxfE5hSXZXuWf8s1yqe/84vhOrrGVOvtuGZV8z63f47YtLwNBsi3zMs23cvygDRYO0SA9QujtNNBSiLff4lnD7T4sMAveSs6IrAu1PH4tYoJPSGnpuml6Llp9D3IjMxKZjYwan8DdJpk6nLLwvl9VjTQa3PJjUPiha866XvBaXWlwkr2sCcihVYE2MAk/ILStNKc2T89ScRXItkAk5fDuCpjlU9RA4g85HthND4NXyW19i7lvHXJHx4zkMyqTUSoPGYpdnCvMi0vvLxPgz/d4y60wtqdKluNaoEWoODFMqOz6082g8thki6wkfl779zcR09ZtSckWPcAkp1sUSjoLvvWFJgcGWcs+BJV7QwagKxNJv6t7tfKfMEPzK4OdFo/HcLt//BEXJtPlQZOd2/soXDKU9oCvGiWwIuzRu7Ynr5bAO+DJJH0BJDJqkapJFSOjiOsxMIz8nQX+XWe3vfKmAW7oq0RvhY63Tl/h3FI4tjU3BzUmE2p1pozq+iLWY9QM9EVevzDooYkqlO25wJqWg3HINMaKoH+i2Y=,iv:g59H/fJm3wukyjchUbB0r3KMxZhhu5k9AX45II2AY0Q=,tag:9wP+A+u3rvGYW9UlBVSVxQ==,type:str]
|
||||
public: ENC[AES256_GCM,data:fNnCb06n1/E10PzpaYENaUwPOEM7HN9ndei6r0eaiDyougpk8gyPszhKiObG5Qx9sQjt/KBWSgZkg2YcF65oj8HUK+AWqNuK8wARuxnecwCSXI1lRCflxMX1WuNsDR/2dZ5SDQQo9Q==,iv:JJhWdu4wr5KefTtkkea+dVhLyds03pf1ofDYGXwi/XY=,tag:zT3oRE1EXn4L5odALLTh0Q==,type:str]
|
||||
wavefunk:
|
||||
private: ENC[AES256_GCM,data:i6KQtOVZviAKIh8U8brH8UCZ6oJLloXzbPvL00j8P/F1ax2kr2ba2F04oGDMlukYhSNca3VIYsoB9BaHxlRJNfLfxcEQPOYPNS7LThl8mR0lLlI8V+zdbxN7hIKlSRI5WttvRGQsPkVjfqkA3SNqpATSESHCI1Y5NuxgyaZXxVVn4PKUSoM+qD50QIJ7np6ghl57UPl9jHOcVvtl7XTJILLaTjzBjlXQsW1txeNMnE2E2AiXDmL7ckBjqmqLQ9Qv3XugOwalBis6ITT2X6sjgApdcargH7GFKyfT+DP+GnjtfRZMkQFTlbdX4Duze5cGkTKOEhzkpM58uDefti5XD64NCBVBJTPSFepzC2BFswigtGur6XlUPbAiU6NVKx3P4MJAfFVUeeNZGRQwz2mQRYSqSaCjw81UmNSSfn+ug04vbHDimTnti1d0lJXEb5Kxre/w5ssHfgwexUWE2HJPNPXDeUGNMl/eqT1IrZ5wegBqrg4OpjVV7bcro4J930FCUDb82o9AIhT9oaMA3zXhKDmKCBIEjp0Ea9EU,iv:PMfGreR0RPjCy3cRRDRp6rjncQD1Ub0d9T8zZjh6Ojk=,tag:LLeMhNUcvHa6qgECEnlBfQ==,type:str]
|
||||
public: ENC[AES256_GCM,data:JRiSErA2GbIY95CVYwN1qOk4SsrN9R+f9oxp2SvcuqHtTBw7JYSpPmLmfgVojfazr0X69cZ6D473uj64TuKce2UR6gG4B7KXkXlSFgg6v79zfia1QZhL5GsMlObs+JCU4J0Ipg==,iv:zoad3D+x43rHdM+H5Ql+gOh7yr1P0ZVLLPeiPfNgTH4=,tag:YPA8bC96AzNgssbgftgS9g==,type:str]
|
||||
wavefunk_dev:
|
||||
private: ENC[AES256_GCM,data:mnCKG4wE98iiX9W+ahD2D/7c6oLty9XUHhUkdE4EkJzSowOiHoJeHGBQrETl39k84YVANPf1VkDiQDjdXsiA5JraXLfVcUKancPSlNDQotrtybngJSSYzFVS3046oMig8+C7RVpcHjbTK6rX1jgfLvUTTsYsdLcsRcQVO5fv6OrZ1rahrvLw+fM2V9g4R+a6K94AaPZqcChzcTCojeUzQBTZhWQUGkH03fps9ZHOp948kUGiURpo7kPEgQUo3KmBl3c9FQ8m0Im8Vs40EjNo6ywcqM4Dlz7fHdiDNVqK013SOMK/Erdo0ItQJWKofpW+XXKUmlt3+bDVGJ5pItrYPIjfu0kHyonE2SR6fqb1XACxXzFMkI3kcZLDr3VdToTufiArmDgPrrW7JNNxTgYCjEuXGOLPQ8VELAKZQwiWxKtR+C1SLrnDvUeHjLwZaQ8L2a9CYYbhT8/0C/zOIOBnaPYKG0Mt/6rpzH36hirtoJoVYU8gZvATfcwSPGeiWABV26/EJEwyPQ7ZertK5Ns0hfJcUw4qLRMwOS58,iv:RxYn4OLLTKPClZYVt2oBHwTkPWndmOtEAfQKUGnAQwc=,tag:eD7eYPeLKlipAjiTvFHivA==,type:str]
|
||||
public: ENC[AES256_GCM,data:ZHbpufd2N7B/pMjRrN5jPGvrLPdv5pM9llzN/EUkuBDowCbrU8/sItN04CF7W8+DkrXMxV6Mbcgv3H/LOtBiC/O5ZdDNOGOsDRNwv/YjP23qQ/Tx1YU+hJLnA+jvhTXWyXdj04OT,iv:5aBQSQbrlZT3G6Q+fjdXriDOHuO9WlSaHW7GqnRZ8Ck=,tag:LA5jT5Qqb+ZqrTuPLd1klw==,type:str]
|
||||
sops:
|
||||
age:
|
||||
- recipient: age1yq35g6mmlem0rhr47u6ewh8dctlwp9hj0s0ac60e4hrw9hjzlqms6crf7n
|
||||
enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBnWWRBUlNqZWlqOHlVN3N0
|
||||
TjN1YldwRzAxTnBFS25LeUxsREpsUWI5UHlZCmN5aGI2OUFnVXc4aXl1bjltM2Vl
|
||||
d3daR1BzMG8ySEhyWWd2SUY4Rm9wRVkKLS0tIHN0L1BuNHl3bXZQSTJmdmkrN3Zz
|
||||
cGFUQWlzOCtFWVI0RGIxUm5PbDAyYWMKXYg9uTPFbHuEoe8XPOsV2qgS/ZKCJ9IG
|
||||
uwGcQPfvISTENUGS+aw5gRuJY058K9FRdPEq0lXjDaYwAQlb2lVI7A==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
lastmodified: "2025-08-13T11:49:16Z"
|
||||
mac: ENC[AES256_GCM,data:4+jPKng5FFuWafNVIXwneC93utapNUvFGe77schDHKxWBT2YowSHRpSizuwS42lY02TRFMHQE8ZLdFmQeuWGY86m/61O52lcYk1cUhHzNyTtITyGiUc0PWMA4NCqmvoXRczmESnvkEMqttzuTS7WC7a2Owq8XvJ3sIUMtGMgxSQ=,iv:Xwc8KnGBt8d7EACSZz6yBNtgop82udot96PUB00JFzI=,tag:K5EF/taRbRo5vXD1zZWiNw==,type:str]
|
||||
unencrypted_suffix: _unencrypted
|
||||
version: 3.10.2
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
system = "x86_64-linux";
|
||||
username = "henrov";
|
||||
stateVersion = "25.11";
|
||||
locale = "sv_SE.UTF-8";
|
||||
}
|
||||