Compare commits

...

209 commits
1.0 ... main

Author SHA1 Message Date
15b48490ba chore(images): Swap to eog
Some checks failed
Docs / Build (push) Failing after 3m25s
2025-12-23 15:28:05 +01:00
afaba29554 feature(clam): init 2025-12-20 12:56:19 +01:00
885ceb5c94 chore(lib): Add experimental standalone home-manager option 2025-12-19 14:12:55 +01:00
512d6d2dd4 chore(inputs): Modularize modules, inputs and update instructions 2025-12-19 13:36:30 +01:00
decd0f5110 chore(cachy): Use external flake and drop chaotic-nyx 2025-12-18 22:44:46 +01:00
f360e54590 chore(fcp): Replace with fuc 2025-12-18 14:23:18 +01:00
2a245f9851 chore(basePackages): Remove preload 2025-12-03 21:34:52 +01:00
DashieTM
39e4d182ce bugfix(hyprland): Use proper flake url 2025-11-11 15:33:10 +01:00
3731bd6366 bugfix(regreet): Ensure stable compatibility 2025-11-10 11:36:12 +01:00
ac77341f62 bugfix(stylix): Ensure stable compatibility 2025-11-10 11:27:55 +01:00
0314b75a02 bugfix(logind): Ensure stable compatibility 2025-11-10 10:21:27 +01:00
1aeb5de333 chore(lutris): broken 2025-11-07 17:53:21 +01:00
78a3247fb1 chore(git): Update config 2025-11-07 17:19:29 +01:00
fe090a95bc chore(docs): Add instructions for experimental features on install 2025-11-02 21:51:56 +01:00
bafff72427 chore(docs): Update ISO instructions 2025-11-01 23:36:37 +01:00
b39db82a29 feature(config): Allow pkgs config 2025-11-01 23:24:06 +01:00
96cf0a24c1 chore(scx): Allow setting the scheduler 2025-10-11 09:29:10 +02:00
ec3d1a8339 chore(yazi): Add backspace 2025-10-10 21:24:13 +02:00
af31c8f5f0 chore(yazi): Add backspace 2025-10-10 21:08:59 +02:00
2c218306b9 chore(wm): Fix hyprland keybinds 2025-10-10 19:29:14 +02:00
DashieTM
db861d807a chore(niri): Add anti flicker for nvidia 2025-10-07 15:41:50 +02:00
DashieTM
a49055c1cc chore(ironbar): Update upower module 2025-10-07 12:49:57 +02:00
DashieTM
65e21a7d00 chore(wm): Conditionally check for args 2025-10-07 12:36:54 +02:00
6f90f67384 chore(statix): Apply fixes 2025-10-05 13:39:04 +02:00
1f367f80fa chore(documentation): Add niri 2025-10-05 13:38:39 +02:00
1857504bac feature(niri): Init module 2025-10-05 13:24:30 +02:00
9be8a82a29 chore(gaming): Add scx scheduler by default 2025-09-28 11:03:57 +02:00
8b12e79650 chore(yazi): add wl-clipboard 2025-09-23 23:46:41 +02:00
e6d19b9094 chore(hyprland): Update gestures 2025-09-22 23:14:19 +02:00
55b55f7133 chore(tools): Add nixos-compose and expose default config 2025-09-07 21:34:57 +02:00
a2adc26e58 chore(cache): Add DashVim 2025-09-07 18:26:18 +02:00
387eb01570 fix(CI): Add write permission 2025-09-07 16:59:18 +02:00
0bc2c97d69 chore(CI): Only publish iso 2025-09-07 16:39:03 +02:00
0fa45657f0
chore(CI): Run lint and format on PR (#19) 2025-09-07 14:51:52 +02:00
3eef78654a chore(linter/formatter): Add statix 2025-09-06 17:48:17 +02:00
68d16b8212 chore(linter/formatter): Apply linter and formatter 2025-09-06 16:59:51 +02:00
aefd89f89d fix(changeBrigthness): Remove superfluous param 2025-09-05 09:10:16 +02:00
aabc48511c chore(coding): Configure dotnet 2025-08-30 12:52:18 +02:00
a047d5c9e1 feature(firefox-addons): Add angular devtools 2025-08-23 19:43:15 +02:00
28d08a5c8a feature(yazi): Add yazi plugins 2025-08-23 18:21:36 +02:00
fb2507afe7 feature(xdg): Include file picker configuration 2025-08-23 16:42:12 +02:00
29b5237c28 chore(packages): Remove omnisharp 2025-08-22 19:06:27 +02:00
ba2eab4c17 chore(packages): Update deprecations 2025-08-22 18:59:37 +02:00
cc3fbdc57c chore(packages): Add winetricks 2025-08-22 18:59:37 +02:00
63aff9e90b chore(packages): Add steamtinkerlaunch 2025-08-22 18:59:37 +02:00
e73a2f0946 chore(packages): Add nexusmods app 2025-08-22 18:59:37 +02:00
68b8251e00 packages(gaming): Add protonplus 2025-07-19 23:42:38 +02:00
383d454a12 feat(oxinoti/oxidash): Adopt styling to theme 2025-06-22 23:27:47 +02:00
d286a7eac9 feat(ironbar): Add optional battery module 2025-06-22 16:47:49 +02:00
db7e1c050b feat(hyprland): Use better animations 2025-06-21 13:29:51 +02:00
5447e31d11 chore(rocm): disable icd due to broken package 2025-06-21 12:20:31 +02:00
faa8379e25 feat(oxiced): New stylix to oxiced adapter 2025-06-20 23:59:16 +02:00
d3787c546e feat(ironbar): Update config 2025-06-20 03:58:30 +02:00
114ad5b569 bugfix(hyprdock): Use Xetibo version 2025-06-17 23:50:59 +02:00
5c34749874 chore(hyprland): Remove remaining userspecific defaults 2025-06-16 23:50:33 +02:00
2316836b55 chore(gaming): Disable custom scheduler due to freezes 2025-06-16 23:35:34 +02:00
755638fe48 feat(wallpaper): Use themed nix wallpaper by default 2025-06-16 23:27:50 +02:00
01ed785bf0 Remove direct installations of pnpm and yarn 2025-06-09 20:20:02 +02:00
c31afcac98 configure xdg-desktop-portal 2025-06-09 14:33:43 +02:00
92d5e800a2 chaoticNyx: move to module 2025-05-29 21:04:23 +02:00
c62cc3a2bd oxipaste: update command 2025-05-29 19:48:19 +02:00
88c305d4f2 Add pnpm 2025-05-26 10:06:10 +02:00
f7ee4c0d5c darkreader: split into own option 2025-05-24 15:59:12 +02:00
b5fe0e39fc chore: Uncomment fixed packages 2025-05-21 20:53:45 +02:00
37a5bfee0f inputs: prefer nixpkgs packages 2025-05-19 20:47:46 +02:00
c2127e0047 fastfetch: fix config 2025-05-19 20:41:37 +02:00
78afacde79 superfreq: init 2025-05-16 21:52:32 +02:00
1cbe5d7e2a Use unstable for teams 2025-05-16 21:31:30 +02:00
5f81642dc1 hyprland: Fix gamemode service 2025-05-16 19:28:42 +02:00
1650deb7f2 ltex: remove 2025-05-14 22:27:57 +02:00
b79ba87fcb Ironbar fix 2025-05-13 19:30:36 +02:00
518b78bf96 gamescope: init 2025-05-11 22:08:45 +02:00
1ab37deac7 hyprland: remove old wlr atomic env 2025-05-11 21:45:12 +02:00
9cc9955425 chore: cleanup all files 2025-05-11 19:45:25 +02:00
f4e47cbf97 chore: snake_case to camelCase 2025-05-11 13:13:10 +02:00
2b704cc5e7 browser: fixup firefox forks 2025-05-11 13:06:37 +02:00
ea385722b0 Gaming: direct_scanout in Hyprland 2025-05-11 11:33:50 +02:00
79a66b1f84 cache: adjust to trusted 2025-05-10 22:09:54 +02:00
7b3ad8a182 onedrive: init 2025-05-10 14:05:03 +02:00
11a41563c8 general: Remove all default dashie references 2025-05-10 14:00:00 +02:00
4e7aa1e0f0 conf: default username to DashNix 2025-05-10 13:57:09 +02:00
62ce845f71 Nextcloud: remove default username 2025-05-10 13:54:39 +02:00
cee415973f Add gh 2025-05-10 13:54:39 +02:00
1cb30eadca Add penpot (#17)
* basePackages use mkDashDefault
* Add penpot
2025-05-10 13:54:39 +02:00
f699577158 Add fancontrol (#16) 2025-05-10 13:54:39 +02:00
786217106b Add lib.mkDefault for non configurable defaults (#15) 2025-05-10 13:54:39 +02:00
207b5165a3 Hyprland hardware cursor fix 2025-05-07 13:01:59 +02:00
4d5638baca Add SystemLocalTime for duabloot 2025-05-06 21:50:00 +02:00
681877654d Fix zen config 2025-05-06 19:52:15 +02:00
711c2a128f
Add custom fetch (#13)
* Remove vesktop electron override
* Add custom fetch
2025-05-06 19:23:00 +02:00
e4d521e10f Add bitlocker fix to lanzaboote 2025-05-05 17:25:26 +02:00
62ab685cd4
Remove vesktop electron override (#12) 2025-05-02 12:28:22 +02:00
45954db37a
Drive encryption (#11)
- Add drive encryption with luks
- Refactor Hyprland binds
- Refactor cache
- Minor spelling fixes
- Add firefox stylix profiles
2025-05-02 12:19:48 +02:00
32f0512ef5
Secure boot and wsl (#10)
- Add secure boot via lanzaboote
- Add wsl flag
- Remove flatpak flake
2025-05-02 10:16:15 +02:00
8cf9a40763
Fix oxirun (#9) 2025-04-28 22:48:29 +02:00
ed40157986
nh update FLAKE env var (#8) 2025-04-28 22:40:33 +02:00
3a0b6081c7
Add oxirun (#7) 2025-04-28 10:59:49 +02:00
145ca4d804
Replace DashieTM with Xetibo as new owner (#6)
* Pin and Park cores

* Replace DashieTM with Xetibo as new owner
2025-04-27 17:03:19 +02:00
3527bf2d82 Pin and Park cores 2025-04-13 19:13:46 +02:00
ac6cf62454 Use unstable for adwaita fonts 2025-04-11 09:59:30 +02:00
46f4507034 Update hyprland windowrules 2025-04-11 09:53:00 +02:00
867e56cdf1 Add orca slicer 2025-04-11 09:53:00 +02:00
41b539eea8 Theme ironbar 2025-03-17 21:15:57 +01:00
16e3985e87 Fix streamcontroller 2025-03-17 20:44:16 +01:00
b461a27228 Fix streamcontroller 2025-03-16 18:04:59 +01:00
7c70384da2 Rework docs and add streamcontroller 2025-03-15 17:52:39 +01:00
5443370f16 Fix brightness script 2025-03-15 15:45:11 +01:00
4f04b5d683 Add zen extension config and fix zen policy config 2025-03-14 23:24:15 +01:00
58c42ed7d8 Add librewolf module configuration 2025-03-13 12:47:01 +01:00
4ca1688434 Add userContent and userChrome to firefox/zen/librewolf 2025-03-12 22:07:48 +01:00
1886700857 Add zen and librewolf configuration 2025-03-12 12:59:59 +01:00
dc83628ac9 Update deps 2025-03-10 09:18:02 +01:00
24acd1b1a3 Include fsautocomplete again 2025-03-03 08:01:08 +01:00
4c5ebe9691 Update iso and installation instructions 2025-03-02 17:10:13 +01:00
bf3230ad43 Fix documentation generation 2025-03-02 16:31:25 +01:00
54174d9a95 Disable ANR for Hyprland (broken) 2025-03-02 16:10:52 +01:00
ae8fb25102 Add disko variant for drive configuration 2025-03-02 15:39:46 +01:00
547ea3e7bb Update Readme 2025-02-28 17:42:37 +01:00
b596b0e044 Fix regreet docs 2025-02-28 17:33:39 +01:00
94dd7b8b48 Fix cpu governor for gamemode 2025-02-27 19:24:00 +01:00
MathewHDYT
5c967ddd0d
Readd firefox extensions via NUR (#5) 2025-02-26 10:55:22 +01:00
8c19df773b Make systemdboot optional 2025-02-25 23:03:45 +01:00
4afd999894 Add initial sway module 2025-02-25 23:03:43 +01:00
c2ca2e5b71 Add initial sway module 2025-02-25 21:45:53 +01:00
d88a6c3e4d Add wine64 2025-02-23 16:01:18 +01:00
c021794165 Change regreet session dir 2025-02-23 13:30:56 +01:00
7e54da92b9 Use displaySessions for display manager 2025-02-23 12:59:00 +01:00
6c1aff4c0e Use cachyOS kernel for gaming 2025-02-22 13:41:00 +01:00
f9ddae6478 Add opencl to amd 2025-02-22 13:41:00 +01:00
1273cd7361 add lorri 2025-02-22 13:41:00 +01:00
88c57dac72 Update logo 2025-02-16 22:23:55 +01:00
e214c4eb70 Use stable chromium for vesktop 2025-02-16 00:32:42 +01:00
693d4e3c70 Use alejandra formatter / fix warnings 2025-02-15 16:23:22 +01:00
c5b1041bbb Update nixpkgs 2025-02-09 15:38:29 +01:00
5173a90965 Update to adwaita fonts 2025-02-09 15:35:52 +01:00
49a5671bf3 Allow broken for now 2025-02-08 20:14:28 +01:00
c256600c7e Don't override DashVim inputs 2025-02-08 20:05:19 +01:00
dd57f95440 Force breeze 2025-02-08 19:20:33 +01:00
6d9724f0f4 Add logo 2025-02-06 20:39:29 +01:00
57d32a4ccd remove nixpkgs config in homemanager 2025-02-06 20:25:34 +01:00
4c93565c74 remove globalpkgs 2025-02-06 20:25:01 +01:00
8e2f1e3f77 Remove unfree config from homemanager 2025-01-18 20:47:20 +01:00
729d9f7cac Add supersonic 2025-01-02 01:59:54 +01:00
cd783dfe71 virt update 2025-01-01 17:10:10 +01:00
de61f5becd Add virtmanager 2025-01-01 16:53:09 +01:00
b5f4e15db8 Update zen 2024-12-31 20:39:01 +01:00
029a7b86d7 temp disable heroic 2024-12-31 15:16:43 +01:00
fbf9612ad4 Remove gconf 2024-12-31 14:56:46 +01:00
fd8fb04fde Add mangohud 2024-12-31 14:33:02 +01:00
dfa739e8a0 Document new flags 2024-12-22 19:45:10 +01:00
82161469a0 Invert package override 2024-12-22 19:33:46 +01:00
dacf800363 Remove nur 2024-12-22 19:31:20 +01:00
8551193dd2 temporary nextcloud fix 2024-12-22 16:35:42 +01:00
8ffab823ca Add plymouth to modules 2024-12-22 16:01:24 +01:00
86238b157c Add jitsi to allowed pkgs 2024-12-22 15:19:17 +01:00
9cef7c614b Change to LGPL 2024-12-22 14:13:20 +01:00
01bbcad7fa Allow pkg overrides 2024-12-22 13:49:01 +01:00
b0054a3fe1 Update gnome services 2024-12-18 23:31:03 +01:00
37606eae74 Add dotnet wrapped to allowed packages 2024-12-13 10:46:28 +01:00
5b8c873527 Update ironbar 2024-12-05 22:57:25 +01:00
5556e410ae Add caches 2024-12-03 23:55:39 +01:00
8e221806d3 Add oxipaste cache 2024-12-03 21:05:39 +01:00
e8ace4a2f3 Add gleam 2024-12-03 21:03:01 +01:00
c11addd4cb Update .net 2024-12-02 11:57:25 +01:00
639195dc43 Update font 2024-12-02 09:51:24 +01:00
5f60c3ba91 Change default cursor to catppuccin 2024-11-30 13:32:15 +01:00
2073868189 Update home-manager and nixos versions 2024-11-27 19:07:52 +01:00
e3a8bbe853 Update kitty config 2024-11-17 14:23:24 +01:00
bcc3ba0aee Add additional git config 2024-11-17 13:49:28 +01:00
05e3b8b222 Temporarily remove neovide 2024-11-17 13:41:10 +01:00
10e362af18 Add credits 2024-11-16 16:49:26 +01:00
5ada5903ef Yazi alias fix 2024-11-11 15:51:39 +01:00
eb1cb1f297 Include Hyprspace as a potential plugin 2024-11-09 23:59:21 +01:00
a138b332a3 Update update command (lel) 2024-11-09 23:25:49 +01:00
7cba9d23a1 Fix regreet docs 2024-11-09 18:41:21 +01:00
35b2ba75b6 Fix yazi config 2024-11-09 16:19:50 +01:00
MathewHDYT
0389558529
Include customSettings option to configure regreet (#4)
* Attempt to add regrett configuration
* Prevent double install of regreet
* Install regreet over program enable
* Force regreet settings
* Revert regreet over programs enable.
* Move regreet config into homemanger.
2024-11-08 19:41:51 +01:00
0c1291d3fd Update docker/podman config 2024-11-02 12:51:50 +01:00
d703b4dec0 Update qt5ct/kdeconnect 2024-10-25 11:36:12 +02:00
f1a93f1cf7 Remove lock 2024-10-19 14:48:26 +02:00
314a067795 Update Readme 2024-09-29 12:51:38 +02:00
b72d409a5a Update browsers 2024-09-29 12:48:39 +02:00
10adafe703 Ironbar fix 2024-09-26 10:11:51 +02:00
9bc0491caa Include new oxipaste 2024-09-24 18:12:39 +02:00
531e37fbe3 KDE specific themeing because fun 2024-09-21 14:11:35 +02:00
f2055e0d10 Rename string type to str 2024-09-15 22:05:26 +02:00
8ba687edc1 Sops: Add more configuration 2024-09-15 00:23:02 +02:00
3adbcfab59 Add vscodium config 2024-09-13 17:56:22 +02:00
69fb898087 Add mime type module and refactor options 2024-09-09 23:11:36 +02:00
3a2266d44f Use nh 2024-09-08 21:34:28 +02:00
6c57ca5b72 Make catppuccin default 2024-09-08 21:20:31 +02:00
9535108bb7 Simplify build systems 2024-09-08 19:29:36 +02:00
b994e4698c Adjust hyprpaper documentation 2024-09-08 18:48:22 +02:00
b83ccc7bfe Refactor additional packages 2024-09-08 18:27:42 +02:00
2e90a3b7a1 Add additional Kernel params 2024-09-08 15:38:30 +02:00
1ec22067ff Add inline doc for monitor mode 2024-09-08 15:27:45 +02:00
2c45bcf6ad Use defaultMonitor instead of monitor 2024-09-08 15:24:44 +02:00
3ac742cc45 Add anyrun config 2024-09-08 14:44:27 +02:00
a3d3b15507 Move gnome-settings to top level 2024-09-08 14:09:35 +02:00
bac1d0f3f9 Add breeze for qt6 2024-09-08 13:47:55 +02:00
16732a903c Add qt5ct to every variable placement 2024-09-08 13:19:47 +02:00
3d5fd504a9 Add result to gitignore 2024-09-08 13:18:34 +02:00
cbaa111fbd Add qt5ct to system and greetd 2024-09-04 09:49:32 +02:00
41001a9122 Hyprland move active border 2024-09-01 11:58:17 +02:00
a5eebb6030 Remove force on active border 2024-09-01 11:14:08 +02:00
07a4bd3a96 Use optionalAttrs in hyprland.nix 2024-09-01 10:33:20 +02:00
015eb32fcf Fix neovide config file 2024-09-01 10:27:17 +02:00
9fecf0ec96 Update documentation for ISO 2024-09-01 02:18:09 +02:00
74e9eb2c62 Configure neovide 2024-09-01 02:04:31 +02:00
120 changed files with 9692 additions and 5353 deletions

View file

@ -1,58 +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: ubuntu-latest
runs-on: nixos-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
- name: Set up cache
uses: DeterminateSystems/magic-nix-cache-action@main
- 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 github:${{ github.repository }}/${{ github.sha }}#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: actions/upload-pages-artifact@v3
# - 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:
path: public/
deploy:
name: Deploy
needs: build
permissions:
pages: write
id-token: write
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
steps:
- name: Deploy docs to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
site: https://username.pages.dashie.org/reponame/
token: ${{ forge.token }}
source: public/

35
.github/workflows/pr.yaml vendored Normal file
View 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

View file

@ -6,8 +6,7 @@ on:
jobs:
build:
name: Release
permissions:
contents: read
permissions: write-all
runs-on: ubuntu-latest
steps:
- name: Install Nix
@ -15,16 +14,16 @@ jobs:
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
extra-conf: |
extra-experimental-features = nix-command flakes
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
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/ public/
cp -r --dereference --no-preserve=mode,ownership result/iso/DashNix.iso DashNix.iso
- name: upload ISO
uses: softprops/action-gh-release@v1
with:
path: path/
files: |
DashNix.iso

3
.gitignore vendored Normal file
View file

@ -0,0 +1,3 @@
result/*
result
flake.lock

167
LICENSE
View file

@ -1,3 +1,169 @@
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
@ -672,3 +838,4 @@ 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>.

228
assets/logo.svg Normal file
View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

238
assets/logo2.svg Normal file
View 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
View 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
View 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

View file

@ -1,33 +1,46 @@
{
mkDashDefault,
pkgs,
config,
lib,
hostName,
modulesPath,
...
}:
let
}: let
username = config.conf.username;
in
{
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
in {
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
];
wsl.enable = mkDashDefault config.conf.wsl;
# Bootloader.
boot = {
consoleLogLevel = 0;
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 = true;
enable =
if config.conf.secureBoot
then lib.mkForce false
else if config.conf.useSystemdBootloader
then true
else mkDashDefault false;
configurationLimit = 5;
};
efi.canTouchEfiVariables = true;
efi.canTouchEfiVariables = mkDashDefault true;
};
plymouth = {
enable = true;
};
kernelPackages = lib.mkDefault pkgs.linuxPackages_latest;
kernelPackages = mkDashDefault pkgs.linuxPackages_latest;
initrd = {
verbose = false;
verbose = mkDashDefault false;
availableKernelModules = [
"nvme"
"xhci_pci"
@ -37,76 +50,107 @@ in
"sd_mod"
];
};
kernelParams = [
''resume="PARTLABEL=SWAP"''
''quiet''
''udev.log_level=3''
] ++ config.conf.boot_params;
kernelParams =
[
''resume="PARTLABEL=SWAP"''
''quiet''
''udev.log_level=3''
]
++ config.conf.bootParams;
};
# Enable networking
networking = {
useDHCP = lib.mkDefault true;
networkmanager.enable = true;
hostName = hostName;
useDHCP = mkDashDefault true;
networkmanager.enable = mkDashDefault true;
hostName = mkDashDefault hostName;
};
# Set your time zone.
time.timeZone = config.conf.timezone;
time = {
timeZone = mkDashDefault config.conf.timezone;
hardwareClockInLocalTime = mkDashDefault config.conf.systemLocalTime;
};
# Select internationalisation properties.
i18n.defaultLocale = config.conf.locale;
i18n.defaultLocale = mkDashDefault config.conf.locale;
# Enable the X11 windowing system.
services = {
flatpak.enable = true;
xserver.enable = true;
fstrim.enable = lib.mkDefault true;
lorri.enable = mkDashDefault true;
xserver.enable = mkDashDefault true;
fstrim.enable = mkDashDefault true;
pulseaudio.enable = mkDashDefault false;
pipewire = {
enable = true;
enable = mkDashDefault true;
alsa = {
enable = true;
support32Bit = true;
enable = mkDashDefault true;
support32Bit = mkDashDefault true;
};
jack.enable = true;
pulse.enable = true;
jack.enable = mkDashDefault true;
pulse.enable = mkDashDefault true;
};
};
nixpkgs.hostPlatform = lib.mkDefault config.conf.system;
nixpkgs.hostPlatform = mkDashDefault config.conf.system;
nix = {
gc = {
automatic = true;
dates = "weekly";
options = "--delete-older-than 7d --delete-generations +5";
automatic = mkDashDefault true;
dates = mkDashDefault "weekly";
options = mkDashDefault "--delete-older-than 7d --delete-generations +5";
};
settings = {
trusted-users = [ username ];
auto-optimise-store = true;
trusted-users = [username];
auto-optimise-store = mkDashDefault true;
experimental-features = "nix-command flakes";
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";
};
};
# Enable sound with pipewire.
hardware = {
pulseaudio.enable = false;
cpu.${config.conf.cpu}.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
cpu.${config.conf.cpu}.updateMicrocode =
mkDashDefault
config.hardware.enableRedistributableFirmware;
};
security.rtkit.enable = true;
security.rtkit.enable = mkDashDefault true;
environment.variables = {
XDG_CACHE_HOME = "$HOME/.cache";
DIRENV_LOG_FORMAT = "";
XDG_CACHE_HOME = mkDashDefault "$HOME/.cache";
DIRENV_LOG_FORMAT = mkDashDefault "";
QT_QPA_PLATFORMTHEME = mkDashDefault "qt5ct";
};
# allows user change later on
users = {
mutableUsers = true;
mutableUsers = mkDashDefault true;
users.${username} = {
isNormalUser = true;
description = username;
isNormalUser = mkDashDefault true;
description = mkDashDefault username;
extraGroups = [
"networkmanager"
"wheel"
@ -115,6 +159,8 @@ in
"vboxusers"
"video"
"audio"
"scanner"
"lp"
];
packages = with pkgs; [
home-manager
@ -122,8 +168,7 @@ in
];
# 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 = "firstlogin";
password = mkDashDefault "firstlogin";
};
};
}

View file

@ -1,18 +1,24 @@
{ pkgs, config, ... }:
{
mkDashDefault,
pkgs,
config,
lib,
...
}: {
environment = {
variables = {
GSETTINGS_SCHEMA_DIR = "${pkgs.glib.getSchemaPath pkgs.gsettings-desktop-schemas}";
NEOVIDE_MAXIMIZED = "0";
GPG_TTY = "$(tty)";
EDITOR = "neovide --no-fork";
SUDO_EDITOR = "neovide --no-fork";
SCRIPTS = "$HOME/.config/scripts";
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 = "1";
GOPATH = "$HOME/.go";
FLAKE = config.conf.nix_path;
NIXOS_OZONE_WL = mkDashDefault "1";
GOPATH = mkDashDefault "$HOME/.go";
FLAKE = mkDashDefault config.conf.nixosConfigPath;
NH_FLAKE = mkDashDefault config.conf.nixosConfigPath;
};
};
}

View file

@ -1,7 +1,10 @@
{ pkgs, ... }:
let
layout = pkgs.writeText "dashie" ''
xkb_symbols "dashie"
{
mkDashDefault,
pkgs,
...
}: let
layout = pkgs.writeText "enIntUmlaut" ''
xkb_symbols "enIntUmlaut"
{
include "us(basic)"
include "level3(ralt_switch)"
@ -10,12 +13,11 @@ let
key <AD07> { [ u, U, udiaeresis, Udiaeresis ] };
};
'';
in
{
environment.systemPackages = [ pkgs.xorg.xkbcomp ];
services.xserver.xkb.extraLayouts.dashie = {
in {
environment.systemPackages = mkDashDefault [pkgs.xorg.xkbcomp];
services.xserver.xkb.extraLayouts.enIntUmlaut = {
description = "US layout with 'umlaut'";
languages = [ "eng" ];
languages = ["eng"];
symbolsFile = "${layout}";
};
}

View file

@ -1,12 +1,11 @@
# with friendly help by stylix: https://github.com/danth/stylix/blob/master/docs/default.nix
{
pkgs,
build_systems,
buildSystems,
lib,
...
}:
let
makeOptionsDoc = configuration: pkgs.nixosOptionsDoc { options = configuration; };
}: 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
@ -14,29 +13,49 @@ let
summaryAppend = name: ''
echo "- [${name}](${name}.md)" >> src/SUMMARY.md
'';
system = (build_systems ../example/.)."example".options;
makeOptionsDocPrograms = name: pkgs.nixosOptionsDoc { options = system.mods.${name}; };
system = (buildSystems {root = ../example/.;})."example".options;
makeOptionsDocPrograms = names: pkgs.nixosOptionsDoc {options = lib.attrByPath (lib.splitString "." names) null system.mods;};
conf = makeOptionsDoc system.conf;
paths = builtins.readDir ../modules/programs;
names = lib.lists.remove "default" (
map (name: lib.strings.removeSuffix ".nix" name) (lib.attrsets.mapAttrsToList (name: _: name) paths)
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 ""))
);
mods = map makeOptionsDocPrograms names;
docs = lib.strings.concatLines (map generateDocs (lib.lists.zipLists names mods));
summary = lib.strings.concatStringsSep " " (map summaryAppend names);
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 = ./.;
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}
'';
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
'';
}
buildPhase = ''
${pkgs.mdbook}/bin/mdbook build --dest-dir $out
'';
}

View file

@ -1,12 +1,10 @@
```
██████ █████ ███████ ██ ██ ███ ██ ██ ██ ██
██ ██ ██ ██ ██ ██ ██ ████ ██ ██ ██ ██
██ ██ ███████ ███████ ███████ ██ ██ ██ ██ ███
██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
██████ ██ ██ ███████ ██ ██ ██ ████ ██ ██ ██
```
<div align = center>
A very opinionated (technically only for me) configuration that allows easy adding and removing of systems alongside custom configurations for each system.
![Logo of DashNix](logo.svg)
</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
@ -14,7 +12,7 @@ This flake is intended to be used as an input to your own NixOS configuration:
```nix
dashNix = {
url = "github:DashieTM/DashNix";
url = "github:Xetibo/DashNix";
inputs = {
# ensure these are here to update the packages on your own
nixpkgs.follows = "nixpkgs";
@ -25,12 +23,48 @@ dashNix = {
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
nixosConfigurations = (inputs.dashNix.dashNixLib.build_systems ./.);
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="
];
```
The paremeter specifies where your hosts directory will be placed, in said directory you can then create a directory for each system.
Note, the name of the systems directory is also its hostname.
```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)
@ -55,58 +89,71 @@ Here is a minimal required configuration.nix (the TODOs mention a required chang
```nix
{config, ...}: {
# TODO denote important changes
# variables for system
# TODO important changes
conf = {
# change this to your monitor and your pc name
# should be something like DP-1
monitor = "YOURMONITOR";
# your username
# 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
drives = {
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" ];
};
}
];
};
sops.enable = false;
nextcloud.enable = false;
hyprland.monitor = [
# default
# TODO change this to your resolution
"${config.conf.monitor},1920x1080@144,0x0,1"
# all others
",highrr,auto,1"
wm.monitors = [
# Example
# {
# name = "DP-1";
# resolutionX = 3440;
# resolutionY = 1440;
# refreshrate = 180;
# positionX = 2560;
# positionY = 0;
# scale = 1;
# transform = "0";
# vrr = false;
# }
];
# or amd, whatever you have
gpu.nvidia.enable = true;
kde_connect.enable = true;
# TODO change this to your main resolution
# -> this will be your login manager
greetd = { resolution = "3440x1440@180"; };
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.
};
};
}
```
@ -115,66 +162,168 @@ Here is a minimal required configuration.nix (the TODOs mention a required chang
After logging in the first time, your password will be set to "firstlogin", please change this to whatever you like.
## Nixos and Home-manager Modules
## Configuring pkgs
You can add additional modules or remove all of them by overriding parameters to the build_systems command:
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 =
let
additionalMods = {
nixos = [
# your modules
]; home = [
# your modules
];
}
# passing this parameter will override the existing modules
mods = {
nixos = [];
home = [];
}
in
(inputs.dashNix.dashNixLib.build_systems [
"system1"
] ./. mods additionalMods);
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.
- base packages : A list of system packages to be installed by default
- home packages : A list of home packages to be installed by default
- media packages : A list of media packages to be installed by default
- coding packages : A list of coding packages to be installed by default
- 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
- flatpak : Installs and enables declarative flatpak
- 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
- layout : Modules to configure keyboard layout system wide
- piper : Installs and enables piper alongside its daemon
- printing : Enables and configures printing services
- virtualbox : Enables and configures virtualbox
- xone : Installs the xone driver
- starship : Configures the starship prompt
- keepassxc : Configures keepassxc
- gaming : Configures gaming related features (launchers, gamemode)
- stylix : Configures system themes, can also be applied to dashvim if used.
- git : Git key and config module
- nextcloud : Handles synchronization via nextcloud cmd. (requires config.sops.secrets.nextcloud)
- firefox: Enables and configures firefox (extensions and settings)
- Hyprland: Installs and configures Hyprland with various additional packages
- yazi: Installs yazi and sets custom keybinds
- teams: For the poor souls that have to use this....
- sops: Enables sops-nix
- fish: Enables and configures fish shell
- 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

238
docs/src/logo.svg Normal file
View 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

View file

@ -2,30 +2,20 @@
description = "some dots";
inputs = {
dashvim.url = "github:DashieTM/DashVim";
hyprland.url = "git+https://github.com/hyprwm/Hyprland?submodules=1";
ironbar.url = "github:JakeStanger/ironbar?ref=3a1c60442382f970cdb7669814b6ef3594d9f048";
anyrun.url = "github:Kirottu/anyrun";
nixpkgs.url = "github:NixOs/nixpkgs/nixos-unstable";
stable.url = "github:NixOs/nixpkgs/nixos-24.05";
dashNix = {
url = "github:DashieTM/DashNix";
url = "github:Xetibo/DashNix";
inputs = {
nixpkgs.follows = "nixpkgs";
stable.follows = "stable";
dashvim.follows = "dashvim";
hyprland.follows = "hyprland";
ironbar.follows = "ironbar";
anyrun.follows = "anyrun";
};
};
};
outputs =
{ ... }@inputs:
{
nixosConfigurations = (inputs.dashNix.dashNixLib.build_systems ./.);
};
outputs = inputs: {
nixosConfigurations = inputs.dashNix.dashNixLib.buildSystems {root = ./.;};
};
nixConfig = {
builders-use-substitutes = true;
@ -34,12 +24,28 @@
"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="
];
};
}

View file

@ -1,67 +1,68 @@
{ config, ... }:
{
{config, ...}: {
# TODO denote important changes
# variables for system
# TODO important changes
conf = {
# change this to your monitor and your pc name
# should be something like DP-1
monitor = "YOURMONITOR";
# your username
username = "YOURNAME";
# TODO your username
username = "exampleName";
# TODO only needed when you use intel -> amd is default
# cpu = "intel";
locale = "something.UTF-8";
timezone = "CONTINENT/CITY";
# 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
drives = {
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"
];
};
}
];
};
sops.enable = false;
nextcloud.enable = false;
hyprland.monitor = [
# default
# TODO change this to your resolution
"${config.conf.monitor},1920x1080@144,0x0,1"
# all others
",highrr,auto,1"
wm.monitors = [
# Example
# {
# name = "DP-1";
# resolutionX = 3440;
# resolutionY = 1440;
# refreshrate = 180;
# positionX = 2560;
# positionY = 0;
# scale = 1;
# transform = "0";
# vrr = false;
# }
];
# or amd, whatever you have
gpu.nvidia.enable = true;
kde_connect.enable = true;
# TODO change this to your main resolution
# -> this will be your login manager
greetd = {
resolution = "3440x1440@180";
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.
};
};
}

2132
flake.lock generated

File diff suppressed because it is too large Load diff

150
flake.nix
View file

@ -2,100 +2,112 @@
description = "DashNix";
inputs = {
nixpkgs.url = "github:NixOs/nixpkgs/nixos-unstable";
stable.url = "github:NixOs/nixpkgs/nixos-24.05";
nix-flatpak = {
url = "github:gmodena/nix-flatpak";
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 = "nixpkgs";
inputs.nixpkgs.follows = "unstable";
};
cachy.url = "github:xddxdd/nix-cachyos-kernel?rev=bb7b8aa687464f24dcd452354d9621331d6b0737";
sops-nix.url = "github:Mic92/sops-nix";
# Hyprspace = {
# url = "github:KZDKM/Hyprspace";
# inputs.hyprland.follows = "nixpkgs";
# };
nur.url = "github:nix-community/nur";
hyprland.url = "git+https://github.com/hyprwm/Hyprland?submodules=1";
hyprland.url = "github:hyprwm/Hyprland";
ironbar = {
url = "github:JakeStanger/ironbar?ref=3a1c60442382f970cdb7669814b6ef3594d9f048";
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:DashieTM/OxiCalc";
oxishut.url = "github:DashieTM/OxiShut";
oxinoti.url = "github:DashieTM/OxiNoti";
oxidash.url = "github:DashieTM/OxiDash";
oxipaste.url = "github:DashieTM/OxiPaste";
hyprdock.url = "github:DashieTM/hyprdock";
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";
dashvim = {
url = "github:DashieTM/DashVim";
inputs.nixpkgs.follows = "nixpkgs";
inputs.base16.follows = "base16";
};
superfreq.url = "github:NotAShelf/superfreq";
compose.url = "github:garnix-io/nixos-compose";
};
outputs =
{ self, ... }@inputs:
let
stable = import inputs.stable {
system = "x86_64-linux";
config = {
allowUnfree = true;
};
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;
};
pkgs = import inputs.nixpkgs {
system = "x86_64-linux";
overlays = [ inputs.nur.overlay ];
config = {
permittedInsecurePackages = [ "olm-3.2.16" ];
allowUnfree = true;
};
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;
};
in
rec {
dashNixLib = import ./lib {
inherit self inputs pkgs;
lib = inputs.nixpkgs.lib;
};
docs = import ./docs {
inherit inputs pkgs;
lib = inputs.nixpkgs.lib;
build_systems = dashNixLib.build_systems;
};
dashNixInputs = inputs;
stablePkgs = stable;
unstablePkgs = pkgs;
modules = ./modules;
iso = dashNixLib.buildIso.config.system.build.isoImage;
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/.;};
nixConfig = {
builders-use-substitutes = true;
mkFlake = stablePkgs.writeShellApplication {
name = "Create example config";
text =
/*
bash
*/
''
mkdir -p ~/gits/nixos
mkdir -p ~/gits/backup_nixos
extra-substituters = [
"https://hyprland.cachix.org"
"https://anyrun.cachix.org"
"https://cache.garnix.io"
];
extra-trusted-public-keys = [
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
"anyrun.cachix.org-1:pqBobmOjI7nKlsUMV25u9QHa9btJK65/C8vnO3p346s="
"cache.garnix.io:CTFPyKSLcx5RMJKfLo5EEPUObbA78b0YQ2DTCJXqr9g="
];
mv ~/gits/nixos/* ~/gits/backup_nixos/
cp -r ${./example}/* ~/gits/nixos/
'';
};
};
}

View file

@ -1,46 +1,41 @@
{
mkDashDefault,
config,
lib,
options,
pkgs,
...
}:
let
}: let
username = config.conf.username;
in
{
in {
manual = {
html.enable = false;
json.enable = false;
manpages.enable = false;
html.enable = mkDashDefault false;
json.enable = mkDashDefault false;
manpages.enable = mkDashDefault false;
};
fonts.fontconfig.enable = true;
nixpkgs.config.allowUnfree = true;
fonts.fontconfig.enable = mkDashDefault true;
home = {
username = username;
homeDirectory = "/home/${username}";
sessionPath = [ "$HOME/.cargo/bin" ];
username = mkDashDefault username;
homeDirectory = mkDashDefault "/home/${username}";
sessionPath = ["$HOME/.cargo/bin"];
enableNixpkgsReleaseCheck = mkDashDefault false;
sessionVariables = {
GOROOT = "$HOME/.go";
GOROOT = mkDashDefault "$HOME/.go";
QT_QPA_PLATFORMTHEME = mkDashDefault "qt5ct";
};
keyboard = null;
file.".local/share/flatpak/overrides/global".text = ''
[Context]
filesystems=xdg-config/gtk-3.0;xdg-config/gtk-4.0
'';
keyboard = mkDashDefault null;
};
programs.nix-index = {
enable = true;
enableFishIntegration = true;
enable = mkDashDefault true;
enableFishIntegration = mkDashDefault true;
};
nix = {
extraOptions = lib.mkIf (options ? config.sops.secrets.access.path) ''
extraOptions = lib.mkIf (config ? sops.secrets && config.sops.secrets ? access.path) ''
!include ${config.sops.secrets.access.path}
'';
};

View file

@ -1,42 +1,66 @@
{
inputs,
pkgs,
mkDashDefault,
dashNixAdditionalProps,
config,
lib,
mod,
additionalHomeConfig,
homeMods,
additionalHomeMods,
inputs,
lib,
additionalHomeConfig,
mod,
pkgs,
root,
alternativePkgs,
system,
stable,
unstable,
...
}:
{
}: {
xdg = {
portal.config.common.default = "*";
portal.config.common = {
default = mkDashDefault "hyprland;gtk";
"org.freedesktop.impl.portal.FileChooser" = lib.mkIf (config.mods.media.filePickerPortal != "Default") "shana";
};
portal = {
enable = true;
extraPortals = [ pkgs.xdg-desktop-portal-gtk ];
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 = true;
useUserPackages = true;
useGlobalPkgs = mkDashDefault true;
useUserPackages = mkDashDefault true;
extraSpecialArgs = {
inherit inputs root;
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
./xdg.nix
./themes
./sync.nix
../lib/foxwrappers.nix
]
++ homeMods
++ additionalHomeMods
++ lib.optional (builtins.pathExists mod) mod
++ lib.optional (builtins.pathExists additionalHomeConfig) additionalHomeConfig;
++ lib.optional (builtins.pathExists additionalHomeConfig) additionalHomeConfig
++ lib.optional (builtins.pathExists mod) mod;
};
};
}

View file

@ -4,18 +4,18 @@
pkgs,
lib,
...
}:
let
}: let
username = config.mods.nextcloud.username;
password =
if (config.sops.secrets ? nextcloud.path) then config.sops.secrets.nextcloud.path else "";
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 (
lib.mkIf config.mods.nextcloud.enable {
systemd.user = {
services = builtins.listToAttrs (
map (opts: {
name = "${opts.name}";
value = {
@ -30,13 +30,12 @@ lib.mkIf config.mods.nextcloud.enable {
KillMode = "process";
KillSignal = "SIGINT";
};
Install.WantedBy = [ "multi-user.target" ];
Install.WantedBy = ["multi-user.target"];
};
}) synclist
)
);
timers = (
builtins.listToAttrs (
})
synclist
);
timers = builtins.listToAttrs (
map (opts: {
name = "${opts.name}";
value = {
@ -48,9 +47,9 @@ lib.mkIf config.mods.nextcloud.enable {
"timers.target"
];
};
}) synclist
)
);
startServices = true;
};
}
})
synclist
);
startServices = true;
};
}

View file

@ -1,115 +1,8 @@
{
config,
inputs,
pkgs,
...
}:
let
username = config.conf.username;
# 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);
# 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
# 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 = ''
[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}
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}
'';
qss = ''
QTabBar::tab:selected {
color: palette(highlight);
}
QMenuBar, QMenu, QToolBar, QStatusBar, QFrame, QScrollBar {
border: none;
}
'';
in
{
xdg.configFile."qt5ct/colors/tokyonight.conf" = {
text = "${color}";
};
xdg.configFile."qt6ct/colors/tokyonight.conf" = {
text = "${color}";
};
xdg.configFile."qt5ct/qss/tab.qss" = {
text = "${qss}";
};
xdg.configFile."qt5ct/qt5ct.conf" = {
text = ''
[Appearance]
color_scheme_path=/home/${username}/.config/qt5ct/colors/tokyonight.conf
custom_palette=true
icon_theme=MoreWaita
standard_dialogs=gtk3
style=Breeze
[Fonts]
fixed="Noto Sans,12,-1,5,50,0,0,0,0,0"
general="Noto Sans,12,-1,5,50,0,0,0,0,0"
[Interface]
activate_item_on_single_click=2
buttonbox_layout=3
cursor_flash_time=1000
dialog_buttons_have_icons=0
double_click_interval=400
gui_effects=General, AnimateMenu, AnimateCombo, AnimateTooltip, AnimateToolBox
keyboard_scheme=4
menus_have_icons=true
show_shortcuts_in_context_menus=true
stylesheets=/home/${username}/.config/qt5ct/qss/tab.qss, /nix/store/5713p1pv913a6fsn8j7z6ndikcwikbcd-qt5ct-1.8/share/qt5ct/qss/fusion-fixes.qss, /nix/store/5713p1pv913a6fsn8j7z6ndikcwikbcd-qt5ct-1.8/share/qt5ct/qss/scrollbar-simple.qss, /nix/store/5713p1pv913a6fsn8j7z6ndikcwikbcd-qt5ct-1.8/share/qt5ct/qss/sliders-simple.qss, /nix/store/5713p1pv913a6fsn8j7z6ndikcwikbcd-qt5ct-1.8/share/qt5ct/qss/tooltip-simple.qss, /nix/store/5713p1pv913a6fsn8j7z6ndikcwikbcd-qt5ct-1.8/share/qt5ct/qss/traynotification-simple.qss
toolbutton_style=4
underline_shortcut=0
wheel_scroll_lines=3
[SettingsWindow]
geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\n\0\0\0\0\0\0\0\rK\0\0\x5q\0\0\n\0\0\0\0\0\0\0\r[\0\0\x5\x7f\0\0\0\0\x2\0\0\0\rp\0\0\n\0\0\0\0\0\0\0\rK\0\0\x5q)
[Troubleshooting]
force_raster_widgets=1
ignored_applications=@Invalid()
'';
};
xdg.configFile."qt6ct/qt6ct.conf" = {
text = ''
[Appearance]
color_scheme_path=/home/${username}/.config/qt6ct/colors/toykonight.conf
custom_palette=true
standard_dialogs=default
style=Adwaita-Dark
[Fonts]
fixed="DejaVu LGC Sans,12,-1,5,400,0,0,0,0,0,0,0,0,0,0,1"
general="DejaVu LGC Sans,12,-1,5,400,0,0,0,0,0,0,0,0,0,0,1"
[Interface]
activate_item_on_single_click=2
buttonbox_layout=3
cursor_flash_time=1000
dialog_buttons_have_icons=0
double_click_interval=400
gui_effects=General, AnimateMenu, AnimateCombo, AnimateTooltip, AnimateToolBox
keyboard_scheme=4
menus_have_icons=true
show_shortcuts_in_context_menus=true
stylesheets=@Invalid()
toolbutton_style=4
underline_shortcut=1
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]
force_raster_widgets=1
ignored_applications=@Invalid()
'';
};
imports = [
./qt.nix
./kdeglobals.nix
./oxiced.nix
./firefoxTheme.nix
];
}

View 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
View 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
View 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;
};
};
}

124
home/themes/qt.nix Normal file
View file

@ -0,0 +1,124 @@
{
config,
inputs,
pkgs,
lib,
...
}: let
username = config.conf.username;
# 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;
# 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
# 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 = ''
[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}
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}
'';
qss = ''
QTabBar::tab:selected {
color: palette(highlight);
}
QMenuBar, QMenu, QToolBar, QStatusBar, QFrame, QScrollBar {
border: none;
}
'';
in {
stylix.targets.qt = {
enable = false;
};
qt = {
enable = true;
style.package = pkgs.kdePackages.breeze;
style.name = lib.mkForce "breeze-dark";
};
xdg.configFile = {
"qt5ct/colors/tokyonight.conf" = {
text = "${color}";
};
"qt6ct/colors/tokyonight.conf" = {
text = "${color}";
};
"qt5ct/qss/tab.qss" = {
text = "${qss}";
};
"qt5ct/qt5ct.conf" = {
text = ''
[Appearance]
color_scheme_path=/home/${username}/.config/qt5ct/colors/tokyonight.conf
custom_palette=true
icon_theme=MoreWaita
standard_dialogs=xdgdesktopportal
style=Breeze
[Fonts]
fixed="Noto Sans,12,-1,5,50,0,0,0,0,0"
general="Noto Sans,12,-1,5,50,0,0,0,0,0"
[Interface]
activate_item_on_single_click=2
buttonbox_layout=3
cursor_flash_time=1000
dialog_buttons_have_icons=0
double_click_interval=400
gui_effects=General, AnimateMenu, AnimateCombo, AnimateTooltip, AnimateToolBox
keyboard_scheme=4
menus_have_icons=true
show_shortcuts_in_context_menus=true
stylesheets=/home/${username}/.config/qt5ct/qss/tab.qss, /nix/store/5713p1pv913a6fsn8j7z6ndikcwikbcd-qt5ct-1.8/share/qt5ct/qss/fusion-fixes.qss, /nix/store/5713p1pv913a6fsn8j7z6ndikcwikbcd-qt5ct-1.8/share/qt5ct/qss/scrollbar-simple.qss, /nix/store/5713p1pv913a6fsn8j7z6ndikcwikbcd-qt5ct-1.8/share/qt5ct/qss/sliders-simple.qss, /nix/store/5713p1pv913a6fsn8j7z6ndikcwikbcd-qt5ct-1.8/share/qt5ct/qss/tooltip-simple.qss, /nix/store/5713p1pv913a6fsn8j7z6ndikcwikbcd-qt5ct-1.8/share/qt5ct/qss/traynotification-simple.qss
toolbutton_style=4
underline_shortcut=0
wheel_scroll_lines=3
[SettingsWindow]
geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\n\0\0\0\0\0\0\0\rK\0\0\x5q\0\0\n\0\0\0\0\0\0\0\r[\0\0\x5\x7f\0\0\0\0\x2\0\0\0\rp\0\0\n\0\0\0\0\0\0\0\rK\0\0\x5q)
[Troubleshooting]
force_raster_widgets=1
ignored_applications=@Invalid()
'';
};
"qt6ct/qt6ct.conf" = {
text = ''
[Appearance]
color_scheme_path=/home/${username}/.config/qt6ct/colors/tokyonight.conf
custom_palette=true
standard_dialogs=xdgdesktopportal
style=Breeze
[Fonts]
fixed="DejaVu LGC Sans,12,-1,5,400,0,0,0,0,0,0,0,0,0,0,1"
general="DejaVu LGC Sans,12,-1,5,400,0,0,0,0,0,0,0,0,0,0,1"
[Interface]
activate_item_on_single_click=2
buttonbox_layout=3
cursor_flash_time=1000
dialog_buttons_have_icons=0
double_click_interval=400
gui_effects=General, AnimateMenu, AnimateCombo, AnimateTooltip, AnimateToolBox
keyboard_scheme=4
menus_have_icons=true
show_shortcuts_in_context_menus=true
stylesheets=@Invalid()
toolbutton_style=4
underline_shortcut=1
wheel_scroll_lines=3
[Troubleshooting]
force_raster_widgets=1
ignored_applications=@Invalid()
'';
};
};
}

View file

@ -1,86 +0,0 @@
# Copyright (c) 2020-2021 Mihai Fufezan
# credits to fufexan https://github.com/fufexan/dotfiles/blob/main/home/terminal/programs/xdg.nix
{ config, ... }:
let
browser = [ "firefox" ];
imageViewer = [ "imv" ];
videoPlayer = [ "mpv" ];
audioPlayer = [ "io.bassi.Amberol" ];
xdgAssociations =
type: program: list:
builtins.listToAttrs (
map (e: {
name = "${type}/${e}";
value = program;
}) list
);
image = xdgAssociations "image" imageViewer [
"png"
"svg"
"jpeg"
"gif"
];
video = xdgAssociations "video" videoPlayer [
"mp4"
"avi"
"mkv"
];
audio = xdgAssociations "audio" audioPlayer [
"mp3"
"flac"
"wav"
"aac"
];
browserTypes =
(xdgAssociations "application" browser [
"json"
"x-extension-htm"
"x-extension-html"
"x-extension-shtml"
"x-extension-xht"
"x-extension-xhtml"
])
// (xdgAssociations "x-scheme-handler" browser [
"about"
"ftp"
"http"
"https"
"unknown"
]);
# XDG MIME types
associations = builtins.mapAttrs (_: v: (map (e: "${e}.desktop") v)) (
{
"application/pdf" = [ "org.pwmt.zathura-pdf-mupdf" ];
"text/html" = browser;
"text/plain" = [ "neovide" ];
"x-scheme-handler/chrome" = [ "com.brave.browser" ];
"inode/directory" = [ "yazi" ];
}
// image
// video
// audio
// browserTypes
);
in
{
xdg = {
enable = true;
cacheHome = config.home.homeDirectory + "/.local/cache";
mimeApps = {
enable = true;
defaultApplications = associations;
};
userDirs = {
enable = true;
createDirectories = true;
extraConfig = {
XDG_SCREENSHOTS_DIR = "${config.xdg.userDirs.pictures}/Screenshots";
};
};
};
}

View file

@ -1,43 +1,77 @@
{
pkgs,
lib,
modulesPath,
lib,
self,
inputs,
...
}:
{
imports = [ "${modulesPath}/installer/cd-dvd/installation-cd-minimal.nix" ];
}: let
system = "x86_64-linux";
in {
imports = ["${modulesPath}/installer/cd-dvd/iso-image.nix"];
nixpkgs.hostPlatform = {
system = "x86_64-linux";
inherit system;
};
environment.systemPackages = with pkgs; [
neovim
inputs.dashvim.packages.${system}.minimal
disko
git
vesktop
vscodium
firefox
kitty
gnome-disk-utility
inputs.disko.packages.${system}.disko-install
];
networking = {
wireless.enable = false;
networkmanager.enable = true;
};
services.greetd = {
enable = true;
settings = {
initial_session = {
command = "${pkgs.hyprland}/bin/Hyprland";
user = "nixos";
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 = {
isoName = lib.mkForce "DashNix.iso";
makeEfiBootable = true;
makeUsbBootable = true;
contents = [
@ -47,4 +81,6 @@
}
];
};
system.stateVersion = "25.11";
}

View file

@ -1,60 +1,208 @@
{
inputs,
pkgs,
unstable,
self,
lib,
additionalMods ? {
nixos = [ ];
home = [ ];
},
mods ? {
nixos = [
inputs.home-manager.nixosModules.home-manager
inputs.stylix.nixosModules.stylix
../base
../home
../modules
];
home = [
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.hyprdock.homeManagerModules.default
inputs.hyprland.homeManagerModules.default
inputs.reset.homeManagerModules.default
inputs.nix-flatpak.homeManagerModules.nix-flatpak
inputs.sops-nix.homeManagerModules.sops
inputs.dashvim.homeManagerModules.dashvim
../modules
];
},
system,
permittedPackages,
dashNixAdditionalProps ? {},
...
}:
{
/**
# build_systems
}: 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)
)
)
)
);
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.
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)
)
)
)
);
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.
/*
*
# buildSystems
The second parameter is the root of your configuration, which should be ./. in most cases.
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.
`root`
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 root path of your configuration
The second parameter is the root of your configuration, which should be ./. in most cases.
# Example usage
:::{.example}
```nix
nixosConfigurations =
(build_systems [ "nixos" ] ./.);
```
:::
`root`
: the root path of your configuration
# Example usage
:::{.example}
```nix
nixosConfigurations = buildSystems { root = ./.; };
```
:::
*/
# let
# paths = builtins.readDir ;
@ -63,53 +211,82 @@
# );
# in
build_systems =
root:
builtins.listToAttrs (
map
(name: {
name = name;
value =
let
mod = root + /hosts/${name}/configuration.nix;
additionalNixosConfig = root + /hosts/${name}/hardware.nix;
additionalHomeConfig = root + /hosts/${name}/home.nix;
in
inputs.nixpkgs.lib.nixosSystem {
specialArgs = {
inherit
self
inputs
pkgs
mod
additionalHomeConfig
root
;
hostName = name;
homeMods = mods.home;
additionalHomeMods = additionalMods.home;
};
modules =
[ mod ]
++ mods.nixos
++ additionalMods.nixos
++ inputs.nixpkgs.lib.optional (builtins.pathExists additionalNixosConfig) additionalNixosConfig
++ inputs.nixpkgs.lib.optional (builtins.pathExists mod) mod;
};
})
(
lib.lists.remove "" (
lib.attrsets.mapAttrsToList (name: fType: if fType == "directory" then name else "") (
builtins.readDir (root + /hosts)
)
)
)
);
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
];
buildIso = inputs.nixpkgs.lib.nixosSystem {
specialArgs = {
inherit self inputs pkgs;
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 []);
};
modules = [ ../iso/configuration.nix ];
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
View 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
View 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
View 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
View file

@ -0,0 +1 @@
{lib, ...}: value: lib.mkOverride 999 value

446
lib/wm.nix Normal file
View 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
View 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

View file

@ -1,98 +1,97 @@
{
lib,
config,
pkgs,
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"
]);
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"
]);
type = with lib.types; (enum [
"amd"
"intel"
]);
example = "intel";
description = ''
cpu microcode.
'';
};
monitor = lib.mkOption {
default = "";
example = "eDP-1";
type = lib.types.str;
additionalBootKernalParams = lib.mkOption {
default = [];
example = [];
type = with lib.types; listOf str;
description = ''
main monitor
additional kernelParams passed to bootloader
'';
};
scale = lib.mkOption {
default = "1.0";
example = "1.0";
type = lib.types.str;
description = ''
Scale for the monitor
'';
};
ironbar = {
modules = lib.mkOption {
default = [ ];
example = [
{
type = "upower";
class = "memory-usage";
}
];
type = with lib.types; listOf attrs;
description = ''
Adds modules to ironbar.
'';
};
};
boot_params = lib.mkOption {
default = [ ];
example = [ "resume=something" ];
bootParams = lib.mkOption {
default = [];
example = ["resume=something"];
type = with lib.types; listOf str;
description = ''
Boot params
'';
};
streamdeck = {
enable = lib.mkOption {
default = false;
example = true;
type = lib.types.bool;
description = ''
Install streamdeck configuration program.
'';
};
};
kernelOverride = lib.mkOption {
default = null;
type = with lib.types; nullOr package;
@ -104,7 +103,7 @@
};
username = lib.mkOption {
default = "dashie";
default = "DashNix";
example = "pingpang";
type = lib.types.str;
description = ''
@ -130,7 +129,7 @@
'';
};
nixos-config-path = lib.mkOption {
nixosConfigPath = lib.mkOption {
default = "/home/${config.conf.username}/gits/nixos/.";
example = "yourpath/.";
type = lib.types.str;
@ -139,63 +138,30 @@
'';
};
nvim-colorscheme = lib.mkOption {
default = {
tokyonight = {
enable = true;
};
};
example = {
catppuccin = {
enable = true;
};
};
type = lib.types.attrs;
description = ''
nixvim colorscheme.
'';
};
nix_path = lib.mkOption {
default = "/home${config.conf.username}/gits/nixos";
example = "yourpath";
type = lib.types.str;
description = ''
The default path for your configuration.
'';
};
kb_layout = lib.mkOption {
default = "dashie";
example = "us";
type = lib.types.str;
description = ''
The layout used in services.
'';
};
systemStateVersion = lib.mkOption {
default = "unstable";
example = "24.05";
example = "24.11";
default = "23.05";
type = lib.types.str;
description = ''
System state version
'';
};
homeStateVersion = lib.mkOption {
default = "24.05";
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;
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) {

View file

@ -3,9 +3,7 @@
config,
options,
...
}:
{
}: {
options.mods = {
acpid.enable = lib.mkOption {
default = false;
@ -18,6 +16,6 @@
};
config = lib.mkIf config.mods.acpid.enable (
lib.optionalAttrs (options ? virtualisation.virtualbox.host) { services.acpid.enable = true; }
lib.optionalAttrs (options ? virtualisation.virtualbox.host) {services.acpid.enable = true;}
);
}

145
modules/programs/anyrun.nix Normal file
View 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;
};
}
);
}

View 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;
};
}

View file

@ -1,102 +0,0 @@
{
config,
lib,
options,
pkgs,
inputs,
...
}:
{
options.mods = {
base_packages = {
default_base_packages = {
enable = lib.mkOption {
default = true;
example = false;
type = lib.types.bool;
description = ''
Enables default system packages.
'';
};
additional_packages = 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.
'';
};
};
};
};
config = (
lib.optionalAttrs (options ? environment.systemPackages) {
environment.systemPackages = config.mods.base_packages.default_base_packages.additional_packages;
}
// (lib.mkIf config.mods.base_packages.default_base_packages.enable (
lib.optionalAttrs (options ? environment.systemPackages) {
environment.systemPackages = with pkgs; [
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
libadwaita
libxkbcommon
nixfmt-rfc-style
openssl
seahorse
upower
xorg.xkbutils
];
gtk.iconCache.enable = false;
services = {
upower.enable = true;
dbus = {
enable = true;
packages = with pkgs; [ gnome2.GConf ];
};
avahi = {
enable = true;
nssmdns4 = true;
openFirewall = true;
};
};
programs = {
nix-ld = {
enable = true;
libraries = with pkgs; [
jdk
zlib
];
};
direnv = {
package = pkgs.direnv;
silent = false;
loadInNixShell = true;
direnvrcExtra = "";
nix-direnv = {
enable = true;
package = pkgs.nix-direnv;
};
};
ssh.startAgent = true;
gnupg.agent.enable = true;
};
}
))
);
}

View file

@ -1,10 +1,10 @@
{
mkDashDefault,
lib,
config,
options,
...
}:
{
}: {
options.mods = {
bluetooth.enable = lib.mkOption {
default = false;
@ -19,8 +19,8 @@
config = lib.mkIf config.mods.bluetooth.enable (
lib.optionalAttrs (options ? hardware.bluetooth) {
hardware.bluetooth = {
enable = true;
powerOnBoot = true;
enable = mkDashDefault true;
powerOnBoot = mkDashDefault true;
};
}
);

View 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];
}
);
}

View 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];
}
);
}

View file

@ -0,0 +1,9 @@
{
imports = [
./brave.nix
./chromium.nix
./firefox.nix
./librewolf.nix
./zen.nix
];
}

View 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;
};
}
);
}

View 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;
};
}
);
}

View 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
View 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];}
);
}

View file

@ -1,11 +1,15 @@
{
mkDashDefault,
lib,
config,
pkgs,
options,
inputs,
system,
...
}:
{
}: let
font_family = "${config.mods.stylix.fonts.monospace.name}";
in {
options.mods = {
coding = {
enable = lib.mkOption {
@ -32,6 +36,102 @@
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;
@ -39,8 +139,8 @@
description = "Use default base packages (only additionalPackages are installed if false)";
};
additionalPackages = lib.mkOption {
default = [ ];
example = [ ];
default = [];
example = [];
type = with lib.types; listOf package;
description = "Additional packages to be installed";
};
@ -60,7 +160,7 @@
ghc
haskellPackages.haskell-language-server
];
example = [ ];
example = [];
type = with lib.types; listOf package;
description = ''
haskell packages
@ -80,9 +180,8 @@
default = with pkgs; [
typst
tinymist
ltex-ls
];
example = [ ];
example = [];
type = with lib.types; listOf package;
description = ''
typst packages
@ -103,7 +202,7 @@
go
gopls
];
example = [ ];
example = [];
type = with lib.types; listOf package;
description = ''
Go packages
@ -120,8 +219,8 @@
'';
};
packages = lib.mkOption {
default = with pkgs; [ rustup ];
example = [ ];
default = with pkgs; [rustup];
example = [];
type = with lib.types; listOf package;
description = ''
Rust packages
@ -145,7 +244,7 @@
nodePackages.typescript-language-server
nodePackages.prettier
];
example = [ ];
example = [];
type = with lib.types; listOf package;
description = ''
TS/JS packages
@ -166,7 +265,7 @@
zig
zls
];
example = [ ];
example = [];
type = with lib.types; listOf package;
description = ''
zig packages
@ -189,7 +288,7 @@
jdt-language-server
temurin-jre-bin
];
example = [ ];
example = [];
type = with lib.types; listOf package;
description = ''
Java packages
@ -208,15 +307,17 @@
packages = lib.mkOption {
default = with pkgs; [
#.!
dotnet-sdk_8
omnisharp-roslyn
(with dotnetCorePackages;
combinePackages [
sdk_8_0
sdk_9_0
])
csharpier
netcoredbg
#fsharp
fsharp
fsautocomplete
];
example = [ ];
example = [];
type = with lib.types; listOf package;
description = ''
C#/F# packages
@ -235,10 +336,11 @@
packages = lib.mkOption {
default = with pkgs; [
bear
gdb
gcc
clang-tools
];
example = [ ];
example = [];
type = with lib.types; listOf package;
description = ''
C/C++ packages
@ -261,7 +363,7 @@
python312Packages.python-lsp-ruff
python312Packages.python-lsp-black
];
example = [ ];
example = [];
type = with lib.types; listOf package;
description = ''
python packages
@ -287,7 +389,7 @@
#json
jq
];
example = [ ];
example = [];
type = with lib.types; listOf package;
description = ''
packages for said filetypes
@ -308,7 +410,7 @@
bash-language-server
shfmt
];
example = [ ];
example = [];
type = with lib.types; listOf package;
description = ''
bash packages
@ -330,7 +432,7 @@
tailwindcss-language-server
# html-tidy
];
example = [ ];
example = [];
type = with lib.types; listOf package;
description = ''
html/css packages
@ -351,13 +453,31 @@
nodePackages.sql-formatter
sqls
];
example = [ ];
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;
@ -368,8 +488,8 @@
'';
};
packages = lib.mkOption {
default = with pkgs; [ asm-lsp ];
example = [ ];
default = with pkgs; [asm-lsp];
example = [];
type = with lib.types; listOf package;
description = ''
assembly packages
@ -380,35 +500,59 @@
};
};
config =
let
basePackages = with pkgs; [
gitui
meson
ninja
tree-sitter
unzip
pkg-config
sqlite
plantuml
d-spy
tmux
tmate
#editors
neovide
#fallback
vscodium
];
in
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;
colorscheme = config.mods.stylix.colorscheme;
inherit (config.mods.stylix) colorscheme;
};
home.packages =
with pkgs;
[ (lib.mkIf config.mods.coding.jetbrains jetbrains-toolbox) ]
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)
@ -424,7 +568,8 @@
++ (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.zig.enable config.mods.coding.languages.zig.packages)
++ (lib.lists.optionals config.mods.coding.languages.gleam.enable config.mods.coding.languages.gleam.packages);
}
);
}

View 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 {};
};
}

View file

@ -1,40 +1,54 @@
{
imports = [
./acpid.nix
./base_packages.nix
./anyrun.nix
./basePackages.nix
./bluetooth.nix
./browser
./clam.nix
./coding.nix
./containers.nix
./drives.nix
./firefox.nix
./fancontrol.nix
./fastfetch.nix
./fish.nix
./flatpak.nix
./gaming.nix
./gdm.nix
./git.nix
./gnome.nix
./gnome_services.nix
./gnomeServices.nix
./gpu.nix
./greetd.nix
./home_packages.nix
./hyprland
./homePackages.nix
./hypr
./ironbar.nix
./kde.nix
./kde_connect.nix
./kdeConnect.nix
./keepassxc.nix
./kitty.nix
./media.nix
./mime.nix
./ncspot.nix
./nextcloud.nix
./niri.nix
./onedrive.nix
./oxi
./piper.nix
./podman.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
./virtualbox.nix
./virtmanager.nix
./wm.nix
./xkb.nix
./xone.nix
./yazi

View file

@ -3,134 +3,310 @@
config,
options,
...
}:
let
driveModule = lib.types.submodule {
options = {
name = lib.mkOption {
type = lib.types.str;
}: {
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 = ''
The path of the drive.
Note that a / is already added at the beginning.
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.
'';
default = "";
example = "drive2";
};
drive = lib.mkOption {
type = lib.types.attrsOf lib.types.anything;
description = "The attrs of the drive";
default = { };
example = {
device = "/dev/disk/by-label/DRIVE2";
fsType = "ext4";
};
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"
];
};
};
};
};
in
{
options.mods = {
drives = {
useSwap = {
enable = lib.mkOption {
default = true;
example = false;
type = lib.types.bool;
description = ''
Use default drive config
'';
};
};
defaultDrives = {
enable = lib.mkOption {
default = true;
example = false;
type = lib.types.bool;
description = ''
Use default drive config
'';
};
};
extraDrives = lib.mkOption {
default = [
];
example = [
{
name = "drive2";
drive = {
device = "/dev/disk/by-label/DRIVE2";
fsType = "ext4";
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"
];
};
};
};
};
}
];
# TODO: how to make this work
# type = with lib.types; listOf (attrsOf driveModule);
type = with lib.types; listOf (attrsOf anything);
description = ''
Extra drives to add.
'';
};
};
};
config = (
lib.optionalAttrs (options ? fileSystems) {
fileSystems =
builtins.listToAttrs (
};
}
// builtins.listToAttrs (
map (
{ name, drive }:
{
name,
drive,
}: {
name = "/" + name;
value = drive;
}
) config.mods.drives.extraDrives
)
// (lib.optionalAttrs config.mods.drives.defaultDrives.enable) {
"/" = {
device = "/dev/disk/by-label/ROOT";
fsType = "btrfs";
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 = "btrfs";
options = [
"noatime"
"nodiratime"
"discard"
];
};
};
# TODO make this convert to choice of drives -> thanks to funny types this doesn't work...
swapDevices = lib.mkIf config.mods.drives.useSwap.enable [ { device = "/dev/disk/by-label/SWAP"; } ];
}
);
)
config.mods.drives.extraDrives
);
};
};
}

View 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}
'';
};
})
);
}

View 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;
};
};
};
}

View file

@ -1,84 +0,0 @@
{
lib,
config,
options,
pkgs,
...
}:
{
options.mods.firefox = {
enable = lib.mkOption {
default = true;
example = false;
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";
};
extensions = lib.mkOption {
default = with pkgs.nur.repos.rycee.firefox-addons; [
ublock-origin
darkreader
privacy-badger
vimium
keepassxc-browser
i-dont-care-about-cookies
tokyo-night-v2
];
example = [ ];
type = with lib.types; listOf package;
description = "Firefox extensions (from nur)";
};
};
config = lib.mkIf config.mods.firefox.enable (
lib.optionalAttrs (options ? programs.firefox.profiles) {
programs.firefox = {
enable = true;
policies = config.mods.firefox.configuration;
profiles.${config.conf.username} = {
isDefault = true;
id = 0;
extensions = config.mods.firefox.extensions;
};
profiles."special" = {
isDefault = false;
id = 1;
extensions = config.mods.firefox.extensions;
};
};
}
);
}

View file

@ -1,10 +1,14 @@
{
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;
@ -30,7 +34,8 @@
programs.fish = {
enable = true;
shellInit =
if config.mods.fish.useDefaultConfig then
if config.mods.fish.useDefaultConfig
then
''
if status is-interactive
# Commands to run in interactive sessions can go here
@ -41,17 +46,21 @@
# Utility functions for zoxide.
#
export NIX_PATH="$NIX_PATH:${config.conf.nixos-config-path}"
export NIX_PATH="$NIX_PATH:${config.conf.nixosConfigPath}"
set EDITOR "neovide --no-fork"
alias rebuild='sudo nixos-rebuild switch --flake ${config.conf.nixos-config-path}'
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 "" '
@ -61,6 +70,13 @@
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.
@ -167,8 +183,7 @@
direnv hook fish | source
''
+ config.mods.fish.additionalConfig
else
config.mods.fish.additionalConfig;
else config.mods.fish.additionalConfig;
};
}
);

View file

@ -4,39 +4,18 @@
options,
pkgs,
...
}:
{
}: {
options.mods.flatpak = {
enable = lib.mkOption {
default = true;
example = false;
default = false;
example = true;
type = lib.types.bool;
description = "Enables the flatpak package manager";
};
additional_packages = lib.mkOption {
default = [ ];
example = [ ];
type = with lib.types; listOf str;
description = "Flatpak packages";
};
};
config = lib.mkIf config.mods.flatpak.enable (
lib.optionalAttrs (options ? services.flatpak.remote) {
environment.systemPackages = [ pkgs.flatpak ];
services.flatpak.remotes = lib.mkOptionDefault [
{
name = "flathub-stable";
location = "https://dl.flathub.org/repo/flathub.flatpakrepo";
}
];
services.flatpak.uninstallUnmanaged = true;
}
// lib.optionalAttrs (options ? services.flatpak.packages) {
services.flatpak.packages = [
# fallback if necessary, but generally avoided as nix is superior :)
# default flatseal installation since flatpak permissions are totally not a broken idea
"com.github.tchx84.Flatseal"
] ++ config.mods.flatpak.additional_packages;
lib.optionalAttrs (options ? environment.systemPackages) {
environment.systemPackages = [pkgs.flatpak];
}
);
}

View file

@ -1,11 +1,11 @@
{
mkDashDefault,
lib,
config,
options,
pkgs,
...
}:
{
}: {
options.mods.gaming = {
enable = lib.mkOption {
default = false;
@ -15,22 +15,33 @@
};
tools = lib.mkOption {
default = with pkgs; [
protonplus
gamescope
gamemode
steam
lutris
wine
# TODO broken
# lutris
wineWowPackages.stable
adwsteamgtk
heroic
mangohud
nexusmods-app
steamtinkerlaunch
winetricks
];
example = [ ];
example = [];
type = with lib.types; listOf package;
description = "Install gaming related packages";
};
kernel = lib.mkOption {
default = true;
example = false;
default = false;
example = true;
type = lib.types.bool;
description = "Whether to use the xanmod kernel";
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;
@ -44,42 +55,91 @@
type = lib.types.bool;
description = "Whether to use gamemode";
};
gpu_optimization = lib.mkOption {
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!";
};
gpu_device = lib.mkOption {
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.linuxPackages_xanmod_latest;
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 = config.mods.gaming.steam;
steam.enable = mkDashDefault config.mods.gaming.steam;
gamemode.enable = true;
gamemode = {
enableRenice = true;
settings = {
general = {
governor = "performance";
desiredgov = mkDashDefault "performance";
};
gpu = lib.mkIf config.mods.gaming.gpu_optimization {
apply_gpu_optimisations = "accept-responsibility";
gpu_device = config.mods.gaming.gpu_device;
amd_performance_level = "high";
nv_powermizer_mode = 1;
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 = "notify-send -a 'Gamemode' 'Optimizations activated'";
end = "notify-send -a 'Gamemode' 'Optimizations deactivated'";
start = mkDashDefault "notify-send -a 'Gamemode' 'Optimizations activated'";
end = mkDashDefault "notify-send -a 'Gamemode' 'Optimizations deactivated'";
};
};
};

View file

@ -3,8 +3,7 @@
options,
config,
...
}:
{
}: {
options.mods.gdm = {
enable = lib.mkOption {
default = false;
@ -13,8 +12,8 @@
description = "Enables the gdm displayManager";
};
extraOptions = lib.mkOption {
default = { };
example = { };
default = {};
example = {};
type = with lib.types; attrsOf anything;
description = "Extra options to be applied to the gnome config";
};

View file

@ -2,68 +2,63 @@
lib,
config,
options,
pkgs,
...
}:
{
}: {
options.mods.git = {
username = lib.mkOption {
default = "DashieTM";
default = "";
example = "globi";
type = lib.types.str;
description = "Git user name";
};
email = lib.mkOption {
default = "fabio.lenherr@gmail.com";
default = "";
example = "globi@globus.glob";
type = lib.types.str;
description = "Git email";
};
ssh_config = lib.mkOption {
default = ''
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
""
}
Host gitlab.com
${
if (config ? sops.secrets && config.sops.secrets ? lab.path) then
"IdentityFile ${config.sops.secrets.lab.path}"
else
""
}
Host dashie.org
${
if (config ? sops.secrets && config.sops.secrets ? dashie.path) then
"IdentityFile ${config.sops.secrets.dashie.path}"
else
""
}
if (config ? sops.secrets && config.sops.secrets ? hub.path)
then "IdentityFile ${config.sops.secrets.hub.path}"
else ""
}
'';
example = "";
type = lib.types.lines;
description = "ssh configuration (keys for git)";
};
};
config = (
lib.optionalAttrs (options ? programs.git && options ? home.file) {
programs.git = {
enable = true;
userName = config.mods.git.username;
userEmail = config.mods.git.email;
extraConfig = {
merge = {
tool = "nvimdiff";
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;
};
diff = {
tool = "nvimdiff";
};
};
};
home.file.".ssh/config".text = config.mods.git.ssh_config;
}
);
}
// config.mods.git.additionalConfig;
};
home.file.".ssh/config".text = config.mods.git.sshConfig;
};
}

View file

@ -4,8 +4,7 @@
config,
pkgs,
...
}:
{
}: {
options.mods.gnome = {
enable = lib.mkOption {
default = false;
@ -20,27 +19,26 @@
description = "Use default options provided by module. If disabled, will only apply extraOptions.";
};
extraOptions = lib.mkOption {
default = { };
example = { };
default = {};
example = {};
type = with lib.types; attrsOf anything;
description = "Extra options to be applied to the gnome config";
};
extraDconf = lib.mkOption {
default = { };
example = { };
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
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) (
{
@ -49,7 +47,7 @@
desktopManager.gnome.enable = true;
};
}
// lib.mkIf config.mods.gnome.useDefaultOptions { environment.systemPackages = defaultExtensions; }
// lib.mkIf config.mods.gnome.useDefaultOptions {environment.systemPackages = defaultExtensions;}
// {
services.xserver.desktopManager.gnome = config.mods.gnome.extraOptions;
}
@ -63,6 +61,11 @@
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";
};
};
};
}

View 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;
};
}
);
}

View file

@ -1,55 +0,0 @@
{
lib,
config,
options,
pkgs,
...
}:
{
options.mods = {
gnome_services.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.gnome_services.enable (
lib.optionalAttrs (options ? services.gnome.gnome-keyring) {
programs.dconf.enable = true;
services = {
# needed for GNOME services outside of GNOME Desktop
dbus.packages = with pkgs; [
gcr
gnome.gnome-settings-daemon
];
gnome.gnome-keyring.enable = true;
gvfs.enable = true;
};
}
// lib.optionalAttrs (options ? home.packages) {
home.packages =
let
packages = with pkgs; [
nautilus
sushi
nautilus-python
];
in
lib.mkIf config.mods.nautilus.enable packages;
}
);
}

View file

@ -1,104 +1,111 @@
{
mkDashDefault,
lib,
config,
options,
pkgs,
...
}:
{
options.mods = {
gpu = {
nvidia.enable = lib.mkOption {
default = false;
example = true;
}: {
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 nvidia support.
Enables vapi.
'';
};
amdgpu.enable = lib.mkOption {
rocm.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.
Enables rocm 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 ? hardware.graphics) {
boot = lib.mkIf config.mods.amdgpu.enable {
kernelModules = [ "kvm-amd" ];
initrd.kernelModules = [ "amdgpu" ];
kernelParams = [ "amdgpu.ppfeaturemask=0xffffffff" ];
};
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 [];
hardware = {
graphics =
let
amdPackages = [
(lib.mkIf (config.mods.gpu.intelgpu && lib.mkIf config.mods.gpu.vapi.enable) pkgs.vpl-gpu-rt)
(lib.mkIf (
config.mods.gpu.intelgpu && 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.vaapiVdpau)
(lib.mkIf (config.mods.gpu.intelgpu || config.mods.gpu.amdgpu) pkgs.mesa.drivers)
];
rocmPackages = [
pkgs.rocmPackages.clr.icd
pkgs.rocm-opencl-runtime
];
in
{
enable = true;
enable32Bit = lib.mkDefault true;
extraPackages =
amdPackages
++ (lib.lists.optionals (config.mods.gpu.vapi.rocm.enable && config.mods.gpu.amdgpu) rocmPackages);
};
};
})
// lib.optionalAttrs (options ? hardware.graphics) (
lib.mkIf config.mods.gpu.nvidia.enable {
hardware.nvidia = {
modesetting.enable = true;
# powerManagement.enable = false;
# powerManagement.finegrained = true;
open = true;
nvidiaSettings = true;
package = config.boot.kernelPackages.nvidiaPackages.beta;
};
services.xserver.videoDrivers = [ "nvidia" ];
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);
};
};
};
}

View file

@ -1,12 +1,13 @@
{
mkDashDefault,
config,
lib,
inputs,
pkgs,
options,
system,
...
}:
{
}: {
options.mods = {
greetd = {
enable = lib.mkOption {
@ -18,7 +19,10 @@
'';
};
monitor = lib.mkOption {
default = "${config.conf.monitor}";
default =
if config.mods.wm.monitors != []
then (builtins.elemAt config.mods.wm.monitors 0).name
else "";
example = "eDP-1";
type = lib.types.str;
description = ''
@ -27,7 +31,10 @@
'';
};
scale = lib.mkOption {
default = "${config.conf.scale}";
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 = ''
@ -35,8 +42,25 @@
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 = "auto";
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 = ''
@ -44,60 +68,57 @@
'';
};
environments = lib.mkOption {
default = ''
Hyprland
'';
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 = ''
Niri
River
'';
type = lib.types.lines;
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
username = config.conf.username;
session = {
command = "${
lib.getExe inputs.hyprland.packages.${config.conf.system}.hyprland
} --config /etc/greetd/hyprgreet.conf";
user = username;
};
in
config = let
inherit (config.conf) username;
in
lib.mkIf config.mods.greetd.enable (
lib.optionalAttrs (options ? environment) {
services.xserver.displayManager.session = [
{
manage = "desktop";
name = "Hyprland";
start = ''
${lib.getExe pkgs.hyprland} & waitPID=$!
'';
}
];
# greetd display manager
programs.hyprland.enable = true;
services.greetd = {
enable = true;
settings = {
terminal.vt = 1;
default_session = session;
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;
};
};
};
};
environment.etc."greetd/environments".text = config.mods.greetd.environments;
# 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 = ''
exec-once=gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark'
monitor=${config.mods.greetd.monitor},${config.mods.greetd.resolution},0x0,${config.mods.greetd.scale}
monitor=,disable
@ -107,23 +128,37 @@
force_no_accel = true
}
cursor {
enable_hyprcursor = false
}
misc {
disable_splash_rendering = false
disable_hyprland_logo = 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; hyprctl dispatch exit
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 = true;
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;
}
);
}

View 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;
};
}

View file

@ -1,120 +0,0 @@
{
lib,
options,
config,
pkgs,
...
}:
{
options.mods.home_packages = {
useDefaultPackages = lib.mkOption {
default = true;
example = false;
type = lib.types.bool;
description = "Use default packages (will use additional_packages only if disabled)";
};
additional_packages = 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.
'';
};
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";
};
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";
};
additionalBrowser = lib.mkOption {
default = pkgs.brave;
example = null;
type = with lib.types; nullOr package;
description = "Additional browser -> second to firefox, the only installed browser if firefox is disabled";
};
};
config =
(lib.optionalAttrs (options ? home.packages) {
home.packages = config.mods.home_packages.additional_packages;
})
// lib.mkIf config.mods.home_packages.useDefaultPackages (
lib.optionalAttrs (options ? home.packages) {
home.packages =
with pkgs;
[
# TODO add fcp once fixed....
(lib.mkIf config.mods.home_packages.ncspot ncspot)
(lib.mkIf config.mods.home_packages.vesktop vesktop)
(lib.mkIf config.mods.home_packages.nextcloudClient nextcloud-client)
(lib.mkIf (!isNull config.mods.home_packages.matrixClient) config.mods.home_packages.matrixClient)
(lib.mkIf (!isNull config.mods.home_packages.mailClient) config.mods.home_packages.mailClient)
(lib.mkIf (
!isNull config.mods.home_packages.additionalBrowser
) config.mods.home_packages.additionalBrowser)
adw-gtk3
bat
brightnessctl
dbus
fastfetch
fd
ffmpeg
flake-checker
gnome-keyring
gnutar
greetd.regreet
killall
kitty
libnotify
lsd
networkmanager
nh
nix-index
playerctl
poppler_utils
pulseaudio
qt5ct
qt6ct
ripgrep
rm-improved
system-config-printer
xournalpp
zenith
zoxide
]
++ config.mods.home_packages.additional_packages;
xdg.configFile."direnv/direnv.toml".source = (pkgs.formats.toml { }).generate "direnv" {
global = {
warn_timeout = "-1s";
};
};
}
);
}

View file

@ -1,8 +1,6 @@
{
imports = [
./hyprland.nix
./anyrun.nix
./ironbar.nix
./hyprlock.nix
./hyprpaper.nix
];

View 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;
};
}
);
}

View 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;
};
}
);
}

View 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;
};
}
);
}

View file

@ -1,96 +0,0 @@
{
lib,
config,
pkgs,
options,
inputs,
...
}:
{
options.mods = {
hyprland.anyrun = {
enable = lib.mkOption {
default = true;
example = false;
type = lib.types.bool;
description = "Enables anyrun";
};
};
};
config = lib.mkIf config.mods.hyprland.anyrun.enable (
lib.optionalAttrs (options ? programs.anyrun) {
programs.anyrun = {
enable = true;
config = {
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
];
#position = "center";
hideIcons = false;
width = {
fraction = 0.3;
};
y = {
fraction = 0.5;
};
layer = "overlay";
hidePluginInfo = true;
closeOnClick = true;
};
extraCss = ''
#window {
border-radius: 10px;
background-color: none;
}
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: none;
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;
}
'';
};
}
);
}

View file

@ -1,353 +0,0 @@
{
config,
lib,
options,
pkgs,
...
}:
{
options.mods = {
hyprland = {
enable = lib.mkOption {
default = true;
example = false;
type = lib.types.bool;
description = ''
Enable Hyprland
'';
};
monitor = lib.mkOption {
default = [ ];
example = [ "DP-1,3440x1440@180,2560x0,1,vrr,0" ];
type = with lib.types; listOf str;
description = ''
The monitor configuration for hyprland.
'';
};
workspace = lib.mkOption {
default = [ ];
example = [ "2,monitor:DP-1, default:true" ];
type = with lib.types; listOf str;
description = ''
The workspace configuration for hyprland.
'';
};
no_atomic = lib.mkOption {
default = false;
example = true;
type = lib.types.bool;
description = ''
Use tearing
'';
};
extra_autostart = lib.mkOption {
default = [ ];
example = [ "your application" ];
type = lib.types.listOf lib.types.str;
description = ''
Extra exec_once.
'';
};
use_default_config = lib.mkOption {
default = true;
example = false;
type = lib.types.bool;
description = ''
Use preconfigured Hyprland config.
'';
};
custom_config = lib.mkOption {
default = { };
example = { };
type = with lib.types; attrsOf anything;
description = ''
Custom Hyprland configuration.
Will be merged with default configuration if enabled.
'';
};
};
};
config = lib.mkIf config.mods.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-hyprland
copyq
wl-clipboard
hyprcursor
hyprpicker
];
wayland.windowManager.hyprland.enable = true;
wayland.windowManager.hyprland.settings =
lib.mkIf config.mods.hyprland.use_default_config {
"$mod" = "SUPER";
bindm = [
"$mod, mouse:272, movewindow"
"$mod, mouse:273, resizewindow"
];
bind = [
# screenshots
''$mod SUPER,S,exec,grim -g "$(slurp)" - | wl-copy''
''$mod SUPERSHIFT,S,exec,grim -g "$(slurp)" - | satty -f -''
''$mod SUPERSHIFTALT,S,exec,grim -c -g "2560,0 3440x1440" - | wl-copy''
# regular programs
"$mod SUPER,F,exec,firefox"
"$mod SUPERSHIFT,F,exec,firefox -p special"
"$mod SUPER,T,exec,kitty -1"
"$mod SUPER,E,exec,nautilus -w"
"$mod SUPER,N,exec,neovide"
"$mod SUPER,M,exec,oxidash"
"$mod SUPER,R,exec,anyrun"
"$mod SUPER,G,exec,oxicalc"
"$mod SUPER,D,exec,oxishut"
"$mod SUPER,A,exec,oxipaste"
"$mod SUPERSHIFT,P,exec,hyprdock --gui"
"$mod SUPERSHIFT,L,exec, playerctl -a pause & hyprlock & systemctl suspend"
"$mod SUPERSHIFT,K,exec, playerctl -a pause & hyprlock & systemctl hibernate"
# media keys
(lib.mkIf config.mods.scripts.audio-control ",XF86AudioMute,exec, audio-control mute")
(lib.mkIf config.mods.scripts.audio-control ",XF86AudioLowerVolume,exec, audio-control sink -5%")
(lib.mkIf config.mods.scripts.audio-control ",XF86AudioRaiseVolume,exec, audio-control sink +5%")
",XF86AudioPlay,exec, playerctl play-pause"
",XF86AudioNext,exec, playerctl next"
",XF86AudioPrev,exec, playerctl previous"
(lib.mkIf config.mods.scripts.change-brightness ",XF86MonBrightnessDown,exec, change-brightness brightness 10%-")
(lib.mkIf config.mods.scripts.change-brightness ",XF86MonBrightnessUp,exec, change-brightness brightness +10%")
# hyprland keybinds
# misc
"$mod SUPER,V,togglefloating,"
"$mod SUPER,B,fullscreen,"
"$mod SUPER,C,togglesplit"
"$mod SUPER,Q,killactive,"
"$mod SUPERSHIFTALT,M,exit,"
"$mod SUPERSHIFT,W,togglespecialworkspace"
# move
"$mod SUPER,left,movewindow,l"
"$mod SUPER,right,movewindow,r"
"$mod SUPER,up,movewindow,u"
"$mod SUPER,down,movewindow,d"
# workspaces
"$mod SUPER,1,workspace,1"
"$mod SUPER,2,workspace,2"
"$mod SUPER,3,workspace,3"
"$mod SUPER,4,workspace,4"
"$mod SUPER,5,workspace,5"
"$mod SUPER,6,workspace,6"
"$mod SUPER,7,workspace,7"
"$mod SUPER,8,workspace,8"
"$mod SUPER,9,workspace,9"
"$mod SUPER,0,workspace,10"
# move to workspace
"$mod SUPERSHIFT,1,movetoworkspace,1"
"$mod SUPERSHIFT,2,movetoworkspace,2"
"$mod SUPERSHIFT,3,movetoworkspace,3"
"$mod SUPERSHIFT,4,movetoworkspace,4"
"$mod SUPERSHIFT,5,movetoworkspace,5"
"$mod SUPERSHIFT,6,movetoworkspace,6"
"$mod SUPERSHIFT,7,movetoworkspace,7"
"$mod SUPERSHIFT,8,movetoworkspace,8"
"$mod SUPERSHIFT,9,movetoworkspace,9"
"$mod SUPERSHIFT,0,movetoworkspace,10"
# move to workspace silent
"$mod SUPERSHIFTALT,1,movetoworkspacesilent,1"
"$mod SUPERSHIFTALT,2,movetoworkspacesilent,2"
"$mod SUPERSHIFTALT,3,movetoworkspacesilent,3"
"$mod SUPERSHIFTALT,4,movetoworkspacesilent,4"
"$mod SUPERSHIFTALT,5,movetoworkspacesilent,5"
"$mod SUPERSHIFTALT,6,movetoworkspacesilent,6"
"$mod SUPERSHIFTALT,7,movetoworkspacesilent,7"
"$mod SUPERSHIFTALT,8,movetoworkspacesilent,8"
"$mod SUPERSHIFTALT,9,movetoworkspacesilent,9"
"$mod SUPERSHIFTALT,0,movetoworkspacesilent,10"
# preselection
"$mod SUPERALT,j,layoutmsg,preselect l"
"$mod SUPERALT,k,layoutmsg,preselect d"
"$mod SUPERALT,l,layoutmsg,preselect u"
"$mod SUPERALT,semicolon,layoutmsg,preselect r"
"$mod SUPERALT,h,layoutmsg,preselect n"
];
binde = [
# hyprland keybinds
# focus
"$mod SUPER,J,movefocus,l"
"$mod SUPER,semicolon,movefocus,r"
"$mod SUPER,L,movefocus,u"
"$mod SUPER,K,movefocus,d"
# resize
"$mod SUPER,U,resizeactive,-20 0"
"$mod SUPER,P,resizeactive,20 0"
"$mod SUPER,O,resizeactive,0 -20"
"$mod SUPER,I,resizeactive,0 20"
];
general = {
gaps_out = "3,5,5,5";
border_size = 3;
"col.active_border" = lib.mkForce "0xFFFF0000 0xFF00FF00 0xFF0000FF 45deg";
# "col.inactive_border" = "0x66333333";
allow_tearing = lib.mkIf config.mods.hyprland.no_atomic true;
};
decoration = {
rounding = 4;
};
animations = {
bezier = "penguin,0.05,0.9,0.1,1.0";
animation = [
"windowsMove,1,4,default"
"windows,1,7,default,popin 70%"
"windowsOut,1,7,default,popin 70%"
"border,1,10,default"
"fade,1,7,default"
"workspaces,1,6,default"
"layers,1,3,default,popin"
];
};
dwindle = {
preserve_split = true;
pseudotile = 0;
permanent_direction_override = false;
};
input = {
kb_layout = "${config.mods.xkb.layout}";
kb_variant = "${config.mods.xkb.variant}";
repeat_delay = 200;
force_no_accel = true;
touchpad = {
natural_scroll = true;
tap-to-click = true;
tap-and-drag = true;
};
};
misc = {
animate_manual_resizes = 1;
enable_swallow = true;
disable_splash_rendering = true;
disable_hyprland_logo = true;
swallow_regex = "^(.*)(kitty)(.*)$";
initial_workspace_tracking = 1;
};
cursor = {
# conversion seems to be borked right now, i want a smooth bibata :(
enable_hyprcursor = false;
no_hardware_cursors = lib.mkIf config.mods.gpu.nvidia.enable true;
# no_break_fs_vrr = true;
};
gestures = {
workspace_swipe = true;
};
monitor = config.mods.hyprland.monitor;
workspace = config.mods.hyprland.workspace;
env = [
"GTK_CSD,0"
''TERM,"kitty /bin/fish"''
"XDG_CURRENT_DESKTOP=Hyprland"
"XDG_SESSION_TYPE=wayland"
"XDG_SESSION_DESKTOP=Hyprland"
"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"''
(lib.mkIf config.mods.hyprland.no_atomic "WLR_DRM_NO_ATOMIC,1")
"GTK_USE_PORTAL, 1"
(lib.mkIf config.mods.gpu.nvidia.enable "LIBVA_DRIVER_NAME,nvidia")
(lib.mkIf config.mods.gpu.nvidia.enable "XDG_SESSION_TYPE,wayland")
(lib.mkIf config.mods.gpu.nvidia.enable "GBM_BACKEND,nvidia-drm")
(lib.mkIf config.mods.gpu.nvidia.enable "__GLX_VENDOR_LIBRARY_NAME,nvidia")
];
layerrule = [
# layer rules
# mainly to disable animations within slurp and grim
"noanim, selection"
];
windowrule = [
# window rules
"tile,^(.*)(Spotify)(.*)$"
"float,^(.*)(OxiCalc)(.*)$"
"float,^(.*)(winecfg.exe)(.*)$"
"float,^(.*)(speed.exe)(.*)$"
"float,^(.*)(copyq)(.*)$"
"center,^(.*)(swappy)(.*)$"
"float,title:^(.*)(Spirit)(.*)$"
"float,title:^(.*)(reset)(.*)$"
"workspace 10 silent,^(.*)(steam)(.*)$"
"workspace 9 silent,^(.*)(dota)(.*)$"
"workspace 9 silent,^(.*)(battlebits)(.*)$"
"workspace 9 silent,^(.*)(aoe)(.*)$"
"suppressevent fullscreen maximize,^(.*)(neovide)(.*)$"
];
windowrulev2 = [
"immediate,class:^(.*)(Pal)$"
"immediate,class:^(.*)(dota2)$"
"immediate,class:^(.*)(needforspeedheat.exe)$"
];
exec-once = [
# environment
"systemctl --user import-environment"
"dbus-update-activation-environment --systemd --all"
"hyprctl setcursor Bibata-Modern-Classic 24"
# other programs
"hyprpaper"
"ironbar"
"firefox"
"oxipaste_daemon"
# should be taken care of with the new systemd services
# "nextcloud --background"
"oxinoti"
] ++ config.mods.hyprland.extra_autostart;
# plugin = {
# hyprspace = {
# bind = [
# "SUPER, W, overview:toggle, toggle"
# ];
# };
# };
}
// config.mods.hyprland.custom_config;
# wayland.windowManager.hyprland.plugins = [
# inputs.Hyprspace.packages.${pkgs.system}.Hyprspace
# ];
}
);
}

View file

@ -1,56 +0,0 @@
{
config,
lib,
options,
pkgs,
...
}:
{
options.mods = {
hyprland.hyprlock = {
enable = lib.mkOption {
default = true;
example = false;
type = lib.types.bool;
description = "Enables Hyprlock";
};
};
};
config = lib.mkIf config.mods.hyprland.hyprlock.enable (
lib.optionalAttrs (options ? xdg.configFile) {
home.packages = with pkgs; [ hyprlock ];
programs.hyprlock = lib.mkIf config.mods.hyprland.hyprlock.enable {
enable = true;
settings = {
background = [
{
monitor = "";
path = "";
color = "rgba(26, 27, 38, 1.0)";
}
];
input-field = [
{
monitor = "${config.conf.monitor}";
placeholder_text = "password or something";
}
];
label = [
{
monitor = "${config.conf.monitor}";
text = "$TIME";
font_size = 50;
position = "0, 200";
valign = "center";
halign = "center";
}
];
};
};
}
);
}

View file

@ -1,38 +0,0 @@
{
config,
lib,
options,
pkgs,
...
}:
{
options.mods = {
hyprland.hyprpaper = {
enable = lib.mkOption {
default = true;
example = false;
type = lib.types.bool;
description = "Enables Hyprpaper";
};
config = lib.mkOption {
default = "";
example = ''
Hyprpaper config
'';
type = lib.types.lines;
description = ''
Hyprpaper config
'';
};
};
};
config = lib.mkIf config.mods.hyprland.hyprpaper.enable (
lib.optionalAttrs (options ? xdg.configFile) {
home.packages = with pkgs; [ hyprpaper ];
xdg.configFile."hypr/hyprpaper.conf" = lib.mkIf config.mods.hyprland.hyprpaper.enable {
text = config.mods.hyprland.hyprpaper.config;
};
}
);
}

View file

@ -1,280 +0,0 @@
{
lib,
config,
pkgs,
options,
...
}:
let
username = config.conf.username;
in
{
options.mods = {
hyprland.ironbar = {
enable = lib.mkOption {
default = true;
example = false;
type = lib.types.bool;
description = "Enables ironbar";
};
};
};
config = lib.mkIf config.mods.hyprland.ironbar.enable (
lib.optionalAttrs (options ? programs.ironbar) {
programs.ironbar = {
enable = true;
style = ''
@import url("/home/${username}/.config/gtk-3.0/gtk.css");
* {
color: #71bbe6;
padding: 0px;
margin: 0px;
}
.background {
background-color: rgba(0, 0, 0, 0);
}
.workspaces {
margin: 2px 0px 0px 5px;
border-radius: 10px;
/* background-color: #2b2c3b; */
background-color: #1E1E2E;
padding: 2px 5px 2px 5px;
}
.workspaces .item {
margin: 0px 3px 0px 3px;
font-size: 13px;
border-radius: 100%;
padding: 0px 2px 0px 3px;
background-color: rgba(0, 0, 0, 0);
}
.workspaces .item:hover {
background-color: #3e4152;
}
.workspaces .item.focused {
background-color: #3e4152;
}
.audio-box {
padding: 2em;
background-color: #1E1E2E;
border-radius: 5px;
}
.audio-slider {
padding: 5px;
margin: 5px;
}
.audio-button {
padding: 5px 10px 5px 10px;
margin: 0px 1em 20px 1em;
border-radius: 100%;
font-size: 17px;
}
.audio-button-box {
padding: 0px 2.5em 0px 2.5em;
}
.focused {
/* margin: 2px 0px 0px 0px; */
padding: 0px 5px 0px 5px;
/* background-color: 1a1b26; */
background-color: #1E1E2E;
font-size: 17px;
border-radius: 10px;
}
#bar #end {
margin: 0px 5px 0px 0px;
padding: 0px 5px 0px 5px;
background-color: #1E1E2E;
border-radius: 10px;
}
.popup-button {
padding: 0px 5px 0px 3px;
margin: 0em 3px;
border-radius: 100%;
font-size: 13px;
background-color: #1E1E2E;
}
.popup-button-box {
padding: 2px 0px 2px 0px;
}
.clock {
padding: 0px 5px 0px 5px;
font-size: 17px;
background-color: #1E1E2E;
}
.clock:hover {
background-color: #3e4152;
}
.custom button {
background-color: #1E1E2E;
}
.custom button:hover {
background-color: #3e4152;
}
.memory-usage {
font-size: 15px;
margin: 0px 5px 0px 0px;
}
.memory-usage:hover {
background-color: #3e4152;
}
.popup-clock {
background-color: #1E1E2E;
border-radius: 5px;
padding: 2px 8px 10px 8px;
}
.popup-clock .calendar-clock {
font-size: 2.5em;
padding-bottom: 0.1em;
}
.popup-clock .calendar {
border-radius: 5px;
font-size: 1.05em;
}
.popup-clock .calendar:selected {
background-color: #3e4152;
}
'';
features = [
#"another_feature"
];
config = {
monitors."${config.conf.monitor}" = {
end = config.conf.ironbar.modules ++ [
{
type = "sys_info";
format = [ " {memory_percent}" ];
interval.memory = 30;
class = "memory-usage";
}
{
type = "custom";
bar = [
{
type = "button";
class = "popup-button";
label = "";
on_click = "popup:toggle";
}
];
class = "popup-button-box";
popup = [
{
type = "box";
orientation = "vertical";
class = "audio-box";
widgets = [
{
type = "box";
orientation = "horizontal";
widgets = [
{
type = "button";
class = "audio-button";
label = "";
on_click = "!/home/${username}/.config/eww/scripts/audio_control.sh bluetooth";
}
{
type = "button";
class = "audio-button";
label = "󰋋";
on_click = "!/home/${username}/.config/eww/scripts/audio_control.sh internal";
}
];
class = "audio-button-box";
}
{
type = "label";
label = "Output";
}
{
type = "slider";
class = "audio-slider";
step = 1.0;
length = 200;
value = "pactl get-sink-volume @DEFAULT_SINK@ | awk -F'/' '{ print $2 }' | tr -d ' %'";
on_change = "!pactl set-sink-volume @DEFAULT_SINK@ $0%";
}
{
type = "label";
label = "Input";
}
{
type = "slider";
class = "audio-slider";
step = 1.0;
length = 200;
value = "pactl get-source-volume @DEFAULT_SOURCE@ | awk -F'/' '{ print $2 }' | tr -d ' %'";
on_change = "!pactl set-source-volume @DEFAULT_SOURCE@ $0%";
}
];
}
];
}
{
type = "custom";
bar = [
{
type = "button";
class = "popup-button";
label = "";
on_click = "!oxidash --css /home/${username}/gits/oxidash/style.css";
}
];
class = "popup-button-box";
}
{
type = "clock";
format = "%I:%M";
format_popup = "%I:%M:%S";
locale = "en_US";
}
{ type = "tray"; }
];
position = "top";
height = 10;
anchor_to_edges = true;
start = [
{
type = "workspaces";
all_monitors = true;
}
];
center = [
{
type = "focused";
show_icon = true;
show_title = true;
icon_size = 20;
truncate = "end";
}
];
};
};
};
}
);
}

View 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;
};
}
);
}

View file

@ -3,8 +3,7 @@
options,
config,
...
}:
{
}: {
options.mods.kde = {
enable = lib.mkOption {
default = false;
@ -20,5 +19,4 @@
services.desktopManager.plasma6.enable = true;
}
);
}

View file

@ -4,11 +4,9 @@
options,
pkgs,
...
}:
{
}: {
options.mods = {
kde_connect.enable = lib.mkOption {
kdeConnect.enable = lib.mkOption {
default = false;
type = lib.types.bool;
example = true;
@ -18,7 +16,7 @@
};
};
config = lib.mkIf config.mods.kde_connect.enable (
config = lib.mkIf config.mods.kdeConnect.enable (
lib.optionalAttrs (options ? networking.firewall) {
networking.firewall = {
allowedTCPPortRanges = [
@ -37,6 +35,8 @@
];
};
}
// lib.optionalAttrs (options ? home.packages) { home.packages = with pkgs; [ kdeconnect ]; }
// lib.optionalAttrs (options ? home.packages) {
home.packages = with pkgs; [kdePackages.kdeconnect-kde];
}
);
}

View file

@ -4,8 +4,7 @@
options,
pkgs,
...
}:
{
}: {
options.mods.keepassxc = {
enable = lib.mkOption {
default = true;
@ -13,54 +12,63 @@
type = lib.types.bool;
description = "Enables the piper program and its daemon";
};
use_cache_config = lib.mkOption {
useConfig = lib.mkOption {
default = true;
example = false;
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!";
description = "Whether to overwrite the config of keepassxc. Note, this means that changes can't be applied via the program anymore!";
};
cache_config = lib.mkOption {
config = lib.mkOption {
default = ''
[General]
LastDatabases=/home/${config.conf.username}/Music/Passwords.kdbx
LastActiveDatabase=/home/${config.conf.username}/Music/Passwords.kdbx
LastOpenedDatabases=/home/${config.conf.username}/Music/Passwords.kdbx
LastKeyFiles=@Variant(\0\0\0\x1c\0\0\0\x1\0\0\0\x42\0/\0h\0o\0m\0\x65\0/\0\x64\0\x61\0s\0h\0i\0\x65\0/\0M\0u\0s\0i\0\x63\0/\0P\0\x61\0s\0s\0w\0o\0r\0\x64\0s\0.\0k\0\x64\0\x62\0x\0\0\0\n\0\0\0\x42\0/\0h\0o\0m\0\x65\0/\0\x64\0\x61\0s\0h\0i\0\x65\0/\0M\0u\0s\0i\0\x63\0/\0l\0o\0g\0i\0n\0_\0k\0\x65\0y\0.\0k\0\x65\0y\0x)
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" = {
text = ''
[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
'';
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.use_cache_config {
text = config.mods.keepassxc.cache_config;
home.file.".cache/keepassxc/keepassxc.ini" = lib.mkIf config.mods.keepassxc.useCacheConfig {
text = config.mods.keepassxc.cacheConfig;
};
}
);

View file

@ -5,10 +5,9 @@
pkgs,
inputs,
...
}:
let
base16 = pkgs.callPackage inputs.base16.lib { };
scheme = (base16.mkSchemeAttrs config.stylix.base16Scheme);
}: let
base16 = pkgs.callPackage inputs.base16.lib {};
scheme = base16.mkSchemeAttrs config.stylix.base16Scheme;
hexTable = {
"0" = "1";
"1" = "0";
@ -32,10 +31,9 @@ let
"#"
+ lib.strings.concatStrings (
(lib.lists.take 5 (lib.strings.stringToCharacters scheme.base00))
++ [ hexTable."${(lib.lists.last (lib.strings.stringToCharacters scheme.base00))}" ]
++ [hexTable."${(lib.lists.last (lib.strings.stringToCharacters scheme.base00))}"]
);
in
{
in {
options.mods.kitty = {
enable = lib.mkOption {
default = true;
@ -43,14 +41,20 @@ in
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 = { };
default = {};
example = {
# for the insane people out there :P
enable_audio_bell = "yes";
};
type = with lib.types; attrsOf anything;
description = "Additional kitty configuration";
description = "Additional kitty configuration. Will be the only configuration if useDefaultConfig is disabled.";
};
};
config = lib.mkIf config.mods.kitty.enable (
@ -60,54 +64,65 @@ in
};
programs.kitty = {
enable = true;
settings = {
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";
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";
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;
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;
color0 = base;
color1 = "#" + scheme.base08;
color2 = "#" + scheme.base0B;
color3 = "#" + scheme.base0A;
color4 = "#" + scheme.base0D;
color5 = "#" + scheme.base0E;
color6 = "#" + scheme.base0C;
color7 = "#" + scheme.base05;
mark1_foreground = "#" + scheme.base00;
mark1_background = "#" + scheme.base07;
mark2_foreground = "#" + scheme.base00;
mark2_background = "#" + scheme.base0E;
mark3_foreground = "#" + scheme.base00;
mark3_background = "#" + scheme.base08;
color8 = "#" + scheme.base03;
color9 = "#" + scheme.base08;
color10 = "#" + scheme.base0B;
color11 = "#" + scheme.base0A;
color12 = "#" + scheme.base0D;
color13 = "#" + scheme.base0E;
color14 = "#" + scheme.base0C;
color15 = "#" + scheme.base07;
color0 = "#" + scheme.base03;
color1 = "#" + scheme.base08;
color2 = "#" + scheme.base0B;
color3 = "#" + scheme.base0A;
color4 = "#" + scheme.base0D;
color5 = "#" + scheme.base06;
color6 = "#" + scheme.base0C;
color7 = "#" + scheme.base07;
shell = lib.mkIf config.mods.fish.enable "fish";
} // config.mods.kitty.additionalConfig;
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;
};
}
);

View file

@ -4,8 +4,7 @@
config,
pkgs,
...
}:
{
}: {
options.mods.media = {
useBasePackages = lib.mkOption {
default = true;
@ -14,50 +13,111 @@
description = "Default media packages (If disabled, only the additional packages will be installed)";
};
additionalPackages = lib.mkOption {
default = [ ];
example = [ pkgs.flatpak ];
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;
};
config = (
lib.optionalAttrs (options ? home.packages) {
home.packages = config.mods.media.additionalPackages;
}
// (lib.mkIf config.mods.media.useBasePackages (
lib.optionalAttrs (options ? home.packages) {
home.packages = with pkgs; [
# base audio
pipewire
wireplumber
# audio control
playerctl
# images
imv
# videos
mpv
# pdf
zathura
evince
libreoffice-fresh
onlyoffice-bin
pdftk
pdfpc
polylux2pdfpc
# spotify
# video editing
kdenlive
# image creation
inkscape
gimp
krita
yt-dlp
];
programs.obs-studio.enable = true;
programs.obs-studio.plugins = with pkgs; [ obs-studio-plugins.obs-vaapi ];
}
))
);
}

161
modules/programs/mime.nix Normal file
View 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";
};
};
};
};
}

View file

@ -4,8 +4,7 @@
options,
pkgs,
...
}:
{
}: {
options.mods.ncspot = {
enable = lib.mkOption {
default = false;
@ -13,16 +12,13 @@
type = lib.types.bool;
description = "Enables ncspot with a config";
};
};
config = lib.mkIf config.mods.ncspot.enable (
lib.optionalAttrs (options ? home.packages) {
home.packages = with pkgs; [ ncspot ];
xdg.configFile."ncspot/config.toml".source = (pkgs.formats.toml { }).generate "ncspot" {
config = lib.mkOption {
default = {
notify = true;
shuffle = true;
cover_max_scale = 2;
initial_screen = "library";
library_tabs = [ "playlists" ];
library_tabs = ["playlists"];
theme = {
background = "#1a1b26";
primary = "#9aa5ce";
@ -53,6 +49,16 @@
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;
}
);
}

View file

@ -1,5 +1,4 @@
{ lib, ... }:
{
{lib, ...}: {
options.mods = {
nextcloud = {
enable = lib.mkOption {
@ -9,19 +8,19 @@
description = "Enable nextcloud";
};
username = lib.mkOption {
default = "DashieTM";
default = "";
example = "globi";
type = lib.types.str;
description = "Your username";
};
url = lib.mkOption {
default = "cloud.dashie.org";
default = "";
example = "cloud.globi.org";
type = lib.types.str;
description = "Your url";
};
synclist = lib.mkOption {
default = [ ];
default = [];
example = [
{
name = "sync globi folder";
@ -36,5 +35,4 @@
};
};
};
}

392
modules/programs/niri.nix Normal file
View 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;
};
}
);
}

View 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];
}
);
}

View file

@ -4,13 +4,13 @@
options,
inputs,
...
}:
{
}: {
imports = [
./oxidash.nix
./oxinoti.nix
./oxishut.nix
./oxipaste.nix
./oxirun.nix
./oxishut.nix
];
options.mods.oxi = {
enable = lib.mkOption {
@ -34,6 +34,12 @@
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 {
@ -47,7 +53,10 @@
config = lib.mkIf config.mods.oxi.enable (
lib.optionalAttrs (options ? home.packages) {
programs = {
hyprdock.enable = lib.mkIf config.mods.oxi.hyprdock.enable true;
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;
@ -65,5 +74,8 @@
};
};
}
// lib.optionalAttrs (options ? services.logind && options ? services.logind.settings) {
services.logind.settings.Login.HandleLidSwitchExternalPower = "ignore";
}
);
}

View file

@ -2,9 +2,15 @@
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;
@ -18,52 +24,54 @@
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 2px #327cd5;
border: solid 1px @primary;
}
#DoNotDisturbButton {
}
#DoNotDisturbButton {}
#ExitButton {
}
#ExitButton {}
#ClearNotificationsButton {
}
#ClearNotificationsButton {}
#NotificationsWindow {
}
#NotificationsWindow {}
.debugimage {
border: solid 3px blue;
border: solid 3px @primary;
}
.Notification {
padding: 10px;
margin: 5px 0px 5px 0px;
border: solid 2px #327cd5;
border: solid 1px @primary;
border-radius: 5px;
}
.CloseNotificationButton {
margin: 0px 5px 0px 10px;
}
.PictureButtonBox {
.PictureButtonBox {}
.BaseBox {}
}
.BaseBox {
}
}
'';
};
}

View file

@ -2,9 +2,15 @@
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;
@ -17,9 +23,16 @@
lib.optionalAttrs (options ? xdg.configFile) {
programs.oxinoti.enable = true;
xdg.configFile."oxinoti/style.css" = {
text = # css
text =
# css
''
@import url("/home/${config.conf.username}/.config/gtk-3.0/gtk.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;
@ -34,31 +47,37 @@
}
.NotificationBox {
background-color: #353747;
background-color: @bg;
border-radius: 5px;
border: solid 1px;
margin: 0px;
padding: 5px;
}
.NotificationBox button {
background-color: @bg;
}
.NotificationBox button:hover {
background-color: @bghover;
}
.NotificationLow {
border-color: green;
border-color: @green;
}
.NotificationNormal {
border-color: purple;
border-color: @primary;
}
.NotificationUrgent {
border-color: red;
border-color: @red;
}
.miscbox {
margin: 0px 10px 0px 0px;
}
.bodybox {
}
.bodybox {}
.imagebox {
margin: 0px 0px 0px 10px;
@ -84,8 +103,7 @@
font-size: 2rem;
}
.image {
}
.image {}
.bold {
font-weight: bold;

View file

@ -3,8 +3,7 @@
config,
options,
...
}:
{
}: {
options.mods.oxi.oxipaste = {
enable = lib.mkOption {
default = true;

View 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;
}
);
}

View file

@ -3,8 +3,7 @@
config,
options,
...
}:
{
}: {
options.mods.oxi.oxishut = {
enable = lib.mkOption {
default = true;

View file

@ -4,8 +4,7 @@
options,
pkgs,
...
}:
{
}: {
options.mods.piper = {
enable = lib.mkOption {
default = false;
@ -15,7 +14,7 @@
};
};
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 ]; }
lib.optionalAttrs (options ? services.ratbagd) {services.ratbagd.enable = true;}
// lib.optionalAttrs (options ? home.packages) {home.packages = with pkgs; [piper];}
);
}

View 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;}
);
}

View file

@ -1,34 +0,0 @@
{
lib,
config,
options,
pkgs,
...
}:
{
options.mods.podman = {
enable = lib.mkOption {
default = true;
example = false;
type = lib.types.bool;
description = "Enables and configures podman";
};
};
config = lib.mkIf config.mods.podman.enable (
lib.optionalAttrs (options ? virtualisation.podman) {
environment.systemPackages = with pkgs; [
podman-tui
podman-compose
dive
];
virtualisation = {
containers.enable = true;
podman = {
enable = true;
dockerCompat = true;
defaultNetwork.settings.dns_enabled = true;
};
};
}
);
}

View file

@ -4,8 +4,7 @@
options,
pkgs,
...
}:
{
}: {
options.mods.printing = {
enable = lib.mkOption {
default = true;
@ -17,14 +16,22 @@
config = lib.mkIf config.mods.printing.enable (
lib.optionalAttrs (options ? services.printing) {
# Enable CUPS to print documents.
services.printing.enable = true;
services.printing.browsing = true;
services.printing.drivers = [ pkgs.hplip ];
services.printing.startWhenNeeded = true; # optional
services.avahi = {
enable = true;
nssmdns4 = true;
openFirewall = true;
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;
};
};
}
);

View file

@ -4,45 +4,38 @@
options,
pkgs,
...
}:
{
}: {
options.mods.scripts = {
change-brightness = lib.mkOption {
changeBrightness = lib.mkOption {
default = true;
example = false;
type = lib.types.bool;
description = "Enables the change-brightness script";
};
audio-control = lib.mkOption {
audioControl = lib.mkOption {
default = true;
example = false;
type = lib.types.bool;
description = "Enables the audio-control script";
description = "Enables the audioControl script";
};
scripts = lib.mkOption {
default = [ ];
example = [ ];
default = [];
example = [];
description = "More scripts to be passed. (check existing ones for types and examples)";
};
};
config = (
lib.optionalAttrs (options ? home.packages) {
home.packages = [
(lib.mkIf config.mods.scripts.change-brightness (
pkgs.writeShellScriptBin "change-brightness" ''
set_brightness() {
config = lib.optionalAttrs (options ? home.packages) {
home.packages =
[
(lib.mkIf config.mods.scripts.changeBrightness (
pkgs.writeShellScriptBin "changeBrightness" ''
brightnessctl set "$1"
CURRENT=$(brightnessctl -m -d intel_backlight | awk -F, '{print substr($4, 0, length($4)-1)}')
dunstify -a "changeBrightness" -r 3 -u low -i brightness-high -h int:value:"$CURRENT" "Brightness: ''${CURRENT}%"
}
if [ "$1" == "brightness" ]; then
set_brightness "$2"
fi
notify-send -a "changeBrightness" -r 3 -u low -i brightness-high -h int:value:"$CURRENT" "Brightness: ''${CURRENT}%"
''
))
(lib.mkIf config.mods.scripts.audio-control (
pkgs.writeShellScriptBin "audio-control" ''
(lib.mkIf config.mods.scripts.audioControl (
pkgs.writeShellScriptBin "audioControl" ''
ncspot() {
NUM=$(pactl list clients short | rg "ncspot" | awk -F 'PipeWire' ' { print $1 } ' | tr -d ' \t\n')
CHANGE=$(pactl list sink-inputs short | rg "$NUM" | awk -F ' ' ' { print $1 }' | tr -d ' \t\n')
@ -124,7 +117,7 @@
fi
''
))
] ++ config.mods.scripts.scripts;
}
);
]
++ config.mods.scripts.scripts;
};
}

Some files were not shown because too many files have changed in this diff Show more