Compare commits
294 commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 15b48490ba | |||
| afaba29554 | |||
| 885ceb5c94 | |||
| 512d6d2dd4 | |||
| decd0f5110 | |||
| f360e54590 | |||
| 2a245f9851 | |||
|
|
39e4d182ce | ||
| 3731bd6366 | |||
| ac77341f62 | |||
| 0314b75a02 | |||
| 1aeb5de333 | |||
| 78a3247fb1 | |||
| fe090a95bc | |||
| bafff72427 | |||
| b39db82a29 | |||
| 96cf0a24c1 | |||
| ec3d1a8339 | |||
| af31c8f5f0 | |||
| 2c218306b9 | |||
|
|
db861d807a | ||
|
|
a49055c1cc | ||
|
|
65e21a7d00 | ||
| 6f90f67384 | |||
| 1f367f80fa | |||
| 1857504bac | |||
| 9be8a82a29 | |||
| 8b12e79650 | |||
| e6d19b9094 | |||
| 55b55f7133 | |||
| a2adc26e58 | |||
| 387eb01570 | |||
| 0bc2c97d69 | |||
| 0fa45657f0 | |||
| 3eef78654a | |||
| 68d16b8212 | |||
| aefd89f89d | |||
| aabc48511c | |||
| a047d5c9e1 | |||
| 28d08a5c8a | |||
| fb2507afe7 | |||
| 29b5237c28 | |||
| ba2eab4c17 | |||
| cc3fbdc57c | |||
| 63aff9e90b | |||
| e73a2f0946 | |||
| 68b8251e00 | |||
| 383d454a12 | |||
| d286a7eac9 | |||
| db7e1c050b | |||
| 5447e31d11 | |||
| faa8379e25 | |||
| d3787c546e | |||
| 114ad5b569 | |||
| 5c34749874 | |||
| 2316836b55 | |||
| 755638fe48 | |||
| 01ed785bf0 | |||
| c31afcac98 | |||
| 92d5e800a2 | |||
| c62cc3a2bd | |||
| 88c305d4f2 | |||
| f7ee4c0d5c | |||
| b5fe0e39fc | |||
| 37a5bfee0f | |||
| c2127e0047 | |||
| 78afacde79 | |||
| 1cbe5d7e2a | |||
| 5f81642dc1 | |||
| 1650deb7f2 | |||
| b79ba87fcb | |||
| 518b78bf96 | |||
| 1ab37deac7 | |||
| 9cc9955425 | |||
| f4e47cbf97 | |||
| 2b704cc5e7 | |||
| ea385722b0 | |||
| 79a66b1f84 | |||
| 7b3ad8a182 | |||
| 11a41563c8 | |||
| 4e7aa1e0f0 | |||
| 62ce845f71 | |||
| cee415973f | |||
| 1cb30eadca | |||
| f699577158 | |||
| 786217106b | |||
| 207b5165a3 | |||
| 4d5638baca | |||
| 681877654d | |||
| 711c2a128f | |||
| e4d521e10f | |||
| 62ab685cd4 | |||
| 45954db37a | |||
| 32f0512ef5 | |||
| 8cf9a40763 | |||
| ed40157986 | |||
| 3a0b6081c7 | |||
| 145ca4d804 | |||
| 3527bf2d82 | |||
| ac6cf62454 | |||
| 46f4507034 | |||
| 867e56cdf1 | |||
| 41b539eea8 | |||
| 16e3985e87 | |||
| b461a27228 | |||
| 7c70384da2 | |||
| 5443370f16 | |||
| 4f04b5d683 | |||
| 58c42ed7d8 | |||
| 4ca1688434 | |||
| 1886700857 | |||
| dc83628ac9 | |||
| 24acd1b1a3 | |||
| 4c5ebe9691 | |||
| bf3230ad43 | |||
| 54174d9a95 | |||
| ae8fb25102 | |||
| 547ea3e7bb | |||
| b596b0e044 | |||
| 94dd7b8b48 | |||
|
|
5c967ddd0d | ||
| 8c19df773b | |||
| 4afd999894 | |||
| c2ca2e5b71 | |||
| d88a6c3e4d | |||
| c021794165 | |||
| 7e54da92b9 | |||
| 6c1aff4c0e | |||
| f9ddae6478 | |||
| 1273cd7361 | |||
| 88c57dac72 | |||
| e214c4eb70 | |||
| 693d4e3c70 | |||
| c5b1041bbb | |||
| 5173a90965 | |||
| 49a5671bf3 | |||
| c256600c7e | |||
| dd57f95440 | |||
| 6d9724f0f4 | |||
| 57d32a4ccd | |||
| 4c93565c74 | |||
| 8e2f1e3f77 | |||
| 729d9f7cac | |||
| cd783dfe71 | |||
| de61f5becd | |||
| b5f4e15db8 | |||
| 029a7b86d7 | |||
| fbf9612ad4 | |||
| fd8fb04fde | |||
| dfa739e8a0 | |||
| 82161469a0 | |||
| dacf800363 | |||
| 8551193dd2 | |||
| 8ffab823ca | |||
| 86238b157c | |||
| 9cef7c614b | |||
| 01bbcad7fa | |||
| b0054a3fe1 | |||
| 37606eae74 | |||
| 5b8c873527 | |||
| 5556e410ae | |||
| 8e221806d3 | |||
| e8ace4a2f3 | |||
| c11addd4cb | |||
| 639195dc43 | |||
| 5f60c3ba91 | |||
| 2073868189 | |||
| e3a8bbe853 | |||
| bcc3ba0aee | |||
| 05e3b8b222 | |||
| 10e362af18 | |||
| 5ada5903ef | |||
| eb1cb1f297 | |||
| a138b332a3 | |||
| 7cba9d23a1 | |||
| 35b2ba75b6 | |||
|
|
0389558529 | ||
| 0c1291d3fd | |||
| d703b4dec0 | |||
| f1a93f1cf7 | |||
| 314a067795 | |||
| b72d409a5a | |||
| 10adafe703 | |||
| 9bc0491caa | |||
| 531e37fbe3 | |||
| f2055e0d10 | |||
| 8ba687edc1 | |||
| 3adbcfab59 | |||
| 69fb898087 | |||
| 3a2266d44f | |||
| 6c57ca5b72 | |||
| 9535108bb7 | |||
| b994e4698c | |||
| b83ccc7bfe | |||
| 2e90a3b7a1 | |||
| 1ec22067ff | |||
| 2c45bcf6ad | |||
| 3ac742cc45 | |||
| a3d3b15507 | |||
| bac1d0f3f9 | |||
| 16732a903c | |||
| 3d5fd504a9 | |||
| cbaa111fbd | |||
| 41001a9122 | |||
| a5eebb6030 | |||
| 07a4bd3a96 | |||
| 015eb32fcf | |||
| 9fecf0ec96 | |||
| 74e9eb2c62 | |||
| 34d6f22b61 | |||
| 4123f8ccac | |||
| 4cd9e462d8 | |||
| dfc4b5cf94 | |||
| a5da4f286f | |||
| cc67ca420c | |||
| 2195c7a850 | |||
| a50f970eda | |||
| 12ec2b44b0 | |||
| 574eeb0b07 | |||
| da8ae20b55 | |||
| e3619d6c94 | |||
| 351584ecb4 | |||
| 5d5abbc1a8 | |||
| d3328bc705 | |||
| b748d26d4f | |||
| 218b7dc4ca | |||
| a90a9c3a8e | |||
| 8c9f699269 | |||
| c4f6dae54b | |||
| 580b903cf5 | |||
| 785af695df | |||
| a1b70baa78 | |||
| bee8a21990 | |||
| e8d4d4e861 | |||
| 809b60e3ce | |||
| 5a2da13189 | |||
| 5bcd222dc1 | |||
| 225da437c5 | |||
| 96b410a358 | |||
| 90dd724794 | |||
| d7cb5b90f4 | |||
| c429e7a201 | |||
| 500c7050c3 | |||
| d922e44515 | |||
| 60c0c5e888 | |||
| bf465d56fa | |||
| caafd3e3c1 | |||
| d207826769 | |||
| 903088cf12 | |||
| c7a26746e1 | |||
| fbd32d90f5 | |||
| e0be13c2cb | |||
| effb6e6397 | |||
| 252fcce589 | |||
| c49948ad7b | |||
| 54df643d80 | |||
| c73cb37278 | |||
| 7730cbef59 | |||
| bd5a2e3ec5 | |||
| b5a0dee3e8 | |||
| 220cea894b | |||
| c097919e0b | |||
| 3303a3f2eb | |||
| a608ed5b9f | |||
| c2c8e002b9 | |||
| c88df9b954 | |||
| b63dafb8a6 | |||
| bf736f6af0 | |||
| 44ac35d6e2 | |||
| 1a0064894d | |||
| 9ded78a148 | |||
| 494131ece5 | |||
| c8a6e6b420 | |||
| 35cfaf6bac | |||
| ee9b48c5b1 | |||
| 0f02a1944b | |||
| 78023a648c | |||
| 3081546a58 | |||
| eeeb2bd9ed | |||
| a5de016eed | |||
| 47d5758cca | |||
| 14b1bb6b0d | |||
| 75292c920c | |||
| 8ee4ea7fe1 | |||
| ee2b51bbc1 | |||
| 8d35835f89 | |||
| 75fa39fe59 | |||
| bab352d00e | |||
| 25eac3559f | |||
| 51d2c2aa7c | |||
| b0979afa53 | |||
| 9ac5b25036 | |||
| a5042bb645 | |||
| c1cb314be1 |
34
.github/workflows/docs.yaml
vendored
Normal file
|
|
@ -0,0 +1,34 @@
|
||||||
|
# by https://github.com/danth/stylix/blob/master/.github/workflows/docs.yml
|
||||||
|
name: Docs
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
name: Build
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
runs-on: nixos-latest
|
||||||
|
steps:
|
||||||
|
- name: Nix Config
|
||||||
|
run: |
|
||||||
|
mkdir -p $HOME/.config
|
||||||
|
mkdir -p $HOME/.config/nix
|
||||||
|
echo experimental-features = nix-command flakes pipe-operators >> $HOME/.config/nix/nix.conf
|
||||||
|
echo access-tokens = github.com=${{ secrets.GITHUBTOKEN }} >> $HOME/.config/nix/nix.conf
|
||||||
|
nix profile install nixpkgs#nodejs
|
||||||
|
- name: Build docs
|
||||||
|
run: nix -L build git+https://git.dashie.org/${{ forgejo.repository }}.git?rev=${{ forgejo.sha }}#docs --no-write-lock-file
|
||||||
|
- name: Prepare docs for upload
|
||||||
|
run: cp -r --dereference --no-preserve=mode,ownership result/ public/
|
||||||
|
# - name: Upload artifact
|
||||||
|
# uses: https://data.forgejo.org/forgejo/upload-artifact@v4
|
||||||
|
# with:
|
||||||
|
# path: public/
|
||||||
|
- name: Publish Page
|
||||||
|
uses: https://data.forgejo.org/actions/git-pages@v2
|
||||||
|
with:
|
||||||
|
site: https://username.pages.dashie.org/reponame/
|
||||||
|
token: ${{ forge.token }}
|
||||||
|
source: public/
|
||||||
35
.github/workflows/pr.yaml
vendored
Normal file
|
|
@ -0,0 +1,35 @@
|
||||||
|
# inspired by https://github.com/danth/stylix/blob/master/.github/workflows/docs.yml
|
||||||
|
name: PR check
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
branches: ["main"]
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
name: check
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Install Nix
|
||||||
|
uses: DeterminateSystems/nix-installer-action@main
|
||||||
|
with:
|
||||||
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
extra-conf: |
|
||||||
|
extra-experimental-features = nix-command flakes pipe-operators
|
||||||
|
- name: Set up cache
|
||||||
|
uses: DeterminateSystems/magic-nix-cache-action@main
|
||||||
|
- name: action
|
||||||
|
uses: cachix/install-nix-action@v25
|
||||||
|
with:
|
||||||
|
nix_path: nixpkgs=channel:nixos-unstable
|
||||||
|
- name: cache
|
||||||
|
uses: cachix/cachix-action@v16
|
||||||
|
with:
|
||||||
|
name: dashnix
|
||||||
|
authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
|
||||||
|
- name: Linter check
|
||||||
|
run: nix run --no-write-lock-file github:${{ github.repository }}/${{ github.sha }}#lint -- check
|
||||||
|
- name: Format check
|
||||||
|
run: nix run --no-write-lock-file github:${{ github.repository }}/${{ github.sha }}#format -- --check .
|
||||||
|
- name: Build docs
|
||||||
|
run: nix -L build github:${{ github.repository }}/${{ github.sha }}#docs --no-write-lock-file
|
||||||
29
.github/workflows/release.yaml
vendored
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
# by https://github.com/danth/stylix/blob/master/.github/workflows/docs.yml
|
||||||
|
name: Release
|
||||||
|
on:
|
||||||
|
release:
|
||||||
|
types: [created]
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
name: Release
|
||||||
|
permissions: write-all
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Install Nix
|
||||||
|
uses: DeterminateSystems/nix-installer-action@main
|
||||||
|
with:
|
||||||
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
extra-conf: |
|
||||||
|
extra-experimental-features = nix-command flakes pipe-operators
|
||||||
|
- name: Set up cache
|
||||||
|
uses: DeterminateSystems/magic-nix-cache-action@main
|
||||||
|
- name: Build ISO
|
||||||
|
run: nix build github:${{ github.repository }}/${{ github.sha }}#iso --no-write-lock-file
|
||||||
|
- name: Prepare ISO for upload
|
||||||
|
run: |
|
||||||
|
cp -r --dereference --no-preserve=mode,ownership result/iso/DashNix.iso DashNix.iso
|
||||||
|
- name: upload ISO
|
||||||
|
uses: softprops/action-gh-release@v1
|
||||||
|
with:
|
||||||
|
files: |
|
||||||
|
DashNix.iso
|
||||||
15
.gitignore
vendored
|
|
@ -1,12 +1,3 @@
|
||||||
/nvim/plugged/*
|
result/*
|
||||||
gtk-3.0/bookmarks
|
result
|
||||||
gtk-3.0/servers
|
flake.lock
|
||||||
gtk-4.0/servers
|
|
||||||
/fish/fish_variables
|
|
||||||
fish/fish_variables
|
|
||||||
fish/*.tmp.*
|
|
||||||
copyq/copyq.lock
|
|
||||||
copyq/copyq_geometry.*
|
|
||||||
copyq/copyq_tab*
|
|
||||||
nvim/lazy-lock.json
|
|
||||||
ncspot/*.cbor
|
|
||||||
|
|
|
||||||
841
LICENSE
Normal file
|
|
@ -0,0 +1,841 @@
|
||||||
|
GNU LESSER 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.
|
||||||
|
|
||||||
|
|
||||||
|
This version of the GNU Lesser General Public License incorporates
|
||||||
|
the terms and conditions of version 3 of the GNU General Public
|
||||||
|
License, supplemented by the additional permissions listed below.
|
||||||
|
|
||||||
|
0. Additional Definitions.
|
||||||
|
|
||||||
|
As used herein, "this License" refers to version 3 of the GNU Lesser
|
||||||
|
General Public License, and the "GNU GPL" refers to version 3 of the GNU
|
||||||
|
General Public License.
|
||||||
|
|
||||||
|
"The Library" refers to a covered work governed by this License,
|
||||||
|
other than an Application or a Combined Work as defined below.
|
||||||
|
|
||||||
|
An "Application" is any work that makes use of an interface provided
|
||||||
|
by the Library, but which is not otherwise based on the Library.
|
||||||
|
Defining a subclass of a class defined by the Library is deemed a mode
|
||||||
|
of using an interface provided by the Library.
|
||||||
|
|
||||||
|
A "Combined Work" is a work produced by combining or linking an
|
||||||
|
Application with the Library. The particular version of the Library
|
||||||
|
with which the Combined Work was made is also called the "Linked
|
||||||
|
Version".
|
||||||
|
|
||||||
|
The "Minimal Corresponding Source" for a Combined Work means the
|
||||||
|
Corresponding Source for the Combined Work, excluding any source code
|
||||||
|
for portions of the Combined Work that, considered in isolation, are
|
||||||
|
based on the Application, and not on the Linked Version.
|
||||||
|
|
||||||
|
The "Corresponding Application Code" for a Combined Work means the
|
||||||
|
object code and/or source code for the Application, including any data
|
||||||
|
and utility programs needed for reproducing the Combined Work from the
|
||||||
|
Application, but excluding the System Libraries of the Combined Work.
|
||||||
|
|
||||||
|
1. Exception to Section 3 of the GNU GPL.
|
||||||
|
|
||||||
|
You may convey a covered work under sections 3 and 4 of this License
|
||||||
|
without being bound by section 3 of the GNU GPL.
|
||||||
|
|
||||||
|
2. Conveying Modified Versions.
|
||||||
|
|
||||||
|
If you modify a copy of the Library, and, in your modifications, a
|
||||||
|
facility refers to a function or data to be supplied by an Application
|
||||||
|
that uses the facility (other than as an argument passed when the
|
||||||
|
facility is invoked), then you may convey a copy of the modified
|
||||||
|
version:
|
||||||
|
|
||||||
|
a) under this License, provided that you make a good faith effort to
|
||||||
|
ensure that, in the event an Application does not supply the
|
||||||
|
function or data, the facility still operates, and performs
|
||||||
|
whatever part of its purpose remains meaningful, or
|
||||||
|
|
||||||
|
b) under the GNU GPL, with none of the additional permissions of
|
||||||
|
this License applicable to that copy.
|
||||||
|
|
||||||
|
3. Object Code Incorporating Material from Library Header Files.
|
||||||
|
|
||||||
|
The object code form of an Application may incorporate material from
|
||||||
|
a header file that is part of the Library. You may convey such object
|
||||||
|
code under terms of your choice, provided that, if the incorporated
|
||||||
|
material is not limited to numerical parameters, data structure
|
||||||
|
layouts and accessors, or small macros, inline functions and templates
|
||||||
|
(ten or fewer lines in length), you do both of the following:
|
||||||
|
|
||||||
|
a) Give prominent notice with each copy of the object code that the
|
||||||
|
Library is used in it and that the Library and its use are
|
||||||
|
covered by this License.
|
||||||
|
|
||||||
|
b) Accompany the object code with a copy of the GNU GPL and this license
|
||||||
|
document.
|
||||||
|
|
||||||
|
4. Combined Works.
|
||||||
|
|
||||||
|
You may convey a Combined Work under terms of your choice that,
|
||||||
|
taken together, effectively do not restrict modification of the
|
||||||
|
portions of the Library contained in the Combined Work and reverse
|
||||||
|
engineering for debugging such modifications, if you also do each of
|
||||||
|
the following:
|
||||||
|
|
||||||
|
a) Give prominent notice with each copy of the Combined Work that
|
||||||
|
the Library is used in it and that the Library and its use are
|
||||||
|
covered by this License.
|
||||||
|
|
||||||
|
b) Accompany the Combined Work with a copy of the GNU GPL and this license
|
||||||
|
document.
|
||||||
|
|
||||||
|
c) For a Combined Work that displays copyright notices during
|
||||||
|
execution, include the copyright notice for the Library among
|
||||||
|
these notices, as well as a reference directing the user to the
|
||||||
|
copies of the GNU GPL and this license document.
|
||||||
|
|
||||||
|
d) Do one of the following:
|
||||||
|
|
||||||
|
0) Convey the Minimal Corresponding Source under the terms of this
|
||||||
|
License, and the Corresponding Application Code in a form
|
||||||
|
suitable for, and under terms that permit, the user to
|
||||||
|
recombine or relink the Application with a modified version of
|
||||||
|
the Linked Version to produce a modified Combined Work, in the
|
||||||
|
manner specified by section 6 of the GNU GPL for conveying
|
||||||
|
Corresponding Source.
|
||||||
|
|
||||||
|
1) Use a suitable shared library mechanism for linking with the
|
||||||
|
Library. A suitable mechanism is one that (a) uses at run time
|
||||||
|
a copy of the Library already present on the user's computer
|
||||||
|
system, and (b) will operate properly with a modified version
|
||||||
|
of the Library that is interface-compatible with the Linked
|
||||||
|
Version.
|
||||||
|
|
||||||
|
e) Provide Installation Information, but only if you would otherwise
|
||||||
|
be required to provide such information under section 6 of the
|
||||||
|
GNU GPL, and only to the extent that such information is
|
||||||
|
necessary to install and execute a modified version of the
|
||||||
|
Combined Work produced by recombining or relinking the
|
||||||
|
Application with a modified version of the Linked Version. (If
|
||||||
|
you use option 4d0, the Installation Information must accompany
|
||||||
|
the Minimal Corresponding Source and Corresponding Application
|
||||||
|
Code. If you use option 4d1, you must provide the Installation
|
||||||
|
Information in the manner specified by section 6 of the GNU GPL
|
||||||
|
for conveying Corresponding Source.)
|
||||||
|
|
||||||
|
5. Combined Libraries.
|
||||||
|
|
||||||
|
You may place library facilities that are a work based on the
|
||||||
|
Library side by side in a single library together with other library
|
||||||
|
facilities that are not Applications and are not covered by this
|
||||||
|
License, and convey such a combined library under terms of your
|
||||||
|
choice, if you do both of the following:
|
||||||
|
|
||||||
|
a) Accompany the combined library with a copy of the same work based
|
||||||
|
on the Library, uncombined with any other library facilities,
|
||||||
|
conveyed under the terms of this License.
|
||||||
|
|
||||||
|
b) Give prominent notice with the combined library that part of it
|
||||||
|
is a work based on the Library, and explaining where to find the
|
||||||
|
accompanying uncombined form of the same work.
|
||||||
|
|
||||||
|
6. Revised Versions of the GNU Lesser General Public License.
|
||||||
|
|
||||||
|
The Free Software Foundation may publish revised and/or new versions
|
||||||
|
of the GNU Lesser 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
|
||||||
|
Library as you received it specifies that a certain numbered version
|
||||||
|
of the GNU Lesser General Public License "or any later version"
|
||||||
|
applies to it, you have the option of following the terms and
|
||||||
|
conditions either of that published version or of any later version
|
||||||
|
published by the Free Software Foundation. If the Library as you
|
||||||
|
received it does not specify a version number of the GNU Lesser
|
||||||
|
General Public License, you may choose any version of the GNU Lesser
|
||||||
|
General Public License ever published by the Free Software Foundation.
|
||||||
|
|
||||||
|
If the Library as you received it specifies that a proxy can decide
|
||||||
|
whether future versions of the GNU Lesser General Public License shall
|
||||||
|
apply, that proxy's public statement of acceptance of any version is
|
||||||
|
permanent authorization for you to choose that version for the
|
||||||
|
Library.
|
||||||
|
|
||||||
|
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>.
|
||||||
|
|
||||||
12
README.md
|
|
@ -1,12 +0,0 @@
|
||||||
```
|
|
||||||
_____ _ _____ _
|
|
||||||
| __ \ | | | __ \ | |
|
|
||||||
| | | | __ _ ___| |__ | | | | ___ | |_ ___
|
|
||||||
| | | |/ _` / __| '_ \| | | |/ _ \| __/ __|
|
|
||||||
| |__| | (_| \__ \ | | | |__| | (_) | |_\__ \
|
|
||||||
|_____/ \__,_|___/_| |_|_____/ \___/ \__|___/
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
My personal configuration for NixOS/home-manager.
|
|
||||||
While not intended to be used by someone else, feel free to do so anyway or use it as a template for your configuration if you wish to.
|
|
||||||
1
README.md
Symbolic link
|
|
@ -0,0 +1 @@
|
||||||
|
docs/src/README.md
|
||||||
228
assets/logo.svg
Normal file
|
|
@ -0,0 +1,228 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
width="38.203144mm"
|
||||||
|
height="64.726036mm"
|
||||||
|
viewBox="0 0 38.203144 64.726037"
|
||||||
|
version="1.1"
|
||||||
|
id="svg1"
|
||||||
|
xml:space="preserve"
|
||||||
|
sodipodi:docname="logo.svg"
|
||||||
|
inkscape:export-filename="logo.svg"
|
||||||
|
inkscape:export-xdpi="96"
|
||||||
|
inkscape:export-ydpi="96"
|
||||||
|
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
|
||||||
|
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"><sodipodi:namedview
|
||||||
|
id="namedview1"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#000000"
|
||||||
|
borderopacity="0.25"
|
||||||
|
inkscape:showpageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:deskcolor="#d1d1d1"
|
||||||
|
inkscape:document-units="mm"
|
||||||
|
inkscape:zoom="1.9527497"
|
||||||
|
inkscape:cx="140.82706"
|
||||||
|
inkscape:cy="187.42801"
|
||||||
|
inkscape:window-width="1340"
|
||||||
|
inkscape:window-height="764"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg1" /><defs
|
||||||
|
id="defs1"><linearGradient
|
||||||
|
id="linearGradient106"><stop
|
||||||
|
style="stop-color:#28b3fc;stop-opacity:1;"
|
||||||
|
offset="0"
|
||||||
|
id="stop106" /><stop
|
||||||
|
style="stop-color:#28b3fc;stop-opacity:1;"
|
||||||
|
offset="0.23456791"
|
||||||
|
id="stop109" /><stop
|
||||||
|
style="stop-color:#f8f641;stop-opacity:1;"
|
||||||
|
offset="0.4526749"
|
||||||
|
id="stop108" /><stop
|
||||||
|
style="stop-color:#f8f641;stop-opacity:1;"
|
||||||
|
offset="0.59362137"
|
||||||
|
id="stop110" /><stop
|
||||||
|
style="stop-color:#ff0d01;stop-opacity:1;"
|
||||||
|
offset="0.66358024"
|
||||||
|
id="stop111" /><stop
|
||||||
|
style="stop-color:#ff0d01;stop-opacity:1;"
|
||||||
|
offset="1"
|
||||||
|
id="stop107" /></linearGradient><linearGradient
|
||||||
|
id="swatch2"><stop
|
||||||
|
style="stop-color:#000000;stop-opacity:1;"
|
||||||
|
offset="0"
|
||||||
|
id="stop2" /></linearGradient><linearGradient
|
||||||
|
xlink:href="#linearGradient106"
|
||||||
|
id="linearGradient107"
|
||||||
|
x1="278.05182"
|
||||||
|
y1="-843.59747"
|
||||||
|
x2="529.8988"
|
||||||
|
y2="-736.69476"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
spreadMethod="pad" /><linearGradient
|
||||||
|
xlink:href="#linearGradient106"
|
||||||
|
id="linearGradient111"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x1="278.05182"
|
||||||
|
y1="-843.59747"
|
||||||
|
x2="529.8988"
|
||||||
|
y2="-736.69476"
|
||||||
|
spreadMethod="pad" /><linearGradient
|
||||||
|
xlink:href="#linearGradient106"
|
||||||
|
id="linearGradient112"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x1="278.05182"
|
||||||
|
y1="-843.59747"
|
||||||
|
x2="529.8988"
|
||||||
|
y2="-736.69476"
|
||||||
|
spreadMethod="pad" /><linearGradient
|
||||||
|
xlink:href="#linearGradient106"
|
||||||
|
id="linearGradient113"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x1="278.05182"
|
||||||
|
y1="-843.59747"
|
||||||
|
x2="529.8988"
|
||||||
|
y2="-736.69476"
|
||||||
|
spreadMethod="pad" /></defs><g
|
||||||
|
id="layer1"
|
||||||
|
transform="matrix(0.45379,0,0,0.45379,-29.224699,-23.939314)"><g
|
||||||
|
id="g82"
|
||||||
|
transform="matrix(0.16779066,0,0,0.16779066,64.401373,52.777012)"
|
||||||
|
style="fill:#28b3fc;fill-opacity:1"><g
|
||||||
|
id="layer3-7"
|
||||||
|
style="display:inline;fill:#28b3fc;fill-opacity:1"
|
||||||
|
transform="translate(-141.35649,1425.3526)"><g
|
||||||
|
id="g113"><g
|
||||||
|
id="layer1-8"
|
||||||
|
style="display:inline;fill:#28b3fc;fill-opacity:1"
|
||||||
|
transform="translate(-14.982227,-492.1621)"><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:#28b3fc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;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.40365,-710.2521 122.19683,211.6751 -56.15706,0.5268 -32.6236,-56.8692 -32.85645,56.5653 -27.90237,-0.011 -14.29086,-24.6896 46.81047,-80.4902 -33.22946,-57.8256 z"
|
||||||
|
id="path4861" /><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:#28b3fc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;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 353.50926,-797.4433 -122.21756,211.6631 -28.53477,-48.37 32.93839,-56.6875 -65.41521,-0.1719 -13.9414,-24.1698 14.23637,-24.721 93.11177,0.2939 33.46371,-57.6903 z"
|
||||||
|
id="use4863" /><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:#28b3fc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;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 362.88537,-628.243 244.41439,0.012 -27.62229,48.8968 -65.56199,-0.1817 32.55876,56.7371 -13.96098,24.1585 -28.52722,0.032 -46.3013,-80.7841 -66.69317,-0.1353 z"
|
||||||
|
id="use4865" /><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:#28b3fc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;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 505.14318,-720.9886 -122.19683,-211.6751 56.15706,-0.5268 32.6236,56.8692 32.85645,-56.5653 27.90237,0.011 14.29086,24.6896 -46.81047,80.4902 33.22946,57.8256 z"
|
||||||
|
id="use4867" /><path
|
||||||
|
id="path4873"
|
||||||
|
d="m 309.40365,-710.2521 122.19683,211.6751 -56.15706,0.5268 -32.6236,-56.8692 -32.85645,56.5653 -27.90237,-0.011 -14.29086,-24.6896 46.81047,-80.4902 -33.22946,-57.8256 z"
|
||||||
|
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:#28b3fc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;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" /><path
|
||||||
|
id="use4875"
|
||||||
|
d="m 451.3364,-803.53264 -244.4144,-0.012 27.62229,-48.89685 65.56199,0.18175 -32.55875,-56.73717 13.96097,-24.15851 28.52722,-0.0315 46.3013,80.78414 66.69317,0.13524 z"
|
||||||
|
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:#28b3fc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;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" /><path
|
||||||
|
id="use4877"
|
||||||
|
d="m 460.87178,-633.8425 122.21757,-211.66304 28.53477,48.37003 -32.93839,56.68751 65.4152,0.1718 13.9414,24.1698 -14.23636,24.7211 -93.11177,-0.294 -33.46371,57.6904 z"
|
||||||
|
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:#28b3fc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;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" /><g
|
||||||
|
id="layer2"
|
||||||
|
style="display:none;fill:#28b3fc;fill-opacity:1"
|
||||||
|
transform="translate(72.039038,-1799.4476)"><path
|
||||||
|
d="M 460.60629,594.72881 209.74183,594.7288 84.309616,377.4738 209.74185,160.21882 l 250.86446,1e-5 125.43222,217.255 z"
|
||||||
|
id="path6032"
|
||||||
|
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.236;fill:#28b3fc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" /><path
|
||||||
|
transform="translate(0,-308.26772)"
|
||||||
|
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#28b3fc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
|
||||||
|
id="path5875"
|
||||||
|
d="M 385.59154,773.06721 H 284.75659 l -50.41747,-87.32564 50.41748,-87.32563 100.83495,10e-6 50.41748,87.32563 z" /><path
|
||||||
|
transform="translate(0,-308.26772)"
|
||||||
|
id="path5851"
|
||||||
|
d="m 1216.5591,938.53395 123.0545,228.14035 -42.6807,-1.2616 -43.4823,-79.7725 -39.6506,80.3267 -32.6875,-19.7984 53.4737,-100.2848 -37.1157,-73.88955 z"
|
||||||
|
style="fill:#28b3fc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><rect
|
||||||
|
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.415;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#28b3fc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
id="rect5884"
|
||||||
|
width="48.834862"
|
||||||
|
height="226.22897"
|
||||||
|
x="-34.74221"
|
||||||
|
y="446.17056"
|
||||||
|
transform="rotate(-30)" /><path
|
||||||
|
transform="translate(0,-308.26772)"
|
||||||
|
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.509;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#28b3fc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
id="path3428"
|
||||||
|
d="m 251.98568,878.63831 -14.02447,24.29109 h -28.04894 l -14.02447,-24.29109 14.02447,-24.2911 h 28.04894 z" /><use
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
xlink:href="#rect5884"
|
||||||
|
id="use4252"
|
||||||
|
transform="rotate(60,268.29786,489.4515)"
|
||||||
|
width="100%"
|
||||||
|
height="100%"
|
||||||
|
style="fill:#28b3fc;fill-opacity:1" /><rect
|
||||||
|
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:#28b3fc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
id="rect4254"
|
||||||
|
width="5.3947482"
|
||||||
|
height="115.12564"
|
||||||
|
x="545.71014"
|
||||||
|
y="467.07007"
|
||||||
|
transform="rotate(30,575.23539,-154.13386)" /></g></g><g
|
||||||
|
id="layer3"
|
||||||
|
style="display:inline;opacity:1;fill:#28b3fc;fill-opacity:1"
|
||||||
|
transform="translate(-14.982227,-492.1621)"><path
|
||||||
|
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:#28b3fc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;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"
|
||||||
|
xlink:href="#path3336-6"
|
||||||
|
y="0"
|
||||||
|
x="0"
|
||||||
|
style="fill:#28b3fc;fill-opacity:1" /><use
|
||||||
|
height="100%"
|
||||||
|
width="100%"
|
||||||
|
transform="rotate(-60,407.31177,-715.70016)"
|
||||||
|
id="use3445-0"
|
||||||
|
xlink:href="#path3336-6"
|
||||||
|
y="0"
|
||||||
|
x="0"
|
||||||
|
style="fill:#28b3fc;fill-opacity:1" /><use
|
||||||
|
height="100%"
|
||||||
|
width="100%"
|
||||||
|
transform="rotate(180,407.41868,-715.7565)"
|
||||||
|
id="use3449-5"
|
||||||
|
xlink:href="#path3336-6"
|
||||||
|
y="0"
|
||||||
|
x="0"
|
||||||
|
style="fill:#28b3fc;fill-opacity:1" /><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:#28b3fc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;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" /><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;fill:#28b3fc;fill-opacity:1" /><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;fill:#28b3fc;fill-opacity:1" /></g><g
|
||||||
|
id="g104"
|
||||||
|
style="fill:url(#linearGradient107);stroke:none"
|
||||||
|
transform="rotate(-13.062247,340.02897,-863.93232)"><path
|
||||||
|
id="use3449-5-0-0"
|
||||||
|
d="m 331.77633,-1001.5212 94.91305,225.23301 -55.78631,-6.46377 -25.29508,-60.48604 -39.63845,52.03815 -27.6842,-3.48227 -11.10824,-26.27568 56.46054,-74.04107 -25.77721,-61.5105 z"
|
||||||
|
style="fill:url(#linearGradient111);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><path
|
||||||
|
id="use3449-5-0-0-6"
|
||||||
|
d="m 457.02748,-744.14459 -70.00051,-234.1759 54.76023,12.45846 18.60597,62.86668 45.03324,-47.44663 27.14534,6.4555 8.2017,27.32283 -64.13603,67.50143 18.97452,63.93729 z"
|
||||||
|
style="display:inline;fill:url(#linearGradient112);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><path
|
||||||
|
id="use3449-5-0-0-4"
|
||||||
|
d="m 292.53533,-578.77105 178.97491,-166.45237 -53.52586,-16.99636 -47.88683,44.78006 -14.79485,-63.7204 -26.67512,-8.18413 -20.91172,19.40373 21.10703,90.68829 -48.74692,45.51646 z"
|
||||||
|
style="display:inline;fill:url(#linearGradient113);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /></g></g></g></g></g></svg>
|
||||||
|
After Width: | Height: | Size: 18 KiB |
BIN
assets/logo2.png
Normal file
|
After Width: | Height: | Size: 38 KiB |
238
assets/logo2.svg
Normal file
|
|
@ -0,0 +1,238 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
width="38.753597mm"
|
||||||
|
height="65.022255mm"
|
||||||
|
viewBox="0 0 38.753597 65.022256"
|
||||||
|
version="1.1"
|
||||||
|
id="svg1"
|
||||||
|
xml:space="preserve"
|
||||||
|
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/"><title
|
||||||
|
id="title39">DashNix</title><defs
|
||||||
|
id="defs1"><linearGradient
|
||||||
|
id="linearGradient106"><stop
|
||||||
|
style="stop-color:#28b3fc;stop-opacity:1;"
|
||||||
|
offset="0"
|
||||||
|
id="stop106" /><stop
|
||||||
|
style="stop-color:#28b3fc;stop-opacity:1;"
|
||||||
|
offset="0.23456791"
|
||||||
|
id="stop109" /><stop
|
||||||
|
style="stop-color:#f8f641;stop-opacity:1;"
|
||||||
|
offset="0.4526749"
|
||||||
|
id="stop108" /><stop
|
||||||
|
style="stop-color:#f8f641;stop-opacity:1;"
|
||||||
|
offset="0.59362137"
|
||||||
|
id="stop110" /><stop
|
||||||
|
style="stop-color:#ff0d01;stop-opacity:1;"
|
||||||
|
offset="0.66358024"
|
||||||
|
id="stop111" /><stop
|
||||||
|
style="stop-color:#ff0d01;stop-opacity:1;"
|
||||||
|
offset="1"
|
||||||
|
id="stop107" /></linearGradient><linearGradient
|
||||||
|
xlink:href="#linearGradient106"
|
||||||
|
id="linearGradient107"
|
||||||
|
x1="278.05182"
|
||||||
|
y1="-843.59747"
|
||||||
|
x2="529.8988"
|
||||||
|
y2="-736.69476"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
spreadMethod="pad" /></defs><g
|
||||||
|
id="layer1"
|
||||||
|
transform="matrix(0.45379,0,0,0.45379,-29.020506,-23.643099)"><g
|
||||||
|
id="g82"
|
||||||
|
transform="matrix(0.16779066,0,0,0.16779066,64.401373,52.777012)"
|
||||||
|
style="fill:#28b3fc;fill-opacity:1"><g
|
||||||
|
id="layer3-7"
|
||||||
|
style="display:inline;fill:#28b3fc;fill-opacity:1"
|
||||||
|
transform="translate(-141.35649,1425.3526)"><g
|
||||||
|
id="g113"><g
|
||||||
|
id="layer1-8"
|
||||||
|
style="display:inline;fill:#28b3fc;fill-opacity:1"
|
||||||
|
transform="translate(-14.982227,-492.1621)"><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:#28b3fc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;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.40365,-710.2521 122.19683,211.6751 -56.15706,0.5268 -32.6236,-56.8692 -32.85645,56.5653 -27.90237,-0.011 -14.29086,-24.6896 46.81047,-80.4902 -33.22946,-57.8256 z"
|
||||||
|
id="path4861" /><path
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1"
|
||||||
|
d="m 353.50926,-797.4433 -122.21756,211.6631 -28.53477,-48.37 32.93839,-56.6875 -65.41521,-0.1719 -13.9414,-24.1698 14.23637,-24.721 93.11177,0.2939 33.46371,-57.6903 z"
|
||||||
|
id="use4863" /><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:#28b3fc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;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 362.88537,-628.243 244.41439,0.012 -27.62229,48.8968 -65.56199,-0.1817 32.55876,56.7371 -13.96098,24.1585 -28.52722,0.032 -46.3013,-80.7841 -66.69317,-0.1353 z"
|
||||||
|
id="use4865" /><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:#28b3fc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;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 505.14318,-720.9886 -122.19683,-211.6751 56.15706,-0.5268 32.6236,56.8692 32.85645,-56.5653 27.90237,0.011 14.29086,24.6896 -46.81047,80.4902 33.22946,57.8256 z"
|
||||||
|
id="use4867" /><path
|
||||||
|
id="path4873"
|
||||||
|
d="m 309.40365,-710.2521 122.19683,211.6751 -56.15706,0.5268 -32.6236,-56.8692 -32.85645,56.5653 -27.90237,-0.011 -14.29086,-24.6896 46.81047,-80.4902 -33.22946,-57.8256 z"
|
||||||
|
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:#28b3fc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;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" /><path
|
||||||
|
id="use4875"
|
||||||
|
d="m 451.3364,-803.53264 -244.4144,-0.012 27.62229,-48.89685 65.56199,0.18175 -32.55875,-56.73717 13.96097,-24.15851 28.52722,-0.0315 46.3013,80.78414 66.69317,0.13524 z"
|
||||||
|
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:#28b3fc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;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" /><path
|
||||||
|
id="use4877"
|
||||||
|
d="m 460.87178,-633.8425 122.21757,-211.66304 28.53477,48.37003 -32.93839,56.68751 65.4152,0.1718 13.9414,24.1698 -14.23636,24.7211 -93.11177,-0.294 -33.46371,57.6904 z"
|
||||||
|
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:#28b3fc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;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" /><g
|
||||||
|
id="layer2"
|
||||||
|
style="display:none;fill:#f7f5f6;fill-opacity:1"
|
||||||
|
transform="translate(72.039038,-1799.4476)"><path
|
||||||
|
d="M 460.60629,594.72881 209.74183,594.7288 84.309616,377.4738 209.74185,160.21882 l 250.86446,1e-5 125.43222,217.255 z"
|
||||||
|
id="path6032"
|
||||||
|
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.236;fill:#f7f5f6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" /><path
|
||||||
|
transform="translate(0,-308.26772)"
|
||||||
|
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#f7f5f6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
|
||||||
|
id="path5875"
|
||||||
|
d="M 385.59154,773.06721 H 284.75659 l -50.41747,-87.32564 50.41748,-87.32563 100.83495,10e-6 50.41748,87.32563 z" /><path
|
||||||
|
transform="translate(0,-308.26772)"
|
||||||
|
id="path5851"
|
||||||
|
d="m 1216.5591,938.53395 123.0545,228.14035 -42.6807,-1.2616 -43.4823,-79.7725 -39.6506,80.3267 -32.6875,-19.7984 53.4737,-100.2848 -37.1157,-73.88955 z"
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><rect
|
||||||
|
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.415;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#f7f5f6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
id="rect5884"
|
||||||
|
width="48.834862"
|
||||||
|
height="226.22897"
|
||||||
|
x="-34.74221"
|
||||||
|
y="446.17056"
|
||||||
|
transform="rotate(-30)" /><path
|
||||||
|
transform="translate(0,-308.26772)"
|
||||||
|
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.509;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#f7f5f6;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
id="path3428"
|
||||||
|
d="m 251.98568,878.63831 -14.02447,24.29109 h -28.04894 l -14.02447,-24.29109 14.02447,-24.2911 h 28.04894 z" /><use
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
xlink:href="#rect5884"
|
||||||
|
id="use4252"
|
||||||
|
transform="rotate(60,268.29786,489.4515)"
|
||||||
|
width="100%"
|
||||||
|
height="100%"
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1" /><rect
|
||||||
|
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:#f7f5f6;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
id="rect4254"
|
||||||
|
width="5.3947482"
|
||||||
|
height="115.12564"
|
||||||
|
x="545.71014"
|
||||||
|
y="467.07007"
|
||||||
|
transform="rotate(30,575.23539,-154.13386)" /></g><path
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1;stroke-width:0.362108"
|
||||||
|
d="m 17.647006,93.08153 c -2.137791,-3.629135 -3.886892,-6.781154 -3.886892,-7.004491 0,-0.223334 2.036859,-3.907974 4.526353,-8.18809 2.489494,-4.280113 4.526353,-7.872269 4.526353,-7.982568 0,-0.110298 -4.202399,-0.200542 -9.338664,-0.200542 H 4.1354931 L 2.2488007,66.408408 C 1.2111198,64.594822 0.36210825,62.964051 0.36210825,62.784474 c 0,-0.179578 0.83310065,-1.791759 1.85133475,-3.582627 l 1.8513347,-3.256122 13.4477393,-0.0031 13.447739,-0.0031 4.75902,-8.234844 4.75902,-8.234843 8.039166,-0.09755 8.039169,-0.09754 -0.718362,1.18387 C 55.443173,41.109708 47.744447,54.433923 38.729994,70.067947 29.715538,85.701971 22.158685,98.760409 21.936986,99.086701 21.60128,99.580783 20.884148,98.576936 17.647006,93.08153 Z"
|
||||||
|
id="path27"
|
||||||
|
transform="matrix(3.4748797,0,0,3.4748797,156.33872,-933.32664)" /><path
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1;stroke-width:0.181054"
|
||||||
|
d="m 20.413065,97.739351 c -2.448138,-4.090679 -6.658726,-11.27144 -6.752434,-11.515638 -0.05373,-0.14001 2.024274,-3.903593 4.617779,-8.363519 2.593506,-4.459926 4.715464,-8.13954 4.715464,-8.17692 0,-0.03738 -4.257035,-0.07107 -9.460078,-0.07486 L 4.0737178,69.601519 2.1145346,66.168465 0.15535114,62.73541 2.2025635,59.176688 l 2.0472121,-3.558721 13.3811224,0.07335 13.381123,0.07335 4.807164,-8.283226 4.807163,-8.283227 h 7.93127 c 4.362198,0 7.931269,0.04091 7.931269,0.0909 0,0.112152 -34.58204,60.050535 -34.768044,60.260772 -0.07356,0.08315 -0.662065,-0.731596 -1.307778,-1.810541 z"
|
||||||
|
id="path28"
|
||||||
|
transform="matrix(3.4748797,0,0,3.4748797,156.33872,-933.32664)" /><path
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1;stroke-width:0.181054"
|
||||||
|
d="m 20.413065,97.739351 c -2.448138,-4.090679 -6.658726,-11.27144 -6.752434,-11.515638 -0.05373,-0.14001 2.024274,-3.903593 4.617779,-8.363519 2.593506,-4.459926 4.715464,-8.13954 4.715464,-8.17692 0,-0.03738 -4.257035,-0.07107 -9.460078,-0.07486 L 4.0737178,69.601519 2.1145346,66.168465 0.15535114,62.73541 2.2025635,59.176688 l 2.0472121,-3.558721 13.3811224,0.07335 13.381123,0.07335 4.807164,-8.283226 4.807163,-8.283227 h 7.93127 c 4.362198,0 7.931269,0.04091 7.931269,0.0909 0,0.112152 -34.58204,60.050535 -34.768044,60.260772 -0.07356,0.08315 -0.662065,-0.731596 -1.307778,-1.810541 z"
|
||||||
|
id="path29"
|
||||||
|
transform="matrix(3.4748797,0,0,3.4748797,156.33872,-933.32664)" /><path
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1;stroke-width:0.181054"
|
||||||
|
d="m 20.413065,97.739351 c -2.448138,-4.090679 -6.658726,-11.27144 -6.752434,-11.515638 -0.05373,-0.14001 2.024274,-3.903593 4.617779,-8.363519 2.593506,-4.459926 4.715464,-8.13954 4.715464,-8.17692 0,-0.03738 -4.257035,-0.07107 -9.460078,-0.07486 L 4.0737178,69.601519 2.1145346,66.168465 0.15535114,62.73541 2.2025635,59.176688 l 2.0472121,-3.558721 13.3811224,0.07335 13.381123,0.07335 4.807164,-8.283226 4.807163,-8.283227 h 7.93127 c 4.362198,0 7.931269,0.04091 7.931269,0.0909 0,0.112152 -34.58204,60.050535 -34.768044,60.260772 -0.07356,0.08315 -0.662065,-0.731596 -1.307778,-1.810541 z"
|
||||||
|
id="path30"
|
||||||
|
transform="matrix(3.4748797,0,0,3.4748797,156.33872,-933.32664)" /><path
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1;stroke-width:0.181054"
|
||||||
|
d="m 20.413065,97.739351 c -2.448138,-4.090679 -6.658726,-11.27144 -6.752434,-11.515638 -0.05373,-0.14001 2.024274,-3.903593 4.617779,-8.363519 2.593506,-4.459926 4.715464,-8.13954 4.715464,-8.17692 0,-0.03738 -4.257035,-0.07107 -9.460078,-0.07486 L 4.0737178,69.601519 2.1145346,66.168465 0.15535114,62.73541 2.2025635,59.176688 l 2.0472121,-3.558721 13.3811224,0.07335 13.381123,0.07335 4.807164,-8.283226 4.807163,-8.283227 h 7.93127 c 4.362198,0 7.931269,0.04091 7.931269,0.0909 0,0.112152 -34.58204,60.050535 -34.768044,60.260772 -0.07356,0.08315 -0.662065,-0.731596 -1.307778,-1.810541 z"
|
||||||
|
id="path31"
|
||||||
|
transform="matrix(3.4748797,0,0,3.4748797,156.33872,-933.32664)" /><path
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1;stroke-width:0.181054"
|
||||||
|
d="m 20.413065,97.739351 c -2.448138,-4.090679 -6.658726,-11.27144 -6.752434,-11.515638 -0.05373,-0.14001 2.024274,-3.903593 4.617779,-8.363519 2.593506,-4.459926 4.715464,-8.13954 4.715464,-8.17692 0,-0.03738 -4.257035,-0.07107 -9.460078,-0.07486 L 4.0737178,69.601519 2.1145346,66.168465 0.15535114,62.73541 2.2025635,59.176688 l 2.0472121,-3.558721 13.3811224,0.07335 13.381123,0.07335 4.807164,-8.283226 4.807163,-8.283227 h 7.93127 c 4.362198,0 7.931269,0.04091 7.931269,0.0909 0,0.112152 -34.58204,60.050535 -34.768044,60.260772 -0.07356,0.08315 -0.662065,-0.731596 -1.307778,-1.810541 z"
|
||||||
|
id="path32"
|
||||||
|
transform="matrix(3.4748797,0,0,3.4748797,156.33872,-933.32664)" /><path
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1;stroke-width:0.181054"
|
||||||
|
d="m 20.413065,97.739351 c -2.448138,-4.090679 -6.658726,-11.27144 -6.752434,-11.515638 -0.05373,-0.14001 2.024274,-3.903593 4.617779,-8.363519 2.593506,-4.459926 4.715464,-8.13954 4.715464,-8.17692 0,-0.03738 -4.257035,-0.07107 -9.460078,-0.07486 L 4.0737178,69.601519 2.1145346,66.168465 0.15535114,62.73541 2.2025635,59.176688 l 2.0472121,-3.558721 13.3811224,0.07335 13.381123,0.07335 4.807164,-8.283226 4.807163,-8.283227 h 7.93127 c 4.362198,0 7.931269,0.04091 7.931269,0.0909 0,0.112152 -34.58204,60.050535 -34.768044,60.260772 -0.07356,0.08315 -0.662065,-0.731596 -1.307778,-1.810541 z"
|
||||||
|
id="path33"
|
||||||
|
transform="matrix(3.4748797,0,0,3.4748797,156.33872,-933.32664)" /><path
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1;stroke-width:0.181054"
|
||||||
|
d="m 20.413065,97.739351 c -2.448138,-4.090679 -6.658726,-11.27144 -6.752434,-11.515638 -0.05373,-0.14001 2.024274,-3.903593 4.617779,-8.363519 2.593506,-4.459926 4.715464,-8.13954 4.715464,-8.17692 0,-0.03738 -4.257035,-0.07107 -9.460078,-0.07486 L 4.0737178,69.601519 2.1145346,66.168465 0.15535114,62.73541 2.2025635,59.176688 l 2.0472121,-3.558721 13.3811224,0.07335 13.381123,0.07335 4.807164,-8.283226 4.807163,-8.283227 h 7.93127 c 4.362198,0 7.931269,0.04091 7.931269,0.0909 0,0.112152 -34.58204,60.050535 -34.768044,60.260772 -0.07356,0.08315 -0.662065,-0.731596 -1.307778,-1.810541 z"
|
||||||
|
id="path34"
|
||||||
|
transform="matrix(3.4748797,0,0,3.4748797,156.33872,-933.32664)" /><path
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1;stroke-width:0.181054"
|
||||||
|
d="m 20.413065,97.739351 c -2.448138,-4.090679 -6.658726,-11.27144 -6.752434,-11.515638 -0.05373,-0.14001 2.024274,-3.903593 4.617779,-8.363519 2.593506,-4.459926 4.715464,-8.13954 4.715464,-8.17692 0,-0.03738 -4.257035,-0.07107 -9.460078,-0.07486 L 4.0737178,69.601519 2.1145346,66.168465 0.15535114,62.73541 2.2025635,59.176688 l 2.0472121,-3.558721 13.3811224,0.07335 13.381123,0.07335 4.807164,-8.283226 4.807163,-8.283227 h 7.93127 c 4.362198,0 7.931269,0.04091 7.931269,0.0909 0,0.112152 -34.58204,60.050535 -34.768044,60.260772 -0.07356,0.08315 -0.662065,-0.731596 -1.307778,-1.810541 z"
|
||||||
|
id="path35"
|
||||||
|
transform="matrix(3.4748797,0,0,3.4748797,156.33872,-933.32664)" /></g><g
|
||||||
|
id="layer3"
|
||||||
|
style="display:inline;opacity:1;fill:#28b3fc;fill-opacity:1"
|
||||||
|
transform="translate(-14.982227,-492.1621)"><path
|
||||||
|
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:#28b3fc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;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"
|
||||||
|
xlink:href="#path3336-6"
|
||||||
|
y="0"
|
||||||
|
x="0"
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1" /><use
|
||||||
|
height="100%"
|
||||||
|
width="100%"
|
||||||
|
transform="rotate(-60,407.31177,-715.70016)"
|
||||||
|
id="use3445-0"
|
||||||
|
xlink:href="#path3336-6"
|
||||||
|
y="0"
|
||||||
|
x="0"
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1" /><use
|
||||||
|
height="100%"
|
||||||
|
width="100%"
|
||||||
|
transform="rotate(180,407.41868,-715.7565)"
|
||||||
|
id="use3449-5"
|
||||||
|
xlink:href="#path3336-6"
|
||||||
|
y="0"
|
||||||
|
x="0"
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1" /><path
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1;stroke:#28b3fc;stroke-width:7.88004;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
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" /><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;fill:#28b3fc;fill-opacity:1;stroke:#28b3fc;stroke-width:7.88004;stroke-dasharray:none;stroke-opacity:1" /><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;fill:#28b3fc;fill-opacity:1;stroke:#28b3fc;stroke-width:7.88004;stroke-dasharray:none;stroke-opacity:1" /></g><g
|
||||||
|
id="g104"
|
||||||
|
style="fill:url(#linearGradient107);stroke:none"
|
||||||
|
transform="rotate(-13.062247,340.02897,-863.93232)"><path
|
||||||
|
id="use3449-5-0-0"
|
||||||
|
d="m 331.77633,-1001.5212 94.91305,225.23301 -55.78631,-6.46377 -25.29508,-60.48604 -39.63845,52.03815 -27.6842,-3.48227 -11.10824,-26.27568 56.46054,-74.04107 -25.77721,-61.5105 z"
|
||||||
|
style="fill:#28b3fc;fill-opacity:1" /><path
|
||||||
|
id="use3449-5-0-0-6"
|
||||||
|
d="m 457.16967,-744.75745 -70.00051,-234.1759 54.76023,12.45846 18.60597,62.86668 45.03324,-47.44663 27.14534,6.4555 8.2017,27.32283 -64.13603,67.50143 18.97452,63.93729 z"
|
||||||
|
style="fill:#ff0d01;fill-opacity:1" /><path
|
||||||
|
id="use3449-5-0-0-4"
|
||||||
|
d="m 277.21377,-582.32585 178.97491,-166.45237 -53.52586,-16.99636 -47.88683,44.78006 -14.79485,-63.7204 -26.67512,-8.18413 -20.91172,19.40373 21.10703,90.68829 -48.74692,45.51646 z"
|
||||||
|
style="fill:#f8f641;fill-opacity:1" /></g></g></g></g><path
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1;stroke-width:0.181054"
|
||||||
|
d="m 20.413065,97.739351 c -2.448138,-4.090679 -6.658726,-11.27144 -6.752434,-11.515638 -0.05373,-0.14001 2.024274,-3.903593 4.617779,-8.363519 2.593506,-4.459926 4.715464,-8.13954 4.715464,-8.17692 0,-0.03738 -4.257035,-0.07107 -9.460078,-0.07486 L 4.0737178,69.601519 2.1145346,66.168465 0.15535114,62.73541 2.2025635,59.176688 l 2.0472121,-3.558721 13.3811224,0.07335 13.381123,0.07335 4.807164,-8.283226 4.807163,-8.283227 h 7.93127 c 4.362198,0 7.931269,0.04091 7.931269,0.0909 0,0.112152 -34.58204,60.050535 -34.768044,60.260772 -0.07356,0.08315 -0.662065,-0.731596 -1.307778,-1.810541 z"
|
||||||
|
id="path36"
|
||||||
|
transform="matrix(0.58305237,0,0,0.58305237,64.401373,52.754168)" /><path
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1;stroke:#28b3fc;stroke-width:2.26772;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="M 21.228346,98.82575 C 20.775825,98.187139 14.573556,87.698587 14.099569,86.770393 l -0.346608,-0.67875 1.796437,-3.213914 c 0.988041,-1.767653 3.067246,-5.409743 4.620457,-8.093538 1.553211,-2.683792 2.824019,-4.931476 2.824019,-4.99485 0,-0.110336 -11.090545,-0.351953 -16.3853984,-0.356972 L 4.0737178,69.429968 2.217913,66.175832 C 1.1972204,64.386056 0.36210825,62.847854 0.36210825,62.757606 c 0,-0.09025 0.87964515,-1.70058 1.95476695,-3.578513 l 1.954767,-3.414422 13.3895698,0.06926 13.389571,0.06926 4.821268,-8.307221 4.821271,-8.307221 3.145111,-0.04488 c 1.729813,-0.02469 5.235571,0.01605 7.790576,0.09053 l 4.645463,0.135412 -3.534135,6.15584 c -4.146422,7.222338 -16.886029,29.318862 -25.000346,43.362463 -3.135747,5.427098 -5.801825,9.976251 -5.924618,10.109228 -0.183451,0.198671 -0.288115,0.150249 -0.587027,-0.271581 z"
|
||||||
|
id="path37"
|
||||||
|
transform="matrix(0.58305237,0,0,0.58305237,64.401373,52.754168)" /><path
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1;stroke:#28b3fc;stroke-width:2.26772;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 97.636535,120.63066 c -1.389583,-2.41665 -4.382703,-7.63252 -6.651376,-11.59081 l -4.12486,-7.1969 -4.45825,-0.005 c -4.928423,-0.005 -14.743895,-0.1852 -14.838725,-0.27196 -0.03322,-0.0304 -1.827632,-3.096939 -3.987593,-6.814561 l -3.9272,-6.759314 17.535793,-0.04616 c 9.644687,-0.02539 25.387006,-0.02539 34.982936,0 l 17.44715,0.04616 -1.54239,2.715812 c -0.84832,1.493697 -2.61343,4.622573 -3.92248,6.953058 l -2.38008,4.237245 -9.38708,-0.11294 c -7.6636,-0.0922 -9.37652,-0.0697 -9.32957,0.12287 0.0316,0.1297 2.12168,3.83356 4.64454,8.23081 l 4.58703,7.995 -1.97119,3.3966 -1.9712,3.39659 -4.08947,0.0486 -4.08947,0.0486 z"
|
||||||
|
id="path38"
|
||||||
|
transform="matrix(0.58305237,0,0,0.58305237,64.401373,52.754168)" /><path
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1;stroke:#28b3fc;stroke-width:2.26772;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="M 87.802229,39.150266 C 80.890113,27.177278 73.023088,13.551901 70.319951,8.8716522 L 65.405158,0.36210825 68.59656,0.24891517 c 1.755271,-0.0622562 5.350472,-0.12261799 7.989335,-0.1341373 l 4.797935,-0.0209442 4.519855,7.89261083 c 2.48592,4.3409365 4.610279,8.0162745 4.7208,8.1674195 0.162204,0.22183 1.117147,-1.300038 4.953498,-7.8942647 l 4.752557,-8.16907224 h 3.92896 3.92895 l 2.03256,3.50763344 c 1.1179,1.9291986 2.03255,3.5544662 2.03255,3.6117061 0,0.05724 -3.01666,5.2908554 -6.70369,11.6302564 l -6.703688,11.526185 4.779848,8.329337 4.77986,8.329337 -3.94792,6.877008 c -2.17135,3.782353 -3.97949,6.908583 -4.01808,6.947175 -0.0386,0.03859 -5.725543,-9.725911 -12.637661,-21.698899 z"
|
||||||
|
id="path39"
|
||||||
|
transform="matrix(0.58305237,0,0,0.58305237,64.401373,52.754168)" /></g><metadata
|
||||||
|
id="metadata39"><rdf:RDF><cc:Work
|
||||||
|
rdf:about=""><cc:license
|
||||||
|
rdf:resource="http://creativecommons.org/publicdomain/zero/1.0/" /><dc:title>DashNix</dc:title></cc:Work><cc:License
|
||||||
|
rdf:about="http://creativecommons.org/publicdomain/zero/1.0/"><cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Reproduction" /><cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Distribution" /><cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" /></cc:License></rdf:RDF></metadata></svg>
|
||||||
|
After Width: | Height: | Size: 26 KiB |
238
assets/logo3.svg
Normal file
|
|
@ -0,0 +1,238 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
width="38.854057mm"
|
||||||
|
height="65.022255mm"
|
||||||
|
viewBox="0 0 38.854057 65.022256"
|
||||||
|
version="1.1"
|
||||||
|
id="svg1"
|
||||||
|
xml:space="preserve"
|
||||||
|
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/"><title
|
||||||
|
id="title39">DashNix</title><defs
|
||||||
|
id="defs1"><linearGradient
|
||||||
|
id="linearGradient106"><stop
|
||||||
|
style="stop-color:#28b3fc;stop-opacity:1;"
|
||||||
|
offset="0"
|
||||||
|
id="stop106" /><stop
|
||||||
|
style="stop-color:#28b3fc;stop-opacity:1;"
|
||||||
|
offset="0.23456791"
|
||||||
|
id="stop109" /><stop
|
||||||
|
style="stop-color:#f8f641;stop-opacity:1;"
|
||||||
|
offset="0.4526749"
|
||||||
|
id="stop108" /><stop
|
||||||
|
style="stop-color:#f8f641;stop-opacity:1;"
|
||||||
|
offset="0.59362137"
|
||||||
|
id="stop110" /><stop
|
||||||
|
style="stop-color:#ff0d01;stop-opacity:1;"
|
||||||
|
offset="0.66358024"
|
||||||
|
id="stop111" /><stop
|
||||||
|
style="stop-color:#ff0d01;stop-opacity:1;"
|
||||||
|
offset="1"
|
||||||
|
id="stop107" /></linearGradient><linearGradient
|
||||||
|
xlink:href="#linearGradient106"
|
||||||
|
id="linearGradient107"
|
||||||
|
x1="278.05182"
|
||||||
|
y1="-843.59747"
|
||||||
|
x2="529.8988"
|
||||||
|
y2="-736.69476"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
spreadMethod="pad" /></defs><g
|
||||||
|
id="layer1"
|
||||||
|
transform="matrix(0.45379,0,0,0.45379,-28.920048,-23.643099)"><g
|
||||||
|
id="g82"
|
||||||
|
transform="matrix(0.16779066,0,0,0.16779066,64.401373,52.777012)"
|
||||||
|
style="fill:#28b3fc;fill-opacity:1"><g
|
||||||
|
id="layer3-7"
|
||||||
|
style="display:inline;fill:#28b3fc;fill-opacity:1"
|
||||||
|
transform="translate(-141.35649,1425.3526)"><g
|
||||||
|
id="g113"><g
|
||||||
|
id="layer1-8"
|
||||||
|
style="display:inline;fill:#28b3fc;fill-opacity:1"
|
||||||
|
transform="translate(-14.982227,-492.1621)"><path
|
||||||
|
style="fill:#b2dff8;fill-opacity:0;stroke:#28b3fc;stroke-width:2.26772;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 309.40365,-710.2521 122.19683,211.6751 -56.15706,0.5268 -32.6236,-56.8692 -32.85645,56.5653 -27.90237,-0.011 -14.29086,-24.6896 46.81047,-80.4902 -33.22946,-57.8256 z"
|
||||||
|
id="path4861" /><path
|
||||||
|
style="fill:#b2dff8;fill-opacity:0;stroke:#28b3fc;stroke-width:2.26772;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 353.50926,-797.4433 -122.21756,211.6631 -28.53477,-48.37 32.93839,-56.6875 -65.41521,-0.1719 -13.9414,-24.1698 14.23637,-24.721 93.11177,0.2939 33.46371,-57.6903 z"
|
||||||
|
id="use4863" /><path
|
||||||
|
style="fill:#b2dff8;fill-opacity:0;stroke:#28b3fc;stroke-width:2.26772;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 362.88537,-628.243 244.41439,0.012 -27.62229,48.8968 -65.56199,-0.1817 32.55876,56.7371 -13.96098,24.1585 -28.52722,0.032 -46.3013,-80.7841 -66.69317,-0.1353 z"
|
||||||
|
id="use4865" /><path
|
||||||
|
style="fill:#b2dff8;fill-opacity:0;stroke:#28b3fc;stroke-width:2.26772;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 505.14318,-720.9886 -122.19683,-211.6751 56.15706,-0.5268 32.6236,56.8692 32.85645,-56.5653 27.90237,0.011 14.29086,24.6896 -46.81047,80.4902 33.22946,57.8256 z"
|
||||||
|
id="use4867" /><path
|
||||||
|
id="path4873"
|
||||||
|
d="m 309.40365,-710.2521 122.19683,211.6751 -56.15706,0.5268 -32.6236,-56.8692 -32.85645,56.5653 -27.90237,-0.011 -14.29086,-24.6896 46.81047,-80.4902 -33.22946,-57.8256 z"
|
||||||
|
style="fill:#b2dff8;fill-opacity:0;stroke:#28b3fc;stroke-width:2.26772;stroke-dasharray:none;stroke-opacity:1" /><path
|
||||||
|
id="use4875"
|
||||||
|
d="m 451.3364,-803.53264 -244.4144,-0.012 27.62229,-48.89685 65.56199,0.18175 -32.55875,-56.73717 13.96097,-24.15851 28.52722,-0.0315 46.3013,80.78414 66.69317,0.13524 z"
|
||||||
|
style="fill:#b2dff8;fill-opacity:0;stroke:#28b3fc;stroke-width:2.26772;stroke-dasharray:none;stroke-opacity:1" /><path
|
||||||
|
id="use4877"
|
||||||
|
d="m 460.87178,-633.8425 122.21757,-211.66304 28.53477,48.37003 -32.93839,56.68751 65.4152,0.1718 13.9414,24.1698 -14.23636,24.7211 -93.11177,-0.294 -33.46371,57.6904 z"
|
||||||
|
style="fill:#b2dff8;fill-opacity:0;stroke:#28b3fc;stroke-width:2.26772;stroke-dasharray:none;stroke-opacity:1" /><g
|
||||||
|
id="layer2"
|
||||||
|
style="display:none;fill:#f7f5f6;fill-opacity:1"
|
||||||
|
transform="translate(72.039038,-1799.4476)"><path
|
||||||
|
d="M 460.60629,594.72881 209.74183,594.7288 84.309616,377.4738 209.74185,160.21882 l 250.86446,1e-5 125.43222,217.255 z"
|
||||||
|
id="path6032"
|
||||||
|
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.236;fill:#f7f5f6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" /><path
|
||||||
|
transform="translate(0,-308.26772)"
|
||||||
|
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#f7f5f6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
|
||||||
|
id="path5875"
|
||||||
|
d="M 385.59154,773.06721 H 284.75659 l -50.41747,-87.32564 50.41748,-87.32563 100.83495,10e-6 50.41748,87.32563 z" /><path
|
||||||
|
transform="translate(0,-308.26772)"
|
||||||
|
id="path5851"
|
||||||
|
d="m 1216.5591,938.53395 123.0545,228.14035 -42.6807,-1.2616 -43.4823,-79.7725 -39.6506,80.3267 -32.6875,-19.7984 53.4737,-100.2848 -37.1157,-73.88955 z"
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><rect
|
||||||
|
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.415;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#f7f5f6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
id="rect5884"
|
||||||
|
width="48.834862"
|
||||||
|
height="226.22897"
|
||||||
|
x="-34.74221"
|
||||||
|
y="446.17056"
|
||||||
|
transform="rotate(-30)" /><path
|
||||||
|
transform="translate(0,-308.26772)"
|
||||||
|
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.509;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#f7f5f6;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
id="path3428"
|
||||||
|
d="m 251.98568,878.63831 -14.02447,24.29109 h -28.04894 l -14.02447,-24.29109 14.02447,-24.2911 h 28.04894 z" /><use
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
xlink:href="#rect5884"
|
||||||
|
id="use4252"
|
||||||
|
transform="rotate(60,268.29786,489.4515)"
|
||||||
|
width="100%"
|
||||||
|
height="100%"
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1" /><rect
|
||||||
|
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:#f7f5f6;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
id="rect4254"
|
||||||
|
width="5.3947482"
|
||||||
|
height="115.12564"
|
||||||
|
x="545.71014"
|
||||||
|
y="467.07007"
|
||||||
|
transform="rotate(30,575.23539,-154.13386)" /></g><path
|
||||||
|
style="fill:#b2dff8;fill-opacity:0;stroke:#28b3fc;stroke-width:2.26772;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 17.647006,93.08153 c -2.137791,-3.629135 -3.886892,-6.781154 -3.886892,-7.004491 0,-0.223334 2.036859,-3.907974 4.526353,-8.18809 2.489494,-4.280113 4.526353,-7.872269 4.526353,-7.982568 0,-0.110298 -4.202399,-0.200542 -9.338664,-0.200542 H 4.1354931 L 2.2488007,66.408408 C 1.2111198,64.594822 0.36210825,62.964051 0.36210825,62.784474 c 0,-0.179578 0.83310065,-1.791759 1.85133475,-3.582627 l 1.8513347,-3.256122 13.4477393,-0.0031 13.447739,-0.0031 4.75902,-8.234844 4.75902,-8.234843 8.039166,-0.09755 8.039169,-0.09754 -0.718362,1.18387 C 55.443173,41.109708 47.744447,54.433923 38.729994,70.067947 29.715538,85.701971 22.158685,98.760409 21.936986,99.086701 21.60128,99.580783 20.884148,98.576936 17.647006,93.08153 Z"
|
||||||
|
id="path27"
|
||||||
|
transform="matrix(3.4748797,0,0,3.4748797,156.33872,-933.32664)" /><path
|
||||||
|
style="fill:#b2dff8;fill-opacity:0;stroke:#28b3fc;stroke-width:2.26772;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 20.413065,97.739351 c -2.448138,-4.090679 -6.658726,-11.27144 -6.752434,-11.515638 -0.05373,-0.14001 2.024274,-3.903593 4.617779,-8.363519 2.593506,-4.459926 4.715464,-8.13954 4.715464,-8.17692 0,-0.03738 -4.257035,-0.07107 -9.460078,-0.07486 L 4.0737178,69.601519 2.1145346,66.168465 0.15535114,62.73541 2.2025635,59.176688 l 2.0472121,-3.558721 13.3811224,0.07335 13.381123,0.07335 4.807164,-8.283226 4.807163,-8.283227 h 7.93127 c 4.362198,0 7.931269,0.04091 7.931269,0.0909 0,0.112152 -34.58204,60.050535 -34.768044,60.260772 -0.07356,0.08315 -0.662065,-0.731596 -1.307778,-1.810541 z"
|
||||||
|
id="path28"
|
||||||
|
transform="matrix(3.4748797,0,0,3.4748797,156.33872,-933.32664)" /><path
|
||||||
|
style="fill:#b2dff8;fill-opacity:0;stroke:#28b3fc;stroke-width:2.26772;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 20.413065,97.739351 c -2.448138,-4.090679 -6.658726,-11.27144 -6.752434,-11.515638 -0.05373,-0.14001 2.024274,-3.903593 4.617779,-8.363519 2.593506,-4.459926 4.715464,-8.13954 4.715464,-8.17692 0,-0.03738 -4.257035,-0.07107 -9.460078,-0.07486 L 4.0737178,69.601519 2.1145346,66.168465 0.15535114,62.73541 2.2025635,59.176688 l 2.0472121,-3.558721 13.3811224,0.07335 13.381123,0.07335 4.807164,-8.283226 4.807163,-8.283227 h 7.93127 c 4.362198,0 7.931269,0.04091 7.931269,0.0909 0,0.112152 -34.58204,60.050535 -34.768044,60.260772 -0.07356,0.08315 -0.662065,-0.731596 -1.307778,-1.810541 z"
|
||||||
|
id="path29"
|
||||||
|
transform="matrix(3.4748797,0,0,3.4748797,156.33872,-933.32664)" /><path
|
||||||
|
style="fill:#b2dff8;fill-opacity:0;stroke:#28b3fc;stroke-width:2.26772;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 20.413065,97.739351 c -2.448138,-4.090679 -6.658726,-11.27144 -6.752434,-11.515638 -0.05373,-0.14001 2.024274,-3.903593 4.617779,-8.363519 2.593506,-4.459926 4.715464,-8.13954 4.715464,-8.17692 0,-0.03738 -4.257035,-0.07107 -9.460078,-0.07486 L 4.0737178,69.601519 2.1145346,66.168465 0.15535114,62.73541 2.2025635,59.176688 l 2.0472121,-3.558721 13.3811224,0.07335 13.381123,0.07335 4.807164,-8.283226 4.807163,-8.283227 h 7.93127 c 4.362198,0 7.931269,0.04091 7.931269,0.0909 0,0.112152 -34.58204,60.050535 -34.768044,60.260772 -0.07356,0.08315 -0.662065,-0.731596 -1.307778,-1.810541 z"
|
||||||
|
id="path30"
|
||||||
|
transform="matrix(3.4748797,0,0,3.4748797,156.33872,-933.32664)" /><path
|
||||||
|
style="fill:#b2dff8;fill-opacity:0;stroke:#28b3fc;stroke-width:2.26772;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 20.413065,97.739351 c -2.448138,-4.090679 -6.658726,-11.27144 -6.752434,-11.515638 -0.05373,-0.14001 2.024274,-3.903593 4.617779,-8.363519 2.593506,-4.459926 4.715464,-8.13954 4.715464,-8.17692 0,-0.03738 -4.257035,-0.07107 -9.460078,-0.07486 L 4.0737178,69.601519 2.1145346,66.168465 0.15535114,62.73541 2.2025635,59.176688 l 2.0472121,-3.558721 13.3811224,0.07335 13.381123,0.07335 4.807164,-8.283226 4.807163,-8.283227 h 7.93127 c 4.362198,0 7.931269,0.04091 7.931269,0.0909 0,0.112152 -34.58204,60.050535 -34.768044,60.260772 -0.07356,0.08315 -0.662065,-0.731596 -1.307778,-1.810541 z"
|
||||||
|
id="path31"
|
||||||
|
transform="matrix(3.4748797,0,0,3.4748797,156.33872,-933.32664)" /><path
|
||||||
|
style="fill:#b2dff8;fill-opacity:0;stroke:#28b3fc;stroke-width:2.26772;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 20.413065,97.739351 c -2.448138,-4.090679 -6.658726,-11.27144 -6.752434,-11.515638 -0.05373,-0.14001 2.024274,-3.903593 4.617779,-8.363519 2.593506,-4.459926 4.715464,-8.13954 4.715464,-8.17692 0,-0.03738 -4.257035,-0.07107 -9.460078,-0.07486 L 4.0737178,69.601519 2.1145346,66.168465 0.15535114,62.73541 2.2025635,59.176688 l 2.0472121,-3.558721 13.3811224,0.07335 13.381123,0.07335 4.807164,-8.283226 4.807163,-8.283227 h 7.93127 c 4.362198,0 7.931269,0.04091 7.931269,0.0909 0,0.112152 -34.58204,60.050535 -34.768044,60.260772 -0.07356,0.08315 -0.662065,-0.731596 -1.307778,-1.810541 z"
|
||||||
|
id="path32"
|
||||||
|
transform="matrix(3.4748797,0,0,3.4748797,156.33872,-933.32664)" /><path
|
||||||
|
style="fill:#b2dff8;fill-opacity:0;stroke:#28b3fc;stroke-width:2.26772;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 20.413065,97.739351 c -2.448138,-4.090679 -6.658726,-11.27144 -6.752434,-11.515638 -0.05373,-0.14001 2.024274,-3.903593 4.617779,-8.363519 2.593506,-4.459926 4.715464,-8.13954 4.715464,-8.17692 0,-0.03738 -4.257035,-0.07107 -9.460078,-0.07486 L 4.0737178,69.601519 2.1145346,66.168465 0.15535114,62.73541 2.2025635,59.176688 l 2.0472121,-3.558721 13.3811224,0.07335 13.381123,0.07335 4.807164,-8.283226 4.807163,-8.283227 h 7.93127 c 4.362198,0 7.931269,0.04091 7.931269,0.0909 0,0.112152 -34.58204,60.050535 -34.768044,60.260772 -0.07356,0.08315 -0.662065,-0.731596 -1.307778,-1.810541 z"
|
||||||
|
id="path33"
|
||||||
|
transform="matrix(3.4748797,0,0,3.4748797,156.33872,-933.32664)" /><path
|
||||||
|
style="fill:#b2dff8;fill-opacity:0;stroke:#28b3fc;stroke-width:2.26772;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 20.413065,97.739351 c -2.448138,-4.090679 -6.658726,-11.27144 -6.752434,-11.515638 -0.05373,-0.14001 2.024274,-3.903593 4.617779,-8.363519 2.593506,-4.459926 4.715464,-8.13954 4.715464,-8.17692 0,-0.03738 -4.257035,-0.07107 -9.460078,-0.07486 L 4.0737178,69.601519 2.1145346,66.168465 0.15535114,62.73541 2.2025635,59.176688 l 2.0472121,-3.558721 13.3811224,0.07335 13.381123,0.07335 4.807164,-8.283226 4.807163,-8.283227 h 7.93127 c 4.362198,0 7.931269,0.04091 7.931269,0.0909 0,0.112152 -34.58204,60.050535 -34.768044,60.260772 -0.07356,0.08315 -0.662065,-0.731596 -1.307778,-1.810541 z"
|
||||||
|
id="path34"
|
||||||
|
transform="matrix(3.4748797,0,0,3.4748797,156.33872,-933.32664)" /><path
|
||||||
|
style="fill:#b2dff8;fill-opacity:0;stroke:#28b3fc;stroke-width:2.26772;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 20.413065,97.739351 c -2.448138,-4.090679 -6.658726,-11.27144 -6.752434,-11.515638 -0.05373,-0.14001 2.024274,-3.903593 4.617779,-8.363519 2.593506,-4.459926 4.715464,-8.13954 4.715464,-8.17692 0,-0.03738 -4.257035,-0.07107 -9.460078,-0.07486 L 4.0737178,69.601519 2.1145346,66.168465 0.15535114,62.73541 2.2025635,59.176688 l 2.0472121,-3.558721 13.3811224,0.07335 13.381123,0.07335 4.807164,-8.283226 4.807163,-8.283227 h 7.93127 c 4.362198,0 7.931269,0.04091 7.931269,0.0909 0,0.112152 -34.58204,60.050535 -34.768044,60.260772 -0.07356,0.08315 -0.662065,-0.731596 -1.307778,-1.810541 z"
|
||||||
|
id="path35"
|
||||||
|
transform="matrix(3.4748797,0,0,3.4748797,156.33872,-933.32664)" /></g><g
|
||||||
|
id="layer3"
|
||||||
|
style="display:inline;opacity:1;fill:#28b3fc;fill-opacity:1"
|
||||||
|
transform="translate(-14.982227,-492.1621)"><path
|
||||||
|
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="fill:#b2dff8;fill-opacity:0;stroke:#28b3fc;stroke-width:2.26772;stroke-dasharray:none;stroke-opacity:1" /><use
|
||||||
|
height="100%"
|
||||||
|
width="100%"
|
||||||
|
transform="rotate(60,407.11155,-715.78724)"
|
||||||
|
id="use3439-6"
|
||||||
|
xlink:href="#path3336-6"
|
||||||
|
y="0"
|
||||||
|
x="0"
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1" /><use
|
||||||
|
height="100%"
|
||||||
|
width="100%"
|
||||||
|
transform="rotate(-60,407.31177,-715.70016)"
|
||||||
|
id="use3445-0"
|
||||||
|
xlink:href="#path3336-6"
|
||||||
|
y="0"
|
||||||
|
x="0"
|
||||||
|
style="fill:#b2dff8;fill-opacity:0;stroke:#28b3fc;stroke-width:2.26772;stroke-dasharray:none;stroke-opacity:1" /><use
|
||||||
|
height="100%"
|
||||||
|
width="100%"
|
||||||
|
transform="rotate(180,407.41868,-715.7565)"
|
||||||
|
id="use3449-5"
|
||||||
|
xlink:href="#path3336-6"
|
||||||
|
y="0"
|
||||||
|
x="0"
|
||||||
|
style="fill:#b2dff8;fill-opacity:0;stroke:#28b3fc;stroke-width:2.26772;stroke-dasharray:none;stroke-opacity:1" /><path
|
||||||
|
style="fill:#b2dff8;fill-opacity:0;stroke:#28b3fc;stroke-width:7.88004;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
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" /><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;fill:#b2dff8;fill-opacity:0;stroke:#28b3fc;stroke-width:7.88004;stroke-dasharray:none;stroke-opacity:1" /><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;fill:#b2dff8;fill-opacity:0;stroke:#28b3fc;stroke-width:7.88004;stroke-dasharray:none;stroke-opacity:1" /></g><g
|
||||||
|
id="g104"
|
||||||
|
style="fill:url(#linearGradient107);stroke:none"
|
||||||
|
transform="rotate(-13.062247,340.02897,-863.93232)"><path
|
||||||
|
id="use3449-5-0-0"
|
||||||
|
d="m 331.77633,-1001.5212 94.91305,225.23301 -55.78631,-6.46377 -25.29508,-60.48604 -39.63845,52.03815 -27.6842,-3.48227 -11.10824,-26.27568 56.46054,-74.04107 -25.77721,-61.5105 z"
|
||||||
|
style="fill:#28b3fc;fill-opacity:1" /><path
|
||||||
|
id="use3449-5-0-0-6"
|
||||||
|
d="m 457.16967,-744.75745 -70.00051,-234.1759 54.76023,12.45846 18.60597,62.86668 45.03324,-47.44663 27.14534,6.4555 8.2017,27.32283 -64.13603,67.50143 18.97452,63.93729 z"
|
||||||
|
style="fill:#ff0d01;fill-opacity:1" /><path
|
||||||
|
id="use3449-5-0-0-4"
|
||||||
|
d="m 277.21377,-582.32585 178.97491,-166.45237 -53.52586,-16.99636 -47.88683,44.78006 -14.79485,-63.7204 -26.67512,-8.18413 -20.91172,19.40373 21.10703,90.68829 -48.74692,45.51646 z"
|
||||||
|
style="fill:#f8f641;fill-opacity:1" /></g></g></g></g><path
|
||||||
|
style="fill:#b2dff8;fill-opacity:0;stroke:#28b3fc;stroke-width:2.26772;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 20.413065,97.739351 c -2.448138,-4.090679 -6.658726,-11.27144 -6.752434,-11.515638 -0.05373,-0.14001 2.024274,-3.903593 4.617779,-8.363519 2.593506,-4.459926 4.715464,-8.13954 4.715464,-8.17692 0,-0.03738 -4.257035,-0.07107 -9.460078,-0.07486 L 4.0737178,69.601519 2.1145346,66.168465 0.15535114,62.73541 2.2025635,59.176688 l 2.0472121,-3.558721 13.3811224,0.07335 13.381123,0.07335 4.807164,-8.283226 4.807163,-8.283227 h 7.93127 c 4.362198,0 7.931269,0.04091 7.931269,0.0909 0,0.112152 -34.58204,60.050535 -34.768044,60.260772 -0.07356,0.08315 -0.662065,-0.731596 -1.307778,-1.810541 z"
|
||||||
|
id="path36"
|
||||||
|
transform="matrix(0.58305237,0,0,0.58305237,64.401373,52.754168)" /><path
|
||||||
|
style="fill:#b2dff8;fill-opacity:0;stroke:#28b3fc;stroke-width:2.26772;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="M 21.228346,98.82575 C 20.775825,98.187139 14.573556,87.698587 14.099569,86.770393 l -0.346608,-0.67875 1.796437,-3.213914 c 0.988041,-1.767653 3.067246,-5.409743 4.620457,-8.093538 1.553211,-2.683792 2.824019,-4.931476 2.824019,-4.99485 0,-0.110336 -11.090545,-0.351953 -16.3853984,-0.356972 L 4.0737178,69.429968 2.217913,66.175832 C 1.1972204,64.386056 0.36210825,62.847854 0.36210825,62.757606 c 0,-0.09025 0.87964515,-1.70058 1.95476695,-3.578513 l 1.954767,-3.414422 13.3895698,0.06926 13.389571,0.06926 4.821268,-8.307221 4.821271,-8.307221 3.145111,-0.04488 c 1.729813,-0.02469 5.235571,0.01605 7.790576,0.09053 l 4.645463,0.135412 -3.534135,6.15584 c -4.146422,7.222338 -16.886029,29.318862 -25.000346,43.362463 -3.135747,5.427098 -5.801825,9.976251 -5.924618,10.109228 -0.183451,0.198671 -0.288115,0.150249 -0.587027,-0.271581 z"
|
||||||
|
id="path37"
|
||||||
|
transform="matrix(0.58305237,0,0,0.58305237,64.401373,52.754168)" /><path
|
||||||
|
style="fill:#b2dff8;fill-opacity:0;stroke:#28b3fc;stroke-width:2.26772;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 97.636535,120.63066 c -1.389583,-2.41665 -4.382703,-7.63252 -6.651376,-11.59081 l -4.12486,-7.1969 -4.45825,-0.005 c -4.928423,-0.005 -14.743895,-0.1852 -14.838725,-0.27196 -0.03322,-0.0304 -1.827632,-3.096939 -3.987593,-6.814561 l -3.9272,-6.759314 17.535793,-0.04616 c 9.644687,-0.02539 25.387006,-0.02539 34.982936,0 l 17.44715,0.04616 -1.54239,2.715812 c -0.84832,1.493697 -2.61343,4.622573 -3.92248,6.953058 l -2.38008,4.237245 -9.38708,-0.11294 c -7.6636,-0.0922 -9.37652,-0.0697 -9.32957,0.12287 0.0316,0.1297 2.12168,3.83356 4.64454,8.23081 l 4.58703,7.995 -1.97119,3.3966 -1.9712,3.39659 -4.08947,0.0486 -4.08947,0.0486 z"
|
||||||
|
id="path38"
|
||||||
|
transform="matrix(0.58305237,0,0,0.58305237,64.401373,52.754168)" /><path
|
||||||
|
style="fill:#b2dff8;fill-opacity:0;stroke:#28b3fc;stroke-width:2.26772;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="M 87.802229,39.150266 C 80.890113,27.177278 73.023088,13.551901 70.319951,8.8716522 L 65.405158,0.36210825 68.59656,0.24891517 c 1.755271,-0.0622562 5.350472,-0.12261799 7.989335,-0.1341373 l 4.797935,-0.0209442 4.519855,7.89261083 c 2.48592,4.3409365 4.610279,8.0162745 4.7208,8.1674195 0.162204,0.22183 1.117147,-1.300038 4.953498,-7.8942647 l 4.752557,-8.16907224 h 3.92896 3.92895 l 2.03256,3.50763344 c 1.1179,1.9291986 2.03255,3.5544662 2.03255,3.6117061 0,0.05724 -3.01666,5.2908554 -6.70369,11.6302564 l -6.703688,11.526185 4.779848,8.329337 4.77986,8.329337 -3.94792,6.877008 c -2.17135,3.782353 -3.97949,6.908583 -4.01808,6.947175 -0.0386,0.03859 -5.725543,-9.725911 -12.637661,-21.698899 z"
|
||||||
|
id="path39"
|
||||||
|
transform="matrix(0.58305237,0,0,0.58305237,64.401373,52.754168)" /></g><metadata
|
||||||
|
id="metadata39"><rdf:RDF><cc:Work
|
||||||
|
rdf:about=""><cc:license
|
||||||
|
rdf:resource="http://creativecommons.org/publicdomain/zero/1.0/" /><dc:title>DashNix</dc:title></cc:Work><cc:License
|
||||||
|
rdf:about="http://creativecommons.org/publicdomain/zero/1.0/"><cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Reproduction" /><cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Distribution" /><cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" /></cc:License></rdf:RDF></metadata></svg>
|
||||||
|
After Width: | Height: | Size: 24 KiB |
141
assets/rainbow.svg
Normal file
|
|
@ -0,0 +1,141 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
inkscape:export-ydpi="96"
|
||||||
|
inkscape:export-xdpi="96"
|
||||||
|
inkscape:export-filename="nixos-catpuccin.png"
|
||||||
|
sodipodi:docname="catppuccinnix.svg"
|
||||||
|
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
|
||||||
|
version="1.1"
|
||||||
|
id="svg2"
|
||||||
|
viewBox="0 0 3225.0001 1350"
|
||||||
|
height="1440"
|
||||||
|
width="3440"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
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" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
inkscape:showpageshadow="false"
|
||||||
|
borderlayer="true"
|
||||||
|
inkscape:pagecheckerboard="false"
|
||||||
|
units="px"
|
||||||
|
inkscape:document-rotation="0"
|
||||||
|
fit-margin-bottom="0"
|
||||||
|
fit-margin-right="0"
|
||||||
|
fit-margin-left="0"
|
||||||
|
fit-margin-top="0"
|
||||||
|
inkscape:snap-global="true"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-height="1440"
|
||||||
|
inkscape:window-width="3440"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:current-layer="g2"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:cy="745.58828"
|
||||||
|
inkscape:cx="2124.2232"
|
||||||
|
inkscape:zoom="0.63976327"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:pageopacity="1"
|
||||||
|
borderopacity="1.0"
|
||||||
|
bordercolor="#666666"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
id="base"
|
||||||
|
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
|
||||||
|
id="g2"
|
||||||
|
inkscape:label="nix"
|
||||||
|
inkscape:export-filename="2kwide.png"
|
||||||
|
inkscape:export-xdpi="96"
|
||||||
|
inkscape:export-ydpi="96"
|
||||||
|
inkscape:groupmode="layer">
|
||||||
|
<rect
|
||||||
|
style="display:inline;fill:#1e1e2e;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.54331;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;paint-order:stroke markers fill"
|
||||||
|
id="rect1"
|
||||||
|
width="3225"
|
||||||
|
height="1350"
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
inkscape:label="background"
|
||||||
|
inkscape:export-filename="2kwidepng"
|
||||||
|
inkscape:export-xdpi="96"
|
||||||
|
inkscape:export-ydpi="96" />
|
||||||
|
<g
|
||||||
|
transform="translate(-233.46209,403.59287)"
|
||||||
|
style="display:inline;opacity:1"
|
||||||
|
inkscape:label="logo"
|
||||||
|
id="layer3"
|
||||||
|
inkscape:groupmode="layer">
|
||||||
|
<g
|
||||||
|
style="stroke-width:11.0512"
|
||||||
|
transform="matrix(0.11707329,0,0,0.11707336,1503.267,99.424817)"
|
||||||
|
id="g955">
|
||||||
|
<g
|
||||||
|
transform="matrix(11.047619,0,0,11.047619,-1572.2888,9377.7107)"
|
||||||
|
id="g869"
|
||||||
|
inkscape:export-filename="g869.svg"
|
||||||
|
inkscape:export-xdpi="600"
|
||||||
|
inkscape:export-ydpi="600">
|
||||||
|
<g
|
||||||
|
transform="rotate(-60,226.35754,-449.37199)"
|
||||||
|
id="g932"
|
||||||
|
style="fill:#f9e2af;fill-opacity:1;stroke-width:11.0512">
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="cccccccccc"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path3336-6"
|
||||||
|
d="m 449.71876,-420.51322 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:#f9e2af;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:33.1535;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
</g>
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="cccccccccc"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path4260-0"
|
||||||
|
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"
|
||||||
|
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:#fab387;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:33.1535;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" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="cccccccccc"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="use3439-6"
|
||||||
|
d="m 353.65459,-797.57947 -122.21762,211.66311 -28.53475,-48.37004 32.93837,-56.68746 -65.41521,-0.17187 -13.94166,-24.16966 14.23639,-24.72105 93.11171,0.294 33.46379,-57.6904 z"
|
||||||
|
style="fill:#f38ba8;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:33.1535;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="cccccccccc"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="use3449-5"
|
||||||
|
d="m 505.28844,-721.12474 -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="fill:#89b4fa;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:33.1535;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="cccccccccc"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="use4354-5"
|
||||||
|
d="m 451.30201,-803.62004 -244.41444,-0.012 27.62231,-48.89684 65.56197,0.18174 -32.55876,-56.73718 13.96071,-24.15866 28.52725,-0.0314 46.30123,80.7841 66.69317,0.13525 z"
|
||||||
|
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#cba6f7;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:33.1535;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" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="cccccccccc"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="use4362-2"
|
||||||
|
d="m 460.90516,-633.96606 122.21762,-211.66312 28.53475,48.37004 -32.93837,56.68746 65.41521,0.17187 13.94166,24.16966 -14.23639,24.72105 -93.11171,-0.294 -33.46371,57.69035 z"
|
||||||
|
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#a6e3a1;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:33.1535;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" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 7.3 KiB |
|
Before Width: | Height: | Size: 127 KiB After Width: | Height: | Size: 127 KiB |
174
base/common_hardware.nix
Normal file
|
|
@ -0,0 +1,174 @@
|
||||||
|
{
|
||||||
|
mkDashDefault,
|
||||||
|
pkgs,
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
hostName,
|
||||||
|
modulesPath,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
username = config.conf.username;
|
||||||
|
in {
|
||||||
|
imports = [
|
||||||
|
(modulesPath + "/installer/scan/not-detected.nix")
|
||||||
|
];
|
||||||
|
|
||||||
|
wsl.enable = mkDashDefault config.conf.wsl;
|
||||||
|
|
||||||
|
# Bootloader.
|
||||||
|
boot = lib.mkIf (!config.conf.wsl) {
|
||||||
|
consoleLogLevel = mkDashDefault 0;
|
||||||
|
|
||||||
|
lanzaboote = lib.mkIf config.conf.secureBoot {
|
||||||
|
enable = mkDashDefault true;
|
||||||
|
pkiBundle = mkDashDefault "/var/lib/sbctl";
|
||||||
|
settings.reboot-for-bitlocker = mkDashDefault true;
|
||||||
|
};
|
||||||
|
|
||||||
|
loader = {
|
||||||
|
systemd-boot = {
|
||||||
|
enable =
|
||||||
|
if config.conf.secureBoot
|
||||||
|
then lib.mkForce false
|
||||||
|
else if config.conf.useSystemdBootloader
|
||||||
|
then true
|
||||||
|
else mkDashDefault false;
|
||||||
|
configurationLimit = 5;
|
||||||
|
};
|
||||||
|
efi.canTouchEfiVariables = mkDashDefault true;
|
||||||
|
};
|
||||||
|
|
||||||
|
kernelPackages = mkDashDefault pkgs.linuxPackages_latest;
|
||||||
|
initrd = {
|
||||||
|
verbose = mkDashDefault false;
|
||||||
|
availableKernelModules = [
|
||||||
|
"nvme"
|
||||||
|
"xhci_pci"
|
||||||
|
"ahci"
|
||||||
|
"usbhid"
|
||||||
|
"usb_storage"
|
||||||
|
"sd_mod"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
kernelParams =
|
||||||
|
[
|
||||||
|
''resume="PARTLABEL=SWAP"''
|
||||||
|
''quiet''
|
||||||
|
''udev.log_level=3''
|
||||||
|
]
|
||||||
|
++ config.conf.bootParams;
|
||||||
|
};
|
||||||
|
|
||||||
|
networking = {
|
||||||
|
useDHCP = mkDashDefault true;
|
||||||
|
networkmanager.enable = mkDashDefault true;
|
||||||
|
hostName = mkDashDefault hostName;
|
||||||
|
};
|
||||||
|
|
||||||
|
time = {
|
||||||
|
timeZone = mkDashDefault config.conf.timezone;
|
||||||
|
hardwareClockInLocalTime = mkDashDefault config.conf.systemLocalTime;
|
||||||
|
};
|
||||||
|
|
||||||
|
i18n.defaultLocale = mkDashDefault config.conf.locale;
|
||||||
|
|
||||||
|
services = {
|
||||||
|
lorri.enable = mkDashDefault true;
|
||||||
|
xserver.enable = mkDashDefault true;
|
||||||
|
fstrim.enable = mkDashDefault true;
|
||||||
|
pulseaudio.enable = mkDashDefault false;
|
||||||
|
pipewire = {
|
||||||
|
enable = mkDashDefault true;
|
||||||
|
alsa = {
|
||||||
|
enable = mkDashDefault true;
|
||||||
|
support32Bit = mkDashDefault true;
|
||||||
|
};
|
||||||
|
jack.enable = mkDashDefault true;
|
||||||
|
pulse.enable = mkDashDefault true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
nixpkgs.hostPlatform = mkDashDefault config.conf.system;
|
||||||
|
nix = {
|
||||||
|
gc = {
|
||||||
|
automatic = mkDashDefault true;
|
||||||
|
dates = mkDashDefault "weekly";
|
||||||
|
options = mkDashDefault "--delete-older-than 7d --delete-generations +5";
|
||||||
|
};
|
||||||
|
settings = {
|
||||||
|
trusted-users = [username];
|
||||||
|
auto-optimise-store = mkDashDefault true;
|
||||||
|
|
||||||
|
builders-use-substitutes = mkDashDefault true;
|
||||||
|
|
||||||
|
trusted-substituters = [
|
||||||
|
"https://hyprland.cachix.org"
|
||||||
|
"https://anyrun.cachix.org"
|
||||||
|
"https://oxipaste.cachix.org"
|
||||||
|
"https://oxinoti.cachix.org"
|
||||||
|
"https://oxishut.cachix.org"
|
||||||
|
"https://oxidash.cachix.org"
|
||||||
|
"https://oxicalc.cachix.org"
|
||||||
|
"https://hyprdock.cachix.org"
|
||||||
|
"https://reset.cachix.org"
|
||||||
|
"https://dashvim.cachix.org"
|
||||||
|
];
|
||||||
|
|
||||||
|
trusted-public-keys = [
|
||||||
|
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
|
||||||
|
"anyrun.cachix.org-1:pqBobmOjI7nKlsUMV25u9QHa9btJK65/C8vnO3p346s="
|
||||||
|
"oxipaste.cachix.org-1:n/oA3N3Z+LJP7eIWOwuoLd9QnPyZXqFjLgkahjsdDGc="
|
||||||
|
"oxinoti.cachix.org-1:dvSoJl2Pjo5HMaNngdBbSaixK9BSf2N8gzjP2MdGvfc="
|
||||||
|
"oxishut.cachix.org-1:axyAGF3XMh1IyMAW4UMbQCdMNovDH0KH6hqLLRJH8jU="
|
||||||
|
"oxidash.cachix.org-1:5K2FNHp7AS8VF7LmQkJAUG/dm6UHCz4ngshBVbjFX30="
|
||||||
|
"oxicalc.cachix.org-1:qF3krFc20tgSmtR/kt6Ku/T5QiG824z79qU5eRCSBTQ="
|
||||||
|
"hyprdock.cachix.org-1:HaROK3fBvFWIMHZau3Vq1TLwUoJE8yRbGLk0lEGzv3Y="
|
||||||
|
"reset.cachix.org-1:LfpnUUdG7QM/eOkN7NtA+3+4Ar/UBeYB+3WH+GjP9Xo="
|
||||||
|
"dashvim.cachix.org-1:uLRdxp1WOWHnsZZtu3SwUWZRsvC7SXo0Gyk3tIefuL0="
|
||||||
|
];
|
||||||
|
|
||||||
|
experimental-features = mkDashDefault "nix-command flakes pipe-operators";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
hardware = {
|
||||||
|
cpu.${config.conf.cpu}.updateMicrocode =
|
||||||
|
mkDashDefault
|
||||||
|
config.hardware.enableRedistributableFirmware;
|
||||||
|
};
|
||||||
|
|
||||||
|
security.rtkit.enable = mkDashDefault true;
|
||||||
|
|
||||||
|
environment.variables = {
|
||||||
|
XDG_CACHE_HOME = mkDashDefault "$HOME/.cache";
|
||||||
|
DIRENV_LOG_FORMAT = mkDashDefault "";
|
||||||
|
QT_QPA_PLATFORMTHEME = mkDashDefault "qt5ct";
|
||||||
|
};
|
||||||
|
|
||||||
|
# allows user change later on
|
||||||
|
users = {
|
||||||
|
mutableUsers = mkDashDefault true;
|
||||||
|
users.${username} = {
|
||||||
|
isNormalUser = mkDashDefault true;
|
||||||
|
description = mkDashDefault username;
|
||||||
|
extraGroups = [
|
||||||
|
"networkmanager"
|
||||||
|
"wheel"
|
||||||
|
"gamemode"
|
||||||
|
"docker"
|
||||||
|
"vboxusers"
|
||||||
|
"video"
|
||||||
|
"audio"
|
||||||
|
"scanner"
|
||||||
|
"lp"
|
||||||
|
];
|
||||||
|
packages = with pkgs; [
|
||||||
|
home-manager
|
||||||
|
xdg-desktop-portal-gtk
|
||||||
|
];
|
||||||
|
# this password will only last for the first login
|
||||||
|
# e.g. login, then change to whatever else, this also ensures no public hash is available
|
||||||
|
password = mkDashDefault "firstlogin";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
@ -1,10 +1,7 @@
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
./big_g.nix
|
|
||||||
./login_manager.nix
|
|
||||||
./env.nix
|
./env.nix
|
||||||
./xkb_layout.nix
|
./xkb_layout.nix
|
||||||
./base_packages.nix
|
|
||||||
./common_hardware.nix
|
./common_hardware.nix
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
24
base/env.nix
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
{
|
||||||
|
mkDashDefault,
|
||||||
|
pkgs,
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
environment = {
|
||||||
|
variables = {
|
||||||
|
GSETTINGS_SCHEMA_DIR = mkDashDefault "${pkgs.glib.getSchemaPath pkgs.gsettings-desktop-schemas}";
|
||||||
|
NEOVIDE_MAXIMIZED = mkDashDefault "0";
|
||||||
|
GPG_TTY = mkDashDefault "$(tty)";
|
||||||
|
EDITOR = mkDashDefault "neovide --no-fork";
|
||||||
|
SUDO_EDITOR = mkDashDefault "neovide --no-fork";
|
||||||
|
SCRIPTS = mkDashDefault "$HOME/.config/scripts";
|
||||||
|
};
|
||||||
|
sessionVariables = {
|
||||||
|
NIXOS_OZONE_WL = mkDashDefault "1";
|
||||||
|
GOPATH = mkDashDefault "$HOME/.go";
|
||||||
|
FLAKE = mkDashDefault config.conf.nixosConfigPath;
|
||||||
|
NH_FLAKE = mkDashDefault config.conf.nixosConfigPath;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
@ -1,7 +1,10 @@
|
||||||
{ pkgs, ... }:
|
{
|
||||||
let
|
mkDashDefault,
|
||||||
layout = pkgs.writeText "dashie" ''
|
pkgs,
|
||||||
xkb_symbols "dashie"
|
...
|
||||||
|
}: let
|
||||||
|
layout = pkgs.writeText "enIntUmlaut" ''
|
||||||
|
xkb_symbols "enIntUmlaut"
|
||||||
{
|
{
|
||||||
include "us(basic)"
|
include "us(basic)"
|
||||||
include "level3(ralt_switch)"
|
include "level3(ralt_switch)"
|
||||||
|
|
@ -10,14 +13,11 @@ let
|
||||||
key <AD07> { [ u, U, udiaeresis, Udiaeresis ] };
|
key <AD07> { [ u, U, udiaeresis, Udiaeresis ] };
|
||||||
};
|
};
|
||||||
'';
|
'';
|
||||||
in
|
in {
|
||||||
{
|
environment.systemPackages = mkDashDefault [pkgs.xorg.xkbcomp];
|
||||||
environment.systemPackages = [ pkgs.xorg.xkbcomp ];
|
services.xserver.xkb.extraLayouts.enIntUmlaut = {
|
||||||
services.xserver.xkb.extraLayouts.dashie = {
|
|
||||||
description = "US layout with 'umlaut'";
|
description = "US layout with 'umlaut'";
|
||||||
languages = ["eng"];
|
languages = ["eng"];
|
||||||
symbolsFile = "${layout}";
|
symbolsFile = "${layout}";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
61
docs/default.nix
Normal file
|
|
@ -0,0 +1,61 @@
|
||||||
|
# with friendly help by stylix: https://github.com/danth/stylix/blob/master/docs/default.nix
|
||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
buildSystems,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
makeOptionsDoc = configuration: pkgs.nixosOptionsDoc {options = configuration;};
|
||||||
|
generateDocs = obj: ''
|
||||||
|
touch src/${obj.fst}.md
|
||||||
|
sed '/*Declared by:*/,/^$/d' <${obj.snd.optionsCommonMark} >> src/${obj.fst}.md
|
||||||
|
'';
|
||||||
|
summaryAppend = name: ''
|
||||||
|
echo "- [${name}](${name}.md)" >> src/SUMMARY.md
|
||||||
|
'';
|
||||||
|
system = (buildSystems {root = ../example/.;})."example".options;
|
||||||
|
makeOptionsDocPrograms = names: pkgs.nixosOptionsDoc {options = lib.attrByPath (lib.splitString "." names) null system.mods;};
|
||||||
|
conf = makeOptionsDoc system.conf;
|
||||||
|
basePath = ../modules/programs;
|
||||||
|
pathToAttrs = path:
|
||||||
|
lib.attrsets.mapAttrsToList (
|
||||||
|
name: meta: {
|
||||||
|
inherit name;
|
||||||
|
inherit meta;
|
||||||
|
}
|
||||||
|
)
|
||||||
|
(builtins.readDir path);
|
||||||
|
pathToStrings = path: prefix: let
|
||||||
|
mapFn = attrs:
|
||||||
|
if attrs.meta == "directory"
|
||||||
|
then pathToStrings "${basePath}/${attrs.name}" attrs.name
|
||||||
|
else if prefix != ""
|
||||||
|
then "${prefix}.${attrs.name}"
|
||||||
|
else attrs.name;
|
||||||
|
in
|
||||||
|
map
|
||||||
|
mapFn
|
||||||
|
(pathToAttrs path);
|
||||||
|
filteredNames = builtins.filter (names: !(lib.strings.hasInfix "default" names)) (
|
||||||
|
map (name: lib.strings.removeSuffix ".nix" name) (lib.lists.flatten (pathToStrings basePath ""))
|
||||||
|
);
|
||||||
|
deduplicatedNames = map (name: lib.strings.splitString "." name |> lib.lists.unique |> lib.strings.concatStringsSep ".") filteredNames;
|
||||||
|
mods = map makeOptionsDocPrograms deduplicatedNames;
|
||||||
|
docs = lib.strings.concatLines (map generateDocs (lib.lists.zipLists deduplicatedNames mods));
|
||||||
|
summary = lib.strings.concatStringsSep " " (map summaryAppend deduplicatedNames);
|
||||||
|
in
|
||||||
|
pkgs.stdenvNoCC.mkDerivation {
|
||||||
|
name = "dashNix-book";
|
||||||
|
src = ./.;
|
||||||
|
|
||||||
|
patchPhase = ''
|
||||||
|
sed '/*Declared by:*/,/^$/d' <${conf.optionsCommonMark} >> src/conf.md
|
||||||
|
${docs}
|
||||||
|
echo "[README](README.md)\n # Options\n - [Base Config](conf.md)" >> src/SUMMARY.md
|
||||||
|
${summary}
|
||||||
|
'';
|
||||||
|
|
||||||
|
buildPhase = ''
|
||||||
|
${pkgs.mdbook}/bin/mdbook build --dest-dir $out
|
||||||
|
'';
|
||||||
|
}
|
||||||
329
docs/src/README.md
Normal file
|
|
@ -0,0 +1,329 @@
|
||||||
|
<div align = center>
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
An opinionated flake to bootstrap NixOS systems with default configurations for various programs and services from both NixOS and HomeManager which can be enabled, disabled, configured or replaced at will.
|
||||||
|
|
||||||
|
# Usage
|
||||||
|
|
||||||
|
This flake is intended to be used as an input to your own NixOS configuration:
|
||||||
|
|
||||||
|
```nix
|
||||||
|
dashNix = {
|
||||||
|
url = "github:Xetibo/DashNix";
|
||||||
|
inputs = {
|
||||||
|
# ensure these are here to update the packages on your own
|
||||||
|
nixpkgs.follows = "nixpkgs";
|
||||||
|
stable.follows = "stable";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
You can then configure your systems in your flake outputs with a provided library command:
|
||||||
|
|
||||||
|
Please note that overriding inputs will invalidate the cache configuration, this means you will have to add this manually:
|
||||||
|
|
||||||
|
```nix
|
||||||
|
builders-use-substitutes = true;
|
||||||
|
|
||||||
|
extra-substituters = [
|
||||||
|
"https://hyprland.cachix.org"
|
||||||
|
"https://anyrun.cachix.org"
|
||||||
|
"https://cache.garnix.io"
|
||||||
|
"https://oxipaste.cachix.org"
|
||||||
|
"https://oxinoti.cachix.org"
|
||||||
|
"https://oxishut.cachix.org"
|
||||||
|
"https://oxidash.cachix.org"
|
||||||
|
"https://oxicalc.cachix.org"
|
||||||
|
"https://hyprdock.cachix.org"
|
||||||
|
"https://reset.cachix.org"
|
||||||
|
"https://dashvim.cachix.org"
|
||||||
|
];
|
||||||
|
|
||||||
|
extra-trusted-public-keys = [
|
||||||
|
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
|
||||||
|
"anyrun.cachix.org-1:pqBobmOjI7nKlsUMV25u9QHa9btJK65/C8vnO3p346s="
|
||||||
|
"cache.garnix.io:CTFPyKSLcx5RMJKfLo5EEPUObbA78b0YQ2DTCJXqr9g="
|
||||||
|
"oxipaste.cachix.org-1:n/oA3N3Z+LJP7eIWOwuoLd9QnPyZXqFjLgkahjsdDGc="
|
||||||
|
"oxinoti.cachix.org-1:dvSoJl2Pjo5HMaNngdBbSaixK9BSf2N8gzjP2MdGvfc="
|
||||||
|
"oxishut.cachix.org-1:axyAGF3XMh1IyMAW4UMbQCdMNovDH0KH6hqLLRJH8jU="
|
||||||
|
"oxidash.cachix.org-1:5K2FNHp7AS8VF7LmQkJAUG/dm6UHCz4ngshBVbjFX30="
|
||||||
|
"oxicalc.cachix.org-1:qF3krFc20tgSmtR/kt6Ku/T5QiG824z79qU5eRCSBTQ="
|
||||||
|
"hyprdock.cachix.org-1:HaROK3fBvFWIMHZau3Vq1TLwUoJE8yRbGLk0lEGzv3Y="
|
||||||
|
"reset.cachix.org-1:LfpnUUdG7QM/eOkN7NtA+3+4Ar/UBeYB+3WH+GjP9Xo="
|
||||||
|
"dashvim.cachix.org-1:uLRdxp1WOWHnsZZtu3SwUWZRsvC7SXo0Gyk3tIefuL0="
|
||||||
|
];
|
||||||
|
```
|
||||||
|
|
||||||
|
```nix
|
||||||
|
nixosConfigurations = inputs.dashNix.dashNixLib.buildSystems { root = ./.; };
|
||||||
|
```
|
||||||
|
|
||||||
|
This command will build each system that is placed within the hosts/ directory.
|
||||||
|
In this directory create one directory for each system you want to configure with DashNix.
|
||||||
|
This will automatically pick up the hostname for the system and look for 3 different files that are explained below.
|
||||||
|
(Optionally, you can also change the parameter root (./.) to define a different starting directory than hosts/)
|
||||||
|
|
||||||
|
In order for your configuration to work, you are required to at least provide a single config file with a further config file being optional for custom configuration.
|
||||||
|
The hardware.nix specifies additional NixOS configuration, while home.nix specifies additional home-manager configuration. (both optional)
|
||||||
|
|
||||||
|
|- flake.nix\
|
||||||
|
|- flake.lock\
|
||||||
|
|- hosts/\
|
||||||
|
|--- system1/\
|
||||||
|
|------ configuration.nix (required)\
|
||||||
|
|------ hardware.nix (optional)\
|
||||||
|
|------ home.nix (optional)\
|
||||||
|
|--- system2/\
|
||||||
|
|------ configuration.nix (required)\
|
||||||
|
|------ hardware.nix (optional)\
|
||||||
|
|------ home.nix (optional)\
|
||||||
|
|--- system3/\
|
||||||
|
|------ configuration.nix (required)\
|
||||||
|
|------ hardware.nix (optional)\
|
||||||
|
|------ home.nix (optional)
|
||||||
|
|
||||||
|
Here is a minimal required configuration.nix (the TODOs mention a required change):
|
||||||
|
|
||||||
|
```nix
|
||||||
|
{config, ...}: {
|
||||||
|
# TODO denote important changes
|
||||||
|
|
||||||
|
# variables for system
|
||||||
|
conf = {
|
||||||
|
# TODO your username
|
||||||
|
username = "YOURNAME";
|
||||||
|
# TODO only needed when you use intel -> amd is default
|
||||||
|
# cpu = "intel";
|
||||||
|
# TODO your xkb layout
|
||||||
|
locale = "something.UTF-8";
|
||||||
|
# TODO your timezone
|
||||||
|
timezone = "CONTINENT/CITY";
|
||||||
|
};
|
||||||
|
|
||||||
|
# modules
|
||||||
|
mods = {
|
||||||
|
# default disk config has root home boot and swap partition, overwrite if you want something different
|
||||||
|
sops.enable = false;
|
||||||
|
nextcloud.enable = false;
|
||||||
|
wm.monitors = [
|
||||||
|
# Example
|
||||||
|
# {
|
||||||
|
# name = "DP-1";
|
||||||
|
# resolutionX = 3440;
|
||||||
|
# resolutionY = 1440;
|
||||||
|
# refreshrate = 180;
|
||||||
|
# positionX = 2560;
|
||||||
|
# positionY = 0;
|
||||||
|
# scale = 1;
|
||||||
|
# transform = "0";
|
||||||
|
# vrr = false;
|
||||||
|
# }
|
||||||
|
];
|
||||||
|
gpu.nvidia.enable = true;
|
||||||
|
kdeConnect.enable = true;
|
||||||
|
# login manager:
|
||||||
|
# default is greetd
|
||||||
|
# greetd = { };
|
||||||
|
# sddm = { };
|
||||||
|
# gdm = { };
|
||||||
|
drives = {
|
||||||
|
# default assumes ROOT, BOOT, HOME and SWAP labaled drives exist
|
||||||
|
# for an example without HOME see below
|
||||||
|
# defaultDrives.enable = false;
|
||||||
|
# extraDrives = [
|
||||||
|
# {
|
||||||
|
# name = "boot";
|
||||||
|
# drive = {
|
||||||
|
# device = "/dev/disk/by-label/BOOT";
|
||||||
|
# fsType = "vfat";
|
||||||
|
# options = [ "rw" "fmask=0022" "dmask=0022" "noatime" ];
|
||||||
|
# };
|
||||||
|
# }
|
||||||
|
# {
|
||||||
|
# name = "";
|
||||||
|
# drive = {
|
||||||
|
# device = "/dev/disk/by-label/ROOT";
|
||||||
|
# fsType = "ext4";
|
||||||
|
# options = [ "noatime" "nodiratime" "discard" ];
|
||||||
|
# };
|
||||||
|
# }
|
||||||
|
# ];
|
||||||
|
# You can also use disko to format your disks on installation.
|
||||||
|
# Please refer to the Documentation about the drives module for an example.
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## First Login
|
||||||
|
|
||||||
|
After logging in the first time, your password will be set to "firstlogin", please change this to whatever you like.
|
||||||
|
|
||||||
|
## Configuring pkgs
|
||||||
|
|
||||||
|
While DashNix offers a default pkgs config, you may want to permit an unsecure packages,
|
||||||
|
add additional modules/inputs, or add an overlay to them.
|
||||||
|
You can configure both stable and unstable pkgs the following way:
|
||||||
|
|
||||||
|
Please note that modules and inputs are merged together to ensure functionality.
|
||||||
|
|
||||||
|
```nix
|
||||||
|
currentSystem = "x86_64-linux";
|
||||||
|
permittedPackages = [
|
||||||
|
"some package"
|
||||||
|
];
|
||||||
|
config = {
|
||||||
|
system = currentSystem;
|
||||||
|
config = {
|
||||||
|
allowUnfree = true;
|
||||||
|
permittedInsecurePackages = permittedPackages;
|
||||||
|
};
|
||||||
|
inputs = {
|
||||||
|
# Some inputs
|
||||||
|
}
|
||||||
|
mods = {
|
||||||
|
home = [
|
||||||
|
# Some home manager module
|
||||||
|
];
|
||||||
|
nixos = [
|
||||||
|
# Some nixos module
|
||||||
|
];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
unstableBundle = {
|
||||||
|
pkgs = inputs.unstable;
|
||||||
|
inherit config mods;
|
||||||
|
};
|
||||||
|
inputs.dashNix.dashNixLib.buildSystems {
|
||||||
|
root = ./.;
|
||||||
|
inherit unstableBundle;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
With this you could also change your input to something different should you wish to do so.
|
||||||
|
Note that overriding inputs via the flake still works,
|
||||||
|
this way however ensures you can also configure the inputs.
|
||||||
|
|
||||||
|
## Stable/Unstable
|
||||||
|
|
||||||
|
Sometimes you want to differentiate between systems that are stable and unstable, e.g. for servers and desktops/laptops.
|
||||||
|
This can be done with the overridePkgs flag for the lib function:
|
||||||
|
|
||||||
|
(overridePkgs simply inverts the default bundle that is used for the nix standard library as well as NixOS itself)
|
||||||
|
|
||||||
|
```nix
|
||||||
|
nixosConfigurations =
|
||||||
|
inputs.dashNix.dashNixLib.buildSystems {
|
||||||
|
root = ./stable;
|
||||||
|
inherit stableBundle;
|
||||||
|
overridePkgs = true;
|
||||||
|
}
|
||||||
|
// inputs.dashNix.dashNixLib.buildSystems {
|
||||||
|
inherit unstableBundle;
|
||||||
|
root = ./unstable;
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
You can now place your systems in the respective directories.
|
||||||
|
Keep in mind that the hosts directory will still need to exist in each variant.
|
||||||
|
E.g. stable/hosts/yourserver and unstable/hosts/yourdesktop
|
||||||
|
|
||||||
|
# Installation via ISO
|
||||||
|
|
||||||
|
You can find a custom ISO in the releases: [Link](https://github.com/Xetibo/DashNix/releases).
|
||||||
|
With this, you will receive the example config in /iso/example alongside the gnome desktop environment,
|
||||||
|
as well as a few tools like gnome-disks, Neovim, Vscodium, a browser etc.
|
||||||
|
|
||||||
|
Alternatively, you can use whatever NixOS installer and just install your config from there, just make sure to set the drive configuration before.
|
||||||
|
|
||||||
|
## Commands
|
||||||
|
|
||||||
|
First, copy the read-only config from /iso/example-config to a location of your choice.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cp /iso/example-config ~/config -r
|
||||||
|
```
|
||||||
|
|
||||||
|
Then configure as you please and choose a command below depending on your disk installation variant.
|
||||||
|
|
||||||
|
Installation via manual configuration:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sudo nixos-install --flake <flakelocation>#<hostname> --root <mountpoint> --option experimental-features "nix-command flakes pipe-operators"
|
||||||
|
#example
|
||||||
|
#nixos-install --flake ~/config#globi --root /mnt --option experimental-features "nix-command flakes pipe-operators"
|
||||||
|
```
|
||||||
|
|
||||||
|
Installation via disko:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sudo disko-install --flake <flakelocation>#<hostname> --disk <disk-name> <disk-device> --option experimental-features "nix-command flakes pipe-operators"
|
||||||
|
#example
|
||||||
|
#disko-install -- --flake ~/config#globi --disk main /dev/nvme0n1 --option experimental-features "nix-command flakes pipe-operators"
|
||||||
|
```
|
||||||
|
|
||||||
|
# Installation via flake
|
||||||
|
|
||||||
|
If you already have nix installed, you can instead just copy the default config onto your system and install DashNix with it.
|
||||||
|
To create the example config for a base to start with, you can just run this flake with the mkFlake command:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
nix run github:Xetibo/DashNix#mkFlake
|
||||||
|
```
|
||||||
|
|
||||||
|
This command will put the default configuration into $HOME/gits/nixos
|
||||||
|
|
||||||
|
# Modules
|
||||||
|
|
||||||
|
This configuration features several modules that can be used as preconfigured "recipies".
|
||||||
|
These modules attempt to combine the home-manager and nixos packages/options to one single configuration file for each new system.
|
||||||
|
For package lists, please check the individual modules, as the lists can be long.
|
||||||
|
|
||||||
|
- Hyprland: Installs and configures Hyprland with various additional packages
|
||||||
|
- Niri: Installs and configures Niri with various additional packages
|
||||||
|
- acpid : Enables the acpid daemon
|
||||||
|
- base packages : A list of system packages to be installed by default
|
||||||
|
- bluetooth : Configures/enables bluetooth and installs tools for bluetooth
|
||||||
|
- coding packages : A list of coding packages to be installed by default
|
||||||
|
- drives : A drive configuration module
|
||||||
|
- firefox: Enables and configures firefox (extensions and settings)
|
||||||
|
- fish: Enables and configures fish shell
|
||||||
|
- gaming : Configures gaming related features (launchers, gamemode)
|
||||||
|
- git : Git key and config module
|
||||||
|
- gnome_services : Gnome services for minimal enviroments -> Window managers etc
|
||||||
|
- gpu : GPU settings (AMD)
|
||||||
|
- greetd : Enables and configures the greetd/regreet login manager with Hyprland
|
||||||
|
- home packages : A list of home packages to be installed by default
|
||||||
|
- kde_connect : Enables KDE connect and opens its ports
|
||||||
|
- keepassxc : Configures keepassxc
|
||||||
|
- kitty: Enables and configures kitty terminal
|
||||||
|
- layout : Modules to configure keyboard layout system wide
|
||||||
|
- media packages : A list of media packages to be installed by default
|
||||||
|
- mime: Mime type configuration
|
||||||
|
- nextcloud : Handles synchronization via nextcloud cmd. (requires config.sops.secrets.nextcloud)
|
||||||
|
- oxi: My own programs, can be selectively disabled, or as a whole
|
||||||
|
- piper : Installs and enables piper alongside its daemon
|
||||||
|
- plymouth: enable or disable plymouth
|
||||||
|
- printing : Enables and configures printing services
|
||||||
|
- scripts: Various preconfigured scripts with the ability to add more
|
||||||
|
- sops: Enables sops-nix
|
||||||
|
- starship : Configures the starship prompt
|
||||||
|
- stylix : Configures system themes, can also be applied to dashvim if used.
|
||||||
|
- teams: For the poor souls that have to use this....
|
||||||
|
- virtualbox : Enables and configures virtualbox
|
||||||
|
- xkb: Keyboard layout configuration
|
||||||
|
- xone : Installs the xone driver
|
||||||
|
- yazi: Installs yazi and sets custom keybinds
|
||||||
|
|
||||||
|
# Credits
|
||||||
|
|
||||||
|
- [Fufexan](https://github.com/fufexan) for the xdg-mime config:
|
||||||
|
- [Catppuccin](https://github.com/catppuccin) for base16 colors and zen-browser css
|
||||||
|
- [Danth](https://github.com/danth) for providing a base for the nix docs
|
||||||
|
- [chermnyx](https://github.com/chermnyx) for providing a base for zen configuration
|
||||||
|
- [voronind-com](https://github.com/voronind-com) for providing the darkreader configuration
|
||||||
|
- [Nix-Artwork](https://github.com/NixOS/nixos-artwork/tree/master/logo) for the Nix/NixOS logo (Tim Cuthbertson (@timbertson))
|
||||||
|
- [xddxdd](https://github.com/xddxdd) for the CachyOS-Kernel flake
|
||||||
0
docs/src/SUMMARY.md
Normal file
0
docs/src/coding.md
Normal file
1
docs/src/conf.md
Executable file
|
|
@ -0,0 +1 @@
|
||||||
|
# This file handles the basic configuration for settings like language, timezone, input, cpu etc.
|
||||||
238
docs/src/logo.svg
Normal file
|
|
@ -0,0 +1,238 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
width="38.753597mm"
|
||||||
|
height="65.022255mm"
|
||||||
|
viewBox="0 0 38.753597 65.022256"
|
||||||
|
version="1.1"
|
||||||
|
id="svg1"
|
||||||
|
xml:space="preserve"
|
||||||
|
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/"><title
|
||||||
|
id="title39">DashNix</title><defs
|
||||||
|
id="defs1"><linearGradient
|
||||||
|
id="linearGradient106"><stop
|
||||||
|
style="stop-color:#28b3fc;stop-opacity:1;"
|
||||||
|
offset="0"
|
||||||
|
id="stop106" /><stop
|
||||||
|
style="stop-color:#28b3fc;stop-opacity:1;"
|
||||||
|
offset="0.23456791"
|
||||||
|
id="stop109" /><stop
|
||||||
|
style="stop-color:#f8f641;stop-opacity:1;"
|
||||||
|
offset="0.4526749"
|
||||||
|
id="stop108" /><stop
|
||||||
|
style="stop-color:#f8f641;stop-opacity:1;"
|
||||||
|
offset="0.59362137"
|
||||||
|
id="stop110" /><stop
|
||||||
|
style="stop-color:#ff0d01;stop-opacity:1;"
|
||||||
|
offset="0.66358024"
|
||||||
|
id="stop111" /><stop
|
||||||
|
style="stop-color:#ff0d01;stop-opacity:1;"
|
||||||
|
offset="1"
|
||||||
|
id="stop107" /></linearGradient><linearGradient
|
||||||
|
xlink:href="#linearGradient106"
|
||||||
|
id="linearGradient107"
|
||||||
|
x1="278.05182"
|
||||||
|
y1="-843.59747"
|
||||||
|
x2="529.8988"
|
||||||
|
y2="-736.69476"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
spreadMethod="pad" /></defs><g
|
||||||
|
id="layer1"
|
||||||
|
transform="matrix(0.45379,0,0,0.45379,-29.020506,-23.643099)"><g
|
||||||
|
id="g82"
|
||||||
|
transform="matrix(0.16779066,0,0,0.16779066,64.401373,52.777012)"
|
||||||
|
style="fill:#28b3fc;fill-opacity:1"><g
|
||||||
|
id="layer3-7"
|
||||||
|
style="display:inline;fill:#28b3fc;fill-opacity:1"
|
||||||
|
transform="translate(-141.35649,1425.3526)"><g
|
||||||
|
id="g113"><g
|
||||||
|
id="layer1-8"
|
||||||
|
style="display:inline;fill:#28b3fc;fill-opacity:1"
|
||||||
|
transform="translate(-14.982227,-492.1621)"><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:#28b3fc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;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.40365,-710.2521 122.19683,211.6751 -56.15706,0.5268 -32.6236,-56.8692 -32.85645,56.5653 -27.90237,-0.011 -14.29086,-24.6896 46.81047,-80.4902 -33.22946,-57.8256 z"
|
||||||
|
id="path4861" /><path
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1"
|
||||||
|
d="m 353.50926,-797.4433 -122.21756,211.6631 -28.53477,-48.37 32.93839,-56.6875 -65.41521,-0.1719 -13.9414,-24.1698 14.23637,-24.721 93.11177,0.2939 33.46371,-57.6903 z"
|
||||||
|
id="use4863" /><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:#28b3fc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;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 362.88537,-628.243 244.41439,0.012 -27.62229,48.8968 -65.56199,-0.1817 32.55876,56.7371 -13.96098,24.1585 -28.52722,0.032 -46.3013,-80.7841 -66.69317,-0.1353 z"
|
||||||
|
id="use4865" /><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:#28b3fc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;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 505.14318,-720.9886 -122.19683,-211.6751 56.15706,-0.5268 32.6236,56.8692 32.85645,-56.5653 27.90237,0.011 14.29086,24.6896 -46.81047,80.4902 33.22946,57.8256 z"
|
||||||
|
id="use4867" /><path
|
||||||
|
id="path4873"
|
||||||
|
d="m 309.40365,-710.2521 122.19683,211.6751 -56.15706,0.5268 -32.6236,-56.8692 -32.85645,56.5653 -27.90237,-0.011 -14.29086,-24.6896 46.81047,-80.4902 -33.22946,-57.8256 z"
|
||||||
|
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:#28b3fc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;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" /><path
|
||||||
|
id="use4875"
|
||||||
|
d="m 451.3364,-803.53264 -244.4144,-0.012 27.62229,-48.89685 65.56199,0.18175 -32.55875,-56.73717 13.96097,-24.15851 28.52722,-0.0315 46.3013,80.78414 66.69317,0.13524 z"
|
||||||
|
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:#28b3fc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;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" /><path
|
||||||
|
id="use4877"
|
||||||
|
d="m 460.87178,-633.8425 122.21757,-211.66304 28.53477,48.37003 -32.93839,56.68751 65.4152,0.1718 13.9414,24.1698 -14.23636,24.7211 -93.11177,-0.294 -33.46371,57.6904 z"
|
||||||
|
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:#28b3fc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;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" /><g
|
||||||
|
id="layer2"
|
||||||
|
style="display:none;fill:#f7f5f6;fill-opacity:1"
|
||||||
|
transform="translate(72.039038,-1799.4476)"><path
|
||||||
|
d="M 460.60629,594.72881 209.74183,594.7288 84.309616,377.4738 209.74185,160.21882 l 250.86446,1e-5 125.43222,217.255 z"
|
||||||
|
id="path6032"
|
||||||
|
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.236;fill:#f7f5f6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" /><path
|
||||||
|
transform="translate(0,-308.26772)"
|
||||||
|
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#f7f5f6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
|
||||||
|
id="path5875"
|
||||||
|
d="M 385.59154,773.06721 H 284.75659 l -50.41747,-87.32564 50.41748,-87.32563 100.83495,10e-6 50.41748,87.32563 z" /><path
|
||||||
|
transform="translate(0,-308.26772)"
|
||||||
|
id="path5851"
|
||||||
|
d="m 1216.5591,938.53395 123.0545,228.14035 -42.6807,-1.2616 -43.4823,-79.7725 -39.6506,80.3267 -32.6875,-19.7984 53.4737,-100.2848 -37.1157,-73.88955 z"
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><rect
|
||||||
|
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.415;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#f7f5f6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
id="rect5884"
|
||||||
|
width="48.834862"
|
||||||
|
height="226.22897"
|
||||||
|
x="-34.74221"
|
||||||
|
y="446.17056"
|
||||||
|
transform="rotate(-30)" /><path
|
||||||
|
transform="translate(0,-308.26772)"
|
||||||
|
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.509;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#f7f5f6;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
id="path3428"
|
||||||
|
d="m 251.98568,878.63831 -14.02447,24.29109 h -28.04894 l -14.02447,-24.29109 14.02447,-24.2911 h 28.04894 z" /><use
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
xlink:href="#rect5884"
|
||||||
|
id="use4252"
|
||||||
|
transform="rotate(60,268.29786,489.4515)"
|
||||||
|
width="100%"
|
||||||
|
height="100%"
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1" /><rect
|
||||||
|
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:#f7f5f6;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
id="rect4254"
|
||||||
|
width="5.3947482"
|
||||||
|
height="115.12564"
|
||||||
|
x="545.71014"
|
||||||
|
y="467.07007"
|
||||||
|
transform="rotate(30,575.23539,-154.13386)" /></g><path
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1;stroke-width:0.362108"
|
||||||
|
d="m 17.647006,93.08153 c -2.137791,-3.629135 -3.886892,-6.781154 -3.886892,-7.004491 0,-0.223334 2.036859,-3.907974 4.526353,-8.18809 2.489494,-4.280113 4.526353,-7.872269 4.526353,-7.982568 0,-0.110298 -4.202399,-0.200542 -9.338664,-0.200542 H 4.1354931 L 2.2488007,66.408408 C 1.2111198,64.594822 0.36210825,62.964051 0.36210825,62.784474 c 0,-0.179578 0.83310065,-1.791759 1.85133475,-3.582627 l 1.8513347,-3.256122 13.4477393,-0.0031 13.447739,-0.0031 4.75902,-8.234844 4.75902,-8.234843 8.039166,-0.09755 8.039169,-0.09754 -0.718362,1.18387 C 55.443173,41.109708 47.744447,54.433923 38.729994,70.067947 29.715538,85.701971 22.158685,98.760409 21.936986,99.086701 21.60128,99.580783 20.884148,98.576936 17.647006,93.08153 Z"
|
||||||
|
id="path27"
|
||||||
|
transform="matrix(3.4748797,0,0,3.4748797,156.33872,-933.32664)" /><path
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1;stroke-width:0.181054"
|
||||||
|
d="m 20.413065,97.739351 c -2.448138,-4.090679 -6.658726,-11.27144 -6.752434,-11.515638 -0.05373,-0.14001 2.024274,-3.903593 4.617779,-8.363519 2.593506,-4.459926 4.715464,-8.13954 4.715464,-8.17692 0,-0.03738 -4.257035,-0.07107 -9.460078,-0.07486 L 4.0737178,69.601519 2.1145346,66.168465 0.15535114,62.73541 2.2025635,59.176688 l 2.0472121,-3.558721 13.3811224,0.07335 13.381123,0.07335 4.807164,-8.283226 4.807163,-8.283227 h 7.93127 c 4.362198,0 7.931269,0.04091 7.931269,0.0909 0,0.112152 -34.58204,60.050535 -34.768044,60.260772 -0.07356,0.08315 -0.662065,-0.731596 -1.307778,-1.810541 z"
|
||||||
|
id="path28"
|
||||||
|
transform="matrix(3.4748797,0,0,3.4748797,156.33872,-933.32664)" /><path
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1;stroke-width:0.181054"
|
||||||
|
d="m 20.413065,97.739351 c -2.448138,-4.090679 -6.658726,-11.27144 -6.752434,-11.515638 -0.05373,-0.14001 2.024274,-3.903593 4.617779,-8.363519 2.593506,-4.459926 4.715464,-8.13954 4.715464,-8.17692 0,-0.03738 -4.257035,-0.07107 -9.460078,-0.07486 L 4.0737178,69.601519 2.1145346,66.168465 0.15535114,62.73541 2.2025635,59.176688 l 2.0472121,-3.558721 13.3811224,0.07335 13.381123,0.07335 4.807164,-8.283226 4.807163,-8.283227 h 7.93127 c 4.362198,0 7.931269,0.04091 7.931269,0.0909 0,0.112152 -34.58204,60.050535 -34.768044,60.260772 -0.07356,0.08315 -0.662065,-0.731596 -1.307778,-1.810541 z"
|
||||||
|
id="path29"
|
||||||
|
transform="matrix(3.4748797,0,0,3.4748797,156.33872,-933.32664)" /><path
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1;stroke-width:0.181054"
|
||||||
|
d="m 20.413065,97.739351 c -2.448138,-4.090679 -6.658726,-11.27144 -6.752434,-11.515638 -0.05373,-0.14001 2.024274,-3.903593 4.617779,-8.363519 2.593506,-4.459926 4.715464,-8.13954 4.715464,-8.17692 0,-0.03738 -4.257035,-0.07107 -9.460078,-0.07486 L 4.0737178,69.601519 2.1145346,66.168465 0.15535114,62.73541 2.2025635,59.176688 l 2.0472121,-3.558721 13.3811224,0.07335 13.381123,0.07335 4.807164,-8.283226 4.807163,-8.283227 h 7.93127 c 4.362198,0 7.931269,0.04091 7.931269,0.0909 0,0.112152 -34.58204,60.050535 -34.768044,60.260772 -0.07356,0.08315 -0.662065,-0.731596 -1.307778,-1.810541 z"
|
||||||
|
id="path30"
|
||||||
|
transform="matrix(3.4748797,0,0,3.4748797,156.33872,-933.32664)" /><path
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1;stroke-width:0.181054"
|
||||||
|
d="m 20.413065,97.739351 c -2.448138,-4.090679 -6.658726,-11.27144 -6.752434,-11.515638 -0.05373,-0.14001 2.024274,-3.903593 4.617779,-8.363519 2.593506,-4.459926 4.715464,-8.13954 4.715464,-8.17692 0,-0.03738 -4.257035,-0.07107 -9.460078,-0.07486 L 4.0737178,69.601519 2.1145346,66.168465 0.15535114,62.73541 2.2025635,59.176688 l 2.0472121,-3.558721 13.3811224,0.07335 13.381123,0.07335 4.807164,-8.283226 4.807163,-8.283227 h 7.93127 c 4.362198,0 7.931269,0.04091 7.931269,0.0909 0,0.112152 -34.58204,60.050535 -34.768044,60.260772 -0.07356,0.08315 -0.662065,-0.731596 -1.307778,-1.810541 z"
|
||||||
|
id="path31"
|
||||||
|
transform="matrix(3.4748797,0,0,3.4748797,156.33872,-933.32664)" /><path
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1;stroke-width:0.181054"
|
||||||
|
d="m 20.413065,97.739351 c -2.448138,-4.090679 -6.658726,-11.27144 -6.752434,-11.515638 -0.05373,-0.14001 2.024274,-3.903593 4.617779,-8.363519 2.593506,-4.459926 4.715464,-8.13954 4.715464,-8.17692 0,-0.03738 -4.257035,-0.07107 -9.460078,-0.07486 L 4.0737178,69.601519 2.1145346,66.168465 0.15535114,62.73541 2.2025635,59.176688 l 2.0472121,-3.558721 13.3811224,0.07335 13.381123,0.07335 4.807164,-8.283226 4.807163,-8.283227 h 7.93127 c 4.362198,0 7.931269,0.04091 7.931269,0.0909 0,0.112152 -34.58204,60.050535 -34.768044,60.260772 -0.07356,0.08315 -0.662065,-0.731596 -1.307778,-1.810541 z"
|
||||||
|
id="path32"
|
||||||
|
transform="matrix(3.4748797,0,0,3.4748797,156.33872,-933.32664)" /><path
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1;stroke-width:0.181054"
|
||||||
|
d="m 20.413065,97.739351 c -2.448138,-4.090679 -6.658726,-11.27144 -6.752434,-11.515638 -0.05373,-0.14001 2.024274,-3.903593 4.617779,-8.363519 2.593506,-4.459926 4.715464,-8.13954 4.715464,-8.17692 0,-0.03738 -4.257035,-0.07107 -9.460078,-0.07486 L 4.0737178,69.601519 2.1145346,66.168465 0.15535114,62.73541 2.2025635,59.176688 l 2.0472121,-3.558721 13.3811224,0.07335 13.381123,0.07335 4.807164,-8.283226 4.807163,-8.283227 h 7.93127 c 4.362198,0 7.931269,0.04091 7.931269,0.0909 0,0.112152 -34.58204,60.050535 -34.768044,60.260772 -0.07356,0.08315 -0.662065,-0.731596 -1.307778,-1.810541 z"
|
||||||
|
id="path33"
|
||||||
|
transform="matrix(3.4748797,0,0,3.4748797,156.33872,-933.32664)" /><path
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1;stroke-width:0.181054"
|
||||||
|
d="m 20.413065,97.739351 c -2.448138,-4.090679 -6.658726,-11.27144 -6.752434,-11.515638 -0.05373,-0.14001 2.024274,-3.903593 4.617779,-8.363519 2.593506,-4.459926 4.715464,-8.13954 4.715464,-8.17692 0,-0.03738 -4.257035,-0.07107 -9.460078,-0.07486 L 4.0737178,69.601519 2.1145346,66.168465 0.15535114,62.73541 2.2025635,59.176688 l 2.0472121,-3.558721 13.3811224,0.07335 13.381123,0.07335 4.807164,-8.283226 4.807163,-8.283227 h 7.93127 c 4.362198,0 7.931269,0.04091 7.931269,0.0909 0,0.112152 -34.58204,60.050535 -34.768044,60.260772 -0.07356,0.08315 -0.662065,-0.731596 -1.307778,-1.810541 z"
|
||||||
|
id="path34"
|
||||||
|
transform="matrix(3.4748797,0,0,3.4748797,156.33872,-933.32664)" /><path
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1;stroke-width:0.181054"
|
||||||
|
d="m 20.413065,97.739351 c -2.448138,-4.090679 -6.658726,-11.27144 -6.752434,-11.515638 -0.05373,-0.14001 2.024274,-3.903593 4.617779,-8.363519 2.593506,-4.459926 4.715464,-8.13954 4.715464,-8.17692 0,-0.03738 -4.257035,-0.07107 -9.460078,-0.07486 L 4.0737178,69.601519 2.1145346,66.168465 0.15535114,62.73541 2.2025635,59.176688 l 2.0472121,-3.558721 13.3811224,0.07335 13.381123,0.07335 4.807164,-8.283226 4.807163,-8.283227 h 7.93127 c 4.362198,0 7.931269,0.04091 7.931269,0.0909 0,0.112152 -34.58204,60.050535 -34.768044,60.260772 -0.07356,0.08315 -0.662065,-0.731596 -1.307778,-1.810541 z"
|
||||||
|
id="path35"
|
||||||
|
transform="matrix(3.4748797,0,0,3.4748797,156.33872,-933.32664)" /></g><g
|
||||||
|
id="layer3"
|
||||||
|
style="display:inline;opacity:1;fill:#28b3fc;fill-opacity:1"
|
||||||
|
transform="translate(-14.982227,-492.1621)"><path
|
||||||
|
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:#28b3fc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;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"
|
||||||
|
xlink:href="#path3336-6"
|
||||||
|
y="0"
|
||||||
|
x="0"
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1" /><use
|
||||||
|
height="100%"
|
||||||
|
width="100%"
|
||||||
|
transform="rotate(-60,407.31177,-715.70016)"
|
||||||
|
id="use3445-0"
|
||||||
|
xlink:href="#path3336-6"
|
||||||
|
y="0"
|
||||||
|
x="0"
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1" /><use
|
||||||
|
height="100%"
|
||||||
|
width="100%"
|
||||||
|
transform="rotate(180,407.41868,-715.7565)"
|
||||||
|
id="use3449-5"
|
||||||
|
xlink:href="#path3336-6"
|
||||||
|
y="0"
|
||||||
|
x="0"
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1" /><path
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1;stroke:#28b3fc;stroke-width:7.88004;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
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" /><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;fill:#28b3fc;fill-opacity:1;stroke:#28b3fc;stroke-width:7.88004;stroke-dasharray:none;stroke-opacity:1" /><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;fill:#28b3fc;fill-opacity:1;stroke:#28b3fc;stroke-width:7.88004;stroke-dasharray:none;stroke-opacity:1" /></g><g
|
||||||
|
id="g104"
|
||||||
|
style="fill:url(#linearGradient107);stroke:none"
|
||||||
|
transform="rotate(-13.062247,340.02897,-863.93232)"><path
|
||||||
|
id="use3449-5-0-0"
|
||||||
|
d="m 331.77633,-1001.5212 94.91305,225.23301 -55.78631,-6.46377 -25.29508,-60.48604 -39.63845,52.03815 -27.6842,-3.48227 -11.10824,-26.27568 56.46054,-74.04107 -25.77721,-61.5105 z"
|
||||||
|
style="fill:#28b3fc;fill-opacity:1" /><path
|
||||||
|
id="use3449-5-0-0-6"
|
||||||
|
d="m 457.16967,-744.75745 -70.00051,-234.1759 54.76023,12.45846 18.60597,62.86668 45.03324,-47.44663 27.14534,6.4555 8.2017,27.32283 -64.13603,67.50143 18.97452,63.93729 z"
|
||||||
|
style="fill:#ff0d01;fill-opacity:1" /><path
|
||||||
|
id="use3449-5-0-0-4"
|
||||||
|
d="m 277.21377,-582.32585 178.97491,-166.45237 -53.52586,-16.99636 -47.88683,44.78006 -14.79485,-63.7204 -26.67512,-8.18413 -20.91172,19.40373 21.10703,90.68829 -48.74692,45.51646 z"
|
||||||
|
style="fill:#f8f641;fill-opacity:1" /></g></g></g></g><path
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1;stroke-width:0.181054"
|
||||||
|
d="m 20.413065,97.739351 c -2.448138,-4.090679 -6.658726,-11.27144 -6.752434,-11.515638 -0.05373,-0.14001 2.024274,-3.903593 4.617779,-8.363519 2.593506,-4.459926 4.715464,-8.13954 4.715464,-8.17692 0,-0.03738 -4.257035,-0.07107 -9.460078,-0.07486 L 4.0737178,69.601519 2.1145346,66.168465 0.15535114,62.73541 2.2025635,59.176688 l 2.0472121,-3.558721 13.3811224,0.07335 13.381123,0.07335 4.807164,-8.283226 4.807163,-8.283227 h 7.93127 c 4.362198,0 7.931269,0.04091 7.931269,0.0909 0,0.112152 -34.58204,60.050535 -34.768044,60.260772 -0.07356,0.08315 -0.662065,-0.731596 -1.307778,-1.810541 z"
|
||||||
|
id="path36"
|
||||||
|
transform="matrix(0.58305237,0,0,0.58305237,64.401373,52.754168)" /><path
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1;stroke:#28b3fc;stroke-width:2.26772;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="M 21.228346,98.82575 C 20.775825,98.187139 14.573556,87.698587 14.099569,86.770393 l -0.346608,-0.67875 1.796437,-3.213914 c 0.988041,-1.767653 3.067246,-5.409743 4.620457,-8.093538 1.553211,-2.683792 2.824019,-4.931476 2.824019,-4.99485 0,-0.110336 -11.090545,-0.351953 -16.3853984,-0.356972 L 4.0737178,69.429968 2.217913,66.175832 C 1.1972204,64.386056 0.36210825,62.847854 0.36210825,62.757606 c 0,-0.09025 0.87964515,-1.70058 1.95476695,-3.578513 l 1.954767,-3.414422 13.3895698,0.06926 13.389571,0.06926 4.821268,-8.307221 4.821271,-8.307221 3.145111,-0.04488 c 1.729813,-0.02469 5.235571,0.01605 7.790576,0.09053 l 4.645463,0.135412 -3.534135,6.15584 c -4.146422,7.222338 -16.886029,29.318862 -25.000346,43.362463 -3.135747,5.427098 -5.801825,9.976251 -5.924618,10.109228 -0.183451,0.198671 -0.288115,0.150249 -0.587027,-0.271581 z"
|
||||||
|
id="path37"
|
||||||
|
transform="matrix(0.58305237,0,0,0.58305237,64.401373,52.754168)" /><path
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1;stroke:#28b3fc;stroke-width:2.26772;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 97.636535,120.63066 c -1.389583,-2.41665 -4.382703,-7.63252 -6.651376,-11.59081 l -4.12486,-7.1969 -4.45825,-0.005 c -4.928423,-0.005 -14.743895,-0.1852 -14.838725,-0.27196 -0.03322,-0.0304 -1.827632,-3.096939 -3.987593,-6.814561 l -3.9272,-6.759314 17.535793,-0.04616 c 9.644687,-0.02539 25.387006,-0.02539 34.982936,0 l 17.44715,0.04616 -1.54239,2.715812 c -0.84832,1.493697 -2.61343,4.622573 -3.92248,6.953058 l -2.38008,4.237245 -9.38708,-0.11294 c -7.6636,-0.0922 -9.37652,-0.0697 -9.32957,0.12287 0.0316,0.1297 2.12168,3.83356 4.64454,8.23081 l 4.58703,7.995 -1.97119,3.3966 -1.9712,3.39659 -4.08947,0.0486 -4.08947,0.0486 z"
|
||||||
|
id="path38"
|
||||||
|
transform="matrix(0.58305237,0,0,0.58305237,64.401373,52.754168)" /><path
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1;stroke:#28b3fc;stroke-width:2.26772;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="M 87.802229,39.150266 C 80.890113,27.177278 73.023088,13.551901 70.319951,8.8716522 L 65.405158,0.36210825 68.59656,0.24891517 c 1.755271,-0.0622562 5.350472,-0.12261799 7.989335,-0.1341373 l 4.797935,-0.0209442 4.519855,7.89261083 c 2.48592,4.3409365 4.610279,8.0162745 4.7208,8.1674195 0.162204,0.22183 1.117147,-1.300038 4.953498,-7.8942647 l 4.752557,-8.16907224 h 3.92896 3.92895 l 2.03256,3.50763344 c 1.1179,1.9291986 2.03255,3.5544662 2.03255,3.6117061 0,0.05724 -3.01666,5.2908554 -6.70369,11.6302564 l -6.703688,11.526185 4.779848,8.329337 4.77986,8.329337 -3.94792,6.877008 c -2.17135,3.782353 -3.97949,6.908583 -4.01808,6.947175 -0.0386,0.03859 -5.725543,-9.725911 -12.637661,-21.698899 z"
|
||||||
|
id="path39"
|
||||||
|
transform="matrix(0.58305237,0,0,0.58305237,64.401373,52.754168)" /></g><metadata
|
||||||
|
id="metadata39"><rdf:RDF><cc:Work
|
||||||
|
rdf:about=""><cc:license
|
||||||
|
rdf:resource="http://creativecommons.org/publicdomain/zero/1.0/" /><dc:title>DashNix</dc:title></cc:Work><cc:License
|
||||||
|
rdf:about="http://creativecommons.org/publicdomain/zero/1.0/"><cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Reproduction" /><cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Distribution" /><cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" /></cc:License></rdf:RDF></metadata></svg>
|
||||||
|
After Width: | Height: | Size: 26 KiB |
1
docs/src/mods.md
Executable file
|
|
@ -0,0 +1 @@
|
||||||
|
# This file handles configuration of individual modules.
|
||||||
51
example/flake.nix
Normal file
|
|
@ -0,0 +1,51 @@
|
||||||
|
{
|
||||||
|
description = "some dots";
|
||||||
|
|
||||||
|
inputs = {
|
||||||
|
nixpkgs.url = "github:NixOs/nixpkgs/nixos-unstable";
|
||||||
|
stable.url = "github:NixOs/nixpkgs/nixos-24.05";
|
||||||
|
dashNix = {
|
||||||
|
url = "github:Xetibo/DashNix";
|
||||||
|
inputs = {
|
||||||
|
nixpkgs.follows = "nixpkgs";
|
||||||
|
stable.follows = "stable";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs = inputs: {
|
||||||
|
nixosConfigurations = inputs.dashNix.dashNixLib.buildSystems {root = ./.;};
|
||||||
|
};
|
||||||
|
|
||||||
|
nixConfig = {
|
||||||
|
builders-use-substitutes = true;
|
||||||
|
|
||||||
|
extra-substituters = [
|
||||||
|
"https://hyprland.cachix.org"
|
||||||
|
"https://anyrun.cachix.org"
|
||||||
|
"https://cache.garnix.io"
|
||||||
|
"https://oxipaste.cachix.org"
|
||||||
|
"https://oxinoti.cachix.org"
|
||||||
|
"https://oxishut.cachix.org"
|
||||||
|
"https://oxidash.cachix.org"
|
||||||
|
"https://oxicalc.cachix.org"
|
||||||
|
"https://hyprdock.cachix.org"
|
||||||
|
"https://reset.cachix.org"
|
||||||
|
"https://dashvim.cachix.org"
|
||||||
|
];
|
||||||
|
|
||||||
|
extra-trusted-public-keys = [
|
||||||
|
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
|
||||||
|
"anyrun.cachix.org-1:pqBobmOjI7nKlsUMV25u9QHa9btJK65/C8vnO3p346s="
|
||||||
|
"cache.garnix.io:CTFPyKSLcx5RMJKfLo5EEPUObbA78b0YQ2DTCJXqr9g="
|
||||||
|
"oxipaste.cachix.org-1:n/oA3N3Z+LJP7eIWOwuoLd9QnPyZXqFjLgkahjsdDGc="
|
||||||
|
"oxinoti.cachix.org-1:dvSoJl2Pjo5HMaNngdBbSaixK9BSf2N8gzjP2MdGvfc="
|
||||||
|
"oxishut.cachix.org-1:axyAGF3XMh1IyMAW4UMbQCdMNovDH0KH6hqLLRJH8jU="
|
||||||
|
"oxidash.cachix.org-1:5K2FNHp7AS8VF7LmQkJAUG/dm6UHCz4ngshBVbjFX30="
|
||||||
|
"oxicalc.cachix.org-1:qF3krFc20tgSmtR/kt6Ku/T5QiG824z79qU5eRCSBTQ="
|
||||||
|
"hyprdock.cachix.org-1:HaROK3fBvFWIMHZau3Vq1TLwUoJE8yRbGLk0lEGzv3Y="
|
||||||
|
"reset.cachix.org-1:LfpnUUdG7QM/eOkN7NtA+3+4Ar/UBeYB+3WH+GjP9Xo="
|
||||||
|
"dashvim.cachix.org-1:uLRdxp1WOWHnsZZtu3SwUWZRsvC7SXo0Gyk3tIefuL0="
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
68
example/hosts/example/configuration.nix
Normal file
|
|
@ -0,0 +1,68 @@
|
||||||
|
{config, ...}: {
|
||||||
|
# TODO denote important changes
|
||||||
|
|
||||||
|
# variables for system
|
||||||
|
conf = {
|
||||||
|
# TODO your username
|
||||||
|
username = "exampleName";
|
||||||
|
# TODO only needed when you use intel -> amd is default
|
||||||
|
# cpu = "intel";
|
||||||
|
# TODO your xkb layout
|
||||||
|
locale = "en_US.UTF-8";
|
||||||
|
# TODO your timezone
|
||||||
|
timezone = "Europe/Zurich";
|
||||||
|
};
|
||||||
|
|
||||||
|
# modules
|
||||||
|
mods = {
|
||||||
|
# default disk config has root home boot and swap partition, overwrite if you want something different
|
||||||
|
sops.enable = false;
|
||||||
|
nextcloud.enable = false;
|
||||||
|
wm.monitors = [
|
||||||
|
# Example
|
||||||
|
# {
|
||||||
|
# name = "DP-1";
|
||||||
|
# resolutionX = 3440;
|
||||||
|
# resolutionY = 1440;
|
||||||
|
# refreshrate = 180;
|
||||||
|
# positionX = 2560;
|
||||||
|
# positionY = 0;
|
||||||
|
# scale = 1;
|
||||||
|
# transform = "0";
|
||||||
|
# vrr = false;
|
||||||
|
# }
|
||||||
|
];
|
||||||
|
gpu.nvidia.enable = true;
|
||||||
|
kdeConnect.enable = true;
|
||||||
|
# login manager:
|
||||||
|
# default is greetd
|
||||||
|
# greetd = { };
|
||||||
|
# sddm = { };
|
||||||
|
# gdm = { };
|
||||||
|
drives = {
|
||||||
|
# default assumes ROOT, BOOT, HOME and SWAP labaled drives exist
|
||||||
|
# for an example without HOME see below
|
||||||
|
# defaultDrives.enable = false;
|
||||||
|
# extraDrives = [
|
||||||
|
# {
|
||||||
|
# name = "boot";
|
||||||
|
# drive = {
|
||||||
|
# device = "/dev/disk/by-label/BOOT";
|
||||||
|
# fsType = "vfat";
|
||||||
|
# options = [ "rw" "fmask=0022" "dmask=0022" "noatime" ];
|
||||||
|
# };
|
||||||
|
# }
|
||||||
|
# {
|
||||||
|
# name = "";
|
||||||
|
# drive = {
|
||||||
|
# device = "/dev/disk/by-label/ROOT";
|
||||||
|
# fsType = "ext4";
|
||||||
|
# options = [ "noatime" "nodiratime" "discard" ];
|
||||||
|
# };
|
||||||
|
# }
|
||||||
|
# ];
|
||||||
|
# You can also use disko to format your disks on installation.
|
||||||
|
# Please refer to the Documentation about the drives module for an example.
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
3
example/hosts/example/hardware.nix
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
# this file adds custom NixOS configuration
|
||||||
|
}
|
||||||
3
example/hosts/example/home.nix
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
# this file adds custom home-manager configuration
|
||||||
|
}
|
||||||
3
example/secrets/secrets.md
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
# Secrets
|
||||||
|
|
||||||
|
This file is for sops-nix and is also where your keys for various secrets will be stored.
|
||||||
0
example/secrets/secrets.yaml
Normal file
113
flake.nix
Normal file
|
|
@ -0,0 +1,113 @@
|
||||||
|
{
|
||||||
|
description = "DashNix";
|
||||||
|
|
||||||
|
inputs = {
|
||||||
|
unstable.url = "github:NixOs/nixpkgs/nixos-unstable";
|
||||||
|
stable.url = "github:NixOs/nixpkgs/nixos-25.05";
|
||||||
|
nixos-wsl.url = "github:nix-community/NixOS-WSL/main";
|
||||||
|
nur.url = "github:nix-community/NUR";
|
||||||
|
lanzaboote = {
|
||||||
|
url = "github:nix-community/lanzaboote/v0.4.2";
|
||||||
|
inputs.nixpkgs.follows = "unstable";
|
||||||
|
};
|
||||||
|
statix.url = "github:oppiliappan/statix?ref=master";
|
||||||
|
# Darkreader requires es20, hence a stable pin
|
||||||
|
pkgsDarkreader.url = "github:NixOs/nixpkgs/nixos-24.11";
|
||||||
|
|
||||||
|
home-manager = {
|
||||||
|
url = "github:nix-community/home-manager";
|
||||||
|
inputs.nixpkgs.follows = "unstable";
|
||||||
|
};
|
||||||
|
cachy.url = "github:xddxdd/nix-cachyos-kernel?rev=bb7b8aa687464f24dcd452354d9621331d6b0737";
|
||||||
|
|
||||||
|
sops-nix.url = "github:Mic92/sops-nix";
|
||||||
|
|
||||||
|
hyprland.url = "github:hyprwm/Hyprland";
|
||||||
|
|
||||||
|
ironbar = {
|
||||||
|
url = "github:JakeStanger/ironbar";
|
||||||
|
inputs.nixpkgs.follows = "unstable";
|
||||||
|
};
|
||||||
|
|
||||||
|
zen-browser.url = "github:youwen5/zen-browser-flake";
|
||||||
|
|
||||||
|
stylix.url = "github:danth/stylix";
|
||||||
|
base16.url = "github:SenchoPens/base16.nix";
|
||||||
|
disko.url = "github:nix-community/disko/latest";
|
||||||
|
|
||||||
|
anyrun.url = "github:Kirottu/anyrun";
|
||||||
|
oxicalc.url = "github:Xetibo/OxiCalc";
|
||||||
|
oxishut.url = "github:Xetibo/OxiShut";
|
||||||
|
oxinoti.url = "github:Xetibo/OxiNoti";
|
||||||
|
oxidash.url = "github:Xetibo/OxiDash";
|
||||||
|
oxipaste.url = "github:Xetibo/OxiPaste";
|
||||||
|
oxirun.url = "github:Xetibo/OxiRun";
|
||||||
|
dashvim.url = "github:Xetibo/DashVim";
|
||||||
|
|
||||||
|
hyprdock.url = "github:Xetibo/hyprdock";
|
||||||
|
reset.url = "github:Xetibo/ReSet";
|
||||||
|
reset-plugins.url = "github:Xetibo/ReSet-Plugins";
|
||||||
|
|
||||||
|
superfreq.url = "github:NotAShelf/superfreq";
|
||||||
|
|
||||||
|
compose.url = "github:garnix-io/nixos-compose";
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs = {self, ...} @ inputs: let
|
||||||
|
currentSystem = "x86_64-linux";
|
||||||
|
permittedPackages = [
|
||||||
|
"olm-3.2.16"
|
||||||
|
];
|
||||||
|
importPkgsFn = import ./lib/importPkgs.nix;
|
||||||
|
defaultConfigureFn = pkgs:
|
||||||
|
importPkgsFn {
|
||||||
|
inherit inputs currentSystem permittedPackages pkgs;
|
||||||
|
};
|
||||||
|
stable = defaultConfigureFn inputs.stable;
|
||||||
|
unstable = defaultConfigureFn inputs.unstable;
|
||||||
|
pkgsDarkreader = defaultConfigureFn inputs.pkgsDarkreader;
|
||||||
|
in rec {
|
||||||
|
dashNixLib = import ./lib {
|
||||||
|
inherit
|
||||||
|
self
|
||||||
|
inputs
|
||||||
|
unstable
|
||||||
|
permittedPackages
|
||||||
|
;
|
||||||
|
dashNixAdditionalProps = {
|
||||||
|
inherit pkgsDarkreader;
|
||||||
|
};
|
||||||
|
system = currentSystem;
|
||||||
|
};
|
||||||
|
docs = import ./docs {
|
||||||
|
inherit inputs;
|
||||||
|
pkgs = unstable;
|
||||||
|
system = currentSystem;
|
||||||
|
inherit (inputs.unstable) lib;
|
||||||
|
inherit (dashNixLib) buildSystems;
|
||||||
|
};
|
||||||
|
lint = inputs.statix.packages.${currentSystem}.default;
|
||||||
|
format = unstable.alejandra;
|
||||||
|
dashNixInputs = inputs;
|
||||||
|
stablePkgs = stable;
|
||||||
|
unstablePkgs = unstable;
|
||||||
|
modules = ./modules;
|
||||||
|
iso = dashNixLib.buildIso.config.system.build.isoImage;
|
||||||
|
nixosConfigurations = dashNixLib.buildSystems {root = ./example/.;};
|
||||||
|
|
||||||
|
mkFlake = stablePkgs.writeShellApplication {
|
||||||
|
name = "Create example config";
|
||||||
|
text =
|
||||||
|
/*
|
||||||
|
bash
|
||||||
|
*/
|
||||||
|
''
|
||||||
|
mkdir -p ~/gits/nixos
|
||||||
|
mkdir -p ~/gits/backup_nixos
|
||||||
|
|
||||||
|
mv ~/gits/nixos/* ~/gits/backup_nixos/
|
||||||
|
cp -r ${./example}/* ~/gits/nixos/
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
42
home/common.nix
Normal file
|
|
@ -0,0 +1,42 @@
|
||||||
|
{
|
||||||
|
mkDashDefault,
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
username = config.conf.username;
|
||||||
|
in {
|
||||||
|
manual = {
|
||||||
|
html.enable = mkDashDefault false;
|
||||||
|
json.enable = mkDashDefault false;
|
||||||
|
manpages.enable = mkDashDefault false;
|
||||||
|
};
|
||||||
|
|
||||||
|
fonts.fontconfig.enable = mkDashDefault true;
|
||||||
|
|
||||||
|
home = {
|
||||||
|
username = mkDashDefault username;
|
||||||
|
homeDirectory = mkDashDefault "/home/${username}";
|
||||||
|
sessionPath = ["$HOME/.cargo/bin"];
|
||||||
|
|
||||||
|
enableNixpkgsReleaseCheck = mkDashDefault false;
|
||||||
|
sessionVariables = {
|
||||||
|
GOROOT = mkDashDefault "$HOME/.go";
|
||||||
|
QT_QPA_PLATFORMTHEME = mkDashDefault "qt5ct";
|
||||||
|
};
|
||||||
|
|
||||||
|
keyboard = mkDashDefault null;
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.nix-index = {
|
||||||
|
enable = mkDashDefault true;
|
||||||
|
enableFishIntegration = mkDashDefault true;
|
||||||
|
};
|
||||||
|
|
||||||
|
nix = {
|
||||||
|
extraOptions = lib.mkIf (config ? sops.secrets && config.sops.secrets ? access.path) ''
|
||||||
|
!include ${config.sops.secrets.access.path}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
||||||
66
home/default.nix
Normal file
|
|
@ -0,0 +1,66 @@
|
||||||
|
{
|
||||||
|
mkDashDefault,
|
||||||
|
dashNixAdditionalProps,
|
||||||
|
config,
|
||||||
|
homeMods,
|
||||||
|
inputs,
|
||||||
|
lib,
|
||||||
|
additionalHomeConfig,
|
||||||
|
mod,
|
||||||
|
pkgs,
|
||||||
|
root,
|
||||||
|
alternativePkgs,
|
||||||
|
system,
|
||||||
|
stable,
|
||||||
|
unstable,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
xdg = {
|
||||||
|
portal.config.common = {
|
||||||
|
default = mkDashDefault "hyprland;gtk";
|
||||||
|
"org.freedesktop.impl.portal.FileChooser" = lib.mkIf (config.mods.media.filePickerPortal != "Default") "shana";
|
||||||
|
};
|
||||||
|
portal = {
|
||||||
|
enable = mkDashDefault true;
|
||||||
|
extraPortals = with pkgs; [
|
||||||
|
xdg-desktop-portal-gtk # prob needed either way
|
||||||
|
(lib.mkIf (config.mods.media.filePickerPortal != "Default") xdg-desktop-portal-shana)
|
||||||
|
(lib.mkIf (config.mods.media.filePickerPortal == "Kde") kdePackages.xdg-desktop-portal-kde)
|
||||||
|
# Gnome uses their file manager, kinda cool tbh
|
||||||
|
(lib.mkIf (config.mods.media.filePickerPortal == "Gnome" && !config.mods.nautilus.enable) nautilus)
|
||||||
|
(lib.mkIf (config.mods.media.filePickerPortal == "Lxqt") xdg-desktop-portal-lxqt)
|
||||||
|
(lib.mkIf (config.mods.media.filePickerPortal == "Term") xdg-desktop-portal-termfilechooser)
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
home-manager = {
|
||||||
|
useGlobalPkgs = mkDashDefault true;
|
||||||
|
useUserPackages = mkDashDefault true;
|
||||||
|
extraSpecialArgs = {
|
||||||
|
inherit
|
||||||
|
inputs
|
||||||
|
root
|
||||||
|
alternativePkgs
|
||||||
|
system
|
||||||
|
stable
|
||||||
|
unstable
|
||||||
|
dashNixAdditionalProps
|
||||||
|
;
|
||||||
|
mkDashDefault = import ../lib/override.nix {inherit lib;};
|
||||||
|
};
|
||||||
|
|
||||||
|
users.${config.conf.username} = {
|
||||||
|
disabledModules = ["programs/anyrun.nix"];
|
||||||
|
imports =
|
||||||
|
[
|
||||||
|
./common.nix
|
||||||
|
./themes
|
||||||
|
./sync.nix
|
||||||
|
../lib/foxwrappers.nix
|
||||||
|
]
|
||||||
|
++ homeMods
|
||||||
|
++ lib.optional (builtins.pathExists additionalHomeConfig) additionalHomeConfig
|
||||||
|
++ lib.optional (builtins.pathExists mod) mod;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
55
home/sync.nix
Normal file
|
|
@ -0,0 +1,55 @@
|
||||||
|
# derived from NixOS wiki
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
username = config.mods.nextcloud.username;
|
||||||
|
password =
|
||||||
|
if (config.sops.secrets ? nextcloud.path)
|
||||||
|
then config.sops.secrets.nextcloud.path
|
||||||
|
else "";
|
||||||
|
url = config.mods.nextcloud.url;
|
||||||
|
synclist = config.mods.nextcloud.synclist;
|
||||||
|
in
|
||||||
|
lib.mkIf config.mods.nextcloud.enable {
|
||||||
|
systemd.user = {
|
||||||
|
services = builtins.listToAttrs (
|
||||||
|
map (opts: {
|
||||||
|
name = "${opts.name}";
|
||||||
|
value = {
|
||||||
|
Unit = {
|
||||||
|
Description = "Auto sync Nextcloud";
|
||||||
|
After = "network-online.target";
|
||||||
|
};
|
||||||
|
Service = {
|
||||||
|
Type = "simple";
|
||||||
|
ExecStart = "${pkgs.bash}/bin/bash -c '${pkgs.nextcloud-client}/bin/nextcloudcmd -h --path ${opts.remote} ${opts.local} https://${username}:$(bat ${password})@${url}'";
|
||||||
|
TimeoutStopSec = "180";
|
||||||
|
KillMode = "process";
|
||||||
|
KillSignal = "SIGINT";
|
||||||
|
};
|
||||||
|
Install.WantedBy = ["multi-user.target"];
|
||||||
|
};
|
||||||
|
})
|
||||||
|
synclist
|
||||||
|
);
|
||||||
|
timers = builtins.listToAttrs (
|
||||||
|
map (opts: {
|
||||||
|
name = "${opts.name}";
|
||||||
|
value = {
|
||||||
|
Unit.Description = "Automatic sync files with Nextcloud when booted up after 1 minute then rerun every 60 minutes";
|
||||||
|
Timer.OnBootSec = "1min";
|
||||||
|
Timer.OnUnitActiveSec = "60min";
|
||||||
|
Install.WantedBy = [
|
||||||
|
"multi-user.target"
|
||||||
|
"timers.target"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
})
|
||||||
|
synclist
|
||||||
|
);
|
||||||
|
startServices = true;
|
||||||
|
};
|
||||||
|
}
|
||||||
8
home/themes/default.nix
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./qt.nix
|
||||||
|
./kdeglobals.nix
|
||||||
|
./oxiced.nix
|
||||||
|
./firefoxTheme.nix
|
||||||
|
];
|
||||||
|
}
|
||||||
327
home/themes/firefoxTheme.nix
Normal file
|
|
@ -0,0 +1,327 @@
|
||||||
|
# css from https://github.com/catppuccin/zen-browser/tree/main/themes
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
inputs,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
# at time of using this here, stylix might not be evaluated yet
|
||||||
|
# hence ensure it is by using base16 mkSchemeAttrs
|
||||||
|
base16 = pkgs.callPackage inputs.base16.lib {};
|
||||||
|
scheme = base16.mkSchemeAttrs config.stylix.base16Scheme;
|
||||||
|
userChrome =
|
||||||
|
/*
|
||||||
|
css
|
||||||
|
*/
|
||||||
|
''
|
||||||
|
/* Catppuccin Mocha Blue userContent.css*/
|
||||||
|
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
|
||||||
|
/* Common variables affecting all pages */
|
||||||
|
@-moz-document url-prefix("about:") {
|
||||||
|
:root {
|
||||||
|
--in-content-page-color: #${scheme.base05} !important;
|
||||||
|
--color-accent-primary: #${scheme.base0D} !important;
|
||||||
|
--color-accent-primary-hover: rgb(163, 197, 251) !important; // TODO
|
||||||
|
--color-accent-primary-active: rgb(138, 153, 250) !important; // TODO
|
||||||
|
background-color: #${scheme.base00} !important;
|
||||||
|
--in-content-page-background: #${scheme.base00} !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Variables and styles specific to about:newtab and about:home */
|
||||||
|
@-moz-document url("about:newtab"), url("about:home") {
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--newtab-background-color: #${scheme.base00} !important;
|
||||||
|
--newtab-background-color-secondary: #${scheme.base02} !important;
|
||||||
|
--newtab-element-hover-color: #${scheme.base02} !important;
|
||||||
|
--newtab-text-primary-color: #${scheme.base05} !important;
|
||||||
|
--newtab-wordmark-color: #${scheme.base05} !important;
|
||||||
|
--newtab-primary-action-background: #${scheme.base0D} !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon {
|
||||||
|
color: #${scheme.base0D} !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-wrapper .logo-and-wordmark .logo {
|
||||||
|
//background: url("zen-logo-mocha.svg"), url("https://raw.githubusercontent.com/IAmJafeth/zen-browser/main/themes/Mocha/Blue/zen-logo-mocha.svg") no-repeat center !important; // TODO
|
||||||
|
display: inline-block !important;
|
||||||
|
height: 82px !important;
|
||||||
|
width: 82px !important;
|
||||||
|
background-size: 82px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 609px) {
|
||||||
|
.search-wrapper .logo-and-wordmark .logo {
|
||||||
|
background-size: 64px !important;
|
||||||
|
height: 64px !important;
|
||||||
|
width: 64px !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-outer:is(:hover, :focus, .active):not(.placeholder) .card-title {
|
||||||
|
color: #${scheme.base0D} !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.top-site-outer .search-topsite {
|
||||||
|
background-color: #${scheme.base0D} !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.compact-cards .card-outer .card-context .card-context-icon.icon-download {
|
||||||
|
fill: #${scheme.base0B} !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Variables and styles specific to about:preferences */
|
||||||
|
@-moz-document url-prefix("about:preferences") {
|
||||||
|
:root {
|
||||||
|
--zen-colors-tertiary: #${scheme.base01} !important;
|
||||||
|
--in-content-text-color: #${scheme.base05} !important;
|
||||||
|
--link-color: #${scheme.base0D} !important;
|
||||||
|
--link-color-hover: rgb(163, 197, 251) !important; // TODO
|
||||||
|
--zen-colors-primary: #${scheme.base02} !important;
|
||||||
|
--in-content-box-background: #${scheme.base02} !important;
|
||||||
|
--zen-primary-color: #${scheme.base0D} !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
groupbox , moz-card{
|
||||||
|
background: #${scheme.base00} !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
button,
|
||||||
|
groupbox menulist {
|
||||||
|
background: #${scheme.base02} !important;
|
||||||
|
color: #${scheme.base05} !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-content {
|
||||||
|
background-color: #${scheme.base01} !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.identity-color-blue {
|
||||||
|
--identity-tab-color: #8aadf4 !important; // TODO
|
||||||
|
--identity-icon-color: #8aadf4 !important; // TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
.identity-color-turquoise {
|
||||||
|
--identity-tab-color: #8bd5ca !important; // TODO
|
||||||
|
--identity-icon-color: #8bd5ca !important; // TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
.identity-color-green {
|
||||||
|
--identity-tab-color: #${scheme.base0B} !important;
|
||||||
|
--identity-icon-color: #${scheme.base0B} !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.identity-color-yellow {
|
||||||
|
--identity-tab-color: #eed49f !important; // TODO
|
||||||
|
--identity-icon-color: #eed49f !important; // TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
.identity-color-orange {
|
||||||
|
--identity-tab-color: #f5a97f !important; // TODO
|
||||||
|
--identity-icon-color: #f5a97f !important; // TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
.identity-color-red {
|
||||||
|
--identity-tab-color: #ed8796 !important; // TODO
|
||||||
|
--identity-icon-color: #ed8796 !important; // TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
.identity-color-pink {
|
||||||
|
--identity-tab-color: #f5bde6 !important; // TODO
|
||||||
|
--identity-icon-color: #f5bde6 !important; // TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
.identity-color-purple {
|
||||||
|
--identity-tab-color: #c6a0f6 !important; // TODO
|
||||||
|
--identity-icon-color: #c6a0f6 !important; // TODO
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Variables and styles specific to about:addons */
|
||||||
|
@-moz-document url-prefix("about:addons") {
|
||||||
|
:root {
|
||||||
|
--zen-dark-color-mix-base: #${scheme.base01} !important;
|
||||||
|
--background-color-box: #${scheme.base00} !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Variables and styles specific to about:protections */
|
||||||
|
@-moz-document url-prefix("about:protections") {
|
||||||
|
:root {
|
||||||
|
--zen-primary-color: #${scheme.base00} !important;
|
||||||
|
--social-color: #${scheme.base0E} !important;
|
||||||
|
--coockie-color: #${scheme.base08} !important;
|
||||||
|
--fingerprinter-color: #${scheme.base0A} !important;
|
||||||
|
--cryptominer-color: #${scheme.base07} !important;
|
||||||
|
--tracker-color: #${scheme.base0B} !important;
|
||||||
|
--in-content-primary-button-background-hover: rgb(81, 83, 05) !important;
|
||||||
|
--in-content-primary-button-text-color-hover: #${scheme.base05} !important;
|
||||||
|
--in-content-primary-button-background: #${scheme.base03} !important;
|
||||||
|
--in-content-primary-button-text-color: #${scheme.base05} !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.card {
|
||||||
|
background-color: #${scheme.base02} !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
userContent =
|
||||||
|
/*
|
||||||
|
css
|
||||||
|
*/
|
||||||
|
''
|
||||||
|
/* Catppuccin Mocha Blue userChrome.css*/
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--zen-colors-primary: #${scheme.base02} !important;
|
||||||
|
--zen-primary-color: #${scheme.base0D} !important;
|
||||||
|
--zen-colors-secondary: #${scheme.base02} !important;
|
||||||
|
--zen-colors-tertiary: #${scheme.base01} !important;
|
||||||
|
--zen-colors-border: #${scheme.base0D} !important;
|
||||||
|
--toolbarbutton-icon-fill: #${scheme.base0D} !important;
|
||||||
|
--lwt-text-color: #${scheme.base05} !important;
|
||||||
|
--toolbar-field-color: #${scheme.base05} !important;
|
||||||
|
--tab-selected-textcolor: rgb(171, 197, 247) !important; // TODO
|
||||||
|
--toolbar-field-focus-color: #${scheme.base05} !important;
|
||||||
|
--toolbar-color: #${scheme.base05} !important;
|
||||||
|
--newtab-text-primary-color: #${scheme.base05} !important;
|
||||||
|
--arrowpanel-color: #${scheme.base05} !important;
|
||||||
|
--arrowpanel-background: #${scheme.base00} !important;
|
||||||
|
--sidebar-text-color: #${scheme.base05} !important;
|
||||||
|
--lwt-sidebar-text-color: #${scheme.base05} !important;
|
||||||
|
--lwt-sidebar-background-color: #${scheme.base01} !important; //TODO 11111b !important;
|
||||||
|
--toolbar-bgcolor: #${scheme.base02} !important;
|
||||||
|
--newtab-background-color: #${scheme.base00} !important;
|
||||||
|
--zen-themed-toolbar-bg: #${scheme.base01} !important;
|
||||||
|
--zen-main-browser-background: #${scheme.base01} !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#permissions-granted-icon{
|
||||||
|
color: #${scheme.base01} !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-placesTree {
|
||||||
|
background-color: #${scheme.base00} !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#zen-workspaces-button {
|
||||||
|
background-color: #${scheme.base00} !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#TabsToolbar {
|
||||||
|
background-color: #${scheme.base01} !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#urlbar-background {
|
||||||
|
background-color: #${scheme.base00} !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content-shortcuts {
|
||||||
|
background-color: #${scheme.base00} !important;
|
||||||
|
border-color: #${scheme.base0D} !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.urlbarView-url {
|
||||||
|
color: #${scheme.base0D} !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#zenEditBookmarkPanelFaviconContainer {
|
||||||
|
background: #${scheme.base01} !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
toolbar .toolbarbutton-1 {
|
||||||
|
&:not([disabled]) {
|
||||||
|
&:is([open], [checked]) > :is(.toolbarbutton-icon, .toolbarbutton-text, .toolbarbutton-badge-stack){
|
||||||
|
fill: #${scheme.base01};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.identity-color-blue {
|
||||||
|
--identity-tab-color: #${scheme.base0D} !important;
|
||||||
|
--identity-icon-color: #${scheme.base0D} !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.identity-color-turquoise {
|
||||||
|
--identity-tab-color: #${scheme.base0C} !important;
|
||||||
|
--identity-icon-color: #${scheme.base0C} !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.identity-color-green {
|
||||||
|
--identity-tab-color: #${scheme.base0B} !important;
|
||||||
|
--identity-icon-color: #${scheme.base0B} !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.identity-color-yellow {
|
||||||
|
--identity-tab-color: #${scheme.base0A} !important;
|
||||||
|
--identity-icon-color: #${scheme.base0A} !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.identity-color-orange {
|
||||||
|
--identity-tab-color: #${scheme.base09} !important;
|
||||||
|
--identity-icon-color: #${scheme.base09} !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.identity-color-red {
|
||||||
|
--identity-tab-color: #${scheme.base08} !important;
|
||||||
|
--identity-icon-color: #${scheme.base08} !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.identity-color-pink {
|
||||||
|
--identity-tab-color: #${scheme.base0F} !important;
|
||||||
|
--identity-icon-color: #${scheme.base0F} !important; // TODO f5c2e7
|
||||||
|
}
|
||||||
|
|
||||||
|
.identity-color-purple {
|
||||||
|
--identity-tab-color: #${scheme.base0E} !important;
|
||||||
|
--identity-icon-color: #${scheme.base0E} !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
browsername = config.mods.homePackages.browser;
|
||||||
|
profiles =
|
||||||
|
if config.mods.homePackages.browser == "firefox"
|
||||||
|
then config.mods.browser.firefox.profiles
|
||||||
|
else if config.mods.homePackages.browser == "zen"
|
||||||
|
then config.mods.browser.zen.profiles
|
||||||
|
else if config.mods.homePackages.browser == "librewolf"
|
||||||
|
then [
|
||||||
|
{
|
||||||
|
name = "default";
|
||||||
|
value = {};
|
||||||
|
}
|
||||||
|
]
|
||||||
|
else [];
|
||||||
|
profileNamesFn =
|
||||||
|
builtins.catAttrs "name";
|
||||||
|
chromesFn = builtins.map (
|
||||||
|
name:
|
||||||
|
if (builtins.isString browsername)
|
||||||
|
then {
|
||||||
|
".${browsername}/${name}/chrome/userContent.css" = {
|
||||||
|
text = userChrome;
|
||||||
|
};
|
||||||
|
|
||||||
|
".${browsername}/${name}/chrome/userChrome.css" = {
|
||||||
|
text = userContent;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
else {}
|
||||||
|
);
|
||||||
|
moduleFn = lib.lists.foldr (attr1: attr2: attr1 // attr2) {};
|
||||||
|
mkFirefoxTheme = profiles:
|
||||||
|
profiles
|
||||||
|
|> profileNamesFn
|
||||||
|
|> chromesFn
|
||||||
|
|> moduleFn;
|
||||||
|
in {home.file = mkFirefoxTheme profiles;}
|
||||||
252
home/themes/kdeglobals.nix
Normal file
|
|
@ -0,0 +1,252 @@
|
||||||
|
# This is ABSOLUTE GARGABE, KDE srsly, remove this!
|
||||||
|
# props to catppuccin mocha for sparing me from doing this manually: https://github.com/catppuccin/kde/blob/main/Resources/Base.colors
|
||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
inputs,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
base16 = pkgs.callPackage inputs.base16.lib {};
|
||||||
|
|
||||||
|
baseScheme = base16.mkSchemeAttrs config.stylix.base16Scheme;
|
||||||
|
power = number: powerIndex:
|
||||||
|
if powerIndex == 1
|
||||||
|
then number
|
||||||
|
else if powerIndex == 0
|
||||||
|
then 1
|
||||||
|
else number * power number (powerIndex - 1);
|
||||||
|
|
||||||
|
lookupTable = powerIndex: {
|
||||||
|
"0" = 0 * (power 16 powerIndex);
|
||||||
|
"1" = 1 * (power 16 powerIndex);
|
||||||
|
"2" = 2 * (power 16 powerIndex);
|
||||||
|
"3" = 3 * (power 16 powerIndex);
|
||||||
|
"4" = 4 * (power 16 powerIndex);
|
||||||
|
"5" = 5 * (power 16 powerIndex);
|
||||||
|
"6" = 6 * (power 16 powerIndex);
|
||||||
|
"7" = 7 * (power 16 powerIndex);
|
||||||
|
"8" = 8 * (power 16 powerIndex);
|
||||||
|
"9" = 9 * (power 16 powerIndex);
|
||||||
|
"a" = 10 * (power 16 powerIndex);
|
||||||
|
"b" = 11 * (power 16 powerIndex);
|
||||||
|
"c" = 12 * (power 16 powerIndex);
|
||||||
|
"d" = 13 * (power 16 powerIndex);
|
||||||
|
"e" = 14 * (power 16 powerIndex);
|
||||||
|
"f" = 15 * (power 16 powerIndex);
|
||||||
|
};
|
||||||
|
|
||||||
|
convertHex = hexChars:
|
||||||
|
recombineColors [
|
||||||
|
(convertColor (lib.lists.take 2 hexChars))
|
||||||
|
(convertColor (lib.lists.take 2 (lib.lists.drop 2 hexChars)))
|
||||||
|
(convertColor (lib.lists.take 2 (lib.lists.drop 4 hexChars)))
|
||||||
|
];
|
||||||
|
|
||||||
|
convertColor = color: (lookupTable 1).${(lib.lists.head color)} + (lookupTable 0).${(lib.lists.last color)};
|
||||||
|
recombineColors = colors: lib.lists.foldr (a: b: (toString a) + "," + (toString b)) "end" colors;
|
||||||
|
|
||||||
|
scheme = {
|
||||||
|
base00 = lib.strings.removeSuffix ",end" (
|
||||||
|
convertHex (lib.strings.stringToCharacters baseScheme.base00)
|
||||||
|
);
|
||||||
|
base01 = lib.strings.removeSuffix ",end" (
|
||||||
|
convertHex (lib.strings.stringToCharacters baseScheme.base01)
|
||||||
|
);
|
||||||
|
base02 = lib.strings.removeSuffix ",end" (
|
||||||
|
convertHex (lib.strings.stringToCharacters baseScheme.base02)
|
||||||
|
);
|
||||||
|
base03 = lib.strings.removeSuffix ",end" (
|
||||||
|
convertHex (lib.strings.stringToCharacters baseScheme.base03)
|
||||||
|
);
|
||||||
|
base04 = lib.strings.removeSuffix ",end" (
|
||||||
|
convertHex (lib.strings.stringToCharacters baseScheme.base04)
|
||||||
|
);
|
||||||
|
base05 = lib.strings.removeSuffix ",end" (
|
||||||
|
convertHex (lib.strings.stringToCharacters baseScheme.base05)
|
||||||
|
);
|
||||||
|
base06 = lib.strings.removeSuffix ",end" (
|
||||||
|
convertHex (lib.strings.stringToCharacters baseScheme.base06)
|
||||||
|
);
|
||||||
|
base07 = lib.strings.removeSuffix ",end" (
|
||||||
|
convertHex (lib.strings.stringToCharacters baseScheme.base07)
|
||||||
|
);
|
||||||
|
base08 = lib.strings.removeSuffix ",end" (
|
||||||
|
convertHex (lib.strings.stringToCharacters baseScheme.base08)
|
||||||
|
);
|
||||||
|
base09 = lib.strings.removeSuffix ",end" (
|
||||||
|
convertHex (lib.strings.stringToCharacters baseScheme.base09)
|
||||||
|
);
|
||||||
|
base0A = lib.strings.removeSuffix ",end" (
|
||||||
|
convertHex (lib.strings.stringToCharacters baseScheme.base0A)
|
||||||
|
);
|
||||||
|
base0B = lib.strings.removeSuffix ",end" (
|
||||||
|
convertHex (lib.strings.stringToCharacters baseScheme.base0B)
|
||||||
|
);
|
||||||
|
base0C = lib.strings.removeSuffix ",end" (
|
||||||
|
convertHex (lib.strings.stringToCharacters baseScheme.base0C)
|
||||||
|
);
|
||||||
|
base0D = lib.strings.removeSuffix ",end" (
|
||||||
|
convertHex (lib.strings.stringToCharacters baseScheme.base0D)
|
||||||
|
);
|
||||||
|
base0E = lib.strings.removeSuffix ",end" (
|
||||||
|
convertHex (lib.strings.stringToCharacters baseScheme.base0E)
|
||||||
|
);
|
||||||
|
base0F = lib.strings.removeSuffix ",end" (
|
||||||
|
convertHex (lib.strings.stringToCharacters baseScheme.base0F)
|
||||||
|
);
|
||||||
|
};
|
||||||
|
in {
|
||||||
|
# temp
|
||||||
|
# crust -> surface1
|
||||||
|
# subtext0 -> surface2
|
||||||
|
# accentColor -> lavender
|
||||||
|
xdg.configFile."kdeglobals" = {
|
||||||
|
text = ''
|
||||||
|
[ColorEffects:Disabled]
|
||||||
|
Color=${scheme.base01}
|
||||||
|
ColorAmount=0.30000000000000004
|
||||||
|
ColorEffect=2
|
||||||
|
ContrastAmount=0.1
|
||||||
|
ContrastEffect=0
|
||||||
|
IntensityAmount=-1
|
||||||
|
IntensityEffect=0
|
||||||
|
|
||||||
|
[ColorEffects:Inactive]
|
||||||
|
ChangeSelectionColor=true
|
||||||
|
Color=${scheme.base01}
|
||||||
|
ColorAmount=0.5
|
||||||
|
ColorEffect=3
|
||||||
|
ContrastAmount=0
|
||||||
|
ContrastEffect=0
|
||||||
|
Enable=true
|
||||||
|
IntensityAmount=0
|
||||||
|
IntensityEffect=0
|
||||||
|
|
||||||
|
[Colors:Button]
|
||||||
|
BackgroundAlternate=${scheme.base07}
|
||||||
|
BackgroundNormal=${scheme.base02}
|
||||||
|
DecorationFocus=${scheme.base07}
|
||||||
|
DecorationHover=${scheme.base02}
|
||||||
|
ForegroundActive=${scheme.base09}
|
||||||
|
ForegroundInactive=${scheme.base04}
|
||||||
|
ForegroundLink=${scheme.base07}
|
||||||
|
ForegroundNegative=${scheme.base08}
|
||||||
|
ForegroundNeutral=${scheme.base0A}
|
||||||
|
ForegroundNormal=${scheme.base05}
|
||||||
|
ForegroundPositive=${scheme.base0B}
|
||||||
|
ForegroundVisited=${scheme.base0E}
|
||||||
|
|
||||||
|
|
||||||
|
[Colors:Complementary]
|
||||||
|
BackgroundAlternate=${scheme.base03}
|
||||||
|
BackgroundNormal=${scheme.base00}
|
||||||
|
DecorationFocus=${scheme.base07}
|
||||||
|
DecorationHover=${scheme.base02}
|
||||||
|
ForegroundActive=${scheme.base09}
|
||||||
|
ForegroundInactive=${scheme.base04}
|
||||||
|
ForegroundLink=${scheme.base07}
|
||||||
|
ForegroundNegative=${scheme.base08}
|
||||||
|
ForegroundNeutral=${scheme.base0A}
|
||||||
|
ForegroundNormal=${scheme.base05}
|
||||||
|
ForegroundPositive=${scheme.base0B}
|
||||||
|
ForegroundVisited=${scheme.base0E}
|
||||||
|
|
||||||
|
|
||||||
|
[Colors:Header]
|
||||||
|
BackgroundAlternate=${scheme.base03}
|
||||||
|
BackgroundNormal=${scheme.base00}
|
||||||
|
DecorationFocus=${scheme.base07}
|
||||||
|
DecorationHover=${scheme.base02}
|
||||||
|
ForegroundActive=${scheme.base09}
|
||||||
|
ForegroundInactive=${scheme.base04}
|
||||||
|
ForegroundLink=${scheme.base07}
|
||||||
|
ForegroundNegative=${scheme.base08}
|
||||||
|
ForegroundNeutral=${scheme.base0A}
|
||||||
|
ForegroundNormal=${scheme.base05}
|
||||||
|
ForegroundPositive=${scheme.base0B}
|
||||||
|
ForegroundVisited=${scheme.base0E}
|
||||||
|
|
||||||
|
|
||||||
|
[Colors:Selection]
|
||||||
|
BackgroundAlternate=${scheme.base07}
|
||||||
|
BackgroundNormal=${scheme.base07}
|
||||||
|
DecorationFocus=${scheme.base07}
|
||||||
|
DecorationHover=${scheme.base02}
|
||||||
|
ForegroundLink=${scheme.base07}
|
||||||
|
ForegroundInactive=${scheme.base00}
|
||||||
|
ForegroundActive=${scheme.base09}
|
||||||
|
ForegroundLink=${scheme.base07}
|
||||||
|
ForegroundNegative=${scheme.base08}
|
||||||
|
ForegroundNeutral=${scheme.base0A}
|
||||||
|
ForegroundNormal=${scheme.base03}
|
||||||
|
ForegroundPositive=${scheme.base0B}
|
||||||
|
ForegroundVisited=${scheme.base0E}
|
||||||
|
|
||||||
|
|
||||||
|
[Colors:Tooltip]
|
||||||
|
BackgroundAlternate=27,25,35
|
||||||
|
BackgroundNormal=${scheme.base01}
|
||||||
|
DecorationFocus=${scheme.base07}
|
||||||
|
DecorationHover=${scheme.base02}
|
||||||
|
ForegroundActive=${scheme.base09}
|
||||||
|
ForegroundInactive=${scheme.base04}
|
||||||
|
ForegroundLink=${scheme.base07}
|
||||||
|
ForegroundNegative=${scheme.base08}
|
||||||
|
ForegroundNeutral=${scheme.base0A}
|
||||||
|
ForegroundNormal=${scheme.base05}
|
||||||
|
ForegroundPositive=${scheme.base0B}
|
||||||
|
ForegroundVisited=${scheme.base0E}
|
||||||
|
|
||||||
|
|
||||||
|
[Colors:View]
|
||||||
|
BackgroundAlternate=${scheme.base00}
|
||||||
|
BackgroundNormal=${scheme.base01}
|
||||||
|
DecorationFocus=${scheme.base07}
|
||||||
|
DecorationHover=${scheme.base02}
|
||||||
|
ForegroundActive=${scheme.base09}
|
||||||
|
ForegroundInactive=${scheme.base04}
|
||||||
|
ForegroundLink=${scheme.base07}
|
||||||
|
ForegroundNegative=${scheme.base08}
|
||||||
|
ForegroundNeutral=${scheme.base0A}
|
||||||
|
ForegroundNormal=${scheme.base05}
|
||||||
|
ForegroundPositive=${scheme.base0B}
|
||||||
|
ForegroundVisited=${scheme.base0E}
|
||||||
|
|
||||||
|
|
||||||
|
[Colors:Window]
|
||||||
|
BackgroundAlternate=${scheme.base03}
|
||||||
|
BackgroundNormal=${scheme.base00}
|
||||||
|
DecorationFocus=${scheme.base07}
|
||||||
|
DecorationHover=${scheme.base02}
|
||||||
|
ForegroundActive=${scheme.base09}
|
||||||
|
ForegroundInactive=${scheme.base04}
|
||||||
|
ForegroundLink=${scheme.base07}
|
||||||
|
ForegroundNegative=${scheme.base08}
|
||||||
|
ForegroundNeutral=${scheme.base0A}
|
||||||
|
ForegroundNormal=${scheme.base05}
|
||||||
|
ForegroundPositive=${scheme.base0B}
|
||||||
|
ForegroundVisited=${scheme.base0E}
|
||||||
|
|
||||||
|
|
||||||
|
[General]
|
||||||
|
ColorScheme=CustomBase16Nix
|
||||||
|
Name=CustomBase16Nix
|
||||||
|
accentActiveTitlebar=false
|
||||||
|
shadeSortColumn=true
|
||||||
|
|
||||||
|
|
||||||
|
[KDE]
|
||||||
|
contrast=4
|
||||||
|
|
||||||
|
|
||||||
|
[WM]
|
||||||
|
activeBackground=${scheme.base01}
|
||||||
|
activeBlend=${scheme.base05}
|
||||||
|
activeForeground=${scheme.base05}
|
||||||
|
inactiveBackground=${scheme.base03}
|
||||||
|
inactiveBlend=${scheme.base04}
|
||||||
|
inactiveForeground=${scheme.base04}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
||||||
86
home/themes/oxiced.nix
Normal file
|
|
@ -0,0 +1,86 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
inputs,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
# at time of using this here, stylix might not be evaluated yet
|
||||||
|
# hence ensure it is by using base16 mkSchemeAttrs
|
||||||
|
base16 = pkgs.callPackage inputs.base16.lib {};
|
||||||
|
scheme = base16.mkSchemeAttrs config.stylix.base16Scheme;
|
||||||
|
valueOrDefault = value: fallback:
|
||||||
|
if (scheme ? oxiced && scheme.oxiced ? ${value})
|
||||||
|
then scheme.oxiced.value
|
||||||
|
else fallback;
|
||||||
|
in {
|
||||||
|
xdg.configFile."oxiced/theme.toml" = {
|
||||||
|
source = (pkgs.formats.toml {}).generate "oxiced" {
|
||||||
|
base = valueOrDefault "base" scheme.base00;
|
||||||
|
mantle = valueOrDefault "mantle" scheme.base01;
|
||||||
|
primary_bg = valueOrDefault "primary_bg" scheme.base02;
|
||||||
|
secondary_bg = valueOrDefault "secondary_bg" scheme.base03;
|
||||||
|
tertiary_bg = valueOrDefault "tertiary_bg" scheme.base04;
|
||||||
|
text = valueOrDefault "text" scheme.base05;
|
||||||
|
|
||||||
|
primary = valueOrDefault "primary" scheme.base0D;
|
||||||
|
primary_contrast = valueOrDefault "primary_contrast" "FFFFFF";
|
||||||
|
secondary = valueOrDefault "primary" scheme.base07;
|
||||||
|
secondary_contrast = valueOrDefault "secondary_contrast" "FFFFFF";
|
||||||
|
|
||||||
|
good = valueOrDefault "good" scheme.base0B;
|
||||||
|
good_contrast = valueOrDefault "good_contrast" "000000";
|
||||||
|
bad = valueOrDefault "bad" scheme.base08;
|
||||||
|
bad_contrast = valueOrDefault "bad_contrast" "FFFFFF";
|
||||||
|
warning = valueOrDefault "warning" scheme.base0A;
|
||||||
|
warning_contrast = valueOrDefault "warning_contrast" "000000";
|
||||||
|
info = valueOrDefault "info" scheme.base0C;
|
||||||
|
info_contrast = valueOrDefault "info_contrast" "FFFFFF";
|
||||||
|
|
||||||
|
rose = valueOrDefault "rose" scheme.base06;
|
||||||
|
lavender = valueOrDefault "lavender" scheme.base07;
|
||||||
|
blue = valueOrDefault "blue" scheme.base0D;
|
||||||
|
mauve = valueOrDefault "mauve" scheme.base0E;
|
||||||
|
flamingo = valueOrDefault "flamingo" scheme.base0F;
|
||||||
|
|
||||||
|
border_color_weak = valueOrDefault "border_color_weak" scheme.base05;
|
||||||
|
border_color_strong = valueOrDefault "border_color_strong" scheme.base0D;
|
||||||
|
|
||||||
|
tint_amount = valueOrDefault "tint_amound" 0.10;
|
||||||
|
shade_amount = valueOrDefault "shade_amount" 0.05;
|
||||||
|
|
||||||
|
border_radius = valueOrDefault "border_radius" 10;
|
||||||
|
|
||||||
|
padding_xs = valueOrDefault "padding_xs" 4.0;
|
||||||
|
padding_sm = valueOrDefault "padding_sm" 8.0;
|
||||||
|
padding_md = valueOrDefault "padding_md" 12.0;
|
||||||
|
padding_lg = valueOrDefault "padding_lg" 16.0;
|
||||||
|
padding_xl = valueOrDefault "padding_xl" 24.0;
|
||||||
|
padding_xxl = valueOrDefault "padding_xxl" 32.0;
|
||||||
|
|
||||||
|
font_sm = valueOrDefault "font_sm" 10.0;
|
||||||
|
font_md = valueOrDefault "font_md" 14.0;
|
||||||
|
font_lg = valueOrDefault "font_lg" 18.0;
|
||||||
|
font_xl = valueOrDefault "font_xl" 24.0;
|
||||||
|
font_xxl = valueOrDefault "font_xxl" 32.0;
|
||||||
|
|
||||||
|
# legacy compatibility
|
||||||
|
name = scheme.scheme;
|
||||||
|
inherit (scheme) base00;
|
||||||
|
inherit (scheme) base01;
|
||||||
|
inherit (scheme) base02;
|
||||||
|
inherit (scheme) base03;
|
||||||
|
inherit (scheme) base04;
|
||||||
|
inherit (scheme) base05;
|
||||||
|
inherit (scheme) base06;
|
||||||
|
inherit (scheme) base07;
|
||||||
|
inherit (scheme) base08;
|
||||||
|
inherit (scheme) base09;
|
||||||
|
base0a = scheme.base0A;
|
||||||
|
base0b = scheme.base0B;
|
||||||
|
base0c = scheme.base0C;
|
||||||
|
base0d = scheme.base0D;
|
||||||
|
base0e = scheme.base0E;
|
||||||
|
base0f = scheme.base0F;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
@ -1,20 +1,28 @@
|
||||||
{ config, inputs, pkgs, ... }:
|
{
|
||||||
let
|
config,
|
||||||
|
inputs,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
username = config.conf.username;
|
username = config.conf.username;
|
||||||
# at time of using this here, stylix might not be evaluated yet
|
# at time of using this here, stylix might not be evaluated yet
|
||||||
# hence ensure it is by using base16 mkSchemeAttrs
|
# hence ensure it is by using base16 mkSchemeAttrs
|
||||||
base16 = pkgs.callPackage inputs.base16.lib {};
|
base16 = pkgs.callPackage inputs.base16.lib {};
|
||||||
scheme = (base16.mkSchemeAttrs config.stylix.base16Scheme);
|
scheme = base16.mkSchemeAttrs config.stylix.base16Scheme;
|
||||||
# active_colors=#ffc0caf5, #${scheme.base00}, #ff373949, #ff2b2c3b, #ff1a1b26, #ff2b2c3b, #ffc0caf5, #ffc0caf5, #ffc0caf5, #ff1a1b26, #ff1a1b26, #19000000, #ff2b2c3b, #ffc0caf5, #ff3584e4, #ff1b6acb, #ff1a1b26, #ff242530, #ff1a1b26, #ffc0caf5, #ffc0caf5
|
# active_colors=#ffc0caf5, #${scheme.base00}, #ff373949, #ff2b2c3b, #ff1a1b26, #ff2b2c3b, #ffc0caf5, #ffc0caf5, #ffc0caf5, #ff1a1b26, #ff1a1b26, #19000000, #ff2b2c3b, #ffc0caf5, #ff3584e4, #ff1b6acb, #ff1a1b26, #ff242530, #ff1a1b26, #ffc0caf5, #ffc0caf5
|
||||||
# disabled_colors=#ff6d728d, #${scheme.base00}, #ff373949, #ff2b2c3b, #ff1a1b26, #ff2b2c3b, #ff6d728d, #ff6d728d, #ff6d728d, #ff1a1b26, #ff1a1b26, #19000000, #ff2b2c3b, #ff6d728d, #ff3584e4, #ff1b6acb, #ff1a1b26, #ff242530, #ff1a1b26, #ff6d728d, #ff6d728d
|
# disabled_colors=#ff6d728d, #${scheme.base00}, #ff373949, #ff2b2c3b, #ff1a1b26, #ff2b2c3b, #ff6d728d, #ff6d728d, #ff6d728d, #ff1a1b26, #ff1a1b26, #19000000, #ff2b2c3b, #ff6d728d, #ff3584e4, #ff1b6acb, #ff1a1b26, #ff242530, #ff1a1b26, #ff6d728d, #ff6d728d
|
||||||
# inactive_colors=#ff6d728d, #${scheme.base00}, #ff373949, #ff2b2c3b, #ff1a1b26, #ff2b2c3b, #ff6d728d, #ff6d728d, #ff6d728d, #ff1a1b26, #ff1a1b26, #19000000, #ff2b2c3b, #ff6d728d, #ff3584e4, #ff1b6acb, #ff1a1b26, #ff242530, #ff1a1b26, #ff6d728d, #ff6d728d
|
# inactive_colors=#ff6d728d, #${scheme.base00}, #ff373949, #ff2b2c3b, #ff1a1b26, #ff2b2c3b, #ff6d728d, #ff6d728d, #ff6d728d, #ff1a1b26, #ff1a1b26, #19000000, #ff2b2c3b, #ff6d728d, #ff3584e4, #ff1b6acb, #ff1a1b26, #ff242530, #ff1a1b26, #ff6d728d, #ff6d728d
|
||||||
color = ''
|
color = ''
|
||||||
|
|
||||||
|
|
||||||
[ColorScheme]
|
[ColorScheme]
|
||||||
active_colors=#ff${scheme.base05}, #ff${scheme.base01}, #ff${scheme.base01}, #ff${scheme.base01}, #ff${scheme.base00}, #ff${scheme.base00}, #ff${scheme.base05}, #ff${scheme.base04}, #ff${scheme.base05}, #ff${scheme.base00}, #ff${scheme.base00}, #00${scheme.base01}, #ff${scheme.base02}, #ff${scheme.base04}, #ff${scheme.base08}, #ff${scheme.base04}, #ff${scheme.base01}, #ff${scheme.base00}, #ff${scheme.base01}, #ff${scheme.base05}, #ff${scheme.base04}
|
active_colors=#ff${scheme.base05}, #ff${scheme.base01}, #ff${scheme.base01}, #ff${scheme.base01}, #ff${scheme.base00}, #ff${scheme.base00}, #ff${scheme.base05}, #ff${scheme.base04}, #ff${scheme.base05}, #ff${scheme.base00}, #ff${scheme.base00}, #00${scheme.base01}, #ff${scheme.base02}, #ff${scheme.base04}, #ff${scheme.base08}, #ff${scheme.base04}, #ff${scheme.base01}, #ff${scheme.base00}, #ff${scheme.base01}, #ff${scheme.base05}, #ff${scheme.base04}
|
||||||
disabled_colors=#ff${scheme.base05}, #ff${scheme.base01}, #ff${scheme.base01}, #ff${scheme.base01}, #ff${scheme.base00}, #ff${scheme.base00}, #ff${scheme.base05}, #ff${scheme.base04}, #ff${scheme.base05}, #ff${scheme.base00}, #ff${scheme.base00}, #00${scheme.base01}, #ff${scheme.base02}, #ff${scheme.base04}, #ff${scheme.base08}, #ff${scheme.base04}, #ff${scheme.base01}, #ff${scheme.base00}, #ff${scheme.base01}, #ff${scheme.base05}, #ff${scheme.base04}
|
disabled_colors=#ff${scheme.base05}, #ff${scheme.base01}, #ff${scheme.base01}, #ff${scheme.base01}, #ff${scheme.base00}, #ff${scheme.base00}, #ff${scheme.base05}, #ff${scheme.base04}, #ff${scheme.base05}, #ff${scheme.base00}, #ff${scheme.base00}, #00${scheme.base01}, #ff${scheme.base02}, #ff${scheme.base04}, #ff${scheme.base08}, #ff${scheme.base04}, #ff${scheme.base01}, #ff${scheme.base00}, #ff${scheme.base01}, #ff${scheme.base05}, #ff${scheme.base04}
|
||||||
inactive_colors=#ff${scheme.base05}, #ff${scheme.base01}, #ff${scheme.base01}, #ff${scheme.base01}, #ff${scheme.base00}, #ff${scheme.base00}, #ff${scheme.base05}, #ff${scheme.base04}, #ff${scheme.base05}, #ff${scheme.base00}, #ff${scheme.base00}, #00${scheme.base01}, #ff${scheme.base02}, #ff${scheme.base04}, #ff${scheme.base08}, #ff${scheme.base04}, #ff${scheme.base01}, #ff${scheme.base00}, #ff${scheme.base01}, #ff${scheme.base05}, #ff${scheme.base04}
|
inactive_colors=#ff${scheme.base05}, #ff${scheme.base01}, #ff${scheme.base01}, #ff${scheme.base01}, #ff${scheme.base00}, #ff${scheme.base00}, #ff${scheme.base05}, #ff${scheme.base04}, #ff${scheme.base05}, #ff${scheme.base00}, #ff${scheme.base00}, #00${scheme.base01}, #ff${scheme.base02}, #ff${scheme.base04}, #ff${scheme.base08}, #ff${scheme.base04}, #ff${scheme.base01}, #ff${scheme.base00}, #ff${scheme.base01}, #ff${scheme.base05}, #ff${scheme.base04}
|
||||||
'';
|
'';
|
||||||
qss = ''
|
qss = ''
|
||||||
|
|
||||||
QTabBar::tab:selected {
|
QTabBar::tab:selected {
|
||||||
color: palette(highlight);
|
color: palette(highlight);
|
||||||
}
|
}
|
||||||
|
|
@ -22,25 +30,34 @@ let
|
||||||
border: none;
|
border: none;
|
||||||
}
|
}
|
||||||
'';
|
'';
|
||||||
in
|
in {
|
||||||
{
|
stylix.targets.qt = {
|
||||||
xdg.configFile."qt5ct/colors/tokyonight.conf" = {
|
enable = false;
|
||||||
|
};
|
||||||
|
qt = {
|
||||||
|
enable = true;
|
||||||
|
style.package = pkgs.kdePackages.breeze;
|
||||||
|
style.name = lib.mkForce "breeze-dark";
|
||||||
|
};
|
||||||
|
|
||||||
|
xdg.configFile = {
|
||||||
|
"qt5ct/colors/tokyonight.conf" = {
|
||||||
text = "${color}";
|
text = "${color}";
|
||||||
};
|
};
|
||||||
xdg.configFile."qt6ct/colors/tokyonight.conf" = {
|
"qt6ct/colors/tokyonight.conf" = {
|
||||||
text = "${color}";
|
text = "${color}";
|
||||||
};
|
};
|
||||||
xdg.configFile."qt5ct/qss/tab.qss" = {
|
"qt5ct/qss/tab.qss" = {
|
||||||
text = "${qss}";
|
text = "${qss}";
|
||||||
};
|
};
|
||||||
xdg.configFile."qt5ct/qt5ct.conf" = {
|
"qt5ct/qt5ct.conf" = {
|
||||||
text =
|
text = ''
|
||||||
''
|
|
||||||
[Appearance]
|
[Appearance]
|
||||||
color_scheme_path=/home/${username}/.config/qt5ct/colors/tokyonight.conf
|
color_scheme_path=/home/${username}/.config/qt5ct/colors/tokyonight.conf
|
||||||
custom_palette=true
|
custom_palette=true
|
||||||
icon_theme=MoreWaita
|
icon_theme=MoreWaita
|
||||||
standard_dialogs=gtk3
|
standard_dialogs=xdgdesktopportal
|
||||||
style=Breeze
|
style=Breeze
|
||||||
|
|
||||||
[Fonts]
|
[Fonts]
|
||||||
|
|
@ -70,14 +87,14 @@ in
|
||||||
ignored_applications=@Invalid()
|
ignored_applications=@Invalid()
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
xdg.configFile."qt6ct/qt6ct.conf" = {
|
"qt6ct/qt6ct.conf" = {
|
||||||
text =
|
text = ''
|
||||||
''
|
|
||||||
[Appearance]
|
[Appearance]
|
||||||
color_scheme_path=/home/${username}/.config/qt6ct/colors/toykonight.conf
|
color_scheme_path=/home/${username}/.config/qt6ct/colors/tokyonight.conf
|
||||||
custom_palette=true
|
custom_palette=true
|
||||||
standard_dialogs=default
|
standard_dialogs=xdgdesktopportal
|
||||||
style=Adwaita-Dark
|
style=Breeze
|
||||||
|
|
||||||
[Fonts]
|
[Fonts]
|
||||||
fixed="DejaVu LGC Sans,12,-1,5,400,0,0,0,0,0,0,0,0,0,0,1"
|
fixed="DejaVu LGC Sans,12,-1,5,400,0,0,0,0,0,0,0,0,0,0,1"
|
||||||
|
|
@ -98,15 +115,10 @@ in
|
||||||
underline_shortcut=1
|
underline_shortcut=1
|
||||||
wheel_scroll_lines=3
|
wheel_scroll_lines=3
|
||||||
|
|
||||||
[PaletteEditor]
|
|
||||||
geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\x2\x30\0\0\x1\xf4\0\0\0\0\0\0\0\0\0\0\x2\x30\0\0\x1\xf4\0\0\0\0\0\0\0\0\a\x80\0\0\0\0\0\0\0\0\0\0\x2\x30\0\0\x1\xf4)
|
|
||||||
|
|
||||||
[SettingsWindow]
|
|
||||||
geometry="@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\x3\xec\0\0\x3,\0\0\0\0\0\0\0\0\0\0\x3\xec\0\0\x3,\0\0\0\0\0\0\0\0\rp\0\0\0\0\0\0\0\0\0\0\x3\xec\0\0\x3,)"
|
|
||||||
|
|
||||||
[Troubleshooting]
|
[Troubleshooting]
|
||||||
force_raster_widgets=1
|
force_raster_widgets=1
|
||||||
ignored_applications=@Invalid()
|
ignored_applications=@Invalid()
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
};
|
||||||
}
|
}
|
||||||
86
iso/configuration.nix
Normal file
|
|
@ -0,0 +1,86 @@
|
||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
modulesPath,
|
||||||
|
lib,
|
||||||
|
self,
|
||||||
|
inputs,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
system = "x86_64-linux";
|
||||||
|
in {
|
||||||
|
imports = ["${modulesPath}/installer/cd-dvd/iso-image.nix"];
|
||||||
|
nixpkgs.hostPlatform = {
|
||||||
|
inherit system;
|
||||||
|
};
|
||||||
|
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
inputs.dashvim.packages.${system}.minimal
|
||||||
|
disko
|
||||||
|
git
|
||||||
|
firefox
|
||||||
|
kitty
|
||||||
|
gnome-disk-utility
|
||||||
|
inputs.disko.packages.${system}.disko-install
|
||||||
|
];
|
||||||
|
|
||||||
|
networking = {
|
||||||
|
wireless.enable = false;
|
||||||
|
networkmanager.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
nix.settings.experimental-features = [
|
||||||
|
"nix-command"
|
||||||
|
"flakes"
|
||||||
|
"pipe-operators"
|
||||||
|
];
|
||||||
|
|
||||||
|
users.users.nixos = {
|
||||||
|
isNormalUser = true;
|
||||||
|
password = "nixos";
|
||||||
|
extraGroups = ["wheel"];
|
||||||
|
};
|
||||||
|
|
||||||
|
image.baseName = lib.mkForce "DashNix";
|
||||||
|
|
||||||
|
programs = {
|
||||||
|
hyprland = {
|
||||||
|
enable = true;
|
||||||
|
withUWSM = true;
|
||||||
|
xwayland.enable = false;
|
||||||
|
};
|
||||||
|
uwsm.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
fonts.packages = [pkgs.adwaita-fonts];
|
||||||
|
i18n.defaultLocale = "en_US.UTF-8";
|
||||||
|
|
||||||
|
services = {
|
||||||
|
displayManager.autoLogin = {
|
||||||
|
enable = true;
|
||||||
|
user = "nixos";
|
||||||
|
};
|
||||||
|
greetd = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
terminal.vt = 1;
|
||||||
|
default_session = {
|
||||||
|
command = "${lib.getExe pkgs.hyprland}";
|
||||||
|
user = "nixos";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
isoImage = {
|
||||||
|
makeEfiBootable = true;
|
||||||
|
makeUsbBootable = true;
|
||||||
|
contents = [
|
||||||
|
{
|
||||||
|
source = "${self}/example";
|
||||||
|
target = "example-config";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
system.stateVersion = "25.11";
|
||||||
|
}
|
||||||
292
lib/default.nix
Normal file
|
|
@ -0,0 +1,292 @@
|
||||||
|
{
|
||||||
|
inputs,
|
||||||
|
unstable,
|
||||||
|
self,
|
||||||
|
system,
|
||||||
|
permittedPackages,
|
||||||
|
dashNixAdditionalProps ? {},
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
defaultConfig = {
|
||||||
|
config = {
|
||||||
|
allowUnfree = true;
|
||||||
|
permittedInsecurePackages = permittedPackages;
|
||||||
|
};
|
||||||
|
overlays = [
|
||||||
|
inputs.cachy.overlays.default
|
||||||
|
inputs.nur.overlays.default
|
||||||
|
];
|
||||||
|
inherit system;
|
||||||
|
};
|
||||||
|
mkPkgs = {
|
||||||
|
pkgs,
|
||||||
|
config,
|
||||||
|
}: let
|
||||||
|
overlays =
|
||||||
|
if (config ? overlays)
|
||||||
|
then config.overlays
|
||||||
|
else [];
|
||||||
|
comnbinedConfig = config // {overlays = overlays ++ defaultConfig.overlays;};
|
||||||
|
in
|
||||||
|
import pkgs comnbinedConfig;
|
||||||
|
in rec {
|
||||||
|
mkNixos = {
|
||||||
|
root,
|
||||||
|
inputLib,
|
||||||
|
lib,
|
||||||
|
stablePkgs,
|
||||||
|
unstablePkgs,
|
||||||
|
stableMods,
|
||||||
|
unstableMods,
|
||||||
|
overridePkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
builtins.listToAttrs (
|
||||||
|
map
|
||||||
|
(name: {
|
||||||
|
inherit name;
|
||||||
|
value = let
|
||||||
|
mod = root + /hosts/${name}/configuration.nix;
|
||||||
|
additionalNixosConfig = root + /hosts/${name}/hardware.nix;
|
||||||
|
additionalHomeConfig = root + /hosts/${name}/home.nix;
|
||||||
|
args = {
|
||||||
|
inherit
|
||||||
|
self
|
||||||
|
inputs
|
||||||
|
mod
|
||||||
|
additionalHomeConfig
|
||||||
|
system
|
||||||
|
root
|
||||||
|
dashNixAdditionalProps
|
||||||
|
lib
|
||||||
|
;
|
||||||
|
stable = stablePkgs;
|
||||||
|
unstable = unstablePkgs;
|
||||||
|
pkgs = lib.mkForce (
|
||||||
|
if overridePkgs
|
||||||
|
then stablePkgs
|
||||||
|
else unstablePkgs
|
||||||
|
);
|
||||||
|
alternativePkgs =
|
||||||
|
if overridePkgs
|
||||||
|
then unstablePkgs
|
||||||
|
else stablePkgs;
|
||||||
|
hostName = name;
|
||||||
|
homeMods =
|
||||||
|
if overridePkgs
|
||||||
|
then unstableMods.home
|
||||||
|
else stableMods.home;
|
||||||
|
mkDashDefault = import ./override.nix {inherit lib;};
|
||||||
|
};
|
||||||
|
nixosMods =
|
||||||
|
if overridePkgs
|
||||||
|
then unstableMods.nixos
|
||||||
|
else stableMods.nixos;
|
||||||
|
in
|
||||||
|
inputLib.nixosSystem {
|
||||||
|
modules =
|
||||||
|
[
|
||||||
|
{_module.args = args;}
|
||||||
|
mod
|
||||||
|
]
|
||||||
|
++ nixosMods
|
||||||
|
++ lib.optional (builtins.pathExists additionalNixosConfig) additionalNixosConfig
|
||||||
|
++ lib.optional (builtins.pathExists mod) mod;
|
||||||
|
};
|
||||||
|
})
|
||||||
|
(
|
||||||
|
lib.lists.remove "" (
|
||||||
|
lib.attrsets.mapAttrsToList (name: fType:
|
||||||
|
if fType == "directory"
|
||||||
|
then name
|
||||||
|
else "") (
|
||||||
|
builtins.readDir (root + /hosts)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
mkHome = {
|
||||||
|
root,
|
||||||
|
lib,
|
||||||
|
stablePkgs,
|
||||||
|
unstablePkgs,
|
||||||
|
stableMods,
|
||||||
|
unstableMods,
|
||||||
|
overridePkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
builtins.listToAttrs (
|
||||||
|
map
|
||||||
|
(name: {
|
||||||
|
inherit name;
|
||||||
|
value = let
|
||||||
|
mod = root + /homes/${name}/configuration.nix;
|
||||||
|
additionalHomeConfig = root + /homes/${name}/home.nix;
|
||||||
|
args = {
|
||||||
|
inherit
|
||||||
|
self
|
||||||
|
inputs
|
||||||
|
mod
|
||||||
|
additionalHomeConfig
|
||||||
|
system
|
||||||
|
root
|
||||||
|
dashNixAdditionalProps
|
||||||
|
lib
|
||||||
|
;
|
||||||
|
stable = stablePkgs;
|
||||||
|
unstable = unstablePkgs;
|
||||||
|
pkgs = lib.mkForce (
|
||||||
|
if overridePkgs
|
||||||
|
then stablePkgs
|
||||||
|
else unstablePkgs
|
||||||
|
);
|
||||||
|
alternativePkgs =
|
||||||
|
if overridePkgs
|
||||||
|
then unstablePkgs
|
||||||
|
else stablePkgs;
|
||||||
|
userName = name;
|
||||||
|
mkDashDefault = import ./override.nix {inherit lib;};
|
||||||
|
};
|
||||||
|
homeMods =
|
||||||
|
if overridePkgs
|
||||||
|
then unstableMods.home
|
||||||
|
else stableMods.home;
|
||||||
|
in
|
||||||
|
inputs.home-manager.lib.homeManagerConfiguration
|
||||||
|
{
|
||||||
|
inherit (args) pkgs;
|
||||||
|
modules =
|
||||||
|
[
|
||||||
|
{_module.args = args;}
|
||||||
|
mod
|
||||||
|
]
|
||||||
|
++ homeMods
|
||||||
|
++ [
|
||||||
|
../home/common.nix
|
||||||
|
../home/themes
|
||||||
|
../home/sync.nix
|
||||||
|
./foxwrappers.nix
|
||||||
|
]
|
||||||
|
++ lib.optional (builtins.pathExists mod) mod;
|
||||||
|
};
|
||||||
|
})
|
||||||
|
(
|
||||||
|
lib.lists.remove "" (
|
||||||
|
lib.attrsets.mapAttrsToList (name: fType:
|
||||||
|
if fType == "directory"
|
||||||
|
then name
|
||||||
|
else "") (
|
||||||
|
builtins.readDir (root + /homes)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
# buildSystems
|
||||||
|
|
||||||
|
Builds system given a list of system names which are placed within your hosts/ directory. Note that each system has its own directory in hosts/ as well.
|
||||||
|
|
||||||
|
A minimal configuration requires the file configuration.nix within each system directory, this will be the base config that is used across both NisOS and home-manager, specific optional files can also be added, hardware.nix for NisOS configuration and home.nix for home-manager configuration.
|
||||||
|
|
||||||
|
The second parameter is the root of your configuration, which should be ./. in most cases.
|
||||||
|
|
||||||
|
`root`
|
||||||
|
|
||||||
|
: the root path of your configuration
|
||||||
|
|
||||||
|
# Example usage
|
||||||
|
:::{.example}
|
||||||
|
```nix
|
||||||
|
nixosConfigurations = buildSystems { root = ./.; };
|
||||||
|
```
|
||||||
|
:::
|
||||||
|
*/
|
||||||
|
# let
|
||||||
|
# paths = builtins.readDir ;
|
||||||
|
# names = lib.lists.remove "default" (
|
||||||
|
# map (name: lib.strings.removeSuffix ".nix" name) (lib.attrsets.mapAttrsToList (name: _: name) paths)
|
||||||
|
# );
|
||||||
|
|
||||||
|
# in
|
||||||
|
buildFunc = func: {
|
||||||
|
root,
|
||||||
|
unstableBundle ? {},
|
||||||
|
stableBundle ? {},
|
||||||
|
overridePkgs ? false,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
defaultNixosMods = inputs: [
|
||||||
|
inputs.lanzaboote.nixosModules.lanzaboote
|
||||||
|
inputs.nixos-wsl.nixosModules.default
|
||||||
|
inputs.home-manager.nixosModules.home-manager
|
||||||
|
inputs.stylix.nixosModules.stylix
|
||||||
|
inputs.disko.nixosModules.disko
|
||||||
|
inputs.superfreq.nixosModules.default
|
||||||
|
inputs.sops-nix.nixosModules.sops
|
||||||
|
../base
|
||||||
|
../home
|
||||||
|
../modules
|
||||||
|
];
|
||||||
|
|
||||||
|
defaultHomeMods = inputs: [
|
||||||
|
inputs.anyrun.homeManagerModules.default
|
||||||
|
inputs.ironbar.homeManagerModules.default
|
||||||
|
inputs.oxicalc.homeManagerModules.default
|
||||||
|
inputs.oxishut.homeManagerModules.default
|
||||||
|
inputs.oxinoti.homeManagerModules.default
|
||||||
|
inputs.oxidash.homeManagerModules.default
|
||||||
|
inputs.oxipaste.homeManagerModules.default
|
||||||
|
inputs.oxirun.homeManagerModules.default
|
||||||
|
inputs.hyprdock.homeManagerModules.default
|
||||||
|
inputs.hyprland.homeManagerModules.default
|
||||||
|
inputs.reset.homeManagerModules.default
|
||||||
|
inputs.sops-nix.homeManagerModules.sops
|
||||||
|
inputs.dashvim.homeManagerModules.dashvim
|
||||||
|
../modules
|
||||||
|
];
|
||||||
|
|
||||||
|
unstableInput = unstableBundle.pkgs or inputs.unstable;
|
||||||
|
stableInput = stableBundle.pkgs or inputs.stable;
|
||||||
|
unstableConfig = unstableBundle.config or defaultConfig;
|
||||||
|
stableConfig = stableBundle.config or defaultConfig;
|
||||||
|
unstableInputs = (unstableBundle.inputs or {}) // inputs;
|
||||||
|
stableInputs = (stableBundle.inputs or {}) // inputs;
|
||||||
|
unstableMods = {
|
||||||
|
home = (defaultHomeMods unstableInputs) ++ (unstableBundle.mods.home or []);
|
||||||
|
nixos = (defaultNixosMods unstableInputs) ++ (unstableBundle.mods.nixos or []);
|
||||||
|
};
|
||||||
|
stableMods = {
|
||||||
|
home = (defaultHomeMods stableInputs) ++ (stableBundle.mods.home or []);
|
||||||
|
nixos = (defaultNixosMods stableInputs) ++ (stableBundle.mods.nixos or []);
|
||||||
|
};
|
||||||
|
|
||||||
|
unstablePkgs = mkPkgs {
|
||||||
|
pkgs = unstableInput;
|
||||||
|
config = unstableConfig;
|
||||||
|
};
|
||||||
|
stablePkgs = mkPkgs {
|
||||||
|
pkgs = stableInput;
|
||||||
|
config = stableConfig;
|
||||||
|
};
|
||||||
|
inputLib = unstableInput.lib;
|
||||||
|
inherit (unstablePkgs) lib;
|
||||||
|
in
|
||||||
|
func {
|
||||||
|
inherit lib inputLib stablePkgs unstablePkgs stableMods unstableMods stableInputs unstableInputs root overridePkgs;
|
||||||
|
};
|
||||||
|
|
||||||
|
buildSystems = buildFunc mkNixos;
|
||||||
|
buildHome = buildFunc mkHome;
|
||||||
|
|
||||||
|
buildIso = inputs.unstable.lib.nixosSystem {
|
||||||
|
specialArgs = {
|
||||||
|
inherit self inputs unstable;
|
||||||
|
};
|
||||||
|
modules = [
|
||||||
|
../iso/configuration.nix
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
59
lib/foxextensions.nix
Normal file
|
|
@ -0,0 +1,59 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
name,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
mkExtension = id: install_url: {
|
||||||
|
${id} = {
|
||||||
|
inherit install_url;
|
||||||
|
installation_mode = "normal_installed";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in {
|
||||||
|
options.mods.browser.${name} = {
|
||||||
|
darkreader = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Whether to enable darkreader";
|
||||||
|
};
|
||||||
|
extensions = lib.mkOption {
|
||||||
|
default = [
|
||||||
|
(mkExtension "uBlock0@raymondhill.net" "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi")
|
||||||
|
(mkExtension "{a6c4a591-f1b2-4f03-b3ff-767e5bedf4e7}" "https://addons.mozilla.org/firefox/downloads/latest/user-agent-string-switcher/latest.xpi")
|
||||||
|
(mkExtension "{d7742d87-e61d-4b78-b8a1-b469842139fa}" "https://addons.mozilla.org/firefox/downloads/latest/vimium-ff/latest.xpi")
|
||||||
|
(mkExtension "firefox@ghostery.com" "https://addons.mozilla.org/firefox/downloads/latest/ghostery/latest.xpi")
|
||||||
|
(mkExtension "CanvasBlocker@kkapsner.de" "https://addons.mozilla.org/firefox/downloads/latest/canvasblocker/latest.xpi")
|
||||||
|
(mkExtension "jid1-KKzOGWgsW3Ao4Q@jetpack" "https://addons.mozilla.org/firefox/downloads/latest/i-dont-care-about-cookies/latest.xpi")
|
||||||
|
(mkExtension "keepassxc-browser@keepassxc.org" "https://addons.mozilla.org/firefox/downloads/latest/keepassxc-browser/latest.xpi")
|
||||||
|
(mkExtension "@react-devtools" "https://addons.mozilla.org/firefox/downloads/latest/react-devtools/latest.xpi")
|
||||||
|
(mkExtension "extension@redux.devtools" "https://addons.mozilla.org/firefox/downloads/latest/reduxdevtools/latest.xpi")
|
||||||
|
(mkExtension "{20a9bb38-ed7c-4faf-9aaf-7c5d241fd747}" "https://addons.mozilla.org/firefox/downloads/file/4524699/angular_devtools-1.0.37.xpi")
|
||||||
|
(mkExtension "private-relay@firefox.com" "https://addons.mozilla.org/firefox/downloads/latest/private-relay/latest.xpi")
|
||||||
|
];
|
||||||
|
example = [
|
||||||
|
{
|
||||||
|
"78272b6fa58f4a1abaac99321d503a20@proton.me" = {
|
||||||
|
install_url = "https://addons.mozilla.org/en-US/firefox/downloads/latest/proton-pass/latest.xpi";
|
||||||
|
installation_mode = "normal_installed";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
type = with lib.types; listOf anything;
|
||||||
|
description = ''
|
||||||
|
List of extensions via attrsets:
|
||||||
|
```nix
|
||||||
|
# id
|
||||||
|
# figure out the id via:
|
||||||
|
# nix run github:tupakkatapa/mozid -- 'https://addons.mozilla.org/en/firefox/addon/ublock-origin'
|
||||||
|
"uBlock0@raymondhill.net" = {
|
||||||
|
# install url
|
||||||
|
install_url = "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi";
|
||||||
|
# method https://mozilla.github.io/policy-templates/#extensionsettings
|
||||||
|
installation_mode = "force_installed";
|
||||||
|
};
|
||||||
|
```
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
43
lib/foxwrappers.nix
Normal file
|
|
@ -0,0 +1,43 @@
|
||||||
|
# https://github.com/0xc000022070/zen-browser-flake/issues/9#issuecomment-2711057434
|
||||||
|
{inputs, ...}: let
|
||||||
|
mkFirefoxModule = import "${inputs.home-manager.outPath}/modules/programs/firefox/mkFirefoxModule.nix";
|
||||||
|
in {
|
||||||
|
imports = [
|
||||||
|
(mkFirefoxModule {
|
||||||
|
modulePath = [
|
||||||
|
"programs"
|
||||||
|
"zen-browser"
|
||||||
|
];
|
||||||
|
name = "Zen Browser";
|
||||||
|
wrappedPackageName = "zen";
|
||||||
|
unwrappedPackageName = "zen-unwrapped";
|
||||||
|
visible = true;
|
||||||
|
platforms = {
|
||||||
|
linux = {
|
||||||
|
vendorPath = ".zen";
|
||||||
|
configPath = ".zen";
|
||||||
|
};
|
||||||
|
darwin = {
|
||||||
|
configPath = "Library/Application Support/Zen";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
})
|
||||||
|
(mkFirefoxModule {
|
||||||
|
modulePath = [
|
||||||
|
"programs"
|
||||||
|
"librewolf-dashnix"
|
||||||
|
];
|
||||||
|
name = "LibreWolf";
|
||||||
|
description = "LibreWolf is a privacy enhanced Firefox fork.";
|
||||||
|
wrappedPackageName = "librewolf";
|
||||||
|
unwrappedPackageName = "librewolf-unwrapped";
|
||||||
|
|
||||||
|
platforms.linux = {configPath = ".librewolf";};
|
||||||
|
platforms.darwin = {
|
||||||
|
configPath = "Library/Application Support/LibreWolf";
|
||||||
|
};
|
||||||
|
|
||||||
|
enableBookmarks = false;
|
||||||
|
})
|
||||||
|
];
|
||||||
|
}
|
||||||
17
lib/importPkgs.nix
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
{
|
||||||
|
inputs,
|
||||||
|
currentSystem,
|
||||||
|
permittedPackages,
|
||||||
|
pkgs,
|
||||||
|
}:
|
||||||
|
import pkgs {
|
||||||
|
system = currentSystem;
|
||||||
|
config = {
|
||||||
|
allowUnfree = true;
|
||||||
|
permittedInsecurePackages = permittedPackages;
|
||||||
|
};
|
||||||
|
overlays = [
|
||||||
|
inputs.nur.overlays.default
|
||||||
|
inputs.cachy.overlays.default
|
||||||
|
];
|
||||||
|
}
|
||||||
1
lib/override.nix
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
{lib, ...}: value: lib.mkOverride 999 value
|
||||||
446
lib/wm.nix
Normal file
|
|
@ -0,0 +1,446 @@
|
||||||
|
let
|
||||||
|
browserName = config:
|
||||||
|
if (builtins.isString config.mods.homePackages.browser)
|
||||||
|
then config.mods.homePackages.browser
|
||||||
|
else if config.mods.homePackages.browser ? meta && config.mods.homePackages.browser.meta ? mainProgram
|
||||||
|
then config.mods.homePackages.browser.meta.mainProgram
|
||||||
|
else config.mods.homePackages.browser.pname;
|
||||||
|
mkSimpleBind = modKeys: key: command: args: {
|
||||||
|
inherit modKeys key command args;
|
||||||
|
};
|
||||||
|
mkRepeatSimpleBind = modKeys: key: command: args: {
|
||||||
|
inherit modKeys key command args;
|
||||||
|
meta.hyprland.repeat = true;
|
||||||
|
};
|
||||||
|
mkSimpleCustomBind = modKeys: key: niri: hyprland: args: {
|
||||||
|
inherit modKeys key args;
|
||||||
|
command = {
|
||||||
|
inherit niri hyprland;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
mkRepeatCustomBind = modKeys: key: niri: hyprland: args: {
|
||||||
|
inherit modKeys key args;
|
||||||
|
command = {
|
||||||
|
inherit niri hyprland;
|
||||||
|
};
|
||||||
|
meta.hyprland.repeat = true;
|
||||||
|
};
|
||||||
|
mkBindWithDesc = modKeys: key: command: args: desc:
|
||||||
|
{
|
||||||
|
meta.niri.desc = desc;
|
||||||
|
}
|
||||||
|
// mkSimpleBind modKeys key command args;
|
||||||
|
in {
|
||||||
|
defaultWindowRules = {
|
||||||
|
niri = [
|
||||||
|
''
|
||||||
|
match app-id=r#"^org\.keepassxc\.KeePassXC$"#
|
||||||
|
match app-id=r#"^org\.gnome\.World\.Secrets$"#
|
||||||
|
|
||||||
|
block-out-from "screen-capture"
|
||||||
|
''
|
||||||
|
''
|
||||||
|
match app-id=r#"^steam$"#
|
||||||
|
open-on-workspace "0"
|
||||||
|
''
|
||||||
|
''
|
||||||
|
geometry-corner-radius 12
|
||||||
|
clip-to-geometry true
|
||||||
|
''
|
||||||
|
];
|
||||||
|
hyprland = [
|
||||||
|
# window rules
|
||||||
|
"match:class OxiCalc, float on"
|
||||||
|
"match:class winecfg.exe, float on"
|
||||||
|
"match:class copyq, float on"
|
||||||
|
"match:class swappy, center on"
|
||||||
|
"match:class steam, workspace 10 silent"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
defaultStartup = config: {
|
||||||
|
all = [
|
||||||
|
"systemctl --user import-environment"
|
||||||
|
"dbus-update-activation-environment --systemd --all"
|
||||||
|
"hyprctl setcursor ${config.mods.stylix.cursor.name} ${toString config.mods.stylix.cursor.size}"
|
||||||
|
# ensures the systemd service knows what "hyprctl" is :)
|
||||||
|
(
|
||||||
|
if config.mods.gaming.gamemode
|
||||||
|
then "systemctl try-restart gamemoded.service --user"
|
||||||
|
else ""
|
||||||
|
)
|
||||||
|
|
||||||
|
# other programs
|
||||||
|
"${browserName config}"
|
||||||
|
(
|
||||||
|
if config.mods.oxi.hyprdock.enable
|
||||||
|
then "hyprdock --server"
|
||||||
|
else ""
|
||||||
|
)
|
||||||
|
(
|
||||||
|
if config.mods.hypr.hyprpaper.enable
|
||||||
|
then "hyprpaper"
|
||||||
|
else ""
|
||||||
|
)
|
||||||
|
(
|
||||||
|
if config.mods.hypr.hyprland.useIronbar
|
||||||
|
then "ironbar"
|
||||||
|
else ""
|
||||||
|
)
|
||||||
|
(
|
||||||
|
if config.mods.oxi.oxipaste.enable
|
||||||
|
then "oxipaste_daemon"
|
||||||
|
else ""
|
||||||
|
)
|
||||||
|
(
|
||||||
|
if config.mods.oxi.oxinoti.enable
|
||||||
|
then "oxinoti"
|
||||||
|
else ""
|
||||||
|
)
|
||||||
|
];
|
||||||
|
niri = [
|
||||||
|
"XDG_CURRENT_DESKTOP=Niri"
|
||||||
|
"XDG_SESSION_DESKTOP=Niri"
|
||||||
|
"XDG_SESSION_TYPE=wayland"
|
||||||
|
];
|
||||||
|
hyprland = [
|
||||||
|
"XDG_CURRENT_DESKTOP=Hyprland"
|
||||||
|
"XDG_SESSION_DESKTOP=Hyprland"
|
||||||
|
"XDG_SESSION_TYPE=wayland"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
defaultEnv = config: {
|
||||||
|
all = {
|
||||||
|
GTK_CSD = "0";
|
||||||
|
TERM = "kitty /bin/fish";
|
||||||
|
HYPRCURSOR_THEME = config.mods.stylix.cursor.name;
|
||||||
|
HYPRCURSOR_SIZE = toString config.mods.stylix.cursor.size;
|
||||||
|
XCURSOR_THEME = config.mods.stylix.cursor.name;
|
||||||
|
XCURSOR_SIZE = toString config.mods.stylix.cursor.size;
|
||||||
|
QT_QPA_PLATFORM = "wayland";
|
||||||
|
QT_QPA_PLATFORMTHEME = "qt5ct";
|
||||||
|
QT_WAYLAND_FORCE_DPI = "96";
|
||||||
|
QT_AUTO_SCREEN_SCALE_FACTOR = "0";
|
||||||
|
QT_WAYLAND_DISABLE_WINDOWDECORATION = "1";
|
||||||
|
QT_SCALE_FACTOR = "1";
|
||||||
|
EDITOR = "neovide --novsync --nofork";
|
||||||
|
|
||||||
|
LIBVA_DRIVER_NAME =
|
||||||
|
if config.mods.gpu.nvidia.enable
|
||||||
|
then "nvidia"
|
||||||
|
else "";
|
||||||
|
GBM_BACKEND =
|
||||||
|
if config.mods.gpu.nvidia.enable
|
||||||
|
then "nvidia-drm"
|
||||||
|
else "";
|
||||||
|
__GLX_VENDOR_LIBRARY_NAME =
|
||||||
|
if config.mods.gpu.nvidia.enable
|
||||||
|
then "nvidia"
|
||||||
|
else "";
|
||||||
|
};
|
||||||
|
niri = {};
|
||||||
|
hyprland = {};
|
||||||
|
};
|
||||||
|
|
||||||
|
defaultBinds = config: [
|
||||||
|
(mkSimpleBind ["Mod"] "1" "focusWorkspace" ["1"])
|
||||||
|
(mkSimpleBind ["Mod"] "2" "focusWorkspace" ["2"])
|
||||||
|
(mkSimpleBind ["Mod"] "3" "focusWorkspace" ["3"])
|
||||||
|
(mkSimpleBind ["Mod"] "4" "focusWorkspace" ["4"])
|
||||||
|
(mkSimpleBind ["Mod"] "5" "focusWorkspace" ["5"])
|
||||||
|
(mkSimpleBind ["Mod"] "6" "focusWorkspace" ["6"])
|
||||||
|
(mkSimpleBind ["Mod"] "7" "focusWorkspace" ["7"])
|
||||||
|
(mkSimpleBind ["Mod"] "8" "focusWorkspace" ["8"])
|
||||||
|
(mkSimpleBind ["Mod"] "9" "focusWorkspace" ["9"])
|
||||||
|
(mkSimpleBind ["Mod"] "0" "focusWorkspace" ["10"])
|
||||||
|
(mkSimpleBind ["Mod" "Shift"] "1" "moveToWorkspace" ["1"])
|
||||||
|
(mkSimpleBind ["Mod" "Shift"] "2" "moveToWorkspace" ["2"])
|
||||||
|
(mkSimpleBind ["Mod" "Shift"] "3" "moveToWorkspace" ["3"])
|
||||||
|
(mkSimpleBind ["Mod" "Shift"] "4" "moveToWorkspace" ["4"])
|
||||||
|
(mkSimpleBind ["Mod" "Shift"] "5" "moveToWorkspace" ["5"])
|
||||||
|
(mkSimpleBind ["Mod" "Shift"] "6" "moveToWorkspace" ["6"])
|
||||||
|
(mkSimpleBind ["Mod" "Shift"] "7" "moveToWorkspace" ["7"])
|
||||||
|
(mkSimpleBind ["Mod" "Shift"] "8" "moveToWorkspace" ["8"])
|
||||||
|
(mkSimpleBind ["Mod" "Shift"] "9" "moveToWorkspace" ["9"])
|
||||||
|
(mkSimpleBind ["Mod" "Shift"] "0" "moveToWorkspace" ["10"])
|
||||||
|
(mkSimpleBind ["Mod"] "B" "toggleFullscreen" [])
|
||||||
|
(mkSimpleBind ["Mod"] "V" "toggleFloating" [])
|
||||||
|
(mkSimpleBind ["Mod" "Shift"] "M" "quit" [])
|
||||||
|
(mkSimpleBind ["Mod"] "Left" "moveWindowLeft" [])
|
||||||
|
(mkSimpleBind ["Mod"] "Down" "moveWindowDown" [])
|
||||||
|
(mkSimpleBind ["Mod"] "Up" "moveWindowUp" [])
|
||||||
|
(mkSimpleBind ["Mod"] "Right" "moveWindowRight" [])
|
||||||
|
|
||||||
|
(mkRepeatSimpleBind ["Mod"] "J" "moveFocusLeft" [])
|
||||||
|
(mkRepeatSimpleBind ["Mod"] "K" "moveFocusDown" [])
|
||||||
|
(mkRepeatSimpleBind ["Mod"] "L" "moveFocusUp" [])
|
||||||
|
(mkRepeatSimpleBind ["Mod"] "semicolon" "moveFocusRight" [])
|
||||||
|
|
||||||
|
(mkBindWithDesc ["Mod"] "Q" "killActive" [] "Kill active window")
|
||||||
|
|
||||||
|
(mkBindWithDesc ["Mod"] "N" "spawn" ["neovide"] "Open Neovide")
|
||||||
|
(mkBindWithDesc ["Mod"] "T" "spawn-sh" ["kitty" "-1"] "Open Kitty")
|
||||||
|
(mkBindWithDesc ["Mod" "Shift"] "L" "spawn" ["hyprlock"] "Lock screen")
|
||||||
|
|
||||||
|
(
|
||||||
|
if config.mods.yazi.enable
|
||||||
|
then mkBindWithDesc ["Mod"] "E" "spawn-sh" ["EDITOR='neovide --no-fork' kitty yazi"] "Open Yazi"
|
||||||
|
else {}
|
||||||
|
)
|
||||||
|
(
|
||||||
|
if config.mods.anyrun.enable
|
||||||
|
then mkBindWithDesc ["Mod"] "R" "spawn" ["anyrun"] "Open Anyrun"
|
||||||
|
else {}
|
||||||
|
)
|
||||||
|
(
|
||||||
|
if config.mods.oxi.oxirun.enable
|
||||||
|
then mkBindWithDesc ["Mod"] "R" "spawn" ["oxirun"] "Open OxiRun"
|
||||||
|
else {}
|
||||||
|
)
|
||||||
|
(
|
||||||
|
if config.mods.oxi.oxidash.enable
|
||||||
|
then mkBindWithDesc ["Mod"] "M" "spawn" ["oxidash"] "Open OxiDash"
|
||||||
|
else {}
|
||||||
|
)
|
||||||
|
(
|
||||||
|
if config.mods.oxi.oxicalc.enable
|
||||||
|
then mkBindWithDesc ["Mod"] "G" "spawn" ["oxicalc"] "Open Oxicalc"
|
||||||
|
else {}
|
||||||
|
)
|
||||||
|
(
|
||||||
|
if config.mods.oxi.oxishut.enable
|
||||||
|
then mkBindWithDesc ["Mod"] "D" "spawn" ["oxishut"] "Open OxiShut"
|
||||||
|
else {}
|
||||||
|
)
|
||||||
|
(
|
||||||
|
if config.mods.oxi.oxipaste.enable
|
||||||
|
then mkBindWithDesc ["Mod"] "A" "spawn" ["oxipaste"] "Open Oxipaste"
|
||||||
|
else {}
|
||||||
|
)
|
||||||
|
(
|
||||||
|
if config.mods.oxi.hyprdock.enable
|
||||||
|
then mkBindWithDesc ["Mod" "Shift"] "P" "spawn" ["hyprdock --gui"] "Open Hyprdock"
|
||||||
|
else {}
|
||||||
|
)
|
||||||
|
(
|
||||||
|
if config.mods.hypr.hyprlock.enable
|
||||||
|
then mkBindWithDesc ["Mod" "Shift" "Alt"] "L" "spawn-sh" ["playerctl -a pause & hyprlock & systemctl suspend"] "Lock and suspend"
|
||||||
|
else {}
|
||||||
|
)
|
||||||
|
(
|
||||||
|
if config.mods.hypr.hyprlock.enable
|
||||||
|
then mkBindWithDesc ["Mod" "Shift" "Alt"] "K" "spawn-sh" ["playerctl -a pause & hyprlock & systemctl hibernate"] "Lock and hibernate"
|
||||||
|
else {}
|
||||||
|
)
|
||||||
|
|
||||||
|
(mkBindWithDesc ["Mod"] "F" "spawn" ["${browserName config}"] "Open Browser")
|
||||||
|
(
|
||||||
|
if
|
||||||
|
(
|
||||||
|
browserName config == "firefox" || browserName config == "zen"
|
||||||
|
)
|
||||||
|
then mkBindWithDesc ["Mod" "Shift"] "F" "spawn" ["${browserName config} -p special"] "Open Browser Special Profile"
|
||||||
|
else {}
|
||||||
|
)
|
||||||
|
|
||||||
|
(mkBindWithDesc ["Mod"] "S" "spawn-sh" [''grim -g "$(slurp)" - | wl-copy''] "Take Screenshot")
|
||||||
|
(mkBindWithDesc ["Mod" "Shift"] "S" "spawn-sh" [''grim -g "$(slurp)" - | satty -f -''] "Take Screenshot and edit")
|
||||||
|
|
||||||
|
(
|
||||||
|
if config.mods.scripts.audioControl
|
||||||
|
then {
|
||||||
|
key = "XF86AudioMute";
|
||||||
|
command = "spawn-sh";
|
||||||
|
args = ["audioControl mute"];
|
||||||
|
meta.niri = {
|
||||||
|
allowWhileLocked = true;
|
||||||
|
desc = "Mute Audio";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
else {}
|
||||||
|
)
|
||||||
|
(
|
||||||
|
if config.mods.scripts.audioControl
|
||||||
|
then {
|
||||||
|
key = "XF86AudioRaiseVolume";
|
||||||
|
command = "spawn-sh";
|
||||||
|
args = ["audioControl +5%"];
|
||||||
|
meta.niri = {
|
||||||
|
allowWhileLocked = true;
|
||||||
|
desc = "Raise Audio Volume";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
else {}
|
||||||
|
)
|
||||||
|
(
|
||||||
|
if config.mods.scripts.audioControl
|
||||||
|
then {
|
||||||
|
key = "XF86AudioLowerVolume";
|
||||||
|
command = "spawn-sh";
|
||||||
|
args = ["audioControl -5%"];
|
||||||
|
meta.niri = {
|
||||||
|
allowWhileLocked = true;
|
||||||
|
desc = "Lower Audio Volume";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
else {}
|
||||||
|
)
|
||||||
|
{
|
||||||
|
key = "XF86AudioPlay";
|
||||||
|
command = "spawn-sh";
|
||||||
|
args = ["playerctl play-pause"];
|
||||||
|
meta.niri = {
|
||||||
|
allowWhileLocked = true;
|
||||||
|
desc = "Play/Pause";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
key = "XF86AudioNext";
|
||||||
|
command = "spawn-sh";
|
||||||
|
args = ["playerctl next"];
|
||||||
|
meta.niri = {
|
||||||
|
allowWhileLocked = true;
|
||||||
|
desc = "Next Song";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
key = "XF86AudioPrev";
|
||||||
|
command = "spawn-sh";
|
||||||
|
args = ["playerctl previous"];
|
||||||
|
meta.niri = {
|
||||||
|
allowWhileLocked = true;
|
||||||
|
desc = "Previous Song";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
(
|
||||||
|
if config.mods.scripts.changeBrightness
|
||||||
|
then {
|
||||||
|
key = "XF86MonBrightnessDown";
|
||||||
|
command = "spawn-sh";
|
||||||
|
args = ["changeBrightness -10%"];
|
||||||
|
meta.niri = {
|
||||||
|
allowWhileLocked = true;
|
||||||
|
desc = "Lower Brigthness";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
else {}
|
||||||
|
)
|
||||||
|
(
|
||||||
|
if config.mods.scripts.changeBrightness
|
||||||
|
then {
|
||||||
|
key = "XF86MonBrightnessUp";
|
||||||
|
command = "spawn-sh";
|
||||||
|
args = ["changeBrightness +10%"];
|
||||||
|
meta.niri = {
|
||||||
|
allowWhileLocked = true;
|
||||||
|
desc = "Raise Brigthness";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
else {}
|
||||||
|
)
|
||||||
|
|
||||||
|
# Niri only keybinds
|
||||||
|
(mkSimpleCustomBind ["Mod"] "BracketLeft" "consume-or-expel-window-left" null [])
|
||||||
|
(mkSimpleCustomBind ["Mod"] "BracketRight" "consume-or-expel-window-right" null [])
|
||||||
|
(mkSimpleCustomBind ["Mod"] "Comma" "consume-window-into-column" null [])
|
||||||
|
(mkSimpleCustomBind ["Mod"] "Period" "expel-window-from-column" null [])
|
||||||
|
(mkSimpleCustomBind ["Mod"] "Y" "switch-preset-column-width" null [])
|
||||||
|
(mkSimpleCustomBind ["Mod"] "Tab" "focus-workspace-previous" null [])
|
||||||
|
(mkSimpleCustomBind ["Mod" "Shift"] "V" "switch-focus-between-floating-and-tiling" null [])
|
||||||
|
(mkSimpleCustomBind ["Mod" "Shift"] "B" "expand-column-to-available-width" null [])
|
||||||
|
(mkSimpleCustomBind ["Mod"] "U" "set-column-width" null ["-10%"])
|
||||||
|
(mkSimpleCustomBind ["Mod"] "P" "set-column-width" null ["+10%"])
|
||||||
|
(mkSimpleCustomBind ["Mod"] "O" "set-column-width" null ["50%"])
|
||||||
|
(mkSimpleCustomBind ["Mod" "Shift"] "Minus" "set-window-height" null ["-10%"])
|
||||||
|
(mkSimpleCustomBind ["Mod" "Shift"] "Equal" "set-window-height" null ["+10%"])
|
||||||
|
(mkSimpleCustomBind ["Mod" "Ctrl"] "1" "move-column-to-workspace" null ["1"])
|
||||||
|
(mkSimpleCustomBind ["Mod" "Ctrl"] "2" "move-column-to-workspace" null ["2"])
|
||||||
|
(mkSimpleCustomBind ["Mod" "Ctrl"] "3" "move-column-to-workspace" null ["3"])
|
||||||
|
(mkSimpleCustomBind ["Mod" "Ctrl"] "4" "move-column-to-workspace" null ["4"])
|
||||||
|
(mkSimpleCustomBind ["Mod" "Ctrl"] "5" "move-column-to-workspace" null ["5"])
|
||||||
|
(mkSimpleCustomBind ["Mod" "Ctrl"] "6" "move-column-to-workspace" null ["6"])
|
||||||
|
(mkSimpleCustomBind ["Mod" "Ctrl"] "7" "move-column-to-workspace" null ["7"])
|
||||||
|
(mkSimpleCustomBind ["Mod" "Ctrl"] "8" "move-column-to-workspace" null ["8"])
|
||||||
|
(mkSimpleCustomBind ["Mod" "Ctrl"] "9" "move-column-to-workspace" null ["9"])
|
||||||
|
(mkSimpleCustomBind ["Mod" "Ctrl"] "0" "move-column-to-workspace" null ["10"])
|
||||||
|
(mkSimpleCustomBind ["Mod" "Shift"] "J" "focus-monitor-left" null [])
|
||||||
|
(mkSimpleCustomBind ["Mod" "Shift"] "semicolon" "focus-monitor-right" null [])
|
||||||
|
(mkSimpleCustomBind ["Mod" "Ctrl"] "J" "move-column-to-monitor-left" null [])
|
||||||
|
(mkSimpleCustomBind ["Mod" "Ctrl"] "semicolon" "move-column-to-monitor-right" null [])
|
||||||
|
(mkSimpleCustomBind ["Mod" "Shift"] "Slash" "show-hotkey-overlay" null [])
|
||||||
|
{
|
||||||
|
modKeys = ["Mod"];
|
||||||
|
key = "W";
|
||||||
|
command.niri = "toggle-overview";
|
||||||
|
meta.niri = {
|
||||||
|
desc = "Overview";
|
||||||
|
repeat = false;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
modKeys = ["Mod"];
|
||||||
|
key = "Escape";
|
||||||
|
command.niri = "toggle-keyboard-shortcuts-inhibit";
|
||||||
|
meta.niri = {
|
||||||
|
allowInhibit = false;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
modKeys = ["Mod"];
|
||||||
|
key = "WheelScrollUp";
|
||||||
|
command.niri = "focus-workspace-up";
|
||||||
|
meta.niri.cooldown = 150;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
modKeys = ["Mod"];
|
||||||
|
key = "WheelScrollDown";
|
||||||
|
command.niri = "focus-workspace-down";
|
||||||
|
meta.niri.cooldown = 150;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
modKeys = ["Mod"];
|
||||||
|
key = "WheelScrollRight";
|
||||||
|
command.niri = "focus-column-right";
|
||||||
|
meta.niri.cooldown = 150;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
modKeys = ["Mod"];
|
||||||
|
key = "WheelScrollLeft";
|
||||||
|
command.niri = "focus-column-left";
|
||||||
|
meta.niri.cooldown = 150;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Hyprland only keybinds
|
||||||
|
(mkSimpleCustomBind ["Mod"] "C" null "togglesplit" [])
|
||||||
|
(mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "1" null "movetoworkspacesilent" ["1"])
|
||||||
|
(mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "2" null "movetoworkspacesilent" ["2"])
|
||||||
|
(mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "3" null "movetoworkspacesilent" ["3"])
|
||||||
|
(mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "4" null "movetoworkspacesilent" ["4"])
|
||||||
|
(mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "5" null "movetoworkspacesilent" ["5"])
|
||||||
|
(mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "6" null "movetoworkspacesilent" ["6"])
|
||||||
|
(mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "7" null "movetoworkspacesilent" ["7"])
|
||||||
|
(mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "8" null "movetoworkspacesilent" ["8"])
|
||||||
|
(mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "9" null "movetoworkspacesilent" ["9"])
|
||||||
|
(mkSimpleCustomBind ["Mod" "SHIFT" "ALT"] "0" null "movetoworkspacesilent" ["10"])
|
||||||
|
(mkRepeatCustomBind ["Mod"] "U" null "resizeactive" ["-20" "0"])
|
||||||
|
(mkRepeatCustomBind ["Mod"] "P" null "resizeactive" ["20" "0"])
|
||||||
|
(mkRepeatCustomBind ["Mod"] "O" null "resizeactive" ["0" "-20"])
|
||||||
|
(mkRepeatCustomBind ["Mod"] "I" null "resizeactive" ["0" "20"])
|
||||||
|
(mkSimpleCustomBind ["Mod" "ALT"] "J" null "layoutmsg" ["preselect" "l"])
|
||||||
|
(mkSimpleCustomBind ["Mod" "ALT"] "K" null "layoutmsg" ["preselect" "d"])
|
||||||
|
(mkSimpleCustomBind ["Mod" "ALT"] "L" null "layoutmsg" ["preselect" "u"])
|
||||||
|
(mkSimpleCustomBind ["Mod" "ALT"] "semicolon" null "layoutmsg" ["preselect" "r"])
|
||||||
|
(mkSimpleCustomBind ["Mod" "ALT"] "H" null "layoutmsg" ["preselect" "n"])
|
||||||
|
(
|
||||||
|
if config.mods.hypr.hyprland.hyprspaceEnable
|
||||||
|
then {
|
||||||
|
modKeys = ["Mod"];
|
||||||
|
key = "W";
|
||||||
|
command.hyprland = "overview:toggle";
|
||||||
|
args = [];
|
||||||
|
}
|
||||||
|
else {}
|
||||||
|
)
|
||||||
|
];
|
||||||
|
}
|
||||||
293
logo.svg
Normal file
|
|
@ -0,0 +1,293 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
width="38.753597mm"
|
||||||
|
height="65.022255mm"
|
||||||
|
viewBox="0 0 38.753597 65.022256"
|
||||||
|
version="1.1"
|
||||||
|
id="svg1"
|
||||||
|
xml:space="preserve"
|
||||||
|
sodipodi:docname="logo.svg"
|
||||||
|
inkscape:export-filename="logo4.svg"
|
||||||
|
inkscape:export-xdpi="96"
|
||||||
|
inkscape:export-ydpi="96"
|
||||||
|
inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
|
||||||
|
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/"><title
|
||||||
|
id="title39">DashNix</title><sodipodi:namedview
|
||||||
|
id="namedview1"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#000000"
|
||||||
|
borderopacity="0.25"
|
||||||
|
inkscape:showpageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:deskcolor="#d1d1d1"
|
||||||
|
inkscape:document-units="mm"
|
||||||
|
inkscape:zoom="1.3808026"
|
||||||
|
inkscape:cx="-3.9831908"
|
||||||
|
inkscape:cy="-63.368944"
|
||||||
|
inkscape:window-width="2480"
|
||||||
|
inkscape:window-height="1394"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg1" /><defs
|
||||||
|
id="defs1"><linearGradient
|
||||||
|
id="linearGradient106"><stop
|
||||||
|
style="stop-color:#28b3fc;stop-opacity:1;"
|
||||||
|
offset="0"
|
||||||
|
id="stop106" /><stop
|
||||||
|
style="stop-color:#28b3fc;stop-opacity:1;"
|
||||||
|
offset="0.23456791"
|
||||||
|
id="stop109" /><stop
|
||||||
|
style="stop-color:#f8f641;stop-opacity:1;"
|
||||||
|
offset="0.4526749"
|
||||||
|
id="stop108" /><stop
|
||||||
|
style="stop-color:#f8f641;stop-opacity:1;"
|
||||||
|
offset="0.59362137"
|
||||||
|
id="stop110" /><stop
|
||||||
|
style="stop-color:#ff0d01;stop-opacity:1;"
|
||||||
|
offset="0.66358024"
|
||||||
|
id="stop111" /><stop
|
||||||
|
style="stop-color:#ff0d01;stop-opacity:1;"
|
||||||
|
offset="1"
|
||||||
|
id="stop107" /></linearGradient><linearGradient
|
||||||
|
id="swatch2"><stop
|
||||||
|
style="stop-color:#000000;stop-opacity:1;"
|
||||||
|
offset="0"
|
||||||
|
id="stop2" /></linearGradient><linearGradient
|
||||||
|
xlink:href="#linearGradient106"
|
||||||
|
id="linearGradient107"
|
||||||
|
x1="278.05182"
|
||||||
|
y1="-843.59747"
|
||||||
|
x2="529.8988"
|
||||||
|
y2="-736.69476"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
spreadMethod="pad" /><linearGradient
|
||||||
|
xlink:href="#linearGradient106"
|
||||||
|
id="linearGradient111"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x1="278.05182"
|
||||||
|
y1="-843.59747"
|
||||||
|
x2="529.8988"
|
||||||
|
y2="-736.69476"
|
||||||
|
spreadMethod="pad" /><linearGradient
|
||||||
|
xlink:href="#linearGradient106"
|
||||||
|
id="linearGradient112"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x1="278.05182"
|
||||||
|
y1="-843.59747"
|
||||||
|
x2="529.8988"
|
||||||
|
y2="-736.69476"
|
||||||
|
spreadMethod="pad" /><linearGradient
|
||||||
|
xlink:href="#linearGradient106"
|
||||||
|
id="linearGradient113"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x1="278.05182"
|
||||||
|
y1="-843.59747"
|
||||||
|
x2="529.8988"
|
||||||
|
y2="-736.69476"
|
||||||
|
spreadMethod="pad" /></defs><g
|
||||||
|
id="layer1"
|
||||||
|
transform="matrix(0.45379,0,0,0.45379,-29.020506,-23.643099)"><g
|
||||||
|
id="g82"
|
||||||
|
transform="matrix(0.16779066,0,0,0.16779066,64.401373,52.777012)"
|
||||||
|
style="fill:#28b3fc;fill-opacity:1"><g
|
||||||
|
id="layer3-7"
|
||||||
|
style="display:inline;fill:#28b3fc;fill-opacity:1"
|
||||||
|
transform="translate(-141.35649,1425.3526)"><g
|
||||||
|
id="g113"><g
|
||||||
|
id="layer1-8"
|
||||||
|
style="display:inline;fill:#28b3fc;fill-opacity:1"
|
||||||
|
transform="translate(-14.982227,-492.1621)"><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:#28b3fc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;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.40365,-710.2521 122.19683,211.6751 -56.15706,0.5268 -32.6236,-56.8692 -32.85645,56.5653 -27.90237,-0.011 -14.29086,-24.6896 46.81047,-80.4902 -33.22946,-57.8256 z"
|
||||||
|
id="path4861" /><path
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1"
|
||||||
|
d="m 353.50926,-797.4433 -122.21756,211.6631 -28.53477,-48.37 32.93839,-56.6875 -65.41521,-0.1719 -13.9414,-24.1698 14.23637,-24.721 93.11177,0.2939 33.46371,-57.6903 z"
|
||||||
|
id="use4863" /><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:#28b3fc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;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 362.88537,-628.243 244.41439,0.012 -27.62229,48.8968 -65.56199,-0.1817 32.55876,56.7371 -13.96098,24.1585 -28.52722,0.032 -46.3013,-80.7841 -66.69317,-0.1353 z"
|
||||||
|
id="use4865" /><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:#28b3fc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;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 505.14318,-720.9886 -122.19683,-211.6751 56.15706,-0.5268 32.6236,56.8692 32.85645,-56.5653 27.90237,0.011 14.29086,24.6896 -46.81047,80.4902 33.22946,57.8256 z"
|
||||||
|
id="use4867" /><path
|
||||||
|
id="path4873"
|
||||||
|
d="m 309.40365,-710.2521 122.19683,211.6751 -56.15706,0.5268 -32.6236,-56.8692 -32.85645,56.5653 -27.90237,-0.011 -14.29086,-24.6896 46.81047,-80.4902 -33.22946,-57.8256 z"
|
||||||
|
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:#28b3fc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;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" /><path
|
||||||
|
id="use4875"
|
||||||
|
d="m 451.3364,-803.53264 -244.4144,-0.012 27.62229,-48.89685 65.56199,0.18175 -32.55875,-56.73717 13.96097,-24.15851 28.52722,-0.0315 46.3013,80.78414 66.69317,0.13524 z"
|
||||||
|
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:#28b3fc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;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" /><path
|
||||||
|
id="use4877"
|
||||||
|
d="m 460.87178,-633.8425 122.21757,-211.66304 28.53477,48.37003 -32.93839,56.68751 65.4152,0.1718 13.9414,24.1698 -14.23636,24.7211 -93.11177,-0.294 -33.46371,57.6904 z"
|
||||||
|
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:#28b3fc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;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" /><g
|
||||||
|
id="layer2"
|
||||||
|
style="display:none;fill:#f7f5f6;fill-opacity:1"
|
||||||
|
transform="translate(72.039038,-1799.4476)"><path
|
||||||
|
d="M 460.60629,594.72881 209.74183,594.7288 84.309616,377.4738 209.74185,160.21882 l 250.86446,1e-5 125.43222,217.255 z"
|
||||||
|
id="path6032"
|
||||||
|
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.236;fill:#f7f5f6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" /><path
|
||||||
|
transform="translate(0,-308.26772)"
|
||||||
|
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#f7f5f6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
|
||||||
|
id="path5875"
|
||||||
|
d="M 385.59154,773.06721 H 284.75659 l -50.41747,-87.32564 50.41748,-87.32563 100.83495,10e-6 50.41748,87.32563 z" /><path
|
||||||
|
transform="translate(0,-308.26772)"
|
||||||
|
id="path5851"
|
||||||
|
d="m 1216.5591,938.53395 123.0545,228.14035 -42.6807,-1.2616 -43.4823,-79.7725 -39.6506,80.3267 -32.6875,-19.7984 53.4737,-100.2848 -37.1157,-73.88955 z"
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><rect
|
||||||
|
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.415;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#f7f5f6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
id="rect5884"
|
||||||
|
width="48.834862"
|
||||||
|
height="226.22897"
|
||||||
|
x="-34.74221"
|
||||||
|
y="446.17056"
|
||||||
|
transform="rotate(-30)" /><path
|
||||||
|
transform="translate(0,-308.26772)"
|
||||||
|
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.509;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#f7f5f6;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
id="path3428"
|
||||||
|
d="m 251.98568,878.63831 -14.02447,24.29109 h -28.04894 l -14.02447,-24.29109 14.02447,-24.2911 h 28.04894 z" /><use
|
||||||
|
x="0"
|
||||||
|
y="0"
|
||||||
|
xlink:href="#rect5884"
|
||||||
|
id="use4252"
|
||||||
|
transform="rotate(60,268.29786,489.4515)"
|
||||||
|
width="100%"
|
||||||
|
height="100%"
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1" /><rect
|
||||||
|
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:#f7f5f6;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
id="rect4254"
|
||||||
|
width="5.3947482"
|
||||||
|
height="115.12564"
|
||||||
|
x="545.71014"
|
||||||
|
y="467.07007"
|
||||||
|
transform="rotate(30,575.23539,-154.13386)" /></g><path
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1;stroke-width:0.362108"
|
||||||
|
d="m 17.647006,93.08153 c -2.137791,-3.629135 -3.886892,-6.781154 -3.886892,-7.004491 0,-0.223334 2.036859,-3.907974 4.526353,-8.18809 2.489494,-4.280113 4.526353,-7.872269 4.526353,-7.982568 0,-0.110298 -4.202399,-0.200542 -9.338664,-0.200542 H 4.1354931 L 2.2488007,66.408408 C 1.2111198,64.594822 0.36210825,62.964051 0.36210825,62.784474 c 0,-0.179578 0.83310065,-1.791759 1.85133475,-3.582627 l 1.8513347,-3.256122 13.4477393,-0.0031 13.447739,-0.0031 4.75902,-8.234844 4.75902,-8.234843 8.039166,-0.09755 8.039169,-0.09754 -0.718362,1.18387 C 55.443173,41.109708 47.744447,54.433923 38.729994,70.067947 29.715538,85.701971 22.158685,98.760409 21.936986,99.086701 21.60128,99.580783 20.884148,98.576936 17.647006,93.08153 Z"
|
||||||
|
id="path27"
|
||||||
|
transform="matrix(3.4748797,0,0,3.4748797,156.33872,-933.32664)" /><path
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1;stroke-width:0.181054"
|
||||||
|
d="m 20.413065,97.739351 c -2.448138,-4.090679 -6.658726,-11.27144 -6.752434,-11.515638 -0.05373,-0.14001 2.024274,-3.903593 4.617779,-8.363519 2.593506,-4.459926 4.715464,-8.13954 4.715464,-8.17692 0,-0.03738 -4.257035,-0.07107 -9.460078,-0.07486 L 4.0737178,69.601519 2.1145346,66.168465 0.15535114,62.73541 2.2025635,59.176688 l 2.0472121,-3.558721 13.3811224,0.07335 13.381123,0.07335 4.807164,-8.283226 4.807163,-8.283227 h 7.93127 c 4.362198,0 7.931269,0.04091 7.931269,0.0909 0,0.112152 -34.58204,60.050535 -34.768044,60.260772 -0.07356,0.08315 -0.662065,-0.731596 -1.307778,-1.810541 z"
|
||||||
|
id="path28"
|
||||||
|
transform="matrix(3.4748797,0,0,3.4748797,156.33872,-933.32664)" /><path
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1;stroke-width:0.181054"
|
||||||
|
d="m 20.413065,97.739351 c -2.448138,-4.090679 -6.658726,-11.27144 -6.752434,-11.515638 -0.05373,-0.14001 2.024274,-3.903593 4.617779,-8.363519 2.593506,-4.459926 4.715464,-8.13954 4.715464,-8.17692 0,-0.03738 -4.257035,-0.07107 -9.460078,-0.07486 L 4.0737178,69.601519 2.1145346,66.168465 0.15535114,62.73541 2.2025635,59.176688 l 2.0472121,-3.558721 13.3811224,0.07335 13.381123,0.07335 4.807164,-8.283226 4.807163,-8.283227 h 7.93127 c 4.362198,0 7.931269,0.04091 7.931269,0.0909 0,0.112152 -34.58204,60.050535 -34.768044,60.260772 -0.07356,0.08315 -0.662065,-0.731596 -1.307778,-1.810541 z"
|
||||||
|
id="path29"
|
||||||
|
transform="matrix(3.4748797,0,0,3.4748797,156.33872,-933.32664)" /><path
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1;stroke-width:0.181054"
|
||||||
|
d="m 20.413065,97.739351 c -2.448138,-4.090679 -6.658726,-11.27144 -6.752434,-11.515638 -0.05373,-0.14001 2.024274,-3.903593 4.617779,-8.363519 2.593506,-4.459926 4.715464,-8.13954 4.715464,-8.17692 0,-0.03738 -4.257035,-0.07107 -9.460078,-0.07486 L 4.0737178,69.601519 2.1145346,66.168465 0.15535114,62.73541 2.2025635,59.176688 l 2.0472121,-3.558721 13.3811224,0.07335 13.381123,0.07335 4.807164,-8.283226 4.807163,-8.283227 h 7.93127 c 4.362198,0 7.931269,0.04091 7.931269,0.0909 0,0.112152 -34.58204,60.050535 -34.768044,60.260772 -0.07356,0.08315 -0.662065,-0.731596 -1.307778,-1.810541 z"
|
||||||
|
id="path30"
|
||||||
|
transform="matrix(3.4748797,0,0,3.4748797,156.33872,-933.32664)" /><path
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1;stroke-width:0.181054"
|
||||||
|
d="m 20.413065,97.739351 c -2.448138,-4.090679 -6.658726,-11.27144 -6.752434,-11.515638 -0.05373,-0.14001 2.024274,-3.903593 4.617779,-8.363519 2.593506,-4.459926 4.715464,-8.13954 4.715464,-8.17692 0,-0.03738 -4.257035,-0.07107 -9.460078,-0.07486 L 4.0737178,69.601519 2.1145346,66.168465 0.15535114,62.73541 2.2025635,59.176688 l 2.0472121,-3.558721 13.3811224,0.07335 13.381123,0.07335 4.807164,-8.283226 4.807163,-8.283227 h 7.93127 c 4.362198,0 7.931269,0.04091 7.931269,0.0909 0,0.112152 -34.58204,60.050535 -34.768044,60.260772 -0.07356,0.08315 -0.662065,-0.731596 -1.307778,-1.810541 z"
|
||||||
|
id="path31"
|
||||||
|
transform="matrix(3.4748797,0,0,3.4748797,156.33872,-933.32664)" /><path
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1;stroke-width:0.181054"
|
||||||
|
d="m 20.413065,97.739351 c -2.448138,-4.090679 -6.658726,-11.27144 -6.752434,-11.515638 -0.05373,-0.14001 2.024274,-3.903593 4.617779,-8.363519 2.593506,-4.459926 4.715464,-8.13954 4.715464,-8.17692 0,-0.03738 -4.257035,-0.07107 -9.460078,-0.07486 L 4.0737178,69.601519 2.1145346,66.168465 0.15535114,62.73541 2.2025635,59.176688 l 2.0472121,-3.558721 13.3811224,0.07335 13.381123,0.07335 4.807164,-8.283226 4.807163,-8.283227 h 7.93127 c 4.362198,0 7.931269,0.04091 7.931269,0.0909 0,0.112152 -34.58204,60.050535 -34.768044,60.260772 -0.07356,0.08315 -0.662065,-0.731596 -1.307778,-1.810541 z"
|
||||||
|
id="path32"
|
||||||
|
transform="matrix(3.4748797,0,0,3.4748797,156.33872,-933.32664)" /><path
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1;stroke-width:0.181054"
|
||||||
|
d="m 20.413065,97.739351 c -2.448138,-4.090679 -6.658726,-11.27144 -6.752434,-11.515638 -0.05373,-0.14001 2.024274,-3.903593 4.617779,-8.363519 2.593506,-4.459926 4.715464,-8.13954 4.715464,-8.17692 0,-0.03738 -4.257035,-0.07107 -9.460078,-0.07486 L 4.0737178,69.601519 2.1145346,66.168465 0.15535114,62.73541 2.2025635,59.176688 l 2.0472121,-3.558721 13.3811224,0.07335 13.381123,0.07335 4.807164,-8.283226 4.807163,-8.283227 h 7.93127 c 4.362198,0 7.931269,0.04091 7.931269,0.0909 0,0.112152 -34.58204,60.050535 -34.768044,60.260772 -0.07356,0.08315 -0.662065,-0.731596 -1.307778,-1.810541 z"
|
||||||
|
id="path33"
|
||||||
|
transform="matrix(3.4748797,0,0,3.4748797,156.33872,-933.32664)" /><path
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1;stroke-width:0.181054"
|
||||||
|
d="m 20.413065,97.739351 c -2.448138,-4.090679 -6.658726,-11.27144 -6.752434,-11.515638 -0.05373,-0.14001 2.024274,-3.903593 4.617779,-8.363519 2.593506,-4.459926 4.715464,-8.13954 4.715464,-8.17692 0,-0.03738 -4.257035,-0.07107 -9.460078,-0.07486 L 4.0737178,69.601519 2.1145346,66.168465 0.15535114,62.73541 2.2025635,59.176688 l 2.0472121,-3.558721 13.3811224,0.07335 13.381123,0.07335 4.807164,-8.283226 4.807163,-8.283227 h 7.93127 c 4.362198,0 7.931269,0.04091 7.931269,0.0909 0,0.112152 -34.58204,60.050535 -34.768044,60.260772 -0.07356,0.08315 -0.662065,-0.731596 -1.307778,-1.810541 z"
|
||||||
|
id="path34"
|
||||||
|
transform="matrix(3.4748797,0,0,3.4748797,156.33872,-933.32664)" /><path
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1;stroke-width:0.181054"
|
||||||
|
d="m 20.413065,97.739351 c -2.448138,-4.090679 -6.658726,-11.27144 -6.752434,-11.515638 -0.05373,-0.14001 2.024274,-3.903593 4.617779,-8.363519 2.593506,-4.459926 4.715464,-8.13954 4.715464,-8.17692 0,-0.03738 -4.257035,-0.07107 -9.460078,-0.07486 L 4.0737178,69.601519 2.1145346,66.168465 0.15535114,62.73541 2.2025635,59.176688 l 2.0472121,-3.558721 13.3811224,0.07335 13.381123,0.07335 4.807164,-8.283226 4.807163,-8.283227 h 7.93127 c 4.362198,0 7.931269,0.04091 7.931269,0.0909 0,0.112152 -34.58204,60.050535 -34.768044,60.260772 -0.07356,0.08315 -0.662065,-0.731596 -1.307778,-1.810541 z"
|
||||||
|
id="path35"
|
||||||
|
transform="matrix(3.4748797,0,0,3.4748797,156.33872,-933.32664)" /></g><g
|
||||||
|
id="layer3"
|
||||||
|
style="display:inline;opacity:1;fill:#28b3fc;fill-opacity:1"
|
||||||
|
transform="translate(-14.982227,-492.1621)"><path
|
||||||
|
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:#28b3fc;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;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"
|
||||||
|
xlink:href="#path3336-6"
|
||||||
|
y="0"
|
||||||
|
x="0"
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1" /><use
|
||||||
|
height="100%"
|
||||||
|
width="100%"
|
||||||
|
transform="rotate(-60,407.31177,-715.70016)"
|
||||||
|
id="use3445-0"
|
||||||
|
xlink:href="#path3336-6"
|
||||||
|
y="0"
|
||||||
|
x="0"
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1" /><use
|
||||||
|
height="100%"
|
||||||
|
width="100%"
|
||||||
|
transform="rotate(180,407.41868,-715.7565)"
|
||||||
|
id="use3449-5"
|
||||||
|
xlink:href="#path3336-6"
|
||||||
|
y="0"
|
||||||
|
x="0"
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1" /><path
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1;stroke:#28b3fc;stroke-width:7.88004;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
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" /><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;fill:#28b3fc;fill-opacity:1;stroke:#28b3fc;stroke-width:7.88004;stroke-dasharray:none;stroke-opacity:1" /><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;fill:#28b3fc;fill-opacity:1;stroke:#28b3fc;stroke-width:7.88004;stroke-dasharray:none;stroke-opacity:1" /></g><g
|
||||||
|
id="g104"
|
||||||
|
style="fill:url(#linearGradient107);stroke:none"
|
||||||
|
transform="rotate(-13.062247,340.02897,-863.93232)"><path
|
||||||
|
id="use3449-5-0-0"
|
||||||
|
d="m 331.77633,-1001.5212 94.91305,225.23301 -55.78631,-6.46377 -25.29508,-60.48604 -39.63845,52.03815 -27.6842,-3.48227 -11.10824,-26.27568 56.46054,-74.04107 -25.77721,-61.5105 z"
|
||||||
|
style="fill:#28b3fc;fill-opacity:1" /><path
|
||||||
|
id="use3449-5-0-0-6"
|
||||||
|
d="m 457.16967,-744.75745 -70.00051,-234.1759 54.76023,12.45846 18.60597,62.86668 45.03324,-47.44663 27.14534,6.4555 8.2017,27.32283 -64.13603,67.50143 18.97452,63.93729 z"
|
||||||
|
style="fill:#ff0d01;fill-opacity:1"
|
||||||
|
sodipodi:nodetypes="cccccccccc" /><path
|
||||||
|
id="use3449-5-0-0-4"
|
||||||
|
d="m 277.21377,-582.32585 178.97491,-166.45237 -53.52586,-16.99636 -47.88683,44.78006 -14.79485,-63.7204 -26.67512,-8.18413 -20.91172,19.40373 21.10703,90.68829 -48.74692,45.51646 z"
|
||||||
|
style="fill:#f8f641;fill-opacity:1" /></g></g></g></g><path
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1;stroke-width:0.181054"
|
||||||
|
d="m 20.413065,97.739351 c -2.448138,-4.090679 -6.658726,-11.27144 -6.752434,-11.515638 -0.05373,-0.14001 2.024274,-3.903593 4.617779,-8.363519 2.593506,-4.459926 4.715464,-8.13954 4.715464,-8.17692 0,-0.03738 -4.257035,-0.07107 -9.460078,-0.07486 L 4.0737178,69.601519 2.1145346,66.168465 0.15535114,62.73541 2.2025635,59.176688 l 2.0472121,-3.558721 13.3811224,0.07335 13.381123,0.07335 4.807164,-8.283226 4.807163,-8.283227 h 7.93127 c 4.362198,0 7.931269,0.04091 7.931269,0.0909 0,0.112152 -34.58204,60.050535 -34.768044,60.260772 -0.07356,0.08315 -0.662065,-0.731596 -1.307778,-1.810541 z"
|
||||||
|
id="path36"
|
||||||
|
transform="matrix(0.58305237,0,0,0.58305237,64.401373,52.754168)" /><path
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1;stroke:#28b3fc;stroke-width:2.26772;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="M 21.228346,98.82575 C 20.775825,98.187139 14.573556,87.698587 14.099569,86.770393 l -0.346608,-0.67875 1.796437,-3.213914 c 0.988041,-1.767653 3.067246,-5.409743 4.620457,-8.093538 1.553211,-2.683792 2.824019,-4.931476 2.824019,-4.99485 0,-0.110336 -11.090545,-0.351953 -16.3853984,-0.356972 L 4.0737178,69.429968 2.217913,66.175832 C 1.1972204,64.386056 0.36210825,62.847854 0.36210825,62.757606 c 0,-0.09025 0.87964515,-1.70058 1.95476695,-3.578513 l 1.954767,-3.414422 13.3895698,0.06926 13.389571,0.06926 4.821268,-8.307221 4.821271,-8.307221 3.145111,-0.04488 c 1.729813,-0.02469 5.235571,0.01605 7.790576,0.09053 l 4.645463,0.135412 -3.534135,6.15584 c -4.146422,7.222338 -16.886029,29.318862 -25.000346,43.362463 -3.135747,5.427098 -5.801825,9.976251 -5.924618,10.109228 -0.183451,0.198671 -0.288115,0.150249 -0.587027,-0.271581 z"
|
||||||
|
id="path37"
|
||||||
|
transform="matrix(0.58305237,0,0,0.58305237,64.401373,52.754168)" /><path
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1;stroke:#28b3fc;stroke-width:2.26772;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 97.636535,120.63066 c -1.389583,-2.41665 -4.382703,-7.63252 -6.651376,-11.59081 l -4.12486,-7.1969 -4.45825,-0.005 c -4.928423,-0.005 -14.743895,-0.1852 -14.838725,-0.27196 -0.03322,-0.0304 -1.827632,-3.096939 -3.987593,-6.814561 l -3.9272,-6.759314 17.535793,-0.04616 c 9.644687,-0.02539 25.387006,-0.02539 34.982936,0 l 17.44715,0.04616 -1.54239,2.715812 c -0.84832,1.493697 -2.61343,4.622573 -3.92248,6.953058 l -2.38008,4.237245 -9.38708,-0.11294 c -7.6636,-0.0922 -9.37652,-0.0697 -9.32957,0.12287 0.0316,0.1297 2.12168,3.83356 4.64454,8.23081 l 4.58703,7.995 -1.97119,3.3966 -1.9712,3.39659 -4.08947,0.0486 -4.08947,0.0486 z"
|
||||||
|
id="path38"
|
||||||
|
transform="matrix(0.58305237,0,0,0.58305237,64.401373,52.754168)" /><path
|
||||||
|
style="fill:#f7f5f6;fill-opacity:1;stroke:#28b3fc;stroke-width:2.26772;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="M 87.802229,39.150266 C 80.890113,27.177278 73.023088,13.551901 70.319951,8.8716522 L 65.405158,0.36210825 68.59656,0.24891517 c 1.755271,-0.0622562 5.350472,-0.12261799 7.989335,-0.1341373 l 4.797935,-0.0209442 4.519855,7.89261083 c 2.48592,4.3409365 4.610279,8.0162745 4.7208,8.1674195 0.162204,0.22183 1.117147,-1.300038 4.953498,-7.8942647 l 4.752557,-8.16907224 h 3.92896 3.92895 l 2.03256,3.50763344 c 1.1179,1.9291986 2.03255,3.5544662 2.03255,3.6117061 0,0.05724 -3.01666,5.2908554 -6.70369,11.6302564 l -6.703688,11.526185 4.779848,8.329337 4.77986,8.329337 -3.94792,6.877008 c -2.17135,3.782353 -3.97949,6.908583 -4.01808,6.947175 -0.0386,0.03859 -5.725543,-9.725911 -12.637661,-21.698899 z"
|
||||||
|
id="path39"
|
||||||
|
transform="matrix(0.58305237,0,0,0.58305237,64.401373,52.754168)"
|
||||||
|
sodipodi:nodetypes="sscsscssscccssscccsss" /></g><metadata
|
||||||
|
id="metadata39"><rdf:RDF><cc:Work
|
||||||
|
rdf:about=""><cc:license
|
||||||
|
rdf:resource="http://creativecommons.org/publicdomain/zero/1.0/" /><dc:title>DashNix</dc:title></cc:Work><cc:License
|
||||||
|
rdf:about="http://creativecommons.org/publicdomain/zero/1.0/"><cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Reproduction" /><cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Distribution" /><cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" /></cc:License></rdf:RDF></metadata></svg>
|
||||||
|
After Width: | Height: | Size: 28 KiB |
170
modules/conf.nix
Normal file
|
|
@ -0,0 +1,170 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
options,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
options.conf = {
|
||||||
|
system = lib.mkOption {
|
||||||
|
default = "x86_64-linux";
|
||||||
|
# no fisherprice unix support
|
||||||
|
type = with lib.types; (enum [
|
||||||
|
"x86_64-linux"
|
||||||
|
"aarch64-linux"
|
||||||
|
"aarch64-linux-android"
|
||||||
|
]);
|
||||||
|
example = "aarch64-linux";
|
||||||
|
description = ''
|
||||||
|
System architecture.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
systemLocalTime = lib.mkOption {
|
||||||
|
default = false;
|
||||||
|
example = true;
|
||||||
|
description = ''
|
||||||
|
System time for dualbooting
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
wsl = lib.mkOption {
|
||||||
|
default = false;
|
||||||
|
example = true;
|
||||||
|
description = ''
|
||||||
|
Runs Nix in wsl
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
secureBoot = lib.mkOption {
|
||||||
|
default = false;
|
||||||
|
example = true;
|
||||||
|
description = ''
|
||||||
|
enables secure boot.
|
||||||
|
Note: Secure boot is NOT reproducible
|
||||||
|
Here are the necessary steps:
|
||||||
|
+ create your keys with sbctl -> sudo sbctl create-keys
|
||||||
|
+ build with systemd once -> set this to false and build once
|
||||||
|
+ build with secureBoot true
|
||||||
|
+ verify that your keys are signed (note, only systemd and your generations should now be signed): sudo sbtcl verify
|
||||||
|
+ enroll your keys (microsoft is necessary for windows dualboot support, leave it there): sudo sbctl enroll-keys --microsoft
|
||||||
|
+ reboot with secureboot enabled
|
||||||
|
Note: Some motherboards have vendor specific keys for secure boot, this may not necessarily work with our self signed keys
|
||||||
|
You likely have to disable these vendor specific keys (example HP: sure boot)
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
useSystemdBootloader = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
description = ''
|
||||||
|
use systemd bootloader.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
cpu = lib.mkOption {
|
||||||
|
# TODO: how to enable arm?
|
||||||
|
default = "amd";
|
||||||
|
type = with lib.types; (enum [
|
||||||
|
"amd"
|
||||||
|
"intel"
|
||||||
|
]);
|
||||||
|
example = "intel";
|
||||||
|
description = ''
|
||||||
|
cpu microcode.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
additionalBootKernalParams = lib.mkOption {
|
||||||
|
default = [];
|
||||||
|
example = [];
|
||||||
|
type = with lib.types; listOf str;
|
||||||
|
description = ''
|
||||||
|
additional kernelParams passed to bootloader
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
bootParams = lib.mkOption {
|
||||||
|
default = [];
|
||||||
|
example = ["resume=something"];
|
||||||
|
type = with lib.types; listOf str;
|
||||||
|
description = ''
|
||||||
|
Boot params
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
kernelOverride = lib.mkOption {
|
||||||
|
default = null;
|
||||||
|
type = with lib.types; nullOr package;
|
||||||
|
description = ''
|
||||||
|
kernel to be used
|
||||||
|
Has no examples as doc complains...
|
||||||
|
#example = pkgs.linuxPackages_xanmod_latest;
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
username = lib.mkOption {
|
||||||
|
default = "DashNix";
|
||||||
|
example = "pingpang";
|
||||||
|
type = lib.types.str;
|
||||||
|
description = ''
|
||||||
|
The username.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
timezone = lib.mkOption {
|
||||||
|
default = "Europe/Zurich";
|
||||||
|
example = "Europe/Berlin";
|
||||||
|
type = lib.types.str;
|
||||||
|
description = ''
|
||||||
|
The timezone.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
locale = lib.mkOption {
|
||||||
|
default = "en_US.UTF-8";
|
||||||
|
example = "de_DE.UTF-8";
|
||||||
|
type = lib.types.str;
|
||||||
|
description = ''
|
||||||
|
The locale.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
nixosConfigPath = lib.mkOption {
|
||||||
|
default = "/home/${config.conf.username}/gits/nixos/.";
|
||||||
|
example = "yourpath/.";
|
||||||
|
type = lib.types.str;
|
||||||
|
description = ''
|
||||||
|
The path for your build command, you can then simply type rebuild to switch to a new configuration.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
systemStateVersion = lib.mkOption {
|
||||||
|
example = "24.11";
|
||||||
|
default = "23.05";
|
||||||
|
type = lib.types.str;
|
||||||
|
description = ''
|
||||||
|
System state version
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
homeStateVersion = lib.mkOption {
|
||||||
|
default = "24.11";
|
||||||
|
example = "23.05";
|
||||||
|
type = lib.types.str;
|
||||||
|
description = ''
|
||||||
|
Home state version
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config =
|
||||||
|
(lib.optionalAttrs (options ? system.stateVersion) {
|
||||||
|
boot = {
|
||||||
|
kernelPackages = lib.mkIf (config.conf.kernelOverride != null) config.conf.kernel;
|
||||||
|
kernelParams = config.conf.additionalBootKernalParams;
|
||||||
|
};
|
||||||
|
system.stateVersion = config.conf.systemStateVersion;
|
||||||
|
})
|
||||||
|
// (lib.optionalAttrs (options ? home.stateVersion) {
|
||||||
|
home.stateVersion = config.conf.homeStateVersion;
|
||||||
|
});
|
||||||
|
}
|
||||||
6
modules/default.nix
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./programs
|
||||||
|
./conf.nix
|
||||||
|
];
|
||||||
|
}
|
||||||
21
modules/programs/acpid.nix
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
options,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
options.mods = {
|
||||||
|
acpid.enable = lib.mkOption {
|
||||||
|
default = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
example = true;
|
||||||
|
description = ''
|
||||||
|
Enables acpid.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.mkIf config.mods.acpid.enable (
|
||||||
|
lib.optionalAttrs (options ? virtualisation.virtualbox.host) {services.acpid.enable = true;}
|
||||||
|
);
|
||||||
|
}
|
||||||
145
modules/programs/anyrun.nix
Normal file
|
|
@ -0,0 +1,145 @@
|
||||||
|
{
|
||||||
|
mkDashDefault,
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
options,
|
||||||
|
inputs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
options.mods.anyrun = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = false;
|
||||||
|
example = true;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Enables anyrun";
|
||||||
|
};
|
||||||
|
useDefaultConfig = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = ''
|
||||||
|
Use preconfigured anyrun config.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
customConfig = lib.mkOption {
|
||||||
|
default = {};
|
||||||
|
example = {};
|
||||||
|
type = with lib.types; attrsOf anything;
|
||||||
|
description = ''
|
||||||
|
Custom anyrun configuration.
|
||||||
|
Will be merged with default configuration if enabled.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
useDefaultCss = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = ''
|
||||||
|
Use preconfigured anyrun css.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
customCss = lib.mkOption {
|
||||||
|
default = '''';
|
||||||
|
example = ''
|
||||||
|
#window {
|
||||||
|
border-radius: none;
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
type = lib.types.lines;
|
||||||
|
description = ''
|
||||||
|
Custom anyrun css.
|
||||||
|
Will be merged with default css if enabled.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.mkIf config.mods.anyrun.enable (
|
||||||
|
lib.optionalAttrs (options ? home.packages) {
|
||||||
|
programs.anyrun = lib.mkForce {
|
||||||
|
package = pkgs.anyrun;
|
||||||
|
enable = true;
|
||||||
|
config =
|
||||||
|
if config.mods.anyrun.useDefaultConfig
|
||||||
|
then
|
||||||
|
lib.mkMerge
|
||||||
|
[
|
||||||
|
{
|
||||||
|
plugins = [
|
||||||
|
inputs.anyrun.packages.${pkgs.system}.applications
|
||||||
|
inputs.anyrun.packages.${pkgs.system}.rink
|
||||||
|
inputs.anyrun.packages.${pkgs.system}.translate
|
||||||
|
inputs.anyrun.packages.${pkgs.system}.websearch
|
||||||
|
];
|
||||||
|
hideIcons = mkDashDefault false;
|
||||||
|
width = {
|
||||||
|
fraction = mkDashDefault 0.3;
|
||||||
|
};
|
||||||
|
y = {
|
||||||
|
fraction = mkDashDefault 0.5;
|
||||||
|
};
|
||||||
|
layer = mkDashDefault "overlay";
|
||||||
|
hidePluginInfo = mkDashDefault true;
|
||||||
|
closeOnClick = mkDashDefault true;
|
||||||
|
}
|
||||||
|
config.mods.anyrun.customConfig
|
||||||
|
]
|
||||||
|
else config.mods.anyrun.customConfig;
|
||||||
|
|
||||||
|
extraCss =
|
||||||
|
if config.mods.anyrun.useDefaultCss
|
||||||
|
then
|
||||||
|
''
|
||||||
|
#window {
|
||||||
|
border-radius: 10px;
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
box#main {
|
||||||
|
border-radius: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
list#main {
|
||||||
|
border-radius: 10px;
|
||||||
|
margin: 0px 10px 10px 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
list#plugin {
|
||||||
|
border-radius: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
list#match {
|
||||||
|
border-radius: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
entry#entry {
|
||||||
|
border: 0;
|
||||||
|
border-radius: 10px;
|
||||||
|
margin: 10px 10px 0px 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
label#match-desc {
|
||||||
|
font-size: 12px;
|
||||||
|
border-radius: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
label#match-title {
|
||||||
|
font-size: 12px;
|
||||||
|
border-radius: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
label#plugin {
|
||||||
|
font-size: 16px;
|
||||||
|
border-radius: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
* {
|
||||||
|
border-radius: 10px;
|
||||||
|
}
|
||||||
|
''
|
||||||
|
+ config.mods.anyrun.customCss
|
||||||
|
else config.mods.anyrun.customCss;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
132
modules/programs/basePackages.nix
Normal file
|
|
@ -0,0 +1,132 @@
|
||||||
|
{
|
||||||
|
mkDashDefault,
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
options,
|
||||||
|
pkgs,
|
||||||
|
inputs,
|
||||||
|
system,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
options.mods = {
|
||||||
|
basePackages = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = ''
|
||||||
|
Enables default system packages.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
additionalPackages = lib.mkOption {
|
||||||
|
default = [];
|
||||||
|
example = [pkgs.openssl];
|
||||||
|
type = with lib.types; listOf package;
|
||||||
|
description = ''
|
||||||
|
Additional packages to install.
|
||||||
|
Note that these are installed even if base packages is disabled, e.g. you can also use this as the only packages to install.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
specialPrograms = lib.mkOption {
|
||||||
|
default = {};
|
||||||
|
example = {};
|
||||||
|
type = with lib.types; attrsOf anything;
|
||||||
|
description = ''
|
||||||
|
special program configuration to be added which require programs.something notation.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
specialServices = lib.mkOption {
|
||||||
|
default = {};
|
||||||
|
example = {};
|
||||||
|
type = with lib.types; attrsOf anything;
|
||||||
|
description = ''
|
||||||
|
special services configuration to be added which require an services.something notation.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.optionalAttrs (options ? environment.systemPackages) {
|
||||||
|
environment.systemPackages =
|
||||||
|
if config.mods.basePackages.enable
|
||||||
|
then
|
||||||
|
with pkgs;
|
||||||
|
[
|
||||||
|
inputs.statix.packages.${system}.default
|
||||||
|
adwaita-icon-theme
|
||||||
|
dbus
|
||||||
|
dconf
|
||||||
|
direnv
|
||||||
|
glib
|
||||||
|
gnome.nixos-gsettings-overrides
|
||||||
|
gsettings-desktop-schemas
|
||||||
|
gtk-layer-shell
|
||||||
|
gtk3
|
||||||
|
gtk4
|
||||||
|
gtk4-layer-shell
|
||||||
|
hicolor-icon-theme
|
||||||
|
icon-library
|
||||||
|
kdePackages.breeze-icons
|
||||||
|
kdePackages.breeze
|
||||||
|
kdePackages.qtstyleplugin-kvantum
|
||||||
|
libsForQt5.qtstyleplugin-kvantum
|
||||||
|
libadwaita
|
||||||
|
libxkbcommon
|
||||||
|
alejandra
|
||||||
|
openssl
|
||||||
|
seahorse
|
||||||
|
upower
|
||||||
|
xorg.xkbutils
|
||||||
|
sbctl
|
||||||
|
]
|
||||||
|
++ config.mods.basePackages.additionalPackages
|
||||||
|
else config.mods.basePackages.additionalPackages;
|
||||||
|
|
||||||
|
gtk.iconCache.enable = mkDashDefault false;
|
||||||
|
services =
|
||||||
|
if config.mods.basePackages.enable
|
||||||
|
then
|
||||||
|
{
|
||||||
|
upower.enable = mkDashDefault true;
|
||||||
|
dbus = {
|
||||||
|
enable = mkDashDefault true;
|
||||||
|
};
|
||||||
|
avahi = {
|
||||||
|
enable = mkDashDefault true;
|
||||||
|
nssmdns4 = mkDashDefault true;
|
||||||
|
openFirewall = mkDashDefault true;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
// config.mods.basePackages.specialServices
|
||||||
|
else config.mods.basePackages.specialServices;
|
||||||
|
|
||||||
|
programs =
|
||||||
|
if config.mods.basePackages.enable
|
||||||
|
then
|
||||||
|
lib.mkMerge
|
||||||
|
[
|
||||||
|
{
|
||||||
|
nix-ld = {
|
||||||
|
enable = mkDashDefault true;
|
||||||
|
libraries = with pkgs; [
|
||||||
|
jdk
|
||||||
|
zlib
|
||||||
|
];
|
||||||
|
};
|
||||||
|
direnv = {
|
||||||
|
package = mkDashDefault pkgs.direnv;
|
||||||
|
silent = mkDashDefault false;
|
||||||
|
loadInNixShell = mkDashDefault true;
|
||||||
|
direnvrcExtra = mkDashDefault "";
|
||||||
|
nix-direnv = {
|
||||||
|
enable = mkDashDefault true;
|
||||||
|
package = mkDashDefault pkgs.nix-direnv;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
gnupg.agent.enable = mkDashDefault true;
|
||||||
|
}
|
||||||
|
config.mods.basePackages.specialPrograms
|
||||||
|
]
|
||||||
|
else config.mods.basePackages.specialPrograms;
|
||||||
|
};
|
||||||
|
}
|
||||||
27
modules/programs/bluetooth.nix
Normal file
|
|
@ -0,0 +1,27 @@
|
||||||
|
{
|
||||||
|
mkDashDefault,
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
options,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
options.mods = {
|
||||||
|
bluetooth.enable = lib.mkOption {
|
||||||
|
default = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
example = true;
|
||||||
|
description = ''
|
||||||
|
Enables bluetooth.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.mkIf config.mods.bluetooth.enable (
|
||||||
|
lib.optionalAttrs (options ? hardware.bluetooth) {
|
||||||
|
hardware.bluetooth = {
|
||||||
|
enable = mkDashDefault true;
|
||||||
|
powerOnBoot = mkDashDefault true;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
22
modules/programs/browser/brave.nix
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
options,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
options.mods.browser.brave = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = false;
|
||||||
|
example = true;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Enables brave";
|
||||||
|
};
|
||||||
|
# TODO configure brave
|
||||||
|
};
|
||||||
|
config = lib.mkIf (config.mods.browser.brave.enable || config.mods.homePackages.browser == "brave") (
|
||||||
|
lib.optionalAttrs (options ? home.packages) {
|
||||||
|
home.packages = with pkgs; [brave];
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
22
modules/programs/browser/chromium.nix
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
options,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
options.mods.browser.chromium = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = false;
|
||||||
|
example = true;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Enables chromium";
|
||||||
|
};
|
||||||
|
# TODO configure chromium
|
||||||
|
};
|
||||||
|
config = lib.mkIf (config.mods.browser.chromium.enable || config.mods.homePackages.browser == "chromium") (
|
||||||
|
lib.optionalAttrs (options ? home.packages) {
|
||||||
|
home.packages = with pkgs; [chromium];
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
9
modules/programs/browser/default.nix
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./brave.nix
|
||||||
|
./chromium.nix
|
||||||
|
./firefox.nix
|
||||||
|
./librewolf.nix
|
||||||
|
./zen.nix
|
||||||
|
];
|
||||||
|
}
|
||||||
125
modules/programs/browser/firefox.nix
Normal file
|
|
@ -0,0 +1,125 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
dashNixAdditionalProps,
|
||||||
|
config,
|
||||||
|
options,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
name = "firefox";
|
||||||
|
in {
|
||||||
|
imports = [
|
||||||
|
(import ../../../lib/foxextensions.nix
|
||||||
|
{inherit lib dashNixAdditionalProps pkgs name;})
|
||||||
|
];
|
||||||
|
options.mods.browser.${name} = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = false;
|
||||||
|
example = true;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Enables firefox";
|
||||||
|
};
|
||||||
|
configuration = lib.mkOption {
|
||||||
|
default = {
|
||||||
|
EnableTrackingProtection = {
|
||||||
|
Value = true;
|
||||||
|
Locked = true;
|
||||||
|
Cryptomining = true;
|
||||||
|
Fingerprinting = true;
|
||||||
|
};
|
||||||
|
DisablePocket = true;
|
||||||
|
DisplayBookmarksToolbar = "never";
|
||||||
|
DisplayMenuBar = "default-off";
|
||||||
|
CaptivePortal = false;
|
||||||
|
DisableFirefoxStudies = true;
|
||||||
|
DisableTelemetry = true;
|
||||||
|
DisableFirefoxAccounts = false;
|
||||||
|
NoDefaultBookmarks = true;
|
||||||
|
OfferToSaveLogins = false;
|
||||||
|
OfferToSaveLoginsDefault = false;
|
||||||
|
PasswordManagerEnabled = false;
|
||||||
|
FirefoxHome = {
|
||||||
|
Search = true;
|
||||||
|
Pocket = false;
|
||||||
|
Snippets = false;
|
||||||
|
TopSites = true;
|
||||||
|
Highlights = false;
|
||||||
|
};
|
||||||
|
UserMessaging = {
|
||||||
|
ExtensionRecommendations = false;
|
||||||
|
SkipOnboarding = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
example = {};
|
||||||
|
type = with lib.types; attrsOf anything;
|
||||||
|
description = "Firefox policy configuration. See https://mozilla.github.io/policy-templates/ for more information.";
|
||||||
|
};
|
||||||
|
profiles = lib.mkOption {
|
||||||
|
default = [
|
||||||
|
{
|
||||||
|
name = "${config.conf.username}";
|
||||||
|
value = {
|
||||||
|
isDefault = true;
|
||||||
|
id = 0;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "special";
|
||||||
|
value = {
|
||||||
|
isDefault = false;
|
||||||
|
id = 1;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
example = [
|
||||||
|
{
|
||||||
|
name = "custom";
|
||||||
|
value = {
|
||||||
|
isDefault = true;
|
||||||
|
id = 0;
|
||||||
|
extensions.packages = [pkgs.nur.repos.rycee.firefox-addons.darkreader];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
type = with lib.types; listOf (attrsOf anything);
|
||||||
|
description = "Firefox profiles";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
config = lib.mkIf (config.mods.browser.firefox.enable || config.mods.homePackages.browser == "firefox") (
|
||||||
|
lib.optionalAttrs (options ? programs.firefox.profiles) {
|
||||||
|
stylix.targets.firefox.profileNames =
|
||||||
|
map (
|
||||||
|
{name, ...}:
|
||||||
|
name
|
||||||
|
)
|
||||||
|
config.mods.browser.firefox.profiles;
|
||||||
|
programs.firefox = {
|
||||||
|
enable = true;
|
||||||
|
package =
|
||||||
|
pkgs.wrapFirefox
|
||||||
|
pkgs.firefox-unwrapped
|
||||||
|
{
|
||||||
|
pname = "firefox";
|
||||||
|
extraPolicies =
|
||||||
|
config.mods.browser.firefox.configuration
|
||||||
|
// {
|
||||||
|
ExtensionSettings = builtins.foldl' (acc: ext: acc // ext) {} (config.mods.browser.firefox.extensions
|
||||||
|
++ (
|
||||||
|
if config.mods.browser.firefox.darkreader
|
||||||
|
then [
|
||||||
|
{
|
||||||
|
"addon@darkreader.org" = {
|
||||||
|
install_url = "file://${pkgs.callPackage ../../../patches/darkreader.nix {inherit lib dashNixAdditionalProps;}}/latest.xpi";
|
||||||
|
installation_mode = "normal_installed";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
]
|
||||||
|
else []
|
||||||
|
));
|
||||||
|
};
|
||||||
|
};
|
||||||
|
profiles = builtins.listToAttrs config.mods.browser.firefox.profiles;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
119
modules/programs/browser/librewolf.nix
Normal file
|
|
@ -0,0 +1,119 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
dashNixAdditionalProps,
|
||||||
|
config,
|
||||||
|
options,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
name = "librewolf";
|
||||||
|
in {
|
||||||
|
imports = [
|
||||||
|
(import ../../../lib/foxextensions.nix
|
||||||
|
{inherit lib dashNixAdditionalProps pkgs name;})
|
||||||
|
];
|
||||||
|
options.mods.browser.${name} = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = false;
|
||||||
|
example = true;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Enables the librwolf browser";
|
||||||
|
};
|
||||||
|
configuration = lib.mkOption {
|
||||||
|
default = {
|
||||||
|
EnableTrackingProtection = {
|
||||||
|
Value = true;
|
||||||
|
Locked = true;
|
||||||
|
Cryptomining = true;
|
||||||
|
Fingerprinting = true;
|
||||||
|
};
|
||||||
|
DisablePocket = true;
|
||||||
|
DisplayBookmarksToolbar = "never";
|
||||||
|
DisplayMenuBar = "default-off";
|
||||||
|
CaptivePortal = false;
|
||||||
|
DisableFirefoxStudies = true;
|
||||||
|
DisableTelemetry = true;
|
||||||
|
DisableFirefoxAccounts = false;
|
||||||
|
NoDefaultBookmarks = true;
|
||||||
|
OfferToSaveLogins = false;
|
||||||
|
OfferToSaveLoginsDefault = false;
|
||||||
|
PasswordManagerEnabled = false;
|
||||||
|
FirefoxHome = {
|
||||||
|
Search = true;
|
||||||
|
Pocket = false;
|
||||||
|
Snippets = false;
|
||||||
|
TopSites = true;
|
||||||
|
Highlights = false;
|
||||||
|
};
|
||||||
|
UserMessaging = {
|
||||||
|
ExtensionRecommendations = false;
|
||||||
|
SkipOnboarding = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
example = {};
|
||||||
|
type = with lib.types; attrsOf anything;
|
||||||
|
description = "Librewolf policy configuration. See https://mozilla.github.io/policy-templates/ for more information.";
|
||||||
|
};
|
||||||
|
profiles = lib.mkOption {
|
||||||
|
default = [
|
||||||
|
{
|
||||||
|
name = "${config.conf.username}";
|
||||||
|
value = {
|
||||||
|
isDefault = true;
|
||||||
|
id = 0;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "special";
|
||||||
|
value = {
|
||||||
|
isDefault = false;
|
||||||
|
id = 1;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
example = [
|
||||||
|
{
|
||||||
|
name = "custom";
|
||||||
|
value = {
|
||||||
|
isDefault = true;
|
||||||
|
id = 0;
|
||||||
|
extensions.packages = [pkgs.nur.repos.rycee.firefox-addons.darkreader];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
type = with lib.types; listOf (attrsOf anything);
|
||||||
|
description = "Librewolf profiles";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
config = lib.mkIf (config.mods.browser.librewolf.enable || config.mods.homePackages.browser == "librewolf") (
|
||||||
|
lib.optionalAttrs (options ? home.packages) {
|
||||||
|
programs.librewolf-dashnix = {
|
||||||
|
enable = true;
|
||||||
|
package =
|
||||||
|
pkgs.wrapFirefox
|
||||||
|
pkgs.librewolf-unwrapped
|
||||||
|
{
|
||||||
|
pname = "librewolf";
|
||||||
|
extraPolicies =
|
||||||
|
config.mods.browser.librewolf.configuration
|
||||||
|
// {
|
||||||
|
ExtensionSettings = builtins.foldl' (acc: ext: acc // ext) {} (config.mods.browser.librewolf.extensions
|
||||||
|
++ (
|
||||||
|
if config.mods.browser.firefox.darkreader
|
||||||
|
then [
|
||||||
|
{
|
||||||
|
"addon@darkreader.org" = {
|
||||||
|
install_url = "file://${pkgs.callPackage ../../../patches/darkreader.nix {inherit lib dashNixAdditionalProps;}}/latest.xpi";
|
||||||
|
installation_mode = "normal_installed";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
]
|
||||||
|
else []
|
||||||
|
));
|
||||||
|
};
|
||||||
|
};
|
||||||
|
profiles = builtins.listToAttrs config.mods.browser.librewolf.profiles;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
157
modules/programs/browser/zen.nix
Normal file
|
|
@ -0,0 +1,157 @@
|
||||||
|
# credits to Voronind for darkreader config https://github.com/voronind-com/nix/blob/main/home/program/firefox/default.nix
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
dashNixAdditionalProps,
|
||||||
|
config,
|
||||||
|
options,
|
||||||
|
inputs,
|
||||||
|
system,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
# at time of using this here, stylix might not be evaluated yet
|
||||||
|
# hence ensure it is by using base16 mkSchemeAttrs
|
||||||
|
base16 = pkgs.callPackage inputs.base16.lib {};
|
||||||
|
scheme = base16.mkSchemeAttrs config.stylix.base16Scheme;
|
||||||
|
name = "zen";
|
||||||
|
in {
|
||||||
|
imports = [
|
||||||
|
(import ../../../lib/foxextensions.nix
|
||||||
|
{inherit lib dashNixAdditionalProps pkgs name;})
|
||||||
|
];
|
||||||
|
options.mods.browser.${name} = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = false;
|
||||||
|
example = true;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Enables the zen browser";
|
||||||
|
};
|
||||||
|
configuration = lib.mkOption {
|
||||||
|
default = {
|
||||||
|
EnableTrackingProtection = {
|
||||||
|
Value = true;
|
||||||
|
Locked = true;
|
||||||
|
Cryptomining = true;
|
||||||
|
Fingerprinting = true;
|
||||||
|
};
|
||||||
|
DisablePocket = true;
|
||||||
|
CaptivePortal = false;
|
||||||
|
DisableFirefoxStudies = true;
|
||||||
|
DisableTelemetry = true;
|
||||||
|
NoDefaultBookmarks = true;
|
||||||
|
PasswordManagerEnabled = false;
|
||||||
|
FirefoxHome = {
|
||||||
|
Search = true;
|
||||||
|
Pocket = false;
|
||||||
|
Snippets = false;
|
||||||
|
TopSites = true;
|
||||||
|
Highlights = false;
|
||||||
|
};
|
||||||
|
UserMessaging = {
|
||||||
|
ExtensionRecommendations = false;
|
||||||
|
SkipOnboarding = true;
|
||||||
|
};
|
||||||
|
"3rdparty".Extensions = {
|
||||||
|
"addon@darkreader.org" = {
|
||||||
|
theme = {
|
||||||
|
darkSchemeBackgroundColor = "#${scheme.base00}";
|
||||||
|
darkSchemeTextColor = "#${scheme.base05}";
|
||||||
|
};
|
||||||
|
previewNewDesign = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
example = {};
|
||||||
|
type = with lib.types; attrsOf anything;
|
||||||
|
description = "Zen policy configuration. See https://mozilla.github.io/policy-templates for more information.";
|
||||||
|
};
|
||||||
|
profiles = lib.mkOption {
|
||||||
|
default = [
|
||||||
|
{
|
||||||
|
name = "${config.conf.username}";
|
||||||
|
value = {
|
||||||
|
settings = {
|
||||||
|
"zen.view.compact.hide-tabbar" = false;
|
||||||
|
"zen.view.compact.hide-toolbar" = true;
|
||||||
|
"zen.view.sidebar-expanded" = false;
|
||||||
|
"zen.view.use-single-toolbar" = false;
|
||||||
|
"zen.view.welcome-screen.seen" = true;
|
||||||
|
"zen.theme.accent-color" = "#b4bbff";
|
||||||
|
"extensions.autoDisableScopes" = 0;
|
||||||
|
"cookiebanners.service.mode" = 2;
|
||||||
|
"widget.use-xdg-desktop-portal.file-picker" = 1;
|
||||||
|
};
|
||||||
|
isDefault = true;
|
||||||
|
id = 0;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "special";
|
||||||
|
value = {
|
||||||
|
settings = {
|
||||||
|
"zen.view.compact.hide-tabbar" = false;
|
||||||
|
"zen.view.compact.hide-toolbar" = true;
|
||||||
|
"zen.view.sidebar-expanded" = false;
|
||||||
|
"zen.view.use-single-toolbar" = false;
|
||||||
|
"zen.view.welcome-screen.seen" = true;
|
||||||
|
"zen.theme.accent-color" = "#b4bbff";
|
||||||
|
"extensions.autoDisableScopes" = 0;
|
||||||
|
"widget.use-xdg-desktop-portal.file-picker" = 1;
|
||||||
|
};
|
||||||
|
isDefault = false;
|
||||||
|
id = 1;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
example = [
|
||||||
|
{
|
||||||
|
name = "custom";
|
||||||
|
value = {
|
||||||
|
settings = {
|
||||||
|
extensions.autoDisableScopes = 0;
|
||||||
|
};
|
||||||
|
extensions.packages = [pkgs.nur.repos.rycee.firefox-addons.darkreader];
|
||||||
|
isDefault = true;
|
||||||
|
id = 0;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
type = with lib.types; listOf (attrsOf anything);
|
||||||
|
description = "Zen profiles";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
config = lib.mkIf (config.mods.browser.zen.enable || config.mods.homePackages.browser == "zen") (
|
||||||
|
(lib.optionalAttrs (options ? home.packages) {
|
||||||
|
programs.zen-browser = {
|
||||||
|
enable = true;
|
||||||
|
package =
|
||||||
|
pkgs.wrapFirefox
|
||||||
|
inputs.zen-browser.packages.${system}.zen-browser-unwrapped
|
||||||
|
{
|
||||||
|
pname = "zen-browser";
|
||||||
|
extraPolicies =
|
||||||
|
config.mods.browser.zen.configuration
|
||||||
|
// {
|
||||||
|
ExtensionSettings = builtins.foldl' (acc: ext: acc // ext) {} (config.mods.browser.zen.extensions
|
||||||
|
++ (
|
||||||
|
if config.mods.browser.firefox.darkreader
|
||||||
|
then [
|
||||||
|
{
|
||||||
|
"addon@darkreader.org" = {
|
||||||
|
install_url = "file://${pkgs.callPackage ../../../patches/darkreader.nix {inherit lib dashNixAdditionalProps;}}/latest.xpi";
|
||||||
|
installation_mode = "normal_installed";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
]
|
||||||
|
else []
|
||||||
|
));
|
||||||
|
};
|
||||||
|
};
|
||||||
|
profiles = builtins.listToAttrs config.mods.browser.zen.profiles;
|
||||||
|
};
|
||||||
|
})
|
||||||
|
// (lib.optionalAttrs (options ? stylix.targets.zen-browser) {
|
||||||
|
stylix.targets.zen-browser.profileNames = lib.map (profile: profile.name) config.mods.browser.zen.profiles;
|
||||||
|
})
|
||||||
|
);
|
||||||
|
}
|
||||||
60
modules/programs/clam.nix
Normal file
|
|
@ -0,0 +1,60 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
options,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
options.mods.clam = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Enables the clamav program and its daemon";
|
||||||
|
};
|
||||||
|
scanner = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = false;
|
||||||
|
example = true;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Enables the clamav scanner";
|
||||||
|
};
|
||||||
|
interval = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
default = "*-*-* 04:00:00";
|
||||||
|
description = ''
|
||||||
|
How often clamdscan is invoked.
|
||||||
|
By default this runs using 10 cores at most, be sure to run it at a time of low traffic.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
scanDirectories = lib.mkOption {
|
||||||
|
type = with lib.types; listOf str;
|
||||||
|
default = [
|
||||||
|
"/home"
|
||||||
|
"/var/lib"
|
||||||
|
"/tmp"
|
||||||
|
"/etc"
|
||||||
|
"/var/tmp"
|
||||||
|
];
|
||||||
|
description = ''List of directories to scan'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
config = lib.mkIf config.mods.clam.enable (
|
||||||
|
lib.optionalAttrs (options ? services.clamav) {
|
||||||
|
services.clamav = {
|
||||||
|
daemon.enable = true;
|
||||||
|
updater.enable = true;
|
||||||
|
scanner = {
|
||||||
|
inherit (config.mods.clam.scanner) enable;
|
||||||
|
inherit (config.mods.clam.scanner) interval;
|
||||||
|
inherit (config.mods.clam.scanner) scanDirectories;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
environment.systemPackages = [
|
||||||
|
pkgs.clamav
|
||||||
|
];
|
||||||
|
}
|
||||||
|
// lib.optionalAttrs (options ? home.packages) {home.packages = with pkgs; [clamtk];}
|
||||||
|
);
|
||||||
|
}
|
||||||
575
modules/programs/coding.nix
Normal file
|
|
@ -0,0 +1,575 @@
|
||||||
|
{
|
||||||
|
mkDashDefault,
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
options,
|
||||||
|
inputs,
|
||||||
|
system,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
font_family = "${config.mods.stylix.fonts.monospace.name}";
|
||||||
|
in {
|
||||||
|
options.mods = {
|
||||||
|
coding = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = ''
|
||||||
|
Enables coding packages.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
dashvim = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = ''
|
||||||
|
Enables dashvim package.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
jetbrains = lib.mkOption {
|
||||||
|
default = false;
|
||||||
|
example = true;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = ''
|
||||||
|
Enables jetbrains toolbox.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
vscodium = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = false;
|
||||||
|
example = true;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = ''
|
||||||
|
Enables vscodium.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
extensions = lib.mkOption {
|
||||||
|
default = [];
|
||||||
|
example = [];
|
||||||
|
type = with lib.types; listOf package;
|
||||||
|
description = "Extensions to be installed";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
penpot = lib.mkOption {
|
||||||
|
default = false;
|
||||||
|
example = true;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Enables penpot";
|
||||||
|
};
|
||||||
|
neovide = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = false;
|
||||||
|
example = true;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Enables neovide";
|
||||||
|
};
|
||||||
|
config = lib.mkOption {
|
||||||
|
default = {
|
||||||
|
font = {
|
||||||
|
size = 12;
|
||||||
|
normal = {
|
||||||
|
family = font_family;
|
||||||
|
style = "";
|
||||||
|
};
|
||||||
|
bold = {
|
||||||
|
family = font_family;
|
||||||
|
style = "ExtraBold";
|
||||||
|
};
|
||||||
|
italic = {
|
||||||
|
family = font_family;
|
||||||
|
style = "Italic";
|
||||||
|
};
|
||||||
|
bold_italic = {
|
||||||
|
family = font_family;
|
||||||
|
style = "Bold Italic";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
example = {};
|
||||||
|
type = with lib.types; attrsOf anything;
|
||||||
|
description = "Config for neovide";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
gh = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Enables and configures gh";
|
||||||
|
};
|
||||||
|
config = lib.mkOption {
|
||||||
|
default = {
|
||||||
|
version = 1;
|
||||||
|
git_protocol = "ssh";
|
||||||
|
editor = "";
|
||||||
|
prompt = "enabled";
|
||||||
|
prefer_editor_prompt = "disabled";
|
||||||
|
pager = "";
|
||||||
|
aliases = {
|
||||||
|
co = "pr checkout";
|
||||||
|
};
|
||||||
|
http_unix_socket = "";
|
||||||
|
browser = "";
|
||||||
|
};
|
||||||
|
example = {};
|
||||||
|
type = with lib.types; attrsOf anything;
|
||||||
|
description = "config for gh. Keep in mind, empty values refer to using environment variables";
|
||||||
|
};
|
||||||
|
hosts = lib.mkOption {
|
||||||
|
default = {
|
||||||
|
"github.com" = {
|
||||||
|
git_protocol = "ssh";
|
||||||
|
users = {
|
||||||
|
${config.mods.git.username} = "";
|
||||||
|
};
|
||||||
|
user = "${config.mods.git.username}";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
example = {};
|
||||||
|
type = with lib.types; attrsOf anything;
|
||||||
|
description = "hosts for gh";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
useDefaultPackages = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Use default base packages (only additionalPackages are installed if false)";
|
||||||
|
};
|
||||||
|
additionalPackages = lib.mkOption {
|
||||||
|
default = [];
|
||||||
|
example = [];
|
||||||
|
type = with lib.types; listOf package;
|
||||||
|
description = "Additional packages to be installed";
|
||||||
|
};
|
||||||
|
languages = {
|
||||||
|
haskell = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = ''
|
||||||
|
Enables haskell.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
packages = lib.mkOption {
|
||||||
|
default = with pkgs; [
|
||||||
|
haskellPackages.cabal-install
|
||||||
|
ghc
|
||||||
|
haskellPackages.haskell-language-server
|
||||||
|
];
|
||||||
|
example = [];
|
||||||
|
type = with lib.types; listOf package;
|
||||||
|
description = ''
|
||||||
|
haskell packages
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
typst = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = ''
|
||||||
|
Enables typst.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
packages = lib.mkOption {
|
||||||
|
default = with pkgs; [
|
||||||
|
typst
|
||||||
|
tinymist
|
||||||
|
];
|
||||||
|
example = [];
|
||||||
|
type = with lib.types; listOf package;
|
||||||
|
description = ''
|
||||||
|
typst packages
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
go = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = ''
|
||||||
|
Enables go.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
packages = lib.mkOption {
|
||||||
|
default = with pkgs; [
|
||||||
|
go
|
||||||
|
gopls
|
||||||
|
];
|
||||||
|
example = [];
|
||||||
|
type = with lib.types; listOf package;
|
||||||
|
description = ''
|
||||||
|
Go packages
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
rust = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = ''
|
||||||
|
Enables rust.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
packages = lib.mkOption {
|
||||||
|
default = with pkgs; [rustup];
|
||||||
|
example = [];
|
||||||
|
type = with lib.types; listOf package;
|
||||||
|
description = ''
|
||||||
|
Rust packages
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
ts-js = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = ''
|
||||||
|
Enables TS/JS.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
packages = lib.mkOption {
|
||||||
|
default = with pkgs; [
|
||||||
|
nodejs_20
|
||||||
|
deno
|
||||||
|
typescript
|
||||||
|
nodePackages.typescript-language-server
|
||||||
|
nodePackages.prettier
|
||||||
|
];
|
||||||
|
example = [];
|
||||||
|
type = with lib.types; listOf package;
|
||||||
|
description = ''
|
||||||
|
TS/JS packages
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
zig = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = ''
|
||||||
|
Enables zig.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
packages = lib.mkOption {
|
||||||
|
default = with pkgs; [
|
||||||
|
zig
|
||||||
|
zls
|
||||||
|
];
|
||||||
|
example = [];
|
||||||
|
type = with lib.types; listOf package;
|
||||||
|
description = ''
|
||||||
|
zig packages
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
java = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = ''
|
||||||
|
Enables java.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
packages = lib.mkOption {
|
||||||
|
default = with pkgs; [
|
||||||
|
gradle
|
||||||
|
maven
|
||||||
|
jdt-language-server
|
||||||
|
temurin-jre-bin
|
||||||
|
];
|
||||||
|
example = [];
|
||||||
|
type = with lib.types; listOf package;
|
||||||
|
description = ''
|
||||||
|
Java packages
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
dotnet = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = ''
|
||||||
|
Enables C#/F#.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
packages = lib.mkOption {
|
||||||
|
default = with pkgs; [
|
||||||
|
#.!
|
||||||
|
(with dotnetCorePackages;
|
||||||
|
combinePackages [
|
||||||
|
sdk_8_0
|
||||||
|
sdk_9_0
|
||||||
|
])
|
||||||
|
csharpier
|
||||||
|
netcoredbg
|
||||||
|
fsharp
|
||||||
|
fsautocomplete
|
||||||
|
];
|
||||||
|
example = [];
|
||||||
|
type = with lib.types; listOf package;
|
||||||
|
description = ''
|
||||||
|
C#/F# packages
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
C-CPP = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = ''
|
||||||
|
Enables C/C++.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
packages = lib.mkOption {
|
||||||
|
default = with pkgs; [
|
||||||
|
bear
|
||||||
|
gdb
|
||||||
|
gcc
|
||||||
|
clang-tools
|
||||||
|
];
|
||||||
|
example = [];
|
||||||
|
type = with lib.types; listOf package;
|
||||||
|
description = ''
|
||||||
|
C/C++ packages
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
python = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = ''
|
||||||
|
Enables python.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
packages = lib.mkOption {
|
||||||
|
default = with pkgs; [
|
||||||
|
python3
|
||||||
|
python312Packages.python-lsp-server
|
||||||
|
python312Packages.python-lsp-ruff
|
||||||
|
python312Packages.python-lsp-black
|
||||||
|
];
|
||||||
|
example = [];
|
||||||
|
type = with lib.types; listOf package;
|
||||||
|
description = ''
|
||||||
|
python packages
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
configFiles = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = ''
|
||||||
|
Enables Json/toml/yaml etc.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
packages = lib.mkOption {
|
||||||
|
default = with pkgs; [
|
||||||
|
#yaml
|
||||||
|
yamlfmt
|
||||||
|
yamllint
|
||||||
|
yaml-language-server
|
||||||
|
|
||||||
|
#json
|
||||||
|
jq
|
||||||
|
];
|
||||||
|
example = [];
|
||||||
|
type = with lib.types; listOf package;
|
||||||
|
description = ''
|
||||||
|
packages for said filetypes
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
bash = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = ''
|
||||||
|
Enables bash.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
packages = lib.mkOption {
|
||||||
|
default = with pkgs; [
|
||||||
|
bash-language-server
|
||||||
|
shfmt
|
||||||
|
];
|
||||||
|
example = [];
|
||||||
|
type = with lib.types; listOf package;
|
||||||
|
description = ''
|
||||||
|
bash packages
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
html-css = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = ''
|
||||||
|
Enables html/css.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
packages = lib.mkOption {
|
||||||
|
default = with pkgs; [
|
||||||
|
tailwindcss
|
||||||
|
tailwindcss-language-server
|
||||||
|
# html-tidy
|
||||||
|
];
|
||||||
|
example = [];
|
||||||
|
type = with lib.types; listOf package;
|
||||||
|
description = ''
|
||||||
|
html/css packages
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
sql = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = ''
|
||||||
|
Enables sql.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
packages = lib.mkOption {
|
||||||
|
default = with pkgs; [
|
||||||
|
nodePackages.sql-formatter
|
||||||
|
sqls
|
||||||
|
];
|
||||||
|
example = [];
|
||||||
|
type = with lib.types; listOf package;
|
||||||
|
description = ''
|
||||||
|
sql packages
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
gleam = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = ''
|
||||||
|
Enables gleam.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
packages = lib.mkOption {
|
||||||
|
default = with pkgs; [gleam];
|
||||||
|
example = [];
|
||||||
|
type = with lib.types; listOf package;
|
||||||
|
description = ''
|
||||||
|
gleam packages
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
asm = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = ''
|
||||||
|
Enables assembly.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
packages = lib.mkOption {
|
||||||
|
default = with pkgs; [asm-lsp];
|
||||||
|
example = [];
|
||||||
|
type = with lib.types; listOf package;
|
||||||
|
description = ''
|
||||||
|
assembly packages
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = let
|
||||||
|
basePackages = with pkgs; [
|
||||||
|
gitui
|
||||||
|
meson
|
||||||
|
ninja
|
||||||
|
tree-sitter
|
||||||
|
unzip
|
||||||
|
pkg-config
|
||||||
|
sqlite
|
||||||
|
plantuml
|
||||||
|
d-spy
|
||||||
|
tmux
|
||||||
|
tmate
|
||||||
|
inputs.compose.packages.${system}.default
|
||||||
|
];
|
||||||
|
in
|
||||||
|
lib.mkIf config.mods.coding.enable (
|
||||||
|
lib.optionalAttrs (options ? home.packages) {
|
||||||
|
programs.dashvim = lib.mkIf config.mods.coding.dashvim {
|
||||||
|
enable = true;
|
||||||
|
inherit (config.mods.stylix) colorscheme;
|
||||||
|
};
|
||||||
|
programs.vscode = lib.mkIf config.mods.coding.vscodium.enable {
|
||||||
|
enable = true;
|
||||||
|
package = mkDashDefault pkgs.vscodium;
|
||||||
|
profiles.default.extensions = config.mods.coding.vscodium.extensions;
|
||||||
|
};
|
||||||
|
xdg.configFile = {
|
||||||
|
"neovide/config.toml" = lib.mkIf (config.mods.coding.dashvim || config.mods.coding.neovide.enable) {
|
||||||
|
source =
|
||||||
|
(pkgs.formats.toml {}).generate "neovide"
|
||||||
|
config.mods.coding.neovide.config;
|
||||||
|
};
|
||||||
|
|
||||||
|
"gh/config.yml" = lib.mkIf config.mods.coding.gh.enable {
|
||||||
|
source =
|
||||||
|
(pkgs.formats.yaml {}).generate "config"
|
||||||
|
config.mods.coding.gh.config;
|
||||||
|
};
|
||||||
|
"gh/hosts.yml" = lib.mkIf config.mods.coding.gh.enable {
|
||||||
|
source =
|
||||||
|
(pkgs.formats.yaml {}).generate "hosts"
|
||||||
|
config.mods.coding.gh.hosts;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
home.packages = with pkgs;
|
||||||
|
[
|
||||||
|
(lib.mkIf (config.mods.coding.dashvim || config.mods.coding.neovide.enable) neovide)
|
||||||
|
(lib.mkIf config.mods.coding.jetbrains jetbrains-toolbox)
|
||||||
|
(lib.mkIf config.mods.coding.penpot pkgs.penpot-desktop)
|
||||||
|
(lib.mkIf config.mods.coding.gh.enable gh)
|
||||||
|
]
|
||||||
|
++ config.mods.coding.additionalPackages
|
||||||
|
++ (lib.lists.optionals config.mods.coding.useDefaultPackages basePackages)
|
||||||
|
++ (lib.lists.optionals config.mods.coding.languages.haskell.enable config.mods.coding.languages.haskell.packages)
|
||||||
|
++ (lib.lists.optionals config.mods.coding.languages.rust.enable config.mods.coding.languages.rust.packages)
|
||||||
|
++ (lib.lists.optionals config.mods.coding.languages.go.enable config.mods.coding.languages.go.packages)
|
||||||
|
++ (lib.lists.optionals config.mods.coding.languages.java.enable config.mods.coding.languages.java.packages)
|
||||||
|
++ (lib.lists.optionals config.mods.coding.languages.dotnet.enable config.mods.coding.languages.dotnet.packages)
|
||||||
|
++ (lib.lists.optionals config.mods.coding.languages.bash.enable config.mods.coding.languages.bash.packages)
|
||||||
|
++ (lib.lists.optionals config.mods.coding.languages.C-CPP.enable config.mods.coding.languages.C-CPP.packages)
|
||||||
|
++ (lib.lists.optionals config.mods.coding.languages.asm.enable config.mods.coding.languages.asm.packages)
|
||||||
|
++ (lib.lists.optionals config.mods.coding.languages.sql.enable config.mods.coding.languages.sql.packages)
|
||||||
|
++ (lib.lists.optionals config.mods.coding.languages.html-css.enable config.mods.coding.languages.html-css.packages)
|
||||||
|
++ (lib.lists.optionals config.mods.coding.languages.configFiles.enable config.mods.coding.languages.configFiles.packages)
|
||||||
|
++ (lib.lists.optionals config.mods.coding.languages.ts-js.enable config.mods.coding.languages.ts-js.packages)
|
||||||
|
++ (lib.lists.optionals config.mods.coding.languages.typst.enable config.mods.coding.languages.typst.packages)
|
||||||
|
++ (lib.lists.optionals config.mods.coding.languages.zig.enable config.mods.coding.languages.zig.packages)
|
||||||
|
++ (lib.lists.optionals config.mods.coding.languages.gleam.enable config.mods.coding.languages.gleam.packages);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
79
modules/programs/containers.nix
Normal file
|
|
@ -0,0 +1,79 @@
|
||||||
|
{
|
||||||
|
mkDashDefault,
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
options,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
options.mods.containers = {
|
||||||
|
variant = lib.mkOption {
|
||||||
|
default = "";
|
||||||
|
example = "podman";
|
||||||
|
type = lib.types.enum [
|
||||||
|
""
|
||||||
|
"podman"
|
||||||
|
"docker"
|
||||||
|
];
|
||||||
|
description = "Enables and configures a containerization solution: podman/docker";
|
||||||
|
};
|
||||||
|
podmanPackages = lib.mkOption {
|
||||||
|
default = with pkgs; [
|
||||||
|
podman-tui
|
||||||
|
podman-compose
|
||||||
|
];
|
||||||
|
example = [];
|
||||||
|
type = with lib.types; listOf package;
|
||||||
|
description = "Podman packages";
|
||||||
|
};
|
||||||
|
dockerPackages = lib.mkOption {
|
||||||
|
default = with pkgs; [
|
||||||
|
docker-compose
|
||||||
|
];
|
||||||
|
example = [];
|
||||||
|
type = with lib.types; listOf package;
|
||||||
|
description = "Docker packages";
|
||||||
|
};
|
||||||
|
combinedPackages = lib.mkOption {
|
||||||
|
default = with pkgs; [
|
||||||
|
dive
|
||||||
|
];
|
||||||
|
example = [];
|
||||||
|
type = with lib.types; listOf package;
|
||||||
|
description = "Container packages";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
config = lib.optionalAttrs (options ? environment.systemPackages) {
|
||||||
|
environment.systemPackages =
|
||||||
|
(lib.lists.optionals (
|
||||||
|
config.mods.containers.variant == "podman"
|
||||||
|
)
|
||||||
|
config.mods.containers.podmanPackages)
|
||||||
|
++ (lib.lists.optionals (
|
||||||
|
config.mods.containers.variant == "docker"
|
||||||
|
)
|
||||||
|
config.mods.containers.dockerPackages)
|
||||||
|
++ (lib.lists.optionals (
|
||||||
|
config.mods.containers.variant == "podman" || config.mods.containers.variant == "docker"
|
||||||
|
)
|
||||||
|
config.mods.containers.combinedPackages);
|
||||||
|
virtualisation =
|
||||||
|
if (config.mods.containers.variant == "podman")
|
||||||
|
then {
|
||||||
|
containers.enable = true;
|
||||||
|
podman = {
|
||||||
|
enable = true;
|
||||||
|
dockerCompat = mkDashDefault true;
|
||||||
|
defaultNetwork.settings.dns_enabled = mkDashDefault true;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
else if (config.mods.containers.variant == "docker")
|
||||||
|
then {
|
||||||
|
containers.enable = true;
|
||||||
|
docker = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
else {};
|
||||||
|
};
|
||||||
|
}
|
||||||
56
modules/programs/default.nix
Normal file
|
|
@ -0,0 +1,56 @@
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./acpid.nix
|
||||||
|
./anyrun.nix
|
||||||
|
./basePackages.nix
|
||||||
|
./bluetooth.nix
|
||||||
|
./browser
|
||||||
|
./clam.nix
|
||||||
|
./coding.nix
|
||||||
|
./containers.nix
|
||||||
|
./drives.nix
|
||||||
|
./fancontrol.nix
|
||||||
|
./fastfetch.nix
|
||||||
|
./fish.nix
|
||||||
|
./flatpak.nix
|
||||||
|
./gaming.nix
|
||||||
|
./gdm.nix
|
||||||
|
./git.nix
|
||||||
|
./gnome.nix
|
||||||
|
./gnomeServices.nix
|
||||||
|
./gpu.nix
|
||||||
|
./greetd.nix
|
||||||
|
./homePackages.nix
|
||||||
|
./hypr
|
||||||
|
./ironbar.nix
|
||||||
|
./kde.nix
|
||||||
|
./kdeConnect.nix
|
||||||
|
./keepassxc.nix
|
||||||
|
./kitty.nix
|
||||||
|
./media.nix
|
||||||
|
./mime.nix
|
||||||
|
./ncspot.nix
|
||||||
|
./nextcloud.nix
|
||||||
|
./niri.nix
|
||||||
|
./onedrive.nix
|
||||||
|
./oxi
|
||||||
|
./piper.nix
|
||||||
|
./plymouth.nix
|
||||||
|
./printing.nix
|
||||||
|
./scripts.nix
|
||||||
|
./sddm.nix
|
||||||
|
./sops.nix
|
||||||
|
./starship.nix
|
||||||
|
./streamcontroller.nix
|
||||||
|
./stylix.nix
|
||||||
|
./superfreq.nix
|
||||||
|
./supersonic.nix
|
||||||
|
./sway.nix
|
||||||
|
./teams.nix
|
||||||
|
./virtmanager.nix
|
||||||
|
./wm.nix
|
||||||
|
./xkb.nix
|
||||||
|
./xone.nix
|
||||||
|
./yazi
|
||||||
|
];
|
||||||
|
}
|
||||||
312
modules/programs/drives.nix
Normal file
|
|
@ -0,0 +1,312 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
options,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
options.mods.drives = {
|
||||||
|
variant = lib.mkOption {
|
||||||
|
default = "manual";
|
||||||
|
example = "disko";
|
||||||
|
type = with lib.types; (enum [
|
||||||
|
"manual"
|
||||||
|
"disko"
|
||||||
|
]);
|
||||||
|
description = ''
|
||||||
|
Disk configuration type, either "manual" for regular NixOS disk configuration,
|
||||||
|
or "disko" for using disko to automatically format your drives.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
useSwap = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = ''
|
||||||
|
Use swap in drive.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
useEncryption = lib.mkOption {
|
||||||
|
default = false;
|
||||||
|
example = true;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = ''
|
||||||
|
Enables encryption.
|
||||||
|
!WARNING!
|
||||||
|
You need your root drive to be named root exactly!
|
||||||
|
Otherwise there will not be a root crypt!
|
||||||
|
!WARNING!
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
homeAndRootFsTypes = lib.mkOption {
|
||||||
|
default = "ext4";
|
||||||
|
example = "btrfs";
|
||||||
|
type = with lib.types; (enum [
|
||||||
|
"btrfs"
|
||||||
|
"ext2"
|
||||||
|
"ext3"
|
||||||
|
"ext4"
|
||||||
|
"exfat"
|
||||||
|
"f2fs"
|
||||||
|
"fat8"
|
||||||
|
"fat16"
|
||||||
|
"fat32"
|
||||||
|
"ntfs"
|
||||||
|
"xfs"
|
||||||
|
"zfs"
|
||||||
|
]);
|
||||||
|
description = ''
|
||||||
|
Filesystem for the home and root partitions.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
defaultDrives = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = ''
|
||||||
|
Use default drive config.
|
||||||
|
|
||||||
|
- Manual variant
|
||||||
|
This config expects 4 different partitions on a single drive:
|
||||||
|
- boot partition with BOOT label and vfat format (filesystem configurable)
|
||||||
|
- swap partition with SWAP label
|
||||||
|
- root partition with ROOT label and ext4 format (filesystem configurable)
|
||||||
|
- home partition with HOME label and ext4 format (filesystem configurable)
|
||||||
|
- gpt disk format
|
||||||
|
|
||||||
|
NOTE: Any different configuration must be done manually with this turned off.
|
||||||
|
|
||||||
|
- Disko variant
|
||||||
|
This config creates 4 different partitions on a single drive:
|
||||||
|
- boot partition with 1GB size and vfat format
|
||||||
|
- swap partition with 32GB (size configurable)
|
||||||
|
- root partition with 30% size and ext4 format (size and filesystem configurable)
|
||||||
|
- home partition with 70%~ size and ext4 format (size and filesystem configurable)
|
||||||
|
- gpt disk format
|
||||||
|
|
||||||
|
NOTE: Any different configuration must be done manually with this turned off.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
extraDrives = lib.mkOption {
|
||||||
|
default = [
|
||||||
|
];
|
||||||
|
example = [
|
||||||
|
{
|
||||||
|
name = "drive2";
|
||||||
|
drive = {
|
||||||
|
device = "/dev/disk/by-label/DRIVE2";
|
||||||
|
fsType = "ext4";
|
||||||
|
options = [
|
||||||
|
"noatime"
|
||||||
|
"nodiratime"
|
||||||
|
"discard"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
type = with lib.types; listOf (attrsOf anything);
|
||||||
|
description = ''
|
||||||
|
Extra drives to add.
|
||||||
|
Please ensure to add variant compliant attrsets (manual/disko).
|
||||||
|
(The example is for manual variant, here an example for disko):
|
||||||
|
```nix
|
||||||
|
drive2 = (lib.optionalAttrs config.mods.drives.defaultDrives.enable) {
|
||||||
|
device = "/dev/nvme1n1"
|
||||||
|
type = "disk";
|
||||||
|
content = {
|
||||||
|
type = "gpt";
|
||||||
|
partitions = {
|
||||||
|
drive2 = {
|
||||||
|
start = "0%";
|
||||||
|
end = "100%";
|
||||||
|
content = {
|
||||||
|
type = "filesystem";
|
||||||
|
format = "ext4";
|
||||||
|
mountpoint = "/drive2";
|
||||||
|
mountOptions = [
|
||||||
|
"noatime"
|
||||||
|
"nodiratime"
|
||||||
|
"discard"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
```
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
disko = {
|
||||||
|
defaultDiskId = lib.mkOption {
|
||||||
|
default = "TODO";
|
||||||
|
example = "/dev/nvme0n1";
|
||||||
|
type = lib.types.str;
|
||||||
|
description = "The name, ID, UUID or similar for the default drive.";
|
||||||
|
};
|
||||||
|
rootAmount = lib.mkOption {
|
||||||
|
default = 30;
|
||||||
|
example = 40;
|
||||||
|
type = lib.types.number;
|
||||||
|
description = "The percentage of the disk for root. (Home will take up the rest) (Only for disko)";
|
||||||
|
};
|
||||||
|
swapAmount = lib.mkOption {
|
||||||
|
default = 32;
|
||||||
|
example = 64;
|
||||||
|
type = lib.types.number;
|
||||||
|
description = "The amount of swap to use. (Only for disko)";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.optionalAttrs (options ? fileSystems) {
|
||||||
|
boot.initrd.luks.devices = lib.mkIf (config.mods.drives.variant == "manual" && config.mods.drives.useEncryption) (
|
||||||
|
builtins.listToAttrs (
|
||||||
|
map (
|
||||||
|
{
|
||||||
|
name,
|
||||||
|
drive,
|
||||||
|
}: {
|
||||||
|
cryptstorage.device = lib.mkIf (name != "root") drive?device;
|
||||||
|
cryptoroot.device = lib.mkIf (name == "root") drive?device;
|
||||||
|
}
|
||||||
|
)
|
||||||
|
config.mods.drives.extraDrives
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
fileSystems = lib.mkIf (config.mods.drives.variant == "manual" && !config.conf.wsl) (
|
||||||
|
builtins.listToAttrs (
|
||||||
|
map (
|
||||||
|
{
|
||||||
|
name,
|
||||||
|
drive,
|
||||||
|
}: {
|
||||||
|
name = "/" + name;
|
||||||
|
value = drive;
|
||||||
|
}
|
||||||
|
)
|
||||||
|
config.mods.drives.extraDrives
|
||||||
|
)
|
||||||
|
// (lib.optionalAttrs config.mods.drives.defaultDrives.enable) {
|
||||||
|
"/" = {
|
||||||
|
device = "/dev/disk/by-label/ROOT";
|
||||||
|
fsType = config.mods.drives.homeAndRootFsTypes;
|
||||||
|
options = [
|
||||||
|
"noatime"
|
||||||
|
"nodiratime"
|
||||||
|
"discard"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
"/boot" = {
|
||||||
|
device = "/dev/disk/by-label/BOOT";
|
||||||
|
fsType = "vfat";
|
||||||
|
options = [
|
||||||
|
"rw"
|
||||||
|
"fmask=0022"
|
||||||
|
"dmask=0022"
|
||||||
|
"noatime"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
"/home" = {
|
||||||
|
device = "/dev/disk/by-label/HOME";
|
||||||
|
fsType = config.mods.drives.homeAndRootFsTypes;
|
||||||
|
options = [
|
||||||
|
"noatime"
|
||||||
|
"nodiratime"
|
||||||
|
"discard"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
swapDevices = lib.mkIf (config.mods.drives.useSwap && config.mods.drives.variant == "manual" && !config.conf.wsl) [
|
||||||
|
{device = "/dev/disk/by-label/SWAP";}
|
||||||
|
];
|
||||||
|
|
||||||
|
disko.devices = lib.mkIf (config.mods.drives.variant == "disko") {
|
||||||
|
disk =
|
||||||
|
{
|
||||||
|
main = (lib.optionalAttrs config.mods.drives.defaultDrives.enable) {
|
||||||
|
device = "${config.mods.drives.disko.defaultDiskId}";
|
||||||
|
type = "disk";
|
||||||
|
content = {
|
||||||
|
type = "gpt";
|
||||||
|
partitions = {
|
||||||
|
root = {
|
||||||
|
start = "${
|
||||||
|
if config.mods.drives.useSwap
|
||||||
|
then builtins.toString config.mods.drives.disko.swapAmount
|
||||||
|
else builtins.toString 1
|
||||||
|
}G";
|
||||||
|
end = "${builtins.toString config.mods.drives.disko.rootAmount}%";
|
||||||
|
content = {
|
||||||
|
type = "filesystem";
|
||||||
|
format = config.mods.drives.homeAndRootFsTypes;
|
||||||
|
mountpoint = "/";
|
||||||
|
mountOptions = [
|
||||||
|
"noatime"
|
||||||
|
"nodiratime"
|
||||||
|
"discard"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
plainSwap = {
|
||||||
|
start = "1G";
|
||||||
|
end = "33G";
|
||||||
|
content = {
|
||||||
|
type = "swap";
|
||||||
|
discardPolicy = "both";
|
||||||
|
resumeDevice = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
boot = {
|
||||||
|
start = "0G";
|
||||||
|
end = "1G";
|
||||||
|
content = {
|
||||||
|
type = "filesystem";
|
||||||
|
format = "vfat";
|
||||||
|
mountpoint = "/boot";
|
||||||
|
mountOptions = [
|
||||||
|
"rw"
|
||||||
|
"fmask=0022"
|
||||||
|
"dmask=0022"
|
||||||
|
"noatime"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
home = {
|
||||||
|
start = "${builtins.toString config.mods.drives.disko.rootAmount}%";
|
||||||
|
end = "100%";
|
||||||
|
content = {
|
||||||
|
type = "filesystem";
|
||||||
|
format = config.mods.drives.homeAndRootFsTypes;
|
||||||
|
mountpoint = "/home";
|
||||||
|
mountOptions = [
|
||||||
|
"noatime"
|
||||||
|
"nodiratime"
|
||||||
|
"discard"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
// builtins.listToAttrs (
|
||||||
|
map (
|
||||||
|
{
|
||||||
|
name,
|
||||||
|
drive,
|
||||||
|
}: {
|
||||||
|
name = "/" + name;
|
||||||
|
value = drive;
|
||||||
|
}
|
||||||
|
)
|
||||||
|
config.mods.drives.extraDrives
|
||||||
|
);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
37
modules/programs/fancontrol.nix
Normal file
|
|
@ -0,0 +1,37 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
config,
|
||||||
|
options,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
options.mods.fancontrol = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = false;
|
||||||
|
example = true;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Enables fancontrol-gui with needed drivers";
|
||||||
|
};
|
||||||
|
forceId = lib.mkOption {
|
||||||
|
default = null;
|
||||||
|
example = "force_id=0x8628";
|
||||||
|
type = with lib.types; nullOr str;
|
||||||
|
description = "Modprobe options for the it87 driver. Information at: https://wiki.archlinux.org/title/Lm_sensors#Gigabyte_B250/Z370/B450M/B560M/B660M/Z690/B550_motherboards";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
config = lib.mkIf config.mods.fancontrol.enable (
|
||||||
|
lib.optionalAttrs (options ? home.packages) {
|
||||||
|
home.packages = [pkgs.fancontrol-gui];
|
||||||
|
}
|
||||||
|
// (lib.optionalAttrs (options ? boot.kernelModules) {
|
||||||
|
boot = {
|
||||||
|
kernelParams = ["acpi_enforce_resources=lax"];
|
||||||
|
extraModulePackages = with config.boot.kernelPackages; [liquidtux it87];
|
||||||
|
kernelModules = ["v4l2loopback" "it87"];
|
||||||
|
extraModprobeConfig = lib.mkIf (config.mods.fancontrol.forceId != null) ''
|
||||||
|
options it87 ${config.mods.fancontrol.forceId}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
})
|
||||||
|
);
|
||||||
|
}
|
||||||
75
modules/programs/fastfetch.nix
Normal file
|
|
@ -0,0 +1,75 @@
|
||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
options,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
options.mods.dashfetch = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "A custom configuration for fastfetch";
|
||||||
|
};
|
||||||
|
modules = lib.mkOption {
|
||||||
|
default = [
|
||||||
|
"title"
|
||||||
|
"separator"
|
||||||
|
{
|
||||||
|
type = "os";
|
||||||
|
key = "OS";
|
||||||
|
format = "DashNix ({name} {version})";
|
||||||
|
}
|
||||||
|
"host"
|
||||||
|
"kernel"
|
||||||
|
"uptime"
|
||||||
|
"packages"
|
||||||
|
"shell"
|
||||||
|
"display"
|
||||||
|
"de"
|
||||||
|
"wm"
|
||||||
|
"wmtheme"
|
||||||
|
"theme"
|
||||||
|
"icons"
|
||||||
|
"font"
|
||||||
|
"cursor"
|
||||||
|
"terminal"
|
||||||
|
"terminalfont"
|
||||||
|
"cpu"
|
||||||
|
"gpu"
|
||||||
|
"memory"
|
||||||
|
"swap"
|
||||||
|
"disk"
|
||||||
|
"localip"
|
||||||
|
"battery"
|
||||||
|
"poweradapter"
|
||||||
|
"locale"
|
||||||
|
"break"
|
||||||
|
"colors"
|
||||||
|
];
|
||||||
|
example = [];
|
||||||
|
type = with lib.types; listOf anything;
|
||||||
|
description = "modules for fastfetch";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.optionalAttrs (options ? home.packages) {
|
||||||
|
xdg.configFile."fastfetch/config.jsonc" = lib.mkIf config.mods.dashfetch.enable {
|
||||||
|
source =
|
||||||
|
(pkgs.formats.json {}).generate "config.jsonc"
|
||||||
|
{
|
||||||
|
"$schema" = "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json";
|
||||||
|
logo = {
|
||||||
|
type = "kitty";
|
||||||
|
source = ../../assets/logo2.png;
|
||||||
|
width = 35;
|
||||||
|
padding = {
|
||||||
|
top = 1;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
modules = config.mods.dashfetch.modules;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
190
modules/programs/fish.nix
Normal file
|
|
@ -0,0 +1,190 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
inputs,
|
||||||
|
config,
|
||||||
|
options,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
base16 = pkgs.callPackage inputs.base16.lib {};
|
||||||
|
scheme = base16.mkSchemeAttrs config.stylix.base16Scheme;
|
||||||
|
in {
|
||||||
|
options.mods.fish = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Enables fish";
|
||||||
|
};
|
||||||
|
additionalConfig = lib.mkOption {
|
||||||
|
default = '''';
|
||||||
|
example = '''';
|
||||||
|
type = lib.types.lines;
|
||||||
|
description = "Additional fish config";
|
||||||
|
};
|
||||||
|
useDefaultConfig = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Use default fish config";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
config = lib.mkIf config.mods.fish.enable (
|
||||||
|
lib.optionalAttrs (options ? programs.fish) {
|
||||||
|
programs.fish = {
|
||||||
|
enable = true;
|
||||||
|
shellInit =
|
||||||
|
if config.mods.fish.useDefaultConfig
|
||||||
|
then
|
||||||
|
''
|
||||||
|
if status is-interactive
|
||||||
|
# Commands to run in interactive sessions can go here
|
||||||
|
end
|
||||||
|
|
||||||
|
# =============================================================================
|
||||||
|
#
|
||||||
|
# Utility functions for zoxide.
|
||||||
|
#
|
||||||
|
|
||||||
|
export NIX_PATH="$NIX_PATH:${config.conf.nixosConfigPath}"
|
||||||
|
|
||||||
|
set EDITOR "neovide --no-fork"
|
||||||
|
|
||||||
|
alias rebuild='nh os switch -- --accept-flake-config'
|
||||||
|
alias update='nix flake update --flake $FLAKE --accept-flake-config'
|
||||||
|
alias gcli='gh'
|
||||||
|
abbr --add ls 'lsd'
|
||||||
|
abbr --add :q 'exit'
|
||||||
|
abbr --add gh 'git push origin'
|
||||||
|
abbr --add gu 'git push upstream'
|
||||||
|
abbr --add gl 'git pull origin'
|
||||||
|
abbr --add gm 'git commit -m'
|
||||||
|
abbr --add ga "git add -A"
|
||||||
|
abbr --add gc "git commit --amend --no-edit"
|
||||||
|
abbr --add g+ 'bear -- g++ -Wextra -Werror -std=c++20'
|
||||||
|
abbr --add s "kitty +kitten ssh"
|
||||||
|
abbr --add zl 'z "" '
|
||||||
|
abbr --add nv 'neovide'
|
||||||
|
abbr --add cr 'cargo run'
|
||||||
|
abbr --add grep 'rg'
|
||||||
|
abbr --add cat 'bat'
|
||||||
|
abbr --add find 'fd'
|
||||||
|
abbr --add rm 'rip'
|
||||||
|
abbr --add cp 'cpz'
|
||||||
|
abbr --add cd 'z'
|
||||||
|
abbr --add y 'yazi'
|
||||||
|
|
||||||
|
set fish_color_autosuggestion '${scheme.base07}'
|
||||||
|
set fish_color_param '${scheme.base06}'
|
||||||
|
set fish_color_operator '${scheme.base0E}'
|
||||||
|
|
||||||
|
set fish_greeting
|
||||||
|
# pwd based on the value of _ZO_RESOLVE_SYMLINKS.
|
||||||
|
function __zoxide_pwd
|
||||||
|
builtin pwd -L
|
||||||
|
end
|
||||||
|
|
||||||
|
# A copy of fish's internal cd function. This makes it possible to use
|
||||||
|
# `alias cd=z` without causing an infinite loop.
|
||||||
|
if ! builtin functions --query __zoxide_cd_internal
|
||||||
|
if builtin functions --query cd
|
||||||
|
builtin functions --copy cd __zoxide_cd_internal
|
||||||
|
else
|
||||||
|
alias __zoxide_cd_internal='builtin cd'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# cd + custom logic based on the value of _ZO_ECHO.
|
||||||
|
function __zoxide_cd
|
||||||
|
__zoxide_cd_internal $argv
|
||||||
|
end
|
||||||
|
|
||||||
|
# =============================================================================
|
||||||
|
#
|
||||||
|
# Hook configuration for zoxide.
|
||||||
|
#
|
||||||
|
|
||||||
|
# Initialize hook to add new entries to the database.
|
||||||
|
function __zoxide_hook --on-variable PWD
|
||||||
|
test -z "$fish_private_mode"
|
||||||
|
and command zoxide add -- (__zoxide_pwd)
|
||||||
|
end
|
||||||
|
|
||||||
|
# =============================================================================
|
||||||
|
#
|
||||||
|
# When using zoxide with --no-cmd, alias these internal functions as desired.
|
||||||
|
#
|
||||||
|
|
||||||
|
if test -z $__zoxide_z_prefix
|
||||||
|
set __zoxide_z_prefix 'z!'
|
||||||
|
end
|
||||||
|
set __zoxide_z_prefix_regex ^(string escape --style=regex $__zoxide_z_prefix)
|
||||||
|
|
||||||
|
# Jump to a directory using only keywords.
|
||||||
|
function __zoxide_z
|
||||||
|
set -l argc (count $argv)
|
||||||
|
if test $argc -eq 0
|
||||||
|
__zoxide_cd $HOME
|
||||||
|
else if test "$argv" = -
|
||||||
|
__zoxide_cd -
|
||||||
|
else if test $argc -eq 1 -a -d $argv[1]
|
||||||
|
__zoxide_cd $argv[1]
|
||||||
|
else if set -l result (string replace --regex $__zoxide_z_prefix_regex \'\' $argv[-1]); and test -n $result
|
||||||
|
__zoxide_cd $result
|
||||||
|
else
|
||||||
|
set -l result (command zoxide query --exclude (__zoxide_pwd) -- $argv)
|
||||||
|
and __zoxide_cd $result
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Completions.
|
||||||
|
function __zoxide_z_complete
|
||||||
|
set -l tokens (commandline --current-process --tokenize)
|
||||||
|
set -l curr_tokens (commandline --cut-at-cursor --current-process --tokenize)
|
||||||
|
|
||||||
|
if test (count $tokens) -le 2 -a (count $curr_tokens) -eq 1
|
||||||
|
# If there are < 2 arguments, use `cd` completions.
|
||||||
|
complete --do-complete "\'\' "(commandline --cut-at-cursor --current-token) | string match --regex '.*/$'
|
||||||
|
else if test (count $tokens) -eq (count $curr_tokens); and ! string match --quiet --regex $__zoxide_z_prefix_regex. $tokens[-1]
|
||||||
|
# If the last argument is empty and the one before doesn't start with
|
||||||
|
# $__zoxide_z_prefix, use interactive selection.
|
||||||
|
set -l query $tokens[2..-1]
|
||||||
|
set -l result (zoxide query --exclude (__zoxide_pwd) --interactive -- $query)
|
||||||
|
and echo $__zoxide_z_prefix$result
|
||||||
|
commandline --function repaint
|
||||||
|
end
|
||||||
|
end
|
||||||
|
complete --command __zoxide_z --no-files --arguments '(__zoxide_z_complete)'
|
||||||
|
|
||||||
|
# Jump to a directory using interactive search.
|
||||||
|
function __zoxide_zi
|
||||||
|
set -l result (command zoxide query --interactive -- $argv)
|
||||||
|
and __zoxide_cd $result
|
||||||
|
end
|
||||||
|
|
||||||
|
# =============================================================================
|
||||||
|
#
|
||||||
|
# Commands for zoxide. Disable these using --no-cmd.
|
||||||
|
#
|
||||||
|
|
||||||
|
abbr --erase z &>/dev/null
|
||||||
|
alias z=__zoxide_z
|
||||||
|
|
||||||
|
abbr --erase zi &>/dev/null
|
||||||
|
alias zi=__zoxide_zi
|
||||||
|
|
||||||
|
# =============================================================================
|
||||||
|
#
|
||||||
|
# To initialize zoxide, add this to your configuration (usually
|
||||||
|
# ~/.config/fish/config.fish):
|
||||||
|
#
|
||||||
|
# zoxide init fish | source
|
||||||
|
|
||||||
|
direnv hook fish | source
|
||||||
|
''
|
||||||
|
+ config.mods.fish.additionalConfig
|
||||||
|
else config.mods.fish.additionalConfig;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
21
modules/programs/flatpak.nix
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
options,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
options.mods.flatpak = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = false;
|
||||||
|
example = true;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Enables the flatpak package manager";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
config = lib.mkIf config.mods.flatpak.enable (
|
||||||
|
lib.optionalAttrs (options ? environment.systemPackages) {
|
||||||
|
environment.systemPackages = [pkgs.flatpak];
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
149
modules/programs/gaming.nix
Normal file
|
|
@ -0,0 +1,149 @@
|
||||||
|
{
|
||||||
|
mkDashDefault,
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
options,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
options.mods.gaming = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = false;
|
||||||
|
example = true;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Enabled gaming related features.";
|
||||||
|
};
|
||||||
|
tools = lib.mkOption {
|
||||||
|
default = with pkgs; [
|
||||||
|
protonplus
|
||||||
|
gamescope
|
||||||
|
gamemode
|
||||||
|
steam
|
||||||
|
# TODO broken
|
||||||
|
# lutris
|
||||||
|
wineWowPackages.stable
|
||||||
|
adwsteamgtk
|
||||||
|
heroic
|
||||||
|
mangohud
|
||||||
|
nexusmods-app
|
||||||
|
steamtinkerlaunch
|
||||||
|
winetricks
|
||||||
|
];
|
||||||
|
example = [];
|
||||||
|
type = with lib.types; listOf package;
|
||||||
|
description = "Install gaming related packages";
|
||||||
|
};
|
||||||
|
kernel = lib.mkOption {
|
||||||
|
default = false;
|
||||||
|
example = true;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = ''
|
||||||
|
Whether to use the CachyOS kernel.
|
||||||
|
WARNING: This is a manual compiled kernel!
|
||||||
|
(Please also ensure you use your own input hash for the source as the compilation can often fail due to temporary broken changes.)
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
steam = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Whether to use steam";
|
||||||
|
};
|
||||||
|
gamemode = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Whether to use gamemode";
|
||||||
|
};
|
||||||
|
pinCores = lib.mkOption {
|
||||||
|
default = "false";
|
||||||
|
example = "true";
|
||||||
|
type = lib.types.str;
|
||||||
|
description = "Pin Cores gamemode config";
|
||||||
|
};
|
||||||
|
parkCores = lib.mkOption {
|
||||||
|
default = "false";
|
||||||
|
example = "true";
|
||||||
|
type = lib.types.str;
|
||||||
|
description = "Park Cores gamemode config";
|
||||||
|
};
|
||||||
|
gpuOptimization = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Whether to use GPU performance setting. NOTE: this is at your own risk!";
|
||||||
|
};
|
||||||
|
gpuDevice = lib.mkOption {
|
||||||
|
default = 0;
|
||||||
|
example = 1;
|
||||||
|
type = lib.types.int;
|
||||||
|
description = "Your gpu device.(Physical id of lshw)";
|
||||||
|
};
|
||||||
|
scheduler = lib.mkOption {
|
||||||
|
default = "scx_rustland";
|
||||||
|
example = "scx_rusty";
|
||||||
|
type = with lib.types;
|
||||||
|
nullOr (enum [
|
||||||
|
"scx_bpfland"
|
||||||
|
"scx_chaos"
|
||||||
|
"scx_cosmos"
|
||||||
|
"scx_central"
|
||||||
|
"scx_flash"
|
||||||
|
"scx_flatcg"
|
||||||
|
"scx_lavd"
|
||||||
|
"scx_layered"
|
||||||
|
"scx_mitosis"
|
||||||
|
"scx_nest"
|
||||||
|
"scx_p2dq"
|
||||||
|
"scx_pair"
|
||||||
|
"scx_prev"
|
||||||
|
"scx_qmap"
|
||||||
|
"scx_rlfifo"
|
||||||
|
"scx_rustland"
|
||||||
|
"scx_rusty"
|
||||||
|
"scx_sdt"
|
||||||
|
"scx_simple"
|
||||||
|
"scx_tickless"
|
||||||
|
"scx_userland"
|
||||||
|
"scx_wd40"
|
||||||
|
]);
|
||||||
|
description = "Scheduler to use, null disables this";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
config = lib.mkIf config.mods.gaming.enable (
|
||||||
|
lib.optionalAttrs (options ? environment.systemPackages) {
|
||||||
|
environment.systemPackages = config.mods.gaming.tools;
|
||||||
|
boot.kernelPackages = lib.mkForce pkgs.cachyosKernels.linuxPackages-cachyos-latest;
|
||||||
|
services.scx = lib.mkIf (config.mods.gaming.scheduler != null) {
|
||||||
|
enable = true;
|
||||||
|
inherit (config.mods.gaming) scheduler;
|
||||||
|
};
|
||||||
|
|
||||||
|
programs = {
|
||||||
|
steam.enable = mkDashDefault config.mods.gaming.steam;
|
||||||
|
gamemode.enable = true;
|
||||||
|
gamemode = {
|
||||||
|
settings = {
|
||||||
|
general = {
|
||||||
|
desiredgov = mkDashDefault "performance";
|
||||||
|
};
|
||||||
|
cpu = {
|
||||||
|
pin_cores = mkDashDefault config.mods.gaming.pinCores;
|
||||||
|
park_cores = mkDashDefault config.mods.gaming.parkCores;
|
||||||
|
};
|
||||||
|
gpu = lib.mkIf config.mods.gaming.gpuOptimization {
|
||||||
|
apply_gpu_optimisations = mkDashDefault "accept-responsibility";
|
||||||
|
gpu_device = mkDashDefault config.mods.gaming.gpuDevice;
|
||||||
|
amd_performance_level = mkDashDefault "high";
|
||||||
|
nv_powermizer_mode = mkDashDefault 1;
|
||||||
|
};
|
||||||
|
custom = {
|
||||||
|
start = mkDashDefault "notify-send -a 'Gamemode' 'Optimizations activated'";
|
||||||
|
end = mkDashDefault "notify-send -a 'Gamemode' 'Optimizations deactivated'";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
33
modules/programs/gdm.nix
Normal file
|
|
@ -0,0 +1,33 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
options,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
options.mods.gdm = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = false;
|
||||||
|
example = true;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Enables the gdm displayManager";
|
||||||
|
};
|
||||||
|
extraOptions = lib.mkOption {
|
||||||
|
default = {};
|
||||||
|
example = {};
|
||||||
|
type = with lib.types; attrsOf anything;
|
||||||
|
description = "Extra options to be applied to the gnome config";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.mkIf config.mods.gdm.enable (
|
||||||
|
lib.optionalAttrs (options ? services.xserver.displayManager.gdm) (
|
||||||
|
{
|
||||||
|
services.xserver.enable = true;
|
||||||
|
services.xserver.displayManager.gdm.enable = true;
|
||||||
|
}
|
||||||
|
// {
|
||||||
|
services.xserver.displayManager.gdm = config.mods.gdm.extraOptions;
|
||||||
|
}
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
64
modules/programs/git.nix
Normal file
|
|
@ -0,0 +1,64 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
options,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
options.mods.git = {
|
||||||
|
username = lib.mkOption {
|
||||||
|
default = "";
|
||||||
|
example = "globi";
|
||||||
|
type = lib.types.str;
|
||||||
|
description = "Git user name";
|
||||||
|
};
|
||||||
|
email = lib.mkOption {
|
||||||
|
default = "";
|
||||||
|
example = "globi@globus.glob";
|
||||||
|
type = lib.types.str;
|
||||||
|
description = "Git email";
|
||||||
|
};
|
||||||
|
additionalConfig = lib.mkOption {
|
||||||
|
default = {
|
||||||
|
merge = {
|
||||||
|
tool = "nvimdiff";
|
||||||
|
};
|
||||||
|
diff = {
|
||||||
|
tool = "nvimdiff";
|
||||||
|
};
|
||||||
|
pull.rebase = true;
|
||||||
|
};
|
||||||
|
example = {
|
||||||
|
pull.rebase = false;
|
||||||
|
};
|
||||||
|
type = with lib.types; attrsOf anything;
|
||||||
|
description = "Additional git config";
|
||||||
|
};
|
||||||
|
sshConfig = lib.mkOption {
|
||||||
|
default = "";
|
||||||
|
example = ''
|
||||||
|
Host github.com
|
||||||
|
${
|
||||||
|
if (config ? sops.secrets && config.sops.secrets ? hub.path)
|
||||||
|
then "IdentityFile ${config.sops.secrets.hub.path}"
|
||||||
|
else ""
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
type = lib.types.lines;
|
||||||
|
description = "ssh configuration (keys for git)";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
config = lib.optionalAttrs (options ? programs.git && options ? home.file) {
|
||||||
|
programs.git = {
|
||||||
|
enable = true;
|
||||||
|
settings =
|
||||||
|
{
|
||||||
|
user = {
|
||||||
|
name = config.mods.git.username;
|
||||||
|
inherit (config.mods.git) email;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
// config.mods.git.additionalConfig;
|
||||||
|
};
|
||||||
|
home.file.".ssh/config".text = config.mods.git.sshConfig;
|
||||||
|
};
|
||||||
|
}
|
||||||
77
modules/programs/gnome.nix
Normal file
|
|
@ -0,0 +1,77 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
options,
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
options.mods.gnome = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = false;
|
||||||
|
example = true;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Enables the Gnome desktop environment";
|
||||||
|
};
|
||||||
|
useDefaultOptions = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Use default options provided by module. If disabled, will only apply extraOptions.";
|
||||||
|
};
|
||||||
|
extraOptions = lib.mkOption {
|
||||||
|
default = {};
|
||||||
|
example = {};
|
||||||
|
type = with lib.types; attrsOf anything;
|
||||||
|
description = "Extra options to be applied to the gnome config";
|
||||||
|
};
|
||||||
|
extraDconf = lib.mkOption {
|
||||||
|
default = {};
|
||||||
|
example = {};
|
||||||
|
type = with lib.types; attrsOf anything;
|
||||||
|
description = "Extra options to be applied to the dconf config";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = let
|
||||||
|
defaultExtensions = with pkgs.gnomeExtensions; [
|
||||||
|
blur-my-shell
|
||||||
|
dash-to-dock
|
||||||
|
tray-icons-reloaded
|
||||||
|
];
|
||||||
|
in
|
||||||
|
lib.mkIf config.mods.gnome.enable (
|
||||||
|
lib.optionalAttrs (options ? services.xserver.desktopManager.gnome) (
|
||||||
|
{
|
||||||
|
services.xserver = {
|
||||||
|
enable = true;
|
||||||
|
desktopManager.gnome.enable = true;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
// lib.mkIf config.mods.gnome.useDefaultOptions {environment.systemPackages = defaultExtensions;}
|
||||||
|
// {
|
||||||
|
services.xserver.desktopManager.gnome = config.mods.gnome.extraOptions;
|
||||||
|
}
|
||||||
|
)
|
||||||
|
// lib.optionalAttrs (options ? dconf) (
|
||||||
|
lib.mkIf config.mods.gnome.useDefaultOptions {
|
||||||
|
dconf = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
"org/gnome/shell" = {
|
||||||
|
disable-user-extensions = false;
|
||||||
|
enabled-extensions = map (extension: extension.extensionUuid) defaultExtensions;
|
||||||
|
};
|
||||||
|
"org/gnome/desktop/interface" = {
|
||||||
|
cursor-theme = config.mods.stylix.cursor.name;
|
||||||
|
cursor-size = config.mods.stylix.cursor.size;
|
||||||
|
color-scheme = "prefer-dark";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
// {
|
||||||
|
dconf = config.mods.gnome.extraDconf;
|
||||||
|
}
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
81
modules/programs/gnomeServices.nix
Normal file
|
|
@ -0,0 +1,81 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
options,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
options.mods = {
|
||||||
|
gnomeServices.enable = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = ''
|
||||||
|
Enables gnome services: keyring and settings daemon.
|
||||||
|
Note: Do not use these for environments which ship these functionalities by default: GNOME, KDE
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
nautilus.enable = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = ''
|
||||||
|
Enables and configures Nautilus
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.mkIf config.mods.gnomeServices.enable (
|
||||||
|
lib.optionalAttrs (options ? services.gnome.gnome-keyring) {
|
||||||
|
programs.dconf = {
|
||||||
|
enable = true;
|
||||||
|
profiles.user.databases = [
|
||||||
|
{
|
||||||
|
settings = {
|
||||||
|
"org/gnome/desktop/interface" = {
|
||||||
|
cursor-theme = config.mods.stylix.cursor.name;
|
||||||
|
cursor-size = lib.gvariant.mkInt32 config.mods.stylix.cursor.size;
|
||||||
|
color-scheme = "prefer-dark";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
environment.extraInit = ''
|
||||||
|
export SSH_AUTH_SOCK="$XDG_RUNTIME_DIR/keyring/ssh"
|
||||||
|
'';
|
||||||
|
services = {
|
||||||
|
# needed for GNOME services outside of GNOME Desktop
|
||||||
|
dbus.packages = with pkgs; [
|
||||||
|
gcr
|
||||||
|
gnome-settings-daemon
|
||||||
|
];
|
||||||
|
|
||||||
|
gnome.gnome-keyring.enable = true;
|
||||||
|
gvfs.enable = true;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
// lib.optionalAttrs (options ? home.packages) {
|
||||||
|
services.gnome-keyring.enable = true;
|
||||||
|
dconf.settings = {
|
||||||
|
"org/gnome/desktop/interface" = {
|
||||||
|
cursor-theme = config.mods.stylix.cursor.name;
|
||||||
|
cursor-size = config.mods.stylix.cursor.size;
|
||||||
|
color-scheme = "prefer-dark";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
home = {
|
||||||
|
packages = let
|
||||||
|
packages = with pkgs; [
|
||||||
|
gcr
|
||||||
|
nautilus
|
||||||
|
sushi
|
||||||
|
nautilus-python
|
||||||
|
nautilus-open-any-terminal
|
||||||
|
];
|
||||||
|
in
|
||||||
|
lib.mkIf config.mods.nautilus.enable packages;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
111
modules/programs/gpu.nix
Normal file
|
|
@ -0,0 +1,111 @@
|
||||||
|
{
|
||||||
|
mkDashDefault,
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
options,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
options.mods.gpu = {
|
||||||
|
nvidia.enable = lib.mkOption {
|
||||||
|
default = false;
|
||||||
|
example = true;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = ''
|
||||||
|
Enables nvidia support.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
amdgpu.enable = lib.mkOption {
|
||||||
|
default = false;
|
||||||
|
example = true;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = ''
|
||||||
|
Enables amdgpu support.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
intelgpu.enable = lib.mkOption {
|
||||||
|
default = false;
|
||||||
|
example = true;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = ''
|
||||||
|
Enables intel support.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
vapi = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = ''
|
||||||
|
Enables vapi.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
rocm.enable = lib.mkOption {
|
||||||
|
default = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
example = true;
|
||||||
|
description = ''
|
||||||
|
Enables rocm support.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.optionalAttrs (options ? boot) {
|
||||||
|
boot = lib.mkIf config.mods.gpu.amdgpu.enable {
|
||||||
|
kernelModules = ["kvm-amd"];
|
||||||
|
initrd.kernelModules = ["amdgpu"];
|
||||||
|
kernelParams = ["amdgpu.ppfeaturemask=0xffffffff"];
|
||||||
|
};
|
||||||
|
services.xserver.videoDrivers =
|
||||||
|
if config.mods.gpu.amdgpu.enable
|
||||||
|
then ["amdgpu"]
|
||||||
|
else if config.mods.gpu.nvidia.enable
|
||||||
|
then ["nvidia"]
|
||||||
|
else [];
|
||||||
|
|
||||||
|
environment.variables =
|
||||||
|
if (config.mods.gpu.amdgpu.enable && config.mods.gpu.vapi.rocm.enable)
|
||||||
|
then {
|
||||||
|
RUSTICL_ENABLE = mkDashDefault "radeonsi";
|
||||||
|
}
|
||||||
|
else {};
|
||||||
|
|
||||||
|
hardware = {
|
||||||
|
nvidia = lib.mkIf config.mods.gpu.nvidia.enable {
|
||||||
|
modesetting.enable = mkDashDefault true;
|
||||||
|
open = mkDashDefault true;
|
||||||
|
nvidiaSettings = mkDashDefault true;
|
||||||
|
package = mkDashDefault config.boot.kernelPackages.nvidiaPackages.beta;
|
||||||
|
};
|
||||||
|
graphics = let
|
||||||
|
amdPackages = [
|
||||||
|
(lib.mkIf (config.mods.gpu.intelgpu.enable && lib.mkIf config.mods.gpu.vapi.enable) pkgs.vpl-gpu-rt)
|
||||||
|
(lib.mkIf (
|
||||||
|
config.mods.gpu.intelgpu.enable && lib.mkIf config.mods.gpu.vapi.enable
|
||||||
|
)
|
||||||
|
pkgs.intel-media-driver)
|
||||||
|
(lib.mkIf config.mods.gpu.vapi.enable pkgs.libvdpau-va-gl)
|
||||||
|
(lib.mkIf config.mods.gpu.vapi.enable pkgs.libva)
|
||||||
|
(lib.mkIf config.mods.gpu.vapi.enable pkgs.libva-vdpau-driver)
|
||||||
|
(lib.mkIf (config.mods.gpu.intelgpu.enable || config.mods.gpu.amdgpu.enable) pkgs.mesa)
|
||||||
|
];
|
||||||
|
rocmPackages = [
|
||||||
|
pkgs.rocmPackages.clr.icd
|
||||||
|
pkgs.mesa
|
||||||
|
pkgs.mesa.opencl
|
||||||
|
pkgs.vulkan-loader
|
||||||
|
pkgs.vulkan-validation-layers
|
||||||
|
pkgs.vulkan-tools
|
||||||
|
pkgs.clinfo
|
||||||
|
];
|
||||||
|
in {
|
||||||
|
enable = true;
|
||||||
|
enable32Bit = mkDashDefault true;
|
||||||
|
extraPackages =
|
||||||
|
amdPackages
|
||||||
|
++ (lib.lists.optionals (config.mods.gpu.vapi.rocm.enable && config.mods.gpu.amdgpu.enable) rocmPackages);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
164
modules/programs/greetd.nix
Normal file
|
|
@ -0,0 +1,164 @@
|
||||||
|
{
|
||||||
|
mkDashDefault,
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
inputs,
|
||||||
|
pkgs,
|
||||||
|
options,
|
||||||
|
system,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
options.mods = {
|
||||||
|
greetd = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = ''
|
||||||
|
Enables the greetd login manager.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
monitor = lib.mkOption {
|
||||||
|
default =
|
||||||
|
if config.mods.wm.monitors != []
|
||||||
|
then (builtins.elemAt config.mods.wm.monitors 0).name
|
||||||
|
else "";
|
||||||
|
example = "eDP-1";
|
||||||
|
type = lib.types.str;
|
||||||
|
description = ''
|
||||||
|
main monitor for the login screen.
|
||||||
|
By default the main monitor is used.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
scale = lib.mkOption {
|
||||||
|
default =
|
||||||
|
if config.mods.wm.monitors != []
|
||||||
|
then builtins.toString (builtins.elemAt config.mods.wm.monitors 0).scale
|
||||||
|
else "";
|
||||||
|
example = "1.5";
|
||||||
|
type = lib.types.str;
|
||||||
|
description = ''
|
||||||
|
Scale used by the monitor in the login screen.
|
||||||
|
By default the scale of the main monitor is used.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
greeterCommand = lib.mkOption {
|
||||||
|
default = "${
|
||||||
|
lib.getExe inputs.hyprland.packages.${system}.hyprland
|
||||||
|
} --config /etc/greetd/hyprgreet.conf";
|
||||||
|
example = "${
|
||||||
|
lib.getExe pkgs.cage
|
||||||
|
} -s -- ${lib.getExe pkgs.regreet}";
|
||||||
|
type = lib.types.str;
|
||||||
|
description = "The compositor/greeter command to run";
|
||||||
|
};
|
||||||
|
resolution = lib.mkOption {
|
||||||
|
default =
|
||||||
|
if config.mods.wm.monitors != []
|
||||||
|
then let
|
||||||
|
resX = builtins.toString (builtins.elemAt config.mods.wm.monitors 0).resolutionX;
|
||||||
|
resY = builtins.toString (builtins.elemAt config.mods.wm.monitors 0).resolutionY;
|
||||||
|
refresh = builtins.toString (builtins.elemAt config.mods.wm.monitors 0).refreshrate;
|
||||||
|
in "${resX}x${resY}@${refresh}"
|
||||||
|
else "";
|
||||||
|
example = "3440x1440@180";
|
||||||
|
type = lib.types.str;
|
||||||
|
description = ''
|
||||||
|
Resolution/refreshrate used by the monitor in the login screen.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
environments = lib.mkOption {
|
||||||
|
default = [
|
||||||
|
(lib.mkIf config.mods.hypr.hyprland.enable inputs.hyprland.packages.${config.conf.system}.hyprland)
|
||||||
|
(lib.mkIf config.mods.niri.enable pkgs.niri)
|
||||||
|
];
|
||||||
|
# no idea if these are written correctly
|
||||||
|
example = [
|
||||||
|
pkgs.niri
|
||||||
|
pkgs.river-classic
|
||||||
|
pkgs.swayfx
|
||||||
|
];
|
||||||
|
type = with lib.types; listOf package;
|
||||||
|
description = ''
|
||||||
|
List of environments that should be available in the login prompt.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
regreet = {
|
||||||
|
customSettings = lib.mkOption {
|
||||||
|
default = {};
|
||||||
|
example = {};
|
||||||
|
type = with lib.types; attrsOf anything;
|
||||||
|
description = ''
|
||||||
|
Custom regret settings. See https://github.com/rharish101/ReGreet/blob/main/regreet.sample.toml for more information.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = let
|
||||||
|
inherit (config.conf) username;
|
||||||
|
in
|
||||||
|
lib.mkIf config.mods.greetd.enable (
|
||||||
|
lib.optionalAttrs (options ? environment) {
|
||||||
|
# greetd display manager
|
||||||
|
programs.hyprland.enable = mkDashDefault true;
|
||||||
|
services = {
|
||||||
|
displayManager.sessionPackages = config.mods.greetd.environments;
|
||||||
|
greetd = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
terminal.vt = mkDashDefault 1;
|
||||||
|
default_session = {
|
||||||
|
command = mkDashDefault config.mods.greetd.greeterCommand;
|
||||||
|
user = mkDashDefault username;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# should technically be the same, but this is configured instead in order to provide a decent out of the box login experience.
|
||||||
|
environment.etc."greetd/hyprgreet.conf".text = ''
|
||||||
|
monitor=${config.mods.greetd.monitor},${config.mods.greetd.resolution},0x0,${config.mods.greetd.scale}
|
||||||
|
monitor=,disable
|
||||||
|
|
||||||
|
input {
|
||||||
|
kb_layout = ${config.mods.xkb.layout}
|
||||||
|
kb_variant = ${config.mods.xkb.variant}
|
||||||
|
force_no_accel = true
|
||||||
|
}
|
||||||
|
|
||||||
|
misc {
|
||||||
|
disable_splash_rendering = false
|
||||||
|
disable_hyprland_logo = true
|
||||||
|
disable_xdg_env_checks = true
|
||||||
|
disable_scale_notification = true
|
||||||
|
}
|
||||||
|
|
||||||
|
env=STATE_DIR,var/cache/regreet
|
||||||
|
env=CACHE_DIR,var/cache/regreet
|
||||||
|
env=HYPRCURSOR_THEME,${config.mods.stylix.cursor.name}
|
||||||
|
env=HYPRCURSOR_SIZE,${toString config.mods.stylix.cursor.size}
|
||||||
|
env=XCURSOR_THEME,${config.mods.stylix.cursor.name}
|
||||||
|
env=XCURSOR_SIZE,${toString config.mods.stylix.cursor.size}
|
||||||
|
env=QT_QPA_PLATFORMTHEME,qt5ct
|
||||||
|
|
||||||
|
exec-once=regreet --style /home/${username}/.config/gtk-3.0/gtk.css --config /home/${username}/.config/regreet/regreet.toml; hyprctl dispatch exit
|
||||||
|
'';
|
||||||
|
|
||||||
|
# unlock GPG keyring on login
|
||||||
|
security.pam = {
|
||||||
|
services.greetd = {
|
||||||
|
enableGnomeKeyring = mkDashDefault true;
|
||||||
|
sshAgentAuth = mkDashDefault true;
|
||||||
|
};
|
||||||
|
sshAgentAuth.enable = mkDashDefault true;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
// lib.optionalAttrs (options ? home) {
|
||||||
|
xdg.configFile."regreet/regreet.toml".source =
|
||||||
|
(pkgs.formats.toml {}).generate "regreet"
|
||||||
|
config.mods.greetd.regreet.customSettings;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
154
modules/programs/homePackages.nix
Normal file
|
|
@ -0,0 +1,154 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
options,
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}
|
||||||
|
: {
|
||||||
|
options.mods.homePackages = {
|
||||||
|
useDefaultPackages = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Use default packages (will use additional_packages only if disabled)";
|
||||||
|
};
|
||||||
|
additionalPackages = lib.mkOption {
|
||||||
|
default = [];
|
||||||
|
example = [pkgs.flatpak];
|
||||||
|
type = with lib.types; listOf package;
|
||||||
|
description = ''
|
||||||
|
Additional Home manager packages.
|
||||||
|
Will be installed regardless of default home manager packages are installed.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
specialPrograms = lib.mkOption {
|
||||||
|
default = {};
|
||||||
|
example = {};
|
||||||
|
type = with lib.types; attrsOf anything;
|
||||||
|
description = ''
|
||||||
|
special program configuration to be added which require programs.something notation.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
specialServices = lib.mkOption {
|
||||||
|
default = {};
|
||||||
|
example = {};
|
||||||
|
type = with lib.types; attrsOf anything;
|
||||||
|
description = ''
|
||||||
|
special services configuration to be added which require an services.something notation.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
matrixClient = lib.mkOption {
|
||||||
|
default = pkgs.nheko;
|
||||||
|
example = null;
|
||||||
|
type = with lib.types; nullOr package;
|
||||||
|
description = "The matrix client";
|
||||||
|
};
|
||||||
|
vesktop = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Adds the vesktop discord client";
|
||||||
|
};
|
||||||
|
ncspot = lib.mkOption {
|
||||||
|
default = false;
|
||||||
|
example = true;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Adds the ncspot spotify client";
|
||||||
|
};
|
||||||
|
orcaSlicer = lib.mkOption {
|
||||||
|
default = false;
|
||||||
|
example = true;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Enables orca slicer";
|
||||||
|
};
|
||||||
|
nextcloudClient = lib.mkOption {
|
||||||
|
default = false;
|
||||||
|
example = true;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Adds the full desktop nextcloud client (the nextcloud module in dashnix only provides the cli tool)";
|
||||||
|
};
|
||||||
|
mailClient = lib.mkOption {
|
||||||
|
default = pkgs.thunderbird;
|
||||||
|
example = null;
|
||||||
|
type = with lib.types; nullOr package;
|
||||||
|
description = "The email client";
|
||||||
|
};
|
||||||
|
browser = lib.mkOption {
|
||||||
|
default = "zen";
|
||||||
|
example = "firefox";
|
||||||
|
type = with lib.types;
|
||||||
|
nullOr (
|
||||||
|
either (enum [
|
||||||
|
"firefox"
|
||||||
|
"zen"
|
||||||
|
"librewolf"
|
||||||
|
"chromium"
|
||||||
|
"brave"
|
||||||
|
])
|
||||||
|
package
|
||||||
|
);
|
||||||
|
description = "The browser (the enum variants have preconfigured modules)";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.optionalAttrs (options ? home.packages) {
|
||||||
|
home.packages =
|
||||||
|
if config.mods.homePackages.useDefaultPackages
|
||||||
|
then
|
||||||
|
with pkgs;
|
||||||
|
[
|
||||||
|
(lib.mkIf config.mods.homePackages.ncspot ncspot)
|
||||||
|
(lib.mkIf config.mods.homePackages.orcaSlicer orca-slicer)
|
||||||
|
(lib.mkIf config.mods.homePackages.vesktop vesktop)
|
||||||
|
(lib.mkIf config.mods.homePackages.nextcloudClient nextcloud-client)
|
||||||
|
(lib.mkIf (config.mods.homePackages.matrixClient != null) config.mods.homePackages.matrixClient)
|
||||||
|
(lib.mkIf (config.mods.homePackages.mailClient != null) config.mods.homePackages.mailClient)
|
||||||
|
(lib.mkIf (
|
||||||
|
# NOTE: This should be package, but nix doesn't have that....
|
||||||
|
builtins.isAttrs config.mods.homePackages.browser && config.mods.homePackages.browser != null
|
||||||
|
)
|
||||||
|
config.mods.homePackages.browser)
|
||||||
|
adw-gtk3
|
||||||
|
bat
|
||||||
|
brightnessctl
|
||||||
|
dbus
|
||||||
|
fastfetch
|
||||||
|
fd
|
||||||
|
ffmpeg
|
||||||
|
flake-checker
|
||||||
|
gnome-keyring
|
||||||
|
gnutar
|
||||||
|
regreet
|
||||||
|
killall
|
||||||
|
kitty
|
||||||
|
libnotify
|
||||||
|
lsd
|
||||||
|
networkmanager
|
||||||
|
nh
|
||||||
|
nix-index
|
||||||
|
playerctl
|
||||||
|
poppler-utils
|
||||||
|
pulseaudio
|
||||||
|
libsForQt5.qt5ct
|
||||||
|
qt6Packages.qt6ct
|
||||||
|
fuc
|
||||||
|
ripgrep
|
||||||
|
rm-improved
|
||||||
|
system-config-printer
|
||||||
|
xournalpp
|
||||||
|
zenith
|
||||||
|
zoxide
|
||||||
|
]
|
||||||
|
++ config.mods.homePackages.additionalPackages
|
||||||
|
else config.mods.homePackages.additionalPackages;
|
||||||
|
|
||||||
|
xdg.configFile."direnv/direnv.toml".source = (pkgs.formats.toml {}).generate "direnv" {
|
||||||
|
global = {
|
||||||
|
warn_timeout = "-1s";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
programs = config.mods.homePackages.specialPrograms;
|
||||||
|
services = config.mods.homePackages.specialServices;
|
||||||
|
};
|
||||||
|
}
|
||||||
7
modules/programs/hypr/default.nix
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./hyprland.nix
|
||||||
|
./hyprlock.nix
|
||||||
|
./hyprpaper.nix
|
||||||
|
];
|
||||||
|
}
|
||||||
357
modules/programs/hypr/hyprland.nix
Normal file
|
|
@ -0,0 +1,357 @@
|
||||||
|
{
|
||||||
|
mkDashDefault,
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
options,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
defaultWmConf = import ../../../lib/wm.nix;
|
||||||
|
in {
|
||||||
|
options.mods.hypr.hyprland = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = ''
|
||||||
|
Enable Hyprland
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
noAtomic = lib.mkOption {
|
||||||
|
default = false;
|
||||||
|
example = true;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = ''
|
||||||
|
Use tearing (Warning, can be buggy)
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
useIronbar = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = ''
|
||||||
|
Whether to use ironbar in hyprland.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
useDefaultConfig = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = ''
|
||||||
|
Use preconfigured Hyprland config.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
customConfig = lib.mkOption {
|
||||||
|
default = {};
|
||||||
|
example = {};
|
||||||
|
type = with lib.types; attrsOf anything;
|
||||||
|
description = ''
|
||||||
|
Custom Hyprland configuration.
|
||||||
|
Will be merged with default configuration if enabled.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
plugins = lib.mkOption {
|
||||||
|
default = [];
|
||||||
|
example = [];
|
||||||
|
type = with lib.types; listOf package;
|
||||||
|
description = ''
|
||||||
|
Plugins to be added to Hyprland.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
pluginConfig = lib.mkOption {
|
||||||
|
default = {};
|
||||||
|
example = {};
|
||||||
|
type = with lib.types; attrsOf anything;
|
||||||
|
description = ''
|
||||||
|
Plugin configuration to be added to Hyprland.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
hyprspaceEnable = lib.mkOption {
|
||||||
|
default = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
example = true;
|
||||||
|
description = ''
|
||||||
|
Enables Hyprspace plugin for hyprland.
|
||||||
|
Please note, plugins tend to break VERY often.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.mkIf config.mods.hypr.hyprland.enable (
|
||||||
|
lib.optionalAttrs (options ? wayland.windowManager.hyprland) {
|
||||||
|
# install Hyprland related packages
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
xorg.xprop
|
||||||
|
grim
|
||||||
|
slurp
|
||||||
|
satty
|
||||||
|
xdg-desktop-portal-gtk
|
||||||
|
xdg-desktop-portal-gnome
|
||||||
|
kdePackages.xdg-desktop-portal-kde
|
||||||
|
xdg-desktop-portal-shana
|
||||||
|
copyq
|
||||||
|
wl-clipboard
|
||||||
|
hyprcursor
|
||||||
|
hyprpicker
|
||||||
|
];
|
||||||
|
|
||||||
|
wayland.windowManager.hyprland = let
|
||||||
|
mkWorkspace = workspaces:
|
||||||
|
builtins.map (workspace: let
|
||||||
|
default =
|
||||||
|
if workspace.default
|
||||||
|
then ",default:true"
|
||||||
|
else "";
|
||||||
|
in "${workspace.name},monitor:${workspace.monitor}${default}")
|
||||||
|
workspaces;
|
||||||
|
mkTransform = transform:
|
||||||
|
if transform == "0"
|
||||||
|
then 0
|
||||||
|
else if transform == "90"
|
||||||
|
then 1
|
||||||
|
else if transform == "180"
|
||||||
|
then 2
|
||||||
|
else if transform == "270"
|
||||||
|
then 3
|
||||||
|
else 4;
|
||||||
|
mkVrr = vrr:
|
||||||
|
if vrr
|
||||||
|
then "1"
|
||||||
|
else "0";
|
||||||
|
mkMonitors = monitors:
|
||||||
|
builtins.map (
|
||||||
|
monitor: "${monitor.name},${builtins.toString monitor.resolutionX}x${builtins.toString monitor.resolutionY}@${builtins.toString monitor.refreshrate},${builtins.toString monitor.positionX}x${builtins.toString monitor.positionY},${builtins.toString monitor.scale}, transform,${builtins.toString (mkTransform monitor.transform)}, vrr,${mkVrr monitor.vrr}"
|
||||||
|
)
|
||||||
|
monitors;
|
||||||
|
|
||||||
|
mkMods = bind: let
|
||||||
|
mods = bind.modKeys or [];
|
||||||
|
in
|
||||||
|
builtins.map (mod:
|
||||||
|
if mod == "Mod"
|
||||||
|
then (lib.strings.toUpper config.mods.wm.modKey) + " "
|
||||||
|
else lib.strings.toUpper mod)
|
||||||
|
mods
|
||||||
|
|> lib.strings.concatStringsSep "";
|
||||||
|
mkArgs = args:
|
||||||
|
if args != []
|
||||||
|
then (lib.strings.concatStringsSep " " args)
|
||||||
|
else "";
|
||||||
|
shouldRepeat = bind: bind ? meta && bind.meta ? hyprland && bind.meta.hyprland ? repeat && bind.meta.hyprland.repeat == true;
|
||||||
|
|
||||||
|
defaultBinds = cfg:
|
||||||
|
if cfg.mods.wm.useDefaultBinds
|
||||||
|
then defaultWmConf.defaultBinds cfg
|
||||||
|
else [];
|
||||||
|
|
||||||
|
mkEBinds = cfg: let
|
||||||
|
binds = cfg.mods.wm.binds ++ defaultBinds cfg;
|
||||||
|
in
|
||||||
|
binds
|
||||||
|
|> builtins.filter (bind: bind ? command && shouldRepeat bind && !(hasInvalidCustomCommand bind))
|
||||||
|
|> builtins.map (
|
||||||
|
bind: "${mkMods bind},${bind.key},${mkCommand bind}"
|
||||||
|
);
|
||||||
|
mkBinds = cfg: let
|
||||||
|
binds = cfg.mods.wm.binds ++ defaultBinds cfg;
|
||||||
|
in
|
||||||
|
binds
|
||||||
|
|> builtins.filter (bind: bind ? command && !(shouldRepeat bind) && !(hasInvalidCustomCommand bind))
|
||||||
|
|> builtins.map (
|
||||||
|
bind: "${mkMods bind},${bind.key},${mkCommand bind}"
|
||||||
|
);
|
||||||
|
mkCommand = bind: let
|
||||||
|
args = bind.args or [];
|
||||||
|
in
|
||||||
|
if bind.command == "quit"
|
||||||
|
then "exit"
|
||||||
|
else if bind.command == "killActive"
|
||||||
|
then "killactive"
|
||||||
|
else if bind.command == "moveWindowRight"
|
||||||
|
then "movewindow,r"
|
||||||
|
else if bind.command == "moveWindowDown"
|
||||||
|
then "movewindow,d"
|
||||||
|
else if bind.command == "moveWindowLeft"
|
||||||
|
then "movewindow,l"
|
||||||
|
else if bind.command == "moveWindowUp"
|
||||||
|
then "movewindow,u"
|
||||||
|
else if bind.command == "moveFocusUp"
|
||||||
|
then "movefocus,u"
|
||||||
|
else if bind.command == "moveFocusRight"
|
||||||
|
then "movefocus,r"
|
||||||
|
else if bind.command == "moveFocusDown"
|
||||||
|
then "movefocus,d"
|
||||||
|
else if bind.command == "moveFocusLeft"
|
||||||
|
then "movefocus,l"
|
||||||
|
else if bind.command == "toggleFloating"
|
||||||
|
then "togglefloating"
|
||||||
|
else if bind.command == "toggleFullscreen"
|
||||||
|
then "fullscreen"
|
||||||
|
else if bind.command == "focusWorkspace"
|
||||||
|
then "workspace" + "," + mkArgs args
|
||||||
|
else if bind.command == "moveToWorkspace"
|
||||||
|
then "movetoworkspace" + "," + mkArgs args
|
||||||
|
else if bind.command == "spawn"
|
||||||
|
then "exec" + "," + mkArgs args
|
||||||
|
else if bind.command == "spawn-sh"
|
||||||
|
then "exec" + "," + mkArgs args
|
||||||
|
else bind.command.hyprland + "," + mkArgs args;
|
||||||
|
hasInvalidCustomCommand = bind: !(builtins.isString bind.command) && bind.command.hyprland or null == null;
|
||||||
|
|
||||||
|
mkEnv = config: let
|
||||||
|
defaultEnv =
|
||||||
|
if config.mods.wm.useDefaultEnv
|
||||||
|
then defaultWmConf.defaultEnv config
|
||||||
|
else {
|
||||||
|
all = {};
|
||||||
|
hyprland = {};
|
||||||
|
};
|
||||||
|
userEnv =
|
||||||
|
if config.mods.wm.env ? all
|
||||||
|
then config.mods.wm.env.all // config.mods.wm.env.hyprland
|
||||||
|
else config.mods.wm.env;
|
||||||
|
env = userEnv // defaultEnv.all // defaultEnv.hyprland;
|
||||||
|
in
|
||||||
|
lib.attrsets.mapAttrsToList (
|
||||||
|
name: value: "${name},${value}"
|
||||||
|
)
|
||||||
|
env;
|
||||||
|
mkAutoStart = config: let
|
||||||
|
defaultStartup =
|
||||||
|
if config.mods.wm.useDefaultStartup
|
||||||
|
then defaultWmConf.defaultStartup config
|
||||||
|
else {
|
||||||
|
all = [];
|
||||||
|
hyprland = [];
|
||||||
|
};
|
||||||
|
userStartup =
|
||||||
|
if config.mods.wm.startup ? all
|
||||||
|
then config.mods.wm.startup.all ++ config.mods.wm.startup.hyprland
|
||||||
|
else config.mods.wm.startup;
|
||||||
|
autoStart = userStartup ++ defaultStartup.all ++ defaultStartup.hyprland;
|
||||||
|
in
|
||||||
|
autoStart;
|
||||||
|
mkWindowRule = config: let
|
||||||
|
defaultWindowRules =
|
||||||
|
if config.mods.wm.useDefaultWindowRules
|
||||||
|
then defaultWmConf.defaultWindowRules.hyprland
|
||||||
|
else [];
|
||||||
|
in
|
||||||
|
# defaultWindowRules ++ config.mods.wm.windowRules.hyprland;
|
||||||
|
defaultWindowRules;
|
||||||
|
in {
|
||||||
|
enable = true;
|
||||||
|
plugins =
|
||||||
|
[
|
||||||
|
(lib.mkIf config.mods.hypr.hyprland.hyprspaceEnable pkgs.hyprlandPlugins.hyprspace)
|
||||||
|
]
|
||||||
|
++ config.mods.hypr.hyprland.plugins;
|
||||||
|
settings =
|
||||||
|
if config.mods.hypr.hyprland.useDefaultConfig
|
||||||
|
then
|
||||||
|
lib.mkMerge
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"$mod" = mkDashDefault config.mods.wm.modKey;
|
||||||
|
|
||||||
|
bindm = [
|
||||||
|
"$mod, mouse:272, movewindow"
|
||||||
|
"$mod, mouse:273, resizeactive"
|
||||||
|
];
|
||||||
|
|
||||||
|
general = {
|
||||||
|
gaps_out = mkDashDefault "3,5,5,5";
|
||||||
|
border_size = mkDashDefault 3;
|
||||||
|
"col.active_border" = lib.mkOverride 51 "0xFFFF0000 0xFF00FF00 0xFF0000FF 45deg";
|
||||||
|
allow_tearing = lib.mkIf config.mods.hypr.hyprland.noAtomic true;
|
||||||
|
};
|
||||||
|
|
||||||
|
decoration = {
|
||||||
|
rounding = mkDashDefault 4;
|
||||||
|
};
|
||||||
|
|
||||||
|
render = {
|
||||||
|
direct_scanout = mkDashDefault config.mods.gaming.enable;
|
||||||
|
};
|
||||||
|
|
||||||
|
animations = {
|
||||||
|
bezier = mkDashDefault "overshot, 0.05, 0.9, 0.1, 1.2";
|
||||||
|
animation = [
|
||||||
|
"windowsMove,1,4,default"
|
||||||
|
"windows,1,3,overshot,slide bottom"
|
||||||
|
"windowsOut,1,7,default,popin 70%"
|
||||||
|
"border,1,4,default"
|
||||||
|
"fade,1,7,default"
|
||||||
|
"workspaces,1,4,default"
|
||||||
|
"layers,1,2,default,slide"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
dwindle = {
|
||||||
|
preserve_split = mkDashDefault true;
|
||||||
|
pseudotile = mkDashDefault 0;
|
||||||
|
permanent_direction_override = mkDashDefault false;
|
||||||
|
};
|
||||||
|
|
||||||
|
input = {
|
||||||
|
kb_layout = mkDashDefault "${config.mods.xkb.layout}";
|
||||||
|
kb_variant = mkDashDefault "${config.mods.xkb.variant}";
|
||||||
|
repeat_delay = mkDashDefault 200;
|
||||||
|
force_no_accel = mkDashDefault true;
|
||||||
|
touchpad = {
|
||||||
|
natural_scroll = mkDashDefault true;
|
||||||
|
tap-to-click = mkDashDefault true;
|
||||||
|
tap-and-drag = mkDashDefault true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
misc = {
|
||||||
|
animate_manual_resizes = mkDashDefault 1;
|
||||||
|
enable_swallow = mkDashDefault true;
|
||||||
|
disable_splash_rendering = mkDashDefault true;
|
||||||
|
disable_hyprland_logo = mkDashDefault true;
|
||||||
|
disable_xdg_env_checks = mkDashDefault true;
|
||||||
|
disable_scale_notification = mkDashDefault true;
|
||||||
|
swallow_regex = mkDashDefault "^(.*)(kitty)(.*)$";
|
||||||
|
initial_workspace_tracking = mkDashDefault 1;
|
||||||
|
# just doesn't work
|
||||||
|
enable_anr_dialog = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
cursor = {
|
||||||
|
enable_hyprcursor = mkDashDefault true;
|
||||||
|
no_hardware_cursors = mkDashDefault (
|
||||||
|
if config.mods.gpu.nvidia.enable
|
||||||
|
then 2
|
||||||
|
else 0
|
||||||
|
);
|
||||||
|
# done with nix, this would break the current setup otherwise
|
||||||
|
sync_gsettings_theme = mkDashDefault false;
|
||||||
|
};
|
||||||
|
|
||||||
|
gesture = [
|
||||||
|
"3, horizontal, workspace"
|
||||||
|
];
|
||||||
|
|
||||||
|
layerrule = [
|
||||||
|
# layer rules
|
||||||
|
# mainly to disable animations within slurp and grim
|
||||||
|
"match:namespace selection, no_anim on"
|
||||||
|
];
|
||||||
|
|
||||||
|
workspace = mkWorkspace config.mods.wm.workspaces;
|
||||||
|
monitor = mkMonitors config.mods.wm.monitors;
|
||||||
|
env = mkEnv config;
|
||||||
|
bind = mkBinds config;
|
||||||
|
binde = mkEBinds config;
|
||||||
|
windowrule = mkWindowRule config;
|
||||||
|
exec-once = mkAutoStart config;
|
||||||
|
plugin = config.mods.hypr.hyprland.pluginConfig;
|
||||||
|
}
|
||||||
|
config.mods.hypr.hyprland.customConfig
|
||||||
|
]
|
||||||
|
else lib.mkForce config.mods.hypr.hyprland.customConfig;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
69
modules/programs/hypr/hyprlock.nix
Normal file
|
|
@ -0,0 +1,69 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
options,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
options.mods.hypr.hyprlock = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Enables Hyprlock";
|
||||||
|
};
|
||||||
|
config = lib.mkOption {
|
||||||
|
default = {
|
||||||
|
background = [
|
||||||
|
{
|
||||||
|
monitor = "";
|
||||||
|
path = "";
|
||||||
|
color = "rgba(26, 27, 38, 1.0)";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
input-field = [
|
||||||
|
{
|
||||||
|
monitor = "${
|
||||||
|
if config.mods.wm.monitors != []
|
||||||
|
then (builtins.elemAt config.mods.wm.monitors 0).name
|
||||||
|
else ""
|
||||||
|
}";
|
||||||
|
placeholder_text = "password or something";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
label = [
|
||||||
|
{
|
||||||
|
monitor = "${
|
||||||
|
if config.mods.wm.monitors != []
|
||||||
|
then (builtins.elemAt config.mods.wm.monitors 0).name
|
||||||
|
else ""
|
||||||
|
}";
|
||||||
|
text = "$TIME";
|
||||||
|
font_size = 50;
|
||||||
|
position = "0, 200";
|
||||||
|
valign = "center";
|
||||||
|
halign = "center";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
example = {};
|
||||||
|
type = with lib.types; attrsOf anything;
|
||||||
|
description = "config";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.mkIf config.mods.hypr.hyprlock.enable (
|
||||||
|
lib.optionalAttrs (options ? xdg.configFile) {
|
||||||
|
stylix.targets.hyprlock = {
|
||||||
|
enable = false;
|
||||||
|
};
|
||||||
|
home.packages = with pkgs; [hyprlock];
|
||||||
|
programs.hyprlock = lib.mkIf config.mods.hypr.hyprlock.enable {
|
||||||
|
enable = true;
|
||||||
|
settings = config.mods.hypr.hyprlock.config;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
36
modules/programs/hypr/hyprpaper.nix
Normal file
|
|
@ -0,0 +1,36 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
options,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
options.mods.hypr.hyprpaper = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Enables Hyprpaper";
|
||||||
|
};
|
||||||
|
config = lib.mkOption {
|
||||||
|
default = "";
|
||||||
|
example = ''
|
||||||
|
preload = path/to/wallpaper
|
||||||
|
wallpaper = YOURMONITOR,path/to/wallpaper
|
||||||
|
'';
|
||||||
|
type = lib.types.lines;
|
||||||
|
description = ''
|
||||||
|
Hyprpaper config
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.mkIf config.mods.hypr.hyprpaper.enable (
|
||||||
|
lib.optionalAttrs (options ? xdg.configFile) {
|
||||||
|
home.packages = with pkgs; [hyprpaper];
|
||||||
|
xdg.configFile."hypr/hyprpaper.conf" = lib.mkIf config.mods.hypr.hyprpaper.enable {
|
||||||
|
text = config.mods.hypr.hyprpaper.config;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
552
modules/programs/ironbar.nix
Normal file
|
|
@ -0,0 +1,552 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
inputs,
|
||||||
|
options,
|
||||||
|
mkDashDefault,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
inherit (config.conf) username;
|
||||||
|
base16 = pkgs.callPackage inputs.base16.lib {};
|
||||||
|
scheme = base16.mkSchemeAttrs config.stylix.base16Scheme;
|
||||||
|
ironbarDefaultConfig = useBatteryModule: {
|
||||||
|
end = [
|
||||||
|
(lib.mkIf useBatteryModule
|
||||||
|
{
|
||||||
|
type = "battery";
|
||||||
|
class = "battery";
|
||||||
|
icon_size = 0;
|
||||||
|
format = "{percentage}%";
|
||||||
|
thresholds = {
|
||||||
|
warning = 20;
|
||||||
|
critical = 5;
|
||||||
|
};
|
||||||
|
})
|
||||||
|
{
|
||||||
|
class = "music";
|
||||||
|
type = "music";
|
||||||
|
format = "";
|
||||||
|
truncate = {
|
||||||
|
mode = "end";
|
||||||
|
max_length = 0;
|
||||||
|
};
|
||||||
|
icons = {
|
||||||
|
play = "";
|
||||||
|
pause = "";
|
||||||
|
};
|
||||||
|
truncate_popup_title = {
|
||||||
|
mode = "end";
|
||||||
|
max_length = 15;
|
||||||
|
};
|
||||||
|
truncate_popup_album = {
|
||||||
|
mode = "end";
|
||||||
|
max_length = 15;
|
||||||
|
};
|
||||||
|
truncate_popup_artist = {
|
||||||
|
mode = "end";
|
||||||
|
max_length = 15;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
bar = [
|
||||||
|
{
|
||||||
|
class = "popup-button";
|
||||||
|
label = "";
|
||||||
|
on_click = "popup:toggle";
|
||||||
|
type = "button";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
class = "popup-button-box";
|
||||||
|
popup = [
|
||||||
|
{
|
||||||
|
class = "audio-box";
|
||||||
|
orientation = "vertical";
|
||||||
|
type = "box";
|
||||||
|
widgets = [
|
||||||
|
{
|
||||||
|
class = "audio-button-box";
|
||||||
|
orientation = "horizontal";
|
||||||
|
type = "box";
|
||||||
|
widgets = [
|
||||||
|
{
|
||||||
|
class = "audio-button";
|
||||||
|
label = "";
|
||||||
|
on_click = "!audioControl bluetooth";
|
||||||
|
type = "button";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
class = "audio-button";
|
||||||
|
label = "";
|
||||||
|
on_click = "!audioControl internal";
|
||||||
|
type = "button";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
class = "audio-label";
|
||||||
|
label = "Output";
|
||||||
|
type = "label";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
class = "audio-slider";
|
||||||
|
length = 200;
|
||||||
|
on_change = "!pactl set-sink-volume @DEFAULT_SINK@ $0%";
|
||||||
|
step = 1.0;
|
||||||
|
type = "slider";
|
||||||
|
value = "pactl get-sink-volume @DEFAULT_SINK@ | awk -F'/' '{ print $2 }' | tr -d ' %'";
|
||||||
|
label = "{{pactl get-sink-volume @DEFAULT_SINK@ | awk -F'/' '{ print $2 }'}}";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
class = "audio-label";
|
||||||
|
label = "Input";
|
||||||
|
type = "label";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
class = "audio-slider";
|
||||||
|
length = 200;
|
||||||
|
on_change = "!pactl set-source-volume @DEFAULT_SOURCE@ $0%";
|
||||||
|
step = 1.0;
|
||||||
|
type = "slider";
|
||||||
|
value = "pactl get-source-volume @DEFAULT_SOURCE@ | awk -F'/' '{ print $2 }' | tr -d ' %'";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
type = "custom";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
bar = [
|
||||||
|
{
|
||||||
|
class = "popup-button";
|
||||||
|
label = "";
|
||||||
|
on_click = "!oxidash";
|
||||||
|
type = "button";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
class = "popup-button-box";
|
||||||
|
type = "custom";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
bar = [
|
||||||
|
{
|
||||||
|
class = "popup-button";
|
||||||
|
label = "";
|
||||||
|
on_click = "popup:toggle";
|
||||||
|
type = "button";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
type = "custom";
|
||||||
|
class = "popup-button-box";
|
||||||
|
popup = [
|
||||||
|
{
|
||||||
|
class = "system-box";
|
||||||
|
type = "box";
|
||||||
|
widgets = [
|
||||||
|
{
|
||||||
|
class = "memory-usage";
|
||||||
|
format = [
|
||||||
|
" {cpu_percent}%"
|
||||||
|
" {memory_used} / {memory_total} GB ({memory_percent}%)"
|
||||||
|
" {swap_used} / {swap_total} GB ({swap_free} | {swap_percent}%)"
|
||||||
|
" {uptime}"
|
||||||
|
];
|
||||||
|
direction = "vertical";
|
||||||
|
interval = {
|
||||||
|
memory = 30;
|
||||||
|
cpu = 5;
|
||||||
|
temps = 5;
|
||||||
|
disks = 5;
|
||||||
|
network = 5;
|
||||||
|
};
|
||||||
|
type = "sys_info";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
type = "tray";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
position = "top";
|
||||||
|
height = 10;
|
||||||
|
anchor_to_edges = true;
|
||||||
|
start = [
|
||||||
|
{
|
||||||
|
type = "workspaces";
|
||||||
|
all_monitors = true;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
center = [
|
||||||
|
{
|
||||||
|
format = "%I:%M";
|
||||||
|
format_popup = "%a %d:%m/%I:%M %p";
|
||||||
|
locale = "en_US";
|
||||||
|
type = "clock";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
monitorConfig = useBatteryModule:
|
||||||
|
if config.mods.ironbar.ironbarSingleMonitor
|
||||||
|
then {
|
||||||
|
monitors.${
|
||||||
|
if config.mods.wm.monitors != []
|
||||||
|
then (builtins.elemAt config.mods.wm.monitors 0).name
|
||||||
|
else ""
|
||||||
|
} =
|
||||||
|
ironbarDefaultConfig useBatteryModule;
|
||||||
|
}
|
||||||
|
else ironbarDefaultConfig useBatteryModule;
|
||||||
|
in {
|
||||||
|
options.mods = {
|
||||||
|
ironbar = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = false;
|
||||||
|
example = true;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Enables ironbar";
|
||||||
|
};
|
||||||
|
ironbarSingleMonitor = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = ''
|
||||||
|
Whether to use ironbar on a single monitor.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
useDefaultConfig = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = ''
|
||||||
|
Use preconfigured ironbar config.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
useBatteryModule = lib.mkOption {
|
||||||
|
default = false;
|
||||||
|
example = true;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Whether to use the preconfigured battery module.";
|
||||||
|
};
|
||||||
|
customConfig = lib.mkOption {
|
||||||
|
default = {};
|
||||||
|
example = {};
|
||||||
|
type = with lib.types; attrsOf anything;
|
||||||
|
description = ''
|
||||||
|
Custom ironbar configuration.
|
||||||
|
Will be merged with default configuration if enabled.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
useDefaultCss = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = ''
|
||||||
|
Use preconfigured ironbar css.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
customCss = lib.mkOption {
|
||||||
|
default = '''';
|
||||||
|
example = ''
|
||||||
|
#window {
|
||||||
|
border-radius: none;
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
type = lib.types.lines;
|
||||||
|
description = ''
|
||||||
|
Custom ironbar css.
|
||||||
|
Will be merged with default css if enabled.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
config = lib.mkIf (config.mods.ironbar.enable || config.mods.hypr.hyprland.useIronbar) (
|
||||||
|
lib.optionalAttrs (options ? programs.ironbar) {
|
||||||
|
programs.ironbar = {
|
||||||
|
package = mkDashDefault pkgs.ironbar;
|
||||||
|
enable = true;
|
||||||
|
style =
|
||||||
|
if config.mods.ironbar.useDefaultCss
|
||||||
|
then
|
||||||
|
/*
|
||||||
|
css
|
||||||
|
*/
|
||||||
|
''
|
||||||
|
@import url("/home/${username}/.config/gtk-3.0/gtk.css");
|
||||||
|
|
||||||
|
@define-color primary #${scheme.base0D};
|
||||||
|
@define-color warning #${scheme.base0F};
|
||||||
|
@define-color muted-text #${scheme.base05};
|
||||||
|
@define-color background #${scheme.base00};
|
||||||
|
@define-color secondary-background #${scheme.base02};
|
||||||
|
|
||||||
|
* slider {
|
||||||
|
background-color: @muted-text;
|
||||||
|
}
|
||||||
|
|
||||||
|
* {
|
||||||
|
transition:
|
||||||
|
background-color 0.15s ease-in-out,
|
||||||
|
color 0.15s ease-in-out,
|
||||||
|
border-color 0.15s ease-in-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
.background {
|
||||||
|
background-color: rgba(0, 0, 0, 0);
|
||||||
|
padding: 0px;
|
||||||
|
margin: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.focused {
|
||||||
|
padding: 0px 5px;
|
||||||
|
background-color: @background;
|
||||||
|
font-size: 17px;
|
||||||
|
border-radius: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#bar #end {
|
||||||
|
margin: 0px 5px;
|
||||||
|
padding: 0px 5px;
|
||||||
|
background-color: @background;
|
||||||
|
border-radius: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.popup-button {
|
||||||
|
padding: 0px 5px 0px 2px;
|
||||||
|
border-radius: 100%;
|
||||||
|
font-size: 13px;
|
||||||
|
background-color: @background;
|
||||||
|
}
|
||||||
|
|
||||||
|
.popup-button-box {
|
||||||
|
padding: 2px 0px;
|
||||||
|
margin-right: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom button {
|
||||||
|
background-color: @background;
|
||||||
|
color: @primary;
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom button:hover {
|
||||||
|
background-color: @secondary-background;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* audio */
|
||||||
|
.audio-box * {
|
||||||
|
color: @primary;
|
||||||
|
}
|
||||||
|
|
||||||
|
.audio-box {
|
||||||
|
padding: 2em;
|
||||||
|
background-color: @background;
|
||||||
|
border-radius: 5px;
|
||||||
|
border: 1px solid @primary;
|
||||||
|
}
|
||||||
|
|
||||||
|
.audio-slider {
|
||||||
|
padding: 5px;
|
||||||
|
margin: 5px 5px 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.audio-label {
|
||||||
|
font-size: 19px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.audio-button {
|
||||||
|
padding: 10px 10px 10px 8px;
|
||||||
|
min-height: 35px;
|
||||||
|
min-width: 35px;
|
||||||
|
margin: 0px 1em;
|
||||||
|
border-radius: 50%;
|
||||||
|
font-size: 25px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.audio-button-box {
|
||||||
|
padding: 0px 2.5em 0px 2.5em;
|
||||||
|
margin: 0em 0em 1.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* clock */
|
||||||
|
.clock {
|
||||||
|
padding: 0px 5px;
|
||||||
|
font-size: 20px;
|
||||||
|
border-radius: 5px;
|
||||||
|
background-color: @background;
|
||||||
|
color: @primary;
|
||||||
|
}
|
||||||
|
|
||||||
|
.clock:hover {
|
||||||
|
background-color: @secondary-background;
|
||||||
|
}
|
||||||
|
|
||||||
|
.popup-clock {
|
||||||
|
font-size: 2.5em;
|
||||||
|
background-color: @background;
|
||||||
|
border: 1px solid @primary;
|
||||||
|
padding: 0.5em;
|
||||||
|
border-radius: 8px;
|
||||||
|
color: @primary;
|
||||||
|
}
|
||||||
|
|
||||||
|
.popup-clock .calendar-clock {
|
||||||
|
margin: 0.25em 0em 0.75em;
|
||||||
|
color: @primary;
|
||||||
|
}
|
||||||
|
|
||||||
|
.popup-clock .calendar {
|
||||||
|
font-size: 24px;
|
||||||
|
color: @primary;
|
||||||
|
}
|
||||||
|
|
||||||
|
.popup-clock .calendar:selected {
|
||||||
|
background-color: @secondary-background;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* workspaces */
|
||||||
|
.workspaces {
|
||||||
|
margin: 0px 0px 0px 5px;
|
||||||
|
border-radius: 10px;
|
||||||
|
background-color: @background;
|
||||||
|
padding: 2px 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspaces .item {
|
||||||
|
margin: 0px 3px;
|
||||||
|
font-size: 13px;
|
||||||
|
border-radius: 100%;
|
||||||
|
padding: 0px 3px 0px 3px;
|
||||||
|
background-color: rgba(0, 0, 0, 0);
|
||||||
|
color: @primary;
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspaces .item:hover {
|
||||||
|
background-color: @secondary-background;
|
||||||
|
color: @primary;
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspaces .item:not(.visible) {
|
||||||
|
color: @warning;
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspaces .item.focused {
|
||||||
|
background-color: @primary;
|
||||||
|
color: @background;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* battery */
|
||||||
|
.battery {
|
||||||
|
font-size: 13px;
|
||||||
|
padding: 0px 4px 0px 0px;
|
||||||
|
margin: 2px 0px 2px 0px;
|
||||||
|
background-color: @background;
|
||||||
|
color: @primary;
|
||||||
|
}
|
||||||
|
|
||||||
|
.battery .icon {
|
||||||
|
opacity: 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.battery .label {
|
||||||
|
margin: 2px 0px 0px -8px;
|
||||||
|
color: @primary;
|
||||||
|
}
|
||||||
|
|
||||||
|
.battery:hover {
|
||||||
|
background-color: @secondary-background;
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.popup-battery {
|
||||||
|
background-color: @background;
|
||||||
|
color: @primary;
|
||||||
|
border-radius: 8px;
|
||||||
|
border: 1px solid @primary;
|
||||||
|
padding: 16px;
|
||||||
|
font-size: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* music */
|
||||||
|
.music {
|
||||||
|
font-size: 13px;
|
||||||
|
padding: 0px 4px 0px 3px;
|
||||||
|
margin: 2px 0px 2px 0px;
|
||||||
|
background-color: @background;
|
||||||
|
color: @primary;
|
||||||
|
}
|
||||||
|
|
||||||
|
.music:hover {
|
||||||
|
background-color: @secondary-background;
|
||||||
|
border-radius: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.music .contents .icon {
|
||||||
|
margin: 0px 0px 0px 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.popup-music {
|
||||||
|
background-color: @background;
|
||||||
|
color: @primary;
|
||||||
|
border-radius: 8px;
|
||||||
|
border: 1px solid @primary;
|
||||||
|
padding: 16px;
|
||||||
|
font-size: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.popup-music .controls .btn-prev {
|
||||||
|
color: @primary;
|
||||||
|
margin-right: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.popup-music .controls .btn-next {
|
||||||
|
color: @primary;
|
||||||
|
margin-right: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.popup-music .controls .btn-play {
|
||||||
|
color: @primary;
|
||||||
|
margin-right: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.popup-music .controls .btn-pause {
|
||||||
|
color: @primary;
|
||||||
|
margin-right: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* system */
|
||||||
|
.system-box {
|
||||||
|
padding: 16px;
|
||||||
|
color: @primary;
|
||||||
|
border: 1px solid @primary;
|
||||||
|
background-color: @background;
|
||||||
|
border-radius: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.memory-usage {
|
||||||
|
font-size: 15px;
|
||||||
|
color: @primary;
|
||||||
|
}
|
||||||
|
|
||||||
|
.memory-usage:hover {
|
||||||
|
background-color: @secondary-background;
|
||||||
|
}
|
||||||
|
''
|
||||||
|
+ config.mods.ironbar.customCss
|
||||||
|
else config.mods.ironbar.customCss;
|
||||||
|
features = [
|
||||||
|
#"another_feature"
|
||||||
|
];
|
||||||
|
config =
|
||||||
|
if config.mods.ironbar.useDefaultConfig
|
||||||
|
then
|
||||||
|
lib.mkMerge
|
||||||
|
[
|
||||||
|
(monitorConfig config.mods.ironbar.useBatteryModule)
|
||||||
|
config.mods.ironbar.customConfig
|
||||||
|
]
|
||||||
|
else config.mods.ironbar.customConfig;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
22
modules/programs/kde.nix
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
options,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
options.mods.kde = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = false;
|
||||||
|
example = true;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Enables the KDE desktop environment";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.mkIf config.mods.kde.enable (
|
||||||
|
lib.optionalAttrs (options ? services.desktopManager.plasma6) {
|
||||||
|
# apparently kde integration is bad -> kdeconfig is too much even for nix, can't blame them :)
|
||||||
|
services.desktopManager.plasma6.enable = true;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
42
modules/programs/kdeConnect.nix
Normal file
|
|
@ -0,0 +1,42 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
options,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
options.mods = {
|
||||||
|
kdeConnect.enable = lib.mkOption {
|
||||||
|
default = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
example = true;
|
||||||
|
description = ''
|
||||||
|
Enables kde_connect.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.mkIf config.mods.kdeConnect.enable (
|
||||||
|
lib.optionalAttrs (options ? networking.firewall) {
|
||||||
|
networking.firewall = {
|
||||||
|
allowedTCPPortRanges = [
|
||||||
|
{
|
||||||
|
from = 1714;
|
||||||
|
to = 1764;
|
||||||
|
}
|
||||||
|
# KDE Connect
|
||||||
|
];
|
||||||
|
allowedUDPPortRanges = [
|
||||||
|
{
|
||||||
|
from = 1714;
|
||||||
|
to = 1764;
|
||||||
|
}
|
||||||
|
# KDE Connect
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
// lib.optionalAttrs (options ? home.packages) {
|
||||||
|
home.packages = with pkgs; [kdePackages.kdeconnect-kde];
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
75
modules/programs/keepassxc.nix
Normal file
|
|
@ -0,0 +1,75 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
options,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
options.mods.keepassxc = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Enables the piper program and its daemon";
|
||||||
|
};
|
||||||
|
useConfig = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Whether to overwrite the config of keepassxc. Note, this means that changes can't be applied via the program anymore!";
|
||||||
|
};
|
||||||
|
config = lib.mkOption {
|
||||||
|
default = ''
|
||||||
|
[General]
|
||||||
|
ConfigVersion=2
|
||||||
|
|
||||||
|
[Browser]
|
||||||
|
Enabled=true
|
||||||
|
|
||||||
|
[GUI]
|
||||||
|
ApplicationTheme=classic
|
||||||
|
HidePasswords=true
|
||||||
|
MinimizeOnClose=true
|
||||||
|
MinimizeToTray=true
|
||||||
|
ShowTrayIcon=true
|
||||||
|
TrayIconAppearance=monochrome-light
|
||||||
|
|
||||||
|
[PasswordGenerator]
|
||||||
|
Length=30
|
||||||
|
|
||||||
|
[Security]
|
||||||
|
EnableCopyOnDoubleClick=true
|
||||||
|
'';
|
||||||
|
example = "";
|
||||||
|
type = lib.types.lines;
|
||||||
|
description = "Cache config to be used.";
|
||||||
|
};
|
||||||
|
useCacheConfig = lib.mkOption {
|
||||||
|
default = false;
|
||||||
|
example = true;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Whether to overwrite the cache config of keepassxc. Note, this means that changes can't be applied via the program anymore!";
|
||||||
|
};
|
||||||
|
cacheConfig = lib.mkOption {
|
||||||
|
default = '''';
|
||||||
|
example = ''
|
||||||
|
[General]
|
||||||
|
LastDatabases=/path/to/database
|
||||||
|
'';
|
||||||
|
type = lib.types.lines;
|
||||||
|
description = "Cache config to be used.";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
config = lib.mkIf config.mods.keepassxc.enable (
|
||||||
|
lib.optionalAttrs (options ? home.file) {
|
||||||
|
home.packages = [pkgs.keepassxc];
|
||||||
|
xdg.configFile."keepassxc/keepassxc.ini" = lib.mkIf config.mods.keepassxc.useConfig {
|
||||||
|
text = config.mods.keepassxc.config;
|
||||||
|
};
|
||||||
|
|
||||||
|
home.file.".cache/keepassxc/keepassxc.ini" = lib.mkIf config.mods.keepassxc.useCacheConfig {
|
||||||
|
text = config.mods.keepassxc.cacheConfig;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
129
modules/programs/kitty.nix
Normal file
|
|
@ -0,0 +1,129 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
options,
|
||||||
|
pkgs,
|
||||||
|
inputs,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
base16 = pkgs.callPackage inputs.base16.lib {};
|
||||||
|
scheme = base16.mkSchemeAttrs config.stylix.base16Scheme;
|
||||||
|
hexTable = {
|
||||||
|
"0" = "1";
|
||||||
|
"1" = "0";
|
||||||
|
"2" = "1";
|
||||||
|
"3" = "2";
|
||||||
|
"4" = "3";
|
||||||
|
"5" = "4";
|
||||||
|
"6" = "5";
|
||||||
|
"7" = "6";
|
||||||
|
"8" = "7";
|
||||||
|
"9" = "8";
|
||||||
|
"a" = "9";
|
||||||
|
"b" = "a";
|
||||||
|
"c" = "b";
|
||||||
|
"d" = "c";
|
||||||
|
"e" = "d";
|
||||||
|
"f" = "e";
|
||||||
|
};
|
||||||
|
# don't ask :)
|
||||||
|
base =
|
||||||
|
"#"
|
||||||
|
+ lib.strings.concatStrings (
|
||||||
|
(lib.lists.take 5 (lib.strings.stringToCharacters scheme.base00))
|
||||||
|
++ [hexTable."${(lib.lists.last (lib.strings.stringToCharacters scheme.base00))}"]
|
||||||
|
);
|
||||||
|
in {
|
||||||
|
options.mods.kitty = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Enables kitty";
|
||||||
|
};
|
||||||
|
useDefaultConfig = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Enable default config for kitty";
|
||||||
|
};
|
||||||
|
additionalConfig = lib.mkOption {
|
||||||
|
default = {};
|
||||||
|
example = {
|
||||||
|
# for the insane people out there :P
|
||||||
|
enable_audio_bell = "yes";
|
||||||
|
};
|
||||||
|
type = with lib.types; attrsOf anything;
|
||||||
|
description = "Additional kitty configuration. Will be the only configuration if useDefaultConfig is disabled.";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
config = lib.mkIf config.mods.kitty.enable (
|
||||||
|
lib.optionalAttrs (options ? home.packages) {
|
||||||
|
stylix.targets.kitty = {
|
||||||
|
enable = false;
|
||||||
|
};
|
||||||
|
programs.kitty = {
|
||||||
|
enable = true;
|
||||||
|
settings =
|
||||||
|
if config.mods.kitty.useDefaultConfig
|
||||||
|
then
|
||||||
|
{
|
||||||
|
enable_audio_bell = "no";
|
||||||
|
window_alert_on_bell = "no";
|
||||||
|
cursor_blink_interval = "0";
|
||||||
|
window_padding_width = "1";
|
||||||
|
shell_integration = "yes";
|
||||||
|
sync_with_monitor = "no";
|
||||||
|
background_opacity = "0.8";
|
||||||
|
|
||||||
|
font_family = "${config.mods.stylix.fonts.monospace.name}";
|
||||||
|
bold_font = "${config.mods.stylix.fonts.monospace.name} Extra Bold";
|
||||||
|
italic_font = "${config.mods.stylix.fonts.monospace.name} Extra Italic";
|
||||||
|
bold_italic_font = "${config.mods.stylix.fonts.monospace.name} Extra Bold Italic";
|
||||||
|
|
||||||
|
background = base;
|
||||||
|
foreground = "#" + scheme.base05;
|
||||||
|
selection_foreground = "#" + scheme.base05;
|
||||||
|
selection_background = base;
|
||||||
|
url_color = "#" + scheme.base04;
|
||||||
|
cursor = "#" + scheme.base05;
|
||||||
|
active_border_color = "#" + scheme.base03;
|
||||||
|
inactive_border_color = "#" + scheme.base01;
|
||||||
|
active_tab_background = base;
|
||||||
|
active_tab_foreground = "#" + scheme.base05;
|
||||||
|
inactive_tab_background = "#" + scheme.base01;
|
||||||
|
inactive_tab_foreground = "#" + scheme.base04;
|
||||||
|
tab_bar_background = "#" + scheme.base01;
|
||||||
|
|
||||||
|
mark1_foreground = "#" + scheme.base00;
|
||||||
|
mark1_background = "#" + scheme.base07;
|
||||||
|
mark2_foreground = "#" + scheme.base00;
|
||||||
|
mark2_background = "#" + scheme.base0E;
|
||||||
|
mark3_foreground = "#" + scheme.base00;
|
||||||
|
mark3_background = "#" + scheme.base08;
|
||||||
|
|
||||||
|
color0 = "#" + scheme.base03;
|
||||||
|
color1 = "#" + scheme.base08;
|
||||||
|
color2 = "#" + scheme.base0B;
|
||||||
|
color3 = "#" + scheme.base0A;
|
||||||
|
color4 = "#" + scheme.base0D;
|
||||||
|
color5 = "#" + scheme.base06;
|
||||||
|
color6 = "#" + scheme.base0C;
|
||||||
|
color7 = "#" + scheme.base07;
|
||||||
|
|
||||||
|
color8 = "#" + scheme.base04;
|
||||||
|
color9 = "#" + scheme.base08;
|
||||||
|
color10 = "#" + scheme.base0B;
|
||||||
|
color11 = "#" + scheme.base0A;
|
||||||
|
color12 = "#" + scheme.base0D;
|
||||||
|
color13 = "#" + scheme.base06;
|
||||||
|
color14 = "#" + scheme.base0C;
|
||||||
|
color15 = "#" + scheme.base0B;
|
||||||
|
shell = lib.mkIf config.mods.fish.enable "fish";
|
||||||
|
}
|
||||||
|
// config.mods.kitty.additionalConfig
|
||||||
|
else config.mods.kitty.additionalConfig;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
123
modules/programs/media.nix
Normal file
|
|
@ -0,0 +1,123 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
options,
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
options.mods.media = {
|
||||||
|
useBasePackages = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Default media packages (If disabled, only the additional packages will be installed)";
|
||||||
|
};
|
||||||
|
additionalPackages = lib.mkOption {
|
||||||
|
default = [];
|
||||||
|
example = [pkgs.flatpak];
|
||||||
|
type = with lib.types; listOf package;
|
||||||
|
description = ''
|
||||||
|
Additional media packages.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
specialPrograms = lib.mkOption {
|
||||||
|
default = {};
|
||||||
|
example = {};
|
||||||
|
type = with lib.types; attrsOf anything;
|
||||||
|
description = ''
|
||||||
|
special program configuration to be added which require programs.something notation.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
specialServices = lib.mkOption {
|
||||||
|
default = {};
|
||||||
|
example = {};
|
||||||
|
type = with lib.types; attrsOf anything;
|
||||||
|
description = ''
|
||||||
|
special services configuration to be added which require an services.something notation.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
filePickerPortal = lib.mkOption {
|
||||||
|
default = "Term";
|
||||||
|
example = "Gnome";
|
||||||
|
type = with lib.types; oneOf [(enum ["Gnome" "Kde" "Lxqt" "Gtk" "Term" "Default"]) str];
|
||||||
|
description = ''
|
||||||
|
The file picker portal to use (set with shana).
|
||||||
|
Default removes the config, allowing you to set it yourself.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
termFileChooserConfig = lib.mkOption {
|
||||||
|
default = {
|
||||||
|
cmd = "${pkgs.xdg-desktop-portal-termfilechooser}/share/xdg-desktop-portal-termfilechooser/yazi-wrapper.sh";
|
||||||
|
default_dir = "$HOME";
|
||||||
|
};
|
||||||
|
example = {};
|
||||||
|
type = with lib.types; attrsOf anything;
|
||||||
|
description = ''
|
||||||
|
Termfilechooser config
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
config = lib.optionalAttrs (options ? home.packages) {
|
||||||
|
xdg.configFile."xdg-desktop-portal-termfilechooser/config" = lib.mkIf (config.mods.media.filePickerPortal != "Term") {
|
||||||
|
source = (pkgs.formats.ini {}).generate "termchooser" {
|
||||||
|
filechooser = config.mods.media.termFileChooserConfig;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
xdg.configFile."xdg-desktop-portal-shana/config.toml" = lib.mkIf (config.mods.media.filePickerPortal != "Default") {
|
||||||
|
source = let
|
||||||
|
name =
|
||||||
|
if (config.mods.media.filePickerPortal == "Term")
|
||||||
|
then "org.freedesktop.impl.portal.desktop.termfilechooser"
|
||||||
|
else config.mods.media.filePickerPortal;
|
||||||
|
in
|
||||||
|
(pkgs.formats.toml {}).generate "shana" {
|
||||||
|
open_file = name;
|
||||||
|
save_file = name;
|
||||||
|
save_files = name;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
home.packages =
|
||||||
|
if config.mods.media.useBasePackages
|
||||||
|
then
|
||||||
|
with pkgs;
|
||||||
|
[
|
||||||
|
# base audio
|
||||||
|
pipewire
|
||||||
|
wireplumber
|
||||||
|
# audio control
|
||||||
|
playerctl
|
||||||
|
# images
|
||||||
|
eog
|
||||||
|
# videos
|
||||||
|
mpv
|
||||||
|
# pdf
|
||||||
|
zathura
|
||||||
|
evince
|
||||||
|
libreoffice-fresh
|
||||||
|
onlyoffice-desktopeditors
|
||||||
|
pdftk
|
||||||
|
pdfpc
|
||||||
|
polylux2pdfpc
|
||||||
|
# spotify
|
||||||
|
# video editing
|
||||||
|
kdePackages.kdenlive
|
||||||
|
# image creation
|
||||||
|
inkscape
|
||||||
|
gimp
|
||||||
|
krita
|
||||||
|
yt-dlp
|
||||||
|
]
|
||||||
|
++ config.mods.media.additionalPackages
|
||||||
|
else config.mods.media.additionalPackages;
|
||||||
|
programs =
|
||||||
|
if config.mods.media.useBasePackages
|
||||||
|
then
|
||||||
|
{
|
||||||
|
obs-studio.enable = true;
|
||||||
|
obs-studio.plugins = with pkgs; [obs-studio-plugins.obs-vaapi];
|
||||||
|
}
|
||||||
|
// config.mods.media.specialPrograms
|
||||||
|
else config.mods.media.specialPrograms;
|
||||||
|
services = config.mods.media.specialServices;
|
||||||
|
};
|
||||||
|
}
|
||||||
161
modules/programs/mime.nix
Normal file
|
|
@ -0,0 +1,161 @@
|
||||||
|
# Copyright (c) 2020-2021 Mihai Fufezan
|
||||||
|
# credits to fufexan https://github.com/fufexan/dotfiles/blob/main/home/terminal/programs/xdg.nix
|
||||||
|
{
|
||||||
|
mkDashDefault,
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
options,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
browserName =
|
||||||
|
if (builtins.isString config.mods.homePackages.browser)
|
||||||
|
then config.mods.homePackages.browser
|
||||||
|
else if config.mods.homePackages.browser ? meta && config.mods.homePackages.browser.meta ? mainProgram
|
||||||
|
then config.mods.homePackages.browser.meta.mainProgram
|
||||||
|
else config.mods.homePackages.browser.pname;
|
||||||
|
in {
|
||||||
|
options.mods.mime = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Enables mime handling with nix";
|
||||||
|
};
|
||||||
|
imageTypes = lib.mkOption {
|
||||||
|
default = [
|
||||||
|
"png"
|
||||||
|
"svg"
|
||||||
|
"jpeg"
|
||||||
|
"gif"
|
||||||
|
];
|
||||||
|
example = [];
|
||||||
|
type = with lib.types; listOf str;
|
||||||
|
description = "Image mime handlers";
|
||||||
|
};
|
||||||
|
videoTypes = lib.mkOption {
|
||||||
|
default = [
|
||||||
|
"mp4"
|
||||||
|
"avi"
|
||||||
|
"mkv"
|
||||||
|
];
|
||||||
|
example = [];
|
||||||
|
type = with lib.types; listOf str;
|
||||||
|
description = "Video mime handlers";
|
||||||
|
};
|
||||||
|
audioTypes = lib.mkOption {
|
||||||
|
default = [
|
||||||
|
"mp3"
|
||||||
|
"flac"
|
||||||
|
"wav"
|
||||||
|
"aac"
|
||||||
|
];
|
||||||
|
example = [];
|
||||||
|
type = with lib.types; listOf str;
|
||||||
|
description = "Audio mime handlers";
|
||||||
|
};
|
||||||
|
browserTypes = lib.mkOption {
|
||||||
|
default = [
|
||||||
|
"json"
|
||||||
|
"x-extension-htm"
|
||||||
|
"x-extension-html"
|
||||||
|
"x-extension-shtml"
|
||||||
|
"x-extension-xht"
|
||||||
|
"x-extension-xhtml"
|
||||||
|
];
|
||||||
|
example = [];
|
||||||
|
type = with lib.types; listOf str;
|
||||||
|
description = "Browser mime handlers";
|
||||||
|
};
|
||||||
|
browserXTypes = lib.mkOption {
|
||||||
|
default = [
|
||||||
|
"about"
|
||||||
|
"ftp"
|
||||||
|
"http"
|
||||||
|
"https"
|
||||||
|
"unknown"
|
||||||
|
];
|
||||||
|
example = [];
|
||||||
|
type = with lib.types; listOf str;
|
||||||
|
description = "Browser X mime handlers";
|
||||||
|
};
|
||||||
|
browserApplications = lib.mkOption {
|
||||||
|
default = ["${browserName}"];
|
||||||
|
example = [];
|
||||||
|
type = with lib.types; listOf str;
|
||||||
|
description = "Applications used for handling browser mime types";
|
||||||
|
};
|
||||||
|
imageApplications = lib.mkOption {
|
||||||
|
default = ["eog"];
|
||||||
|
example = [];
|
||||||
|
type = with lib.types; listOf str;
|
||||||
|
description = "Applications used for handling image mime types";
|
||||||
|
};
|
||||||
|
videoApplications = lib.mkOption {
|
||||||
|
default = ["mpv"];
|
||||||
|
example = [];
|
||||||
|
type = with lib.types; listOf str;
|
||||||
|
description = "Applications used for handling video mime types";
|
||||||
|
};
|
||||||
|
audioApplications = lib.mkOption {
|
||||||
|
default = ["io.bassi.Amberol"];
|
||||||
|
example = [];
|
||||||
|
type = with lib.types; listOf str;
|
||||||
|
description = "Applications used for handling audio mime types";
|
||||||
|
};
|
||||||
|
# TODO additional config
|
||||||
|
};
|
||||||
|
config = lib.optionalAttrs (options ? home) {
|
||||||
|
xdg = let
|
||||||
|
xdgAssociations = type: program: list:
|
||||||
|
builtins.listToAttrs (
|
||||||
|
map (e: {
|
||||||
|
name = "${type}/${e}";
|
||||||
|
value = program;
|
||||||
|
})
|
||||||
|
list
|
||||||
|
);
|
||||||
|
|
||||||
|
imageAc = xdgAssociations "image" config.mods.mime.imageApplications config.mods.mime.imageTypes;
|
||||||
|
videoAc = xdgAssociations "video" config.mods.mime.videoApplications config.mods.mime.videoTypes;
|
||||||
|
audioAc = xdgAssociations "audio" config.mods.mime.audioApplications config.mods.mime.audioTypes;
|
||||||
|
browserAc =
|
||||||
|
(xdgAssociations "application" config.mods.mime.browserApplications config.mods.mime.browserTypes)
|
||||||
|
// (
|
||||||
|
xdgAssociations "x-scheme-handler" config.mods.mime.browserApplications
|
||||||
|
config.mods.mime.browserXTypes
|
||||||
|
);
|
||||||
|
associations = builtins.mapAttrs (_: v: (map (e: "${e}.desktop") v)) (
|
||||||
|
# TODO make configurable
|
||||||
|
{
|
||||||
|
"application/pdf" = ["org.pwmt.zathura-pdf-mupdf"];
|
||||||
|
"text/html" = config.mods.mime.browserApplications;
|
||||||
|
"text/plain" = ["neovide"];
|
||||||
|
"x-scheme-handler/chrome" = ["com.brave.browser"];
|
||||||
|
"inode/directory" = ["yazi"];
|
||||||
|
}
|
||||||
|
// imageAc
|
||||||
|
// audioAc
|
||||||
|
// videoAc
|
||||||
|
// browserAc
|
||||||
|
);
|
||||||
|
in
|
||||||
|
lib.mkIf config.mods.mime.enable {
|
||||||
|
enable = true;
|
||||||
|
cacheHome = config.home.homeDirectory + "/.local/cache";
|
||||||
|
|
||||||
|
mimeApps = {
|
||||||
|
enable = true;
|
||||||
|
defaultApplications = associations;
|
||||||
|
};
|
||||||
|
|
||||||
|
userDirs = {
|
||||||
|
enable = mkDashDefault true;
|
||||||
|
createDirectories = mkDashDefault true;
|
||||||
|
extraConfig = {
|
||||||
|
XDG_SCREENSHOTS_DIR = mkDashDefault "${config.xdg.userDirs.pictures}/Screenshots";
|
||||||
|
pws = mkDashDefault "${config.home.homeDirectory}/pws";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
64
modules/programs/ncspot.nix
Normal file
|
|
@ -0,0 +1,64 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
options,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
options.mods.ncspot = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = false;
|
||||||
|
example = true;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Enables ncspot with a config";
|
||||||
|
};
|
||||||
|
config = lib.mkOption {
|
||||||
|
default = {
|
||||||
|
notify = true;
|
||||||
|
shuffle = true;
|
||||||
|
cover_max_scale = 2;
|
||||||
|
initial_screen = "library";
|
||||||
|
library_tabs = ["playlists"];
|
||||||
|
theme = {
|
||||||
|
background = "#1a1b26";
|
||||||
|
primary = "#9aa5ce";
|
||||||
|
secondary = "#414868";
|
||||||
|
title = "#9ece6a";
|
||||||
|
playing = "#7aa2f7";
|
||||||
|
playing_selected = "#bb9af7";
|
||||||
|
playing_bg = "#24283b";
|
||||||
|
highlight = "#c0caf5";
|
||||||
|
highlight_bg = "#24283b";
|
||||||
|
error = "#414868";
|
||||||
|
error_bg = "#f7768e";
|
||||||
|
statusbar = "#ff9e64";
|
||||||
|
statusbar_progress = "#7aa2f7";
|
||||||
|
statusbar_bg = "#1a1b26";
|
||||||
|
cmdline = "#c0caf5";
|
||||||
|
cmdline_bg = "#24283b";
|
||||||
|
search_match = "#f7768e";
|
||||||
|
};
|
||||||
|
keybindings = {
|
||||||
|
"j" = "move left 1";
|
||||||
|
"k" = "move down 1";
|
||||||
|
"l" = "move up 1";
|
||||||
|
";" = "move right 1";
|
||||||
|
};
|
||||||
|
notification_format = {
|
||||||
|
title = "%artists";
|
||||||
|
body = "%title";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
example = {};
|
||||||
|
type = with lib.types; attrsOf anything;
|
||||||
|
description = "config";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
config = lib.mkIf config.mods.ncspot.enable (
|
||||||
|
lib.optionalAttrs (options ? home.packages) {
|
||||||
|
home.packages = with pkgs; [ncspot];
|
||||||
|
xdg.configFile."ncspot/config.toml".source =
|
||||||
|
lib.mkIf config.mods.ncspot.useConfig (pkgs.formats.toml {}).generate "ncspot" config.mods.ncspot.config;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
38
modules/programs/nextcloud.nix
Normal file
|
|
@ -0,0 +1,38 @@
|
||||||
|
{lib, ...}: {
|
||||||
|
options.mods = {
|
||||||
|
nextcloud = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Enable nextcloud";
|
||||||
|
};
|
||||||
|
username = lib.mkOption {
|
||||||
|
default = "";
|
||||||
|
example = "globi";
|
||||||
|
type = lib.types.str;
|
||||||
|
description = "Your username";
|
||||||
|
};
|
||||||
|
url = lib.mkOption {
|
||||||
|
default = "";
|
||||||
|
example = "cloud.globi.org";
|
||||||
|
type = lib.types.str;
|
||||||
|
description = "Your url";
|
||||||
|
};
|
||||||
|
synclist = lib.mkOption {
|
||||||
|
default = [];
|
||||||
|
example = [
|
||||||
|
{
|
||||||
|
name = "sync globi folder";
|
||||||
|
remote = "globi";
|
||||||
|
local = "/home/globi";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
description = ''
|
||||||
|
A list of folders to synchronize.
|
||||||
|
This has to be an attribute list with the name, remote and local field (all strings).
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
392
modules/programs/niri.nix
Normal file
|
|
@ -0,0 +1,392 @@
|
||||||
|
{
|
||||||
|
mkDashDefault,
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
options,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
defaultWmConf = import ../../lib/wm.nix;
|
||||||
|
in {
|
||||||
|
options.mods.niri = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = ''
|
||||||
|
Enable Niri
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
useDefaultConfig = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = ''
|
||||||
|
Use preconfigured Niri config.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
customConfig = lib.mkOption {
|
||||||
|
default = '''';
|
||||||
|
example = '''';
|
||||||
|
type = lib.types.lines;
|
||||||
|
description = ''
|
||||||
|
Custom Niri configuration.
|
||||||
|
Will be merged with default configuration if enabled.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.mkIf config.mods.niri.enable (
|
||||||
|
lib.optionalAttrs (options ? wayland.windowManager.hyprland) {
|
||||||
|
# TODO deduplicate and abstract away base window management config
|
||||||
|
# install Niri related packages
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
xorg.xprop
|
||||||
|
grim
|
||||||
|
slurp
|
||||||
|
satty
|
||||||
|
xdg-desktop-portal-gtk
|
||||||
|
xdg-desktop-portal-gnome
|
||||||
|
kdePackages.xdg-desktop-portal-kde
|
||||||
|
xdg-desktop-portal-shana
|
||||||
|
copyq
|
||||||
|
wl-clipboard
|
||||||
|
|
||||||
|
niri
|
||||||
|
xwayland-satellite
|
||||||
|
];
|
||||||
|
|
||||||
|
xdg.configFile."niri/config.kdl" = let
|
||||||
|
mkNiriMod = mods:
|
||||||
|
builtins.map (mod:
|
||||||
|
if mod == "Mod"
|
||||||
|
then config.mods.wm.modKey + "+"
|
||||||
|
else "${mod}" + "+")
|
||||||
|
mods
|
||||||
|
|> lib.strings.concatStringsSep "";
|
||||||
|
mkNiriArg = args:
|
||||||
|
if args != []
|
||||||
|
then let
|
||||||
|
concatCommand = lib.strings.concatStringsSep " " args;
|
||||||
|
validCommand = builtins.replaceStrings [''"''] [''\"''] concatCommand;
|
||||||
|
in "\"${validCommand}\""
|
||||||
|
else "";
|
||||||
|
mkNiriCommand = bind: let
|
||||||
|
args = bind.args or [];
|
||||||
|
in
|
||||||
|
if bind.command == "quit"
|
||||||
|
then "quit;"
|
||||||
|
else if bind.command == "killActive"
|
||||||
|
then "close-window;"
|
||||||
|
else if bind.command == "moveFocusTop"
|
||||||
|
then "focus-window-up;"
|
||||||
|
else if bind.command == "focusWorkspace"
|
||||||
|
then "focus-workspace" + " " + mkNiriArg args + ";"
|
||||||
|
else if bind.command == "moveWindowRight"
|
||||||
|
then "move-column-right-or-to-monitor-right;"
|
||||||
|
else if bind.command == "moveWindowDown"
|
||||||
|
then "move-window-down;"
|
||||||
|
else if bind.command == "moveWindowLeft"
|
||||||
|
then "move-column-left-or-to-monitor-left;"
|
||||||
|
else if bind.command == "moveWindowUp"
|
||||||
|
then "move-window-up;"
|
||||||
|
else if bind.command == "moveFocusUp"
|
||||||
|
then "focus-window-up;"
|
||||||
|
else if bind.command == "moveFocusRight"
|
||||||
|
then "focus-column-or-monitor-right;"
|
||||||
|
else if bind.command == "moveFocusDown"
|
||||||
|
then "focus-window-down;"
|
||||||
|
else if bind.command == "moveFocusLeft"
|
||||||
|
then "focus-column-or-monitor-left;"
|
||||||
|
else if bind.command == "toggleFloating"
|
||||||
|
then "toggle-window-floating;"
|
||||||
|
else if bind.command == "toggleFullscreen"
|
||||||
|
then "fullscreen-window;"
|
||||||
|
else if bind.command == "moveToWorkspace"
|
||||||
|
then "move-window-to-workspace" + " " + mkNiriArg args + ";"
|
||||||
|
else if bind.command == "spawn"
|
||||||
|
then "spawn" + " " + mkNiriArg args + ";"
|
||||||
|
else if bind.command == "spawn-sh"
|
||||||
|
then "spawn-sh" + " " + mkNiriArg args + ";"
|
||||||
|
else if bind.command.niri != null
|
||||||
|
then bind.command.niri + " " + mkNiriArg args + ";"
|
||||||
|
else "";
|
||||||
|
|
||||||
|
mkNiriBinds = cfg:
|
||||||
|
'' binds {
|
||||||
|
''
|
||||||
|
+ (
|
||||||
|
(
|
||||||
|
builtins.map (
|
||||||
|
bind:
|
||||||
|
/*
|
||||||
|
kdl
|
||||||
|
*/
|
||||||
|
if bind ? key && bind ? command
|
||||||
|
then ''
|
||||||
|
${mkNiriMod (bind.modKeys or [])}${bind.key} ${
|
||||||
|
if
|
||||||
|
bind ? meta
|
||||||
|
&& bind.meta ? niri
|
||||||
|
then
|
||||||
|
(
|
||||||
|
if
|
||||||
|
bind.meta.niri ? desc
|
||||||
|
&& bind.meta.niri.desc != ""
|
||||||
|
then "hotkey-overlay-title=\"" + bind.meta.niri.desc + "\""
|
||||||
|
else ""
|
||||||
|
)
|
||||||
|
+ " "
|
||||||
|
+ (
|
||||||
|
if
|
||||||
|
bind.meta.niri ? repeat
|
||||||
|
&& bind.meta.niri.repeat
|
||||||
|
then "repeat=true"
|
||||||
|
else "repeat=false"
|
||||||
|
)
|
||||||
|
+ " "
|
||||||
|
+ (
|
||||||
|
if
|
||||||
|
bind.meta.niri ? allowWhileLocked
|
||||||
|
&& bind.meta.niri.allowWhileLocked
|
||||||
|
then "allow-when-locked=true"
|
||||||
|
else ""
|
||||||
|
)
|
||||||
|
+ " "
|
||||||
|
+ (
|
||||||
|
if
|
||||||
|
bind.meta.niri ? allowInhibit
|
||||||
|
&& bind.meta.niri.allowInhibit
|
||||||
|
then "allow-inhibiting=true"
|
||||||
|
else "allow-inhibiting=false"
|
||||||
|
)
|
||||||
|
else ""
|
||||||
|
} { ${
|
||||||
|
mkNiriCommand bind
|
||||||
|
} }
|
||||||
|
''
|
||||||
|
else ''''
|
||||||
|
)
|
||||||
|
((
|
||||||
|
cfg.mods.wm.binds
|
||||||
|
++ (
|
||||||
|
if cfg.mods.wm.useDefaultBinds
|
||||||
|
then defaultWmConf.defaultBinds cfg
|
||||||
|
else []
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|> builtins.filter (bind: !(hasInvalidCustomCommand bind)))
|
||||||
|
)
|
||||||
|
|> lib.strings.concatLines
|
||||||
|
)
|
||||||
|
+ ''
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
mkVrr = vrr:
|
||||||
|
if vrr
|
||||||
|
then "true"
|
||||||
|
else "false";
|
||||||
|
mkNiriMonitors = cfg:
|
||||||
|
(builtins.map (
|
||||||
|
monitor:
|
||||||
|
# TODO vrr
|
||||||
|
/*
|
||||||
|
kdl
|
||||||
|
*/
|
||||||
|
''
|
||||||
|
output "${monitor.name}" {
|
||||||
|
variable-refresh-rate on-demand=${mkVrr monitor.vrr}
|
||||||
|
mode "${builtins.toString monitor.resolutionX}x${builtins.toString monitor.resolutionY}@${builtins.toString monitor.refreshrate}"
|
||||||
|
scale ${builtins.toString monitor.scale}
|
||||||
|
transform "${
|
||||||
|
if (monitor.transform == "0")
|
||||||
|
then "normal"
|
||||||
|
else monitor.transform
|
||||||
|
}"
|
||||||
|
position x=${builtins.toString monitor.positionX} y=${builtins.toString monitor.positionY}
|
||||||
|
}
|
||||||
|
''
|
||||||
|
)
|
||||||
|
cfg.mods.wm.monitors)
|
||||||
|
|> lib.strings.concatLines;
|
||||||
|
mkNiriWorkspaces = cfg:
|
||||||
|
(builtins.map (
|
||||||
|
workspace:
|
||||||
|
/*
|
||||||
|
kdl
|
||||||
|
*/
|
||||||
|
''
|
||||||
|
workspace "${workspace.name}" {
|
||||||
|
open-on-output "${workspace.monitor}"
|
||||||
|
}
|
||||||
|
''
|
||||||
|
)
|
||||||
|
cfg.mods.wm.workspaces)
|
||||||
|
|> lib.strings.concatLines;
|
||||||
|
mkNiriWindowRules = cfg: (
|
||||||
|
(
|
||||||
|
builtins.map (
|
||||||
|
rule:
|
||||||
|
/*
|
||||||
|
kdl
|
||||||
|
*/
|
||||||
|
''
|
||||||
|
window-rule {
|
||||||
|
${rule}
|
||||||
|
}
|
||||||
|
''
|
||||||
|
)
|
||||||
|
(
|
||||||
|
cfg.mods.wm.windowRules.niri
|
||||||
|
++ (
|
||||||
|
if cfg.mods.wm.useDefaultWindowRules
|
||||||
|
then defaultWmConf.defaultWindowRules.niri
|
||||||
|
else []
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|> lib.strings.concatLines
|
||||||
|
);
|
||||||
|
hasInvalidCustomCommand = bind: !(bind ? command) || (!(builtins.isString bind.command) && bind.command.niri or null == null);
|
||||||
|
mkNiriEnv = config: let
|
||||||
|
defaultEnv =
|
||||||
|
if config.mods.wm.useDefaultEnv
|
||||||
|
then defaultWmConf.defaultEnv config
|
||||||
|
else {
|
||||||
|
all = {};
|
||||||
|
niri = {};
|
||||||
|
};
|
||||||
|
userEnv =
|
||||||
|
if config.mods.wm.env ? all
|
||||||
|
then config.mods.wm.env.all // config.mods.wm.env.niri
|
||||||
|
else config.mods.wm.env;
|
||||||
|
env =
|
||||||
|
userEnv
|
||||||
|
// defaultEnv.all
|
||||||
|
// defaultEnv.niri;
|
||||||
|
in
|
||||||
|
''
|
||||||
|
environment {
|
||||||
|
''
|
||||||
|
+ (
|
||||||
|
lib.attrsets.mapAttrsToList (
|
||||||
|
name: value: "${name} \"${value}\""
|
||||||
|
)
|
||||||
|
env
|
||||||
|
|> lib.strings.concatLines
|
||||||
|
)
|
||||||
|
+ ''
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
mkNiriAutoStart = config: let
|
||||||
|
defaultStartup =
|
||||||
|
if config.mods.wm.useDefaultStartup
|
||||||
|
then defaultWmConf.defaultStartup config
|
||||||
|
else {
|
||||||
|
all = {};
|
||||||
|
niri = {};
|
||||||
|
};
|
||||||
|
userStartup =
|
||||||
|
if config.mods.wm.startup ? all
|
||||||
|
then config.mods.wm.startup.all ++ config.mods.wm.startup.niri
|
||||||
|
else config.mods.wm.startup;
|
||||||
|
autoStart = userStartup ++ defaultStartup.all ++ defaultStartup.niri;
|
||||||
|
in
|
||||||
|
(builtins.map (value: "spawn-at-startup \"${value}\"")
|
||||||
|
autoStart)
|
||||||
|
|> lib.strings.concatLines;
|
||||||
|
defaultConfig =
|
||||||
|
/*
|
||||||
|
kdl
|
||||||
|
*/
|
||||||
|
''
|
||||||
|
input {
|
||||||
|
keyboard {
|
||||||
|
xkb {
|
||||||
|
layout "enIntUmlaut"
|
||||||
|
}
|
||||||
|
repeat-delay 200
|
||||||
|
repeat-rate 25
|
||||||
|
numlock
|
||||||
|
}
|
||||||
|
|
||||||
|
touchpad {
|
||||||
|
tap
|
||||||
|
natural-scroll
|
||||||
|
}
|
||||||
|
|
||||||
|
mouse {
|
||||||
|
accel-speed 0.2
|
||||||
|
accel-profile "flat"
|
||||||
|
}
|
||||||
|
|
||||||
|
focus-follows-mouse max-scroll-amount="25%"
|
||||||
|
}
|
||||||
|
|
||||||
|
layout {
|
||||||
|
// Set gaps around windows in logical pixels.
|
||||||
|
gaps 10
|
||||||
|
center-focused-column "never"
|
||||||
|
always-center-single-column
|
||||||
|
|
||||||
|
preset-column-widths {
|
||||||
|
proportion 0.33333
|
||||||
|
proportion 0.5
|
||||||
|
proportion 1.0
|
||||||
|
}
|
||||||
|
|
||||||
|
default-column-width { proportion 0.5; }
|
||||||
|
focus-ring {
|
||||||
|
width 3
|
||||||
|
inactive-color "#505050"
|
||||||
|
active-gradient from="#ff0000" to="#00ff00" angle=45
|
||||||
|
}
|
||||||
|
|
||||||
|
border {
|
||||||
|
off
|
||||||
|
}
|
||||||
|
|
||||||
|
// You can enable drop shadows for windows.
|
||||||
|
shadow {
|
||||||
|
on
|
||||||
|
softness 30
|
||||||
|
spread 5
|
||||||
|
offset x=0 y=5
|
||||||
|
color "#0007"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
${
|
||||||
|
if config.mods.gpu.nvidia.enable
|
||||||
|
then ''
|
||||||
|
debug {
|
||||||
|
wait-for-frame-completion-before-queueing
|
||||||
|
}
|
||||||
|
''
|
||||||
|
else ''''
|
||||||
|
}
|
||||||
|
|
||||||
|
// Autostart
|
||||||
|
|
||||||
|
hotkey-overlay {
|
||||||
|
skip-at-startup
|
||||||
|
}
|
||||||
|
|
||||||
|
prefer-no-csd
|
||||||
|
''
|
||||||
|
+ mkNiriMonitors config
|
||||||
|
+ mkNiriBinds config
|
||||||
|
+ mkNiriWorkspaces config
|
||||||
|
+ mkNiriWindowRules config
|
||||||
|
+ mkNiriEnv config
|
||||||
|
+ mkNiriAutoStart config;
|
||||||
|
in
|
||||||
|
mkDashDefault {
|
||||||
|
text =
|
||||||
|
if config.mods.niri.useDefaultConfig
|
||||||
|
then defaultConfig + config.mods.niri.customConfig
|
||||||
|
else config.mods.niri.customConfig;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
24
modules/programs/onedrive.nix
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
options,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
options.mods = {
|
||||||
|
onedrive = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = false;
|
||||||
|
example = true;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Enable onedrive program and service";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
config = lib.mkIf config.mods.onedrive.enable (
|
||||||
|
lib.optionalAttrs (options ? environment) {
|
||||||
|
services.onedrive.enable = true;
|
||||||
|
environment.systemPackages = [pkgs.onedrive];
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
81
modules/programs/oxi/default.nix
Normal file
|
|
@ -0,0 +1,81 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
options,
|
||||||
|
inputs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
imports = [
|
||||||
|
./oxidash.nix
|
||||||
|
./oxinoti.nix
|
||||||
|
./oxipaste.nix
|
||||||
|
./oxirun.nix
|
||||||
|
./oxishut.nix
|
||||||
|
];
|
||||||
|
options.mods.oxi = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Enables oxi programs";
|
||||||
|
};
|
||||||
|
ReSet = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Enables and configures ReSet";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
hyprdock = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Enables hyprdock";
|
||||||
|
};
|
||||||
|
settings = lib.mkOption {
|
||||||
|
default = {};
|
||||||
|
example = {};
|
||||||
|
type = with lib.types; attrsOf anything;
|
||||||
|
description = "settings for hyprdock";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
oxicalc = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Enables hyprdock";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
config = lib.mkIf config.mods.oxi.enable (
|
||||||
|
lib.optionalAttrs (options ? home.packages) {
|
||||||
|
programs = {
|
||||||
|
hyprdock = {
|
||||||
|
inherit (config.mods.oxi.hyprdock) enable;
|
||||||
|
inherit (config.mods.oxi.hyprdock) settings;
|
||||||
|
};
|
||||||
|
oxicalc.enable = lib.mkIf config.mods.oxi.oxicalc.enable true;
|
||||||
|
ReSet = lib.mkIf config.mods.oxi.ReSet.enable {
|
||||||
|
enable = true;
|
||||||
|
config = {
|
||||||
|
plugins = [
|
||||||
|
inputs.reset-plugins.packages."x86_64-linux".monitor
|
||||||
|
inputs.reset-plugins.packages."x86_64-linux".keyboard
|
||||||
|
];
|
||||||
|
plugin_config = {
|
||||||
|
Keyboard = {
|
||||||
|
path = "/home/${config.conf.username}/.config/reset/keyboard.conf";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
// lib.optionalAttrs (options ? services.logind && options ? services.logind.settings) {
|
||||||
|
services.logind.settings.Login.HandleLidSwitchExternalPower = "ignore";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
79
modules/programs/oxi/oxidash.nix
Normal file
|
|
@ -0,0 +1,79 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
options,
|
||||||
|
pkgs,
|
||||||
|
inputs,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
# at time of using this here, stylix might not be evaluated yet
|
||||||
|
# hence ensure it is by using base16 mkSchemeAttrs
|
||||||
|
base16 = pkgs.callPackage inputs.base16.lib {};
|
||||||
|
scheme = base16.mkSchemeAttrs config.stylix.base16Scheme;
|
||||||
|
in {
|
||||||
|
options.mods.oxi.oxidash = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Enables and configures oxidash";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
config = lib.mkIf (config.mods.oxi.oxidash.enable && config.mods.oxi.enable) (
|
||||||
|
lib.optionalAttrs (options ? xdg.configFile) {
|
||||||
|
programs.oxidash.enable = true;
|
||||||
|
xdg.configFile."oxidash/style.css" = {
|
||||||
|
text = ''
|
||||||
|
@define-color bg #${scheme.base00};
|
||||||
|
@define-color primary #${scheme.base0D};
|
||||||
|
|
||||||
|
#MainWindow {
|
||||||
|
border-radius: 10px;
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
#MainBox {
|
||||||
|
border-radius: 10px;
|
||||||
|
border: 1px solid @primary;
|
||||||
|
background-color: @bg;
|
||||||
|
}
|
||||||
|
|
||||||
|
#MainButtonBox {
|
||||||
|
padding: 10px;
|
||||||
|
margin: 5px 0px 5px 0px;
|
||||||
|
border-radius: 5px;
|
||||||
|
border: solid 1px @primary;
|
||||||
|
}
|
||||||
|
|
||||||
|
#DoNotDisturbButton {}
|
||||||
|
|
||||||
|
#ExitButton {}
|
||||||
|
|
||||||
|
#ClearNotificationsButton {}
|
||||||
|
|
||||||
|
#NotificationsWindow {}
|
||||||
|
|
||||||
|
.debugimage {
|
||||||
|
border: solid 3px @primary;
|
||||||
|
}
|
||||||
|
|
||||||
|
.Notification {
|
||||||
|
padding: 10px;
|
||||||
|
margin: 5px 0px 5px 0px;
|
||||||
|
border: solid 1px @primary;
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.CloseNotificationButton {
|
||||||
|
margin: 0px 5px 0px 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.PictureButtonBox {}
|
||||||
|
|
||||||
|
.BaseBox {}
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
129
modules/programs/oxi/oxinoti.nix
Normal file
|
|
@ -0,0 +1,129 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
options,
|
||||||
|
pkgs,
|
||||||
|
inputs,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
# at time of using this here, stylix might not be evaluated yet
|
||||||
|
# hence ensure it is by using base16 mkSchemeAttrs
|
||||||
|
base16 = pkgs.callPackage inputs.base16.lib {};
|
||||||
|
scheme = base16.mkSchemeAttrs config.stylix.base16Scheme;
|
||||||
|
in {
|
||||||
|
options.mods.oxi.oxinoti = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Enables and configures oxinoti";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
config = lib.mkIf (config.mods.oxi.oxinoti.enable && config.mods.oxi.enable) (
|
||||||
|
lib.optionalAttrs (options ? xdg.configFile) {
|
||||||
|
programs.oxinoti.enable = true;
|
||||||
|
xdg.configFile."oxinoti/style.css" = {
|
||||||
|
text =
|
||||||
|
# css
|
||||||
|
''
|
||||||
|
@import url("/home/dashie/.config/gtk-3.0/gtk.css");
|
||||||
|
|
||||||
|
@define-color bg #${scheme.base00};
|
||||||
|
@define-color bghover #${scheme.base02};
|
||||||
|
@define-color primary #${scheme.base0D};
|
||||||
|
@define-color red #${scheme.base08};
|
||||||
|
@define-color green #${scheme.base0B};
|
||||||
|
|
||||||
|
#MainWindow {
|
||||||
|
background-color: transparent;
|
||||||
|
padding: 0px;
|
||||||
|
/* opacity: 0; */
|
||||||
|
}
|
||||||
|
|
||||||
|
.MainBox {
|
||||||
|
background-color: transparent;
|
||||||
|
padding: 0px;
|
||||||
|
/* opacity: 0; */
|
||||||
|
}
|
||||||
|
|
||||||
|
.NotificationBox {
|
||||||
|
background-color: @bg;
|
||||||
|
border-radius: 5px;
|
||||||
|
border: solid 1px;
|
||||||
|
margin: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.NotificationBox button {
|
||||||
|
background-color: @bg;
|
||||||
|
}
|
||||||
|
|
||||||
|
.NotificationBox button:hover {
|
||||||
|
background-color: @bghover;
|
||||||
|
}
|
||||||
|
|
||||||
|
.NotificationLow {
|
||||||
|
border-color: @green;
|
||||||
|
}
|
||||||
|
|
||||||
|
.NotificationNormal {
|
||||||
|
border-color: @primary;
|
||||||
|
}
|
||||||
|
|
||||||
|
.NotificationUrgent {
|
||||||
|
border-color: @red;
|
||||||
|
}
|
||||||
|
|
||||||
|
.miscbox {
|
||||||
|
margin: 0px 10px 0px 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bodybox {}
|
||||||
|
|
||||||
|
.imagebox {
|
||||||
|
margin: 0px 0px 0px 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.appname {
|
||||||
|
font-size: 0.8rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.timestamp {
|
||||||
|
font-size: 0.8rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.summary {
|
||||||
|
font-size: 0.8rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.body {
|
||||||
|
font-size: 1.2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon {
|
||||||
|
font-size: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.image {}
|
||||||
|
|
||||||
|
.bold {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.italic {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.underline {
|
||||||
|
text-decoration-line: underline;
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
xdg.configFile."oxinoti/oxinoti.toml" = {
|
||||||
|
text = ''
|
||||||
|
timeout = 3
|
||||||
|
dnd_override = 2
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
48
modules/programs/oxi/oxipaste.nix
Normal file
|
|
@ -0,0 +1,48 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
options,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
options.mods.oxi.oxipaste = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Enables and configures oxipaste";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
config = lib.mkIf (config.mods.oxi.oxipaste.enable && config.mods.oxi.enable) (
|
||||||
|
lib.optionalAttrs (options ? xdg.configFile) {
|
||||||
|
programs.oxipaste.enable = true;
|
||||||
|
xdg.configFile."oxipaste/style.css" = {
|
||||||
|
text = ''
|
||||||
|
.main-window {
|
||||||
|
padding: 10px;
|
||||||
|
border-radius: 10px;
|
||||||
|
border: 2px solid #2AC3DE;
|
||||||
|
}
|
||||||
|
|
||||||
|
.item-window {
|
||||||
|
padding: 10px;
|
||||||
|
border-radius: 10px;
|
||||||
|
border: 2px solid #C0CAF5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.item-button {
|
||||||
|
background-color: #1A1B26;
|
||||||
|
border-radius: 5px;
|
||||||
|
border: 1px solid #6D728D;
|
||||||
|
}
|
||||||
|
|
||||||
|
.delete-button {
|
||||||
|
margin: 5px 25px 5px 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.item-box {
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
20
modules/programs/oxi/oxirun.nix
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
options,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
options.mods.oxi.oxirun = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Enables OxiRun";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
config = lib.mkIf (config.mods.oxi.oxirun.enable && config.mods.oxi.enable) (
|
||||||
|
lib.optionalAttrs (options ? xdg.configFile) {
|
||||||
|
programs.oxirun.enable = true;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
42
modules/programs/oxi/oxishut.nix
Normal file
|
|
@ -0,0 +1,42 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
options,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
options.mods.oxi.oxishut = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Enables and configures oxishut";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
config = lib.mkIf (config.mods.oxi.oxishut.enable && config.mods.oxi.enable) (
|
||||||
|
lib.optionalAttrs (options ? xdg.configFile) {
|
||||||
|
programs.oxishut.enable = true;
|
||||||
|
xdg.configFile."oxishut/style.css" = {
|
||||||
|
text = ''
|
||||||
|
#mainwindow {
|
||||||
|
border-radius: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mainbox {
|
||||||
|
border-radius: 5px;
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button {
|
||||||
|
margin: 5px;
|
||||||
|
background-color: #2b2c3b;
|
||||||
|
-gtk-icon-size: 5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button:hover {
|
||||||
|
background-color: #3e4152;
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
20
modules/programs/piper.nix
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
options,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
options.mods.piper = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = false;
|
||||||
|
example = true;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Enables the piper program and its daemon";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
config = lib.mkIf config.mods.piper.enable (
|
||||||
|
lib.optionalAttrs (options ? services.ratbagd) {services.ratbagd.enable = true;}
|
||||||
|
// lib.optionalAttrs (options ? home.packages) {home.packages = with pkgs; [piper];}
|
||||||
|
);
|
||||||
|
}
|
||||||
18
modules/programs/plymouth.nix
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
options,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
options.mods.plymouth = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Enables the plymouth";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
config = lib.mkIf config.mods.plymouth.enable (
|
||||||
|
lib.optionalAttrs (options ? boot.plymouth) {boot.plymouth.enable = true;}
|
||||||
|
);
|
||||||
|
}
|
||||||
38
modules/programs/printing.nix
Normal file
|
|
@ -0,0 +1,38 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
options,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
options.mods.printing = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
default = true;
|
||||||
|
example = false;
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Enables the piper program and its daemon";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
config = lib.mkIf config.mods.printing.enable (
|
||||||
|
lib.optionalAttrs (options ? services.printing) {
|
||||||
|
# Enable CUPS to print documents.
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
simple-scan
|
||||||
|
];
|
||||||
|
hardware.sane.enable = true;
|
||||||
|
services = {
|
||||||
|
printing = {
|
||||||
|
enable = true;
|
||||||
|
browsing = true;
|
||||||
|
drivers = [pkgs.hplip];
|
||||||
|
startWhenNeeded = true; # optional
|
||||||
|
};
|
||||||
|
avahi = {
|
||||||
|
enable = true;
|
||||||
|
nssmdns4 = true;
|
||||||
|
openFirewall = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||