Compare changes

Choose any two refs to compare.

Changed files
+1333 -10916
.github
creds
docs
global
modules
nix
systems
kita
koumakan
renko
ryo
satori
users
utils
vendor
+9 -5
.editorconfig
··· 1 root = true 2 3 [*] 4 - indent_size = 4 5 - indent_style = tab 6 insert_final_newline = true 7 trim_trailing_whitespace = true 8 9 - [*.{yaml,yml,nix}] 10 - indent_style = space 11 - indent_size = 2 12 13 [*.cry] 14 insert_final_newline = false
··· 1 root = true 2 3 [*] 4 + indent_size = 2 5 + indent_style = space 6 insert_final_newline = true 7 trim_trailing_whitespace = true 8 9 + [*.py] 10 + indent_size = 4 11 + indent_style = tab 12 13 [*.cry] 14 insert_final_newline = false 15 + 16 + [Makefile] 17 + indent_style = tab 18 + indent_size = 4
-2
.envrc
··· 1 - common_options="-vL --no-update-lock-file" 2 - use flake . $common_options
···
-1
.git-blame-ignore-revs
··· 1 - 17333cf95859ed5eccfacd015b2e08efa1245069
···
-44
.github/workflows/build-docs.yaml
··· 1 - # Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages 2 - name: "Build documentation" 3 - 4 - permissions: 5 - contents: read 6 - pages: write 7 - id-token: write 8 - 9 - on: 10 - push: 11 - branches: 12 - - main 13 - paths: 14 - - "docs/**" 15 - 16 - jobs: 17 - build: 18 - runs-on: ubuntu-latest 19 - steps: 20 - - uses: actions/checkout@v4 21 - - name: Install Nix 22 - uses: DeterminateSystems/nix-installer-action@v10 23 - with: 24 - extra-conf: | 25 - experimental-features = nix-command flakes 26 - 27 - - name: Build site 28 - run: "nix develop .#devShells.x86_64-linux.docs -c mdbook build docs" 29 - 30 - - name: Upload built site as artifact 31 - uses: actions/upload-pages-artifact@v3 32 - with: 33 - path: ./docs/dist 34 - 35 - deploy: 36 - environment: 37 - name: github-pages 38 - url: ${{ steps.deployment.outputs.page_url }} 39 - runs-on: ubuntu-latest 40 - needs: build 41 - steps: 42 - - name: Deploy to GitHub Pages 43 - id: deployment 44 - uses: actions/deploy-pages@v4
···
+79
.github/workflows/build.yaml
···
··· 1 + name: Check and Build configuration 2 + 3 + on: 4 + push: 5 + 6 + jobs: 7 + check: 8 + runs-on: ubuntu-latest 9 + steps: 10 + - name: Checkout 11 + uses: actions/checkout@v3 12 + 13 + - name: Replace .cry files with some bollocks 14 + run: find . -name "*.cry" -execdir bash -c 'echo some bollocks > {}' \; 15 + 16 + - name: Install Nix 17 + uses: DeterminateSystems/nix-installer-action@v4 18 + with: 19 + extra-conf: | 20 + experimental-features = nix-command flakes 21 + 22 + - name: Setup Nix cache 23 + uses: DeterminateSystems/magic-nix-cache-action@v2 24 + 25 + - name: Run nix flake check 26 + run: nix flake check 27 + 28 + - name: Check with DeterminateSystems/flake-checker-action 29 + uses: DeterminateSystems/flake-checker-action@v5 30 + with: 31 + ignore-missing-flake-lock: false 32 + 33 + build: 34 + needs: check 35 + runs-on: ubuntu-latest 36 + strategy: 37 + matrix: 38 + host: 39 + - koumakan 40 + 41 + steps: 42 + - name: Checkout 43 + uses: actions/checkout@v3 44 + 45 + - name: Write Nix netrc file 46 + run: | 47 + sudo mkdir -p /etc/nix 48 + echo "machine nonbunary.soopy.moe password ${access_token}" | sudo tee /etc/nix/netrc > /dev/null 49 + env: 50 + access_token: ${{ secrets.ATTIC_ACCESS_TOKEN }} 51 + 52 + - name: Install Nix 53 + uses: DeterminateSystems/nix-installer-action@v4 54 + with: 55 + extra-conf: | 56 + fallback = true # why is this not the default? 57 + connect-timeout = 30 58 + netrc-file = /etc/nix/netrc 59 + experimental-features = nix-command flakes 60 + extra-substituters = https://nonbunary.soopy.moe/gensokyo-systems https://nonbunary.soopy.moe/gensokyo-global 61 + extra-trusted-public-keys = gensokyo-systems:r/Wx649dPuQrCN9Pgh3Jic526zQNk3oWMqYJHnob/Ok= gensokyo-global:XiCN0D2XeSxF4urFYTprR+1Nr/5hWyydcETwZtPG6Ec= 62 + 63 + - name: Setup Nix cache 64 + uses: DeterminateSystems/magic-nix-cache-action@v2 65 + 66 + - name: Replace .cry files with some bollocks 67 + run: find . -name "*.cry" -execdir bash -c 'echo some bollocks > {}' \; 68 + 69 + - name: Build configuration 70 + run: nix build .#nixosConfigurations."${{ matrix.host }}".config.system.build.toplevel 71 + 72 + - name: Setup attic and push to cache 73 + if: ${{ github.event_name != 'pull_request' }} 74 + run: | 75 + nix run github:zhaofengli/attic#default login nbsm https://nonbunary.soopy.moe ${access_token} 76 + nix run github:zhaofengli/attic#default push gensokyo-systems result 77 + env: 78 + access_token: ${{ secrets.ATTIC_ACCESS_TOKEN }} 79 + continue-on-error: true
+37
.github/workflows/update-lockfile.yaml
···
··· 1 + name: "Update Flake Lockfile" 2 + 3 + permissions: 4 + pull-requests: write 5 + contents: write 6 + 7 + on: 8 + workflow_dispatch: 9 + schedule: 10 + - cron: "0 8 * * 1,3,5" 11 + 12 + jobs: 13 + lockfile: 14 + runs-on: ubuntu-latest 15 + steps: 16 + - name: Checkout repo 17 + uses: actions/checkout@v3 18 + 19 + - name: Install Nix 20 + uses: DeterminateSystems/nix-installer-action@v4 21 + with: 22 + extra-conf: | 23 + fallback = true 24 + connect-timeout = 30 25 + experimental-features = nix-command flakes 26 + 27 + - name: Update flake.lock 28 + uses: DeterminateSystems/update-flake-lock@v20 29 + with: 30 + pr-title: "flake: update lockfile" 31 + pr-labels: | 32 + dependencies 33 + automated 34 + git-author-name: soopyc [bot] 35 + git-author-email: ci_signing+github@ningenkai.soopy.moe 36 + git-committer-name: soopyc [bot] 37 + git-committer-email: ci_signing+github@ningenkai.soopy.moe
-8
.gitignore
··· 1 # balls 2 result 3 - result-* 4 - 5 - .direnv/ 6 - *.qcow2 7 - 8 - # backup files 9 - *.bak 10 - *.old
··· 1 # balls 2 result
-3
.ignore
··· 1 - systems/koumakan/services/telemetry/grafana/dashboards 2 - *.db 3 - docs/vendor
···
-56
.sops.nix
··· 1 - let 2 - # maintainers 3 - age.soopyc_pxl7ag = "age1l3qxt6630dzesdclfm3eqgw3uuhwj09dh6typwlwr6clcv0qhfrqgtj2fk"; 4 - # age.soopyc_yub302 = "age1yubikey1qgmfcf0vddslyza7djdekjjk3t3u29d474c5xscmcdye8x3spvhlxxj23xz"; 5 - age.soopyc_mbp14 = "age1zkafenrdkkmatjh034yykpzjzzs5fx6kft23jlmsung3dwyufcksds59l2"; 6 - 7 - # hosts 8 - age.koumakan = "age18h7hya5terghrwawgpny28swlat2nqkdrfd4clk0svujqlz9xfusd3zeqt"; 9 - age.satori = "age132qsqclmp5d6x968x5y8amdn90v64rldy3assprr8g8wjdpecvmqwryah8"; 10 - age.renko = "age1p6n5yh9fy09xspwf29klfsa4zdrhp04q22gvxkz2vvm88vt9tunsdn020s"; 11 - age.bocchi = "age1kdctxllje2rw3kwpzell0rt6t7mruc3h3j5zfjelnpmahchjlaqs9v9vm9"; 12 - age.kita = "age1qzma7prftj6d4atqcmatdl9le0tuuqzegm6f8e9gkwrp3pja0aaqs49g7n"; 13 - age.ryo = "age1tdatk0rrr6uf89g5vpq96wjcjcetkrs6yadkxv47v76q8qhtva2sn7tun2"; 14 - age.nijika = "age1rzxugsgkpnf0ns0w70swdc3sndjpktx23eucah4w47zcppz56sls2c5e6m"; 15 - 16 - everything = [ 17 - { 18 - age = builtins.attrValues age; 19 - } 20 - ]; 21 - 22 - mkHost = 23 - name: identities: 24 - assert builtins.typeOf identities == "list"; 25 - { 26 - path_regex = "creds/sops/${name}/.*"; 27 - key_groups = [ 28 - { 29 - age = [ 30 - # admin 31 - age.soopyc_pxl7ag 32 - age.soopyc_mbp14 33 - ] 34 - ++ identities; 35 - } 36 - ]; 37 - }; 38 - in 39 - { 40 - # remember to run `just utils update-sops-config` and `sops updatekeys` after editing. 41 - creation_rules = [ 42 - { 43 - path_regex = "creds/sops/global/.*"; 44 - key_groups = everything; 45 - } 46 - 47 - (mkHost "koumakan" [ age.koumakan ]) 48 - (mkHost "satori" [ age.satori ]) 49 - (mkHost "renko" [ age.renko ]) 50 - 51 - (mkHost "bocchi" [ age.bocchi ]) 52 - (mkHost "kita" [ age.kita ]) 53 - (mkHost "ryo" [ age.ryo ]) 54 - (mkHost "nijika" [ age.nijika ]) 55 - ]; 56 - }
···
+23 -3
.sops.yaml
··· 1 - # WARNING: This is a generated file. DO NOT EDIT DIRECTLY! 2 - # See .sops.nix and utils/build-yaml.nix for more details. 3 - {"creation_rules":[{"key_groups":[{"age":["age1kdctxllje2rw3kwpzell0rt6t7mruc3h3j5zfjelnpmahchjlaqs9v9vm9","age1qzma7prftj6d4atqcmatdl9le0tuuqzegm6f8e9gkwrp3pja0aaqs49g7n","age18h7hya5terghrwawgpny28swlat2nqkdrfd4clk0svujqlz9xfusd3zeqt","age1rzxugsgkpnf0ns0w70swdc3sndjpktx23eucah4w47zcppz56sls2c5e6m","age1p6n5yh9fy09xspwf29klfsa4zdrhp04q22gvxkz2vvm88vt9tunsdn020s","age1tdatk0rrr6uf89g5vpq96wjcjcetkrs6yadkxv47v76q8qhtva2sn7tun2","age132qsqclmp5d6x968x5y8amdn90v64rldy3assprr8g8wjdpecvmqwryah8","age1zkafenrdkkmatjh034yykpzjzzs5fx6kft23jlmsung3dwyufcksds59l2","age1l3qxt6630dzesdclfm3eqgw3uuhwj09dh6typwlwr6clcv0qhfrqgtj2fk"]}],"path_regex":"creds/sops/global/.*"},{"key_groups":[{"age":["age1l3qxt6630dzesdclfm3eqgw3uuhwj09dh6typwlwr6clcv0qhfrqgtj2fk","age1zkafenrdkkmatjh034yykpzjzzs5fx6kft23jlmsung3dwyufcksds59l2","age18h7hya5terghrwawgpny28swlat2nqkdrfd4clk0svujqlz9xfusd3zeqt"]}],"path_regex":"creds/sops/koumakan/.*"},{"key_groups":[{"age":["age1l3qxt6630dzesdclfm3eqgw3uuhwj09dh6typwlwr6clcv0qhfrqgtj2fk","age1zkafenrdkkmatjh034yykpzjzzs5fx6kft23jlmsung3dwyufcksds59l2","age132qsqclmp5d6x968x5y8amdn90v64rldy3assprr8g8wjdpecvmqwryah8"]}],"path_regex":"creds/sops/satori/.*"},{"key_groups":[{"age":["age1l3qxt6630dzesdclfm3eqgw3uuhwj09dh6typwlwr6clcv0qhfrqgtj2fk","age1zkafenrdkkmatjh034yykpzjzzs5fx6kft23jlmsung3dwyufcksds59l2","age1p6n5yh9fy09xspwf29klfsa4zdrhp04q22gvxkz2vvm88vt9tunsdn020s"]}],"path_regex":"creds/sops/renko/.*"},{"key_groups":[{"age":["age1l3qxt6630dzesdclfm3eqgw3uuhwj09dh6typwlwr6clcv0qhfrqgtj2fk","age1zkafenrdkkmatjh034yykpzjzzs5fx6kft23jlmsung3dwyufcksds59l2","age1kdctxllje2rw3kwpzell0rt6t7mruc3h3j5zfjelnpmahchjlaqs9v9vm9"]}],"path_regex":"creds/sops/bocchi/.*"},{"key_groups":[{"age":["age1l3qxt6630dzesdclfm3eqgw3uuhwj09dh6typwlwr6clcv0qhfrqgtj2fk","age1zkafenrdkkmatjh034yykpzjzzs5fx6kft23jlmsung3dwyufcksds59l2","age1qzma7prftj6d4atqcmatdl9le0tuuqzegm6f8e9gkwrp3pja0aaqs49g7n"]}],"path_regex":"creds/sops/kita/.*"},{"key_groups":[{"age":["age1l3qxt6630dzesdclfm3eqgw3uuhwj09dh6typwlwr6clcv0qhfrqgtj2fk","age1zkafenrdkkmatjh034yykpzjzzs5fx6kft23jlmsung3dwyufcksds59l2","age1tdatk0rrr6uf89g5vpq96wjcjcetkrs6yadkxv47v76q8qhtva2sn7tun2"]}],"path_regex":"creds/sops/ryo/.*"},{"key_groups":[{"age":["age1l3qxt6630dzesdclfm3eqgw3uuhwj09dh6typwlwr6clcv0qhfrqgtj2fk","age1zkafenrdkkmatjh034yykpzjzzs5fx6kft23jlmsung3dwyufcksds59l2","age1rzxugsgkpnf0ns0w70swdc3sndjpktx23eucah4w47zcppz56sls2c5e6m"]}],"path_regex":"creds/sops/nijika/.*"}]}
··· 1 + keys: 2 + # maintainers 3 + - &soopyc_mpxl7a age10rkyshu0lswdqyvun4cs9cekm9zt4fw5c8ssa38tn3lukgcahcvsltnqx2 4 + - &soopyc_pgp302 8F3B277901484C6EA7E63F82D539637D518022C6 5 + # - &soopyc_age302 age1yubikey1qgmfcf0vddslyza7djdekjjk3t3u29d474c5xscmcdye8x3spvhlxxj23xz 6 + # failed to parse input as Bech32-encoded age public key: malformed recipient "age1yubikey1qgmfcf0vddslyza7djdekjjk3t3u29d474c5xscmcdye8x3spvhlxxj23xz": invalid type "age1yubikey" 7 + 8 + # Hosts 9 + - &koumakan_ssh age18h7hya5terghrwawgpny28swlat2nqkdrfd4clk0svujqlz9xfusd3zeqt 10 + 11 + default_group: &default_group 12 + pgp: 13 + - *soopyc_pgp302 14 + age: 15 + # - *soopyc_age302 16 + - *soopyc_mpxl7a 17 + 18 + creation_rules: 19 + - path_regex: creds/sops/koumakan.yaml 20 + key_groups: 21 + - <<: *default_group 22 + age: 23 + - *koumakan_ssh
+5
Makefile
···
··· 1 + default: build 2 + 3 + %: 4 + @echo "WARNING: using make is deprecated. please use just instead." 5 + @just $(O)
+6 -12
README.md
··· 1 [![Check and Build configuration](https://github.com/soopyc/nix-on-koumakan/actions/workflows/build.yaml/badge.svg?branch=main)](https://github.com/soopyc/nix-on-koumakan/actions/workflows/build.yaml) 2 - [![Garnix Build Status](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Fgarnix.io%2Fapi%2Fbadges%2Fsoopyc%2Fnix-on-koumakan)](https://garnix.io) 3 4 # Cow 5 - ![a yak on some grass](docs/src/images/quaritsch-photography-1_6rJHQ2Gmw-unsplash.jpg) 6 7 - *Picture by [Quaritsch Photography](https://unsplash.com/@quaritsch) on Unsplash, via https://unsplash.com/photos/1_6rJHQ2Gmw* 8 9 # NixOS Configuration 10 This is a bare minimum nix configuration for koumakan. ··· 20 21 โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“ 22 23 - ## Todo 24 - See ./TODO.md 25 - 26 - ## Tangled 27 28 - Viewing on <https://tangled.sh>? The SSH clone URL below is not correct for our knotserver. Use this instead: 29 - 30 - ```sh 31 - git clone knot@enanan.staging.soopy.moe:soopy.moe/gensokyo 32 - ```
··· 1 [![Check and Build configuration](https://github.com/soopyc/nix-on-koumakan/actions/workflows/build.yaml/badge.svg?branch=main)](https://github.com/soopyc/nix-on-koumakan/actions/workflows/build.yaml) 2 3 # Cow 4 + ![a yak on some grass](docs/quaritsch-photography-1_6rJHQ2Gmw-unsplash.jpg) 5 6 + *Gracefully provided by [Quaritsch Photography](https://unsplash.com/@quaritsch) on Unsplash, via https://unsplash.com/photos/1_6rJHQ2Gmw* 7 8 # NixOS Configuration 9 This is a bare minimum nix configuration for koumakan. ··· 19 20 โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“ 21 22 + ## TODO 23 + - [ ] migrate ~/.yubico/authorized_yubikeys to HM config (via pam.yubico.authorizedYubiKeys.ids) 24 25 + <!-- very future tasks --> 26 + - [ ] migrate to a configuration where [erase your darlings](https://grahamc.com/blog/erase-your-darlings/) is possible
-25
TODO.md
··· 1 - # Todo Items 2 - - [x] **!important** flatten nixosSystem definitions 3 - - instead of `import ./systems/stuff {}` do `nixosSystem = {...; imports = [./systems/stuff]}` 4 - 5 - - [ ] migrate firewall to nftables 6 - - [ ] setup ipsets and block known abusers 7 - <!-- - [ ] setup autoUpgrade --> 8 - - [ ] migrate ~/.yubico/authorized_yubikeys to HM config (via pam.yubico.authorizedYubiKeys.ids) 9 - 10 - - [-] fcitx5 11 - - [x] enable and configure basic fcitx5 stuff 12 - - [ ] migrate rime config to HM 13 - - [x] arrpc 14 - 15 - - one of 16 - - [ ] setup port knocking/fwknop 17 - - [ ] shield sshd behind fwknop 18 - - [ ] wireguard 19 - 20 - <!-- very future tasks --> 21 - - [ ] migrate to a configuration where [erase your darlings](https://grahamc.com/blog/erase-your-darlings/) is possible 22 - 23 - <!-- ## Completed Tasks --> 24 - - [x] setup patchouli 25 - - [x] setup vaultwarden
···
-52
creds/sops/global/id_builder
··· 1 - { 2 - "data": "ENC[AES256_GCM,data:aEiwLwL98cmSuVUNTInVFyjscUjpL2c0TWqCzLNZrKvDqF1UjZf5muQx0ySP+mt5zInYSjm4weahEiDdx8yhT0GBWXbQK0WPubvVaoX8Rfu6DDP6jS0RZkheSlNdlH0nAxsnhnb8JimTom0JrzoyVhAKW13S+CJU+jo+uOoKKp4pIGCpTGX7RhkP4/IwMT9MXZypV0QJ26YOEi7/hI9j8O5f9vHRj6KMhxN/NCQFZEhRCepDDHraMdBaXpSc5RKWVYuWKfsM+xJL5N2Y9BE89dvTSMjUY2xRnlb2ghUGsgp5D0G/PF5zd1Cn0trj6ywm8BtTspm7wHVool7zWjGoS6yQ1KW3qn7HuoCCeAua3l3DH0Wp9He0ZwwMVf8Ip2SjJ3DGVm+e1wT30BqZV4b6kygW3qQfysmquQd7vAwkLAa6r2uYSEGTfQr3JULoKXjR7H9XNaR6MPl084YhNJYytlxCDSXYQ8fJS7e7ta3yaL+geLRNJBDQM3j5WAl7tPC1XmMvmhVTHUw9xa1LYUfA,iv:gcM9aJpuf+1uEW+w5cFJIciwD56pXdmE9axeXWADnxI=,tag:USzq/aAVCy25KY81VSsKsQ==,type:str]", 3 - "sops": { 4 - "kms": null, 5 - "gcp_kms": null, 6 - "azure_kv": null, 7 - "hc_vault": null, 8 - "age": [ 9 - { 10 - "recipient": "age1kdctxllje2rw3kwpzell0rt6t7mruc3h3j5zfjelnpmahchjlaqs9v9vm9", 11 - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA1MldKQjZSSTBnaXNrK3dm\nRXNwZitRZ0c0djVFSXpxdUJCSWJNaWg5MzJVCk5aMlBWM3VwM3R2ekwwY0xQWFlW\nZWlndkRjRlNGdC9nUVAzVU1lRGlTZUkKLS0tIDY5eE15VDQwWlpvSWNUWlYvK0xh\nQWlEVE1BWWkxNmtUR1Z2d2ZKaUNmVjgKk6kC9LHOT1bNIBw7VhgDpuauC1gRR8hh\np4iD7i1GFtMHWBUzZ4jztKLlPJ7g49GkdFeYjqzb76l7FuThqXBLiQ==\n-----END AGE ENCRYPTED FILE-----\n" 12 - }, 13 - { 14 - "recipient": "age1qzma7prftj6d4atqcmatdl9le0tuuqzegm6f8e9gkwrp3pja0aaqs49g7n", 15 - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBJU20wNlIzckJXZTd2Z2hG\nSE9FaDkzaVlwREZIUG5CZG96SFRpQy9QbkdVCmx1VktxNDBFVVJSVFNQVUdOaE9W\nZkpRQlRWalJNZzRXb0RxczVzSUZGQ2cKLS0tIDRQYzhYWEZ3clhBK05NN3pubGhX\nNmhwenA2U1ZVWTBESTMwVndyc3RMT2cKlSpcSS9cIMS+1GUzJ9A3/Ke+609VrSGZ\nmg9I6VPDyhVJ9JqEKgz23mRwRhQur/fMPMdpw1RtiADb+DpOOHx6VA==\n-----END AGE ENCRYPTED FILE-----\n" 16 - }, 17 - { 18 - "recipient": "age18h7hya5terghrwawgpny28swlat2nqkdrfd4clk0svujqlz9xfusd3zeqt", 19 - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBiQ0NSKzYrQ25JcmJXQlJH\nMTNWQjlEVldkcENoaXRmZm8xTVV2ZUNSZjFnCjVlK2czeXlQS1hpcllKTXhISzM3\nb3dZcGxuR0ZXU2pMWHY4M3M4Sy9KbWMKLS0tIEVJUVBsU0VEL1NIQU5BRUtKVEVr\nUHpOa1RTY0RrRlNNVzVMQWQ5OHZjMlUKisMhDxBZnTIPleVZ6Yk+ticY5iH6pXG0\niLfEP3hn2WN6Ohnqx31v98MCWsF2Eoxpc5mO8pSEeKzt4tyQ9XniFA==\n-----END AGE ENCRYPTED FILE-----\n" 20 - }, 21 - { 22 - "recipient": "age1rzxugsgkpnf0ns0w70swdc3sndjpktx23eucah4w47zcppz56sls2c5e6m", 23 - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBSOFpXenVlOEFZL0cxZHRw\nZDlpNzVtVTcvVWQ2Nkk3UWtERnlQeGkvclFrCk4vVWNraklzQTB3cHZqZmFtdDdK\neGRYNVNzS2R6QXpXWDd6M3JsUWpnVGsKLS0tIDBOcmJvTFR4L1hDYitLQ0g0TmNZ\nbzN6VGNwVzdpZVhYdU1OdHd0MkV2TFUKmvKx7KYoe4ACGuiS9+nUee7G4qskYFYZ\nwVtzm+BYr0VDaP1qaphYhNLzsyW6lycpZXYzZ+jhSAoJmdWznt7cNQ==\n-----END AGE ENCRYPTED FILE-----\n" 24 - }, 25 - { 26 - "recipient": "age1p6n5yh9fy09xspwf29klfsa4zdrhp04q22gvxkz2vvm88vt9tunsdn020s", 27 - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB0Wlp2NG5tanJVMlFqSEU1\nRVNuMnh3aXhJUTFMNzZNeHFxNmlYVkpqajFrCmFrNm1DcHJNQk15VmZWd1BZOFdh\nWGFhNE1ERmhGdFhGMUhXM1llYTZVTzAKLS0tIEdRQkZYcVJYRmhLZWpQaUZwNzVr\nakM1c2JxRGp4RGtEeVNPV1NlMDZ2R3MKMcwd0cq4B4ibs7xHOchI7ubb7XpHonxF\nJdsatg/l2d4fgmHd2BuTc9gGrIwx2EIk+nbA3YSPHbBafwj8KwfN6Q==\n-----END AGE ENCRYPTED FILE-----\n" 28 - }, 29 - { 30 - "recipient": "age1tdatk0rrr6uf89g5vpq96wjcjcetkrs6yadkxv47v76q8qhtva2sn7tun2", 31 - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBjRExaUVg3NG9UaHF5UWdW\nVk1CdmQ1RXoxdWw0WVQvazdVSnc5VlVVUDIwCmhtYzRxcG50UHFLTm5VdFozUFpy\nMzhyTU12clYyZHl5bENJS0ZCaFlGSVEKLS0tIDhYRDhxYmxQZGpzY0cvRTgwcHNt\nM3NkVVduREhQakl5UDFadU54OHJhUEEKXMd/iCv4eSSonsiObm9zvyne2OFuHTXe\nYHJXYNItiZVFLEtHqut0ekghwtFOJEbqN80rHXs3SvgKLd+X9qmt7w==\n-----END AGE ENCRYPTED FILE-----\n" 32 - }, 33 - { 34 - "recipient": "age132qsqclmp5d6x968x5y8amdn90v64rldy3assprr8g8wjdpecvmqwryah8", 35 - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBGVHU5cWx4NEJFL2x6VER1\nNmtPeGsrcElvWk5OSUIyL1JnR1hCMjVVTUZZCkl5ak9xUlE3U3RRblI0RitzUkRZ\nekJZQ2szL1A0eDNUUjJPY1FKMGowOFEKLS0tIHFOVXU1MThmRU01OG4yOERNc0lB\nNzlFNWI4aW5Bd1QvMGZpTE5xbHpsQmsKUTDPQUNPtfjEsWtLxYDgqvhfmvaQfS/l\nhqoCH5Tb2rQXrFDvpgEshFC/Jsergp0G0BoTPyCTu7dl6uSqTlRELw==\n-----END AGE ENCRYPTED FILE-----\n" 36 - }, 37 - { 38 - "recipient": "age1zkafenrdkkmatjh034yykpzjzzs5fx6kft23jlmsung3dwyufcksds59l2", 39 - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBlWUhvVWxDZ2ZtNURwczZ5\nM3o5WFFlclhuTk5HTjEyZS94T0dDMHBWM2pjClo1TXplckE0aE9VSmFVZ1g4aGVy\nb3h4OGd2VEEzcDVCblpxOHhyemdHL3MKLS0tIHB3MmttVTFoenJtK1lTRFUvbVY3\nSFpEOVhsUVloMDZpOUhuVlBUMWJoQ2MKFmD1hleUYc4ExiQVSlEjz2bQOnP4dsHR\nTN/vBdk8jbOHYwrIkUrYCv+Cb811BKn6J/UE0gOFbGcsv1ZZZ82iWw==\n-----END AGE ENCRYPTED FILE-----\n" 40 - }, 41 - { 42 - "recipient": "age1l3qxt6630dzesdclfm3eqgw3uuhwj09dh6typwlwr6clcv0qhfrqgtj2fk", 43 - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBOMlkwNWh5ODFnaXE3ejl1\nVGFGZ0dzZVFubXZQNFUrYU1PUWNiTWwvdnpnCnF1TFB4OW9LWGxIZm9TVDRndG40\ncnNkclZDRHJIakxTN1dseDVyU21WeFEKLS0tIG1vL1ZrVlI4WDlNU2FqNHBzL3E1\nZWduQnBKQVZSckNjdjk1c0lRajBiK1UKjeANy+e0ofZknke8ehse5hh8vnxfw6rS\n00FeAg3/GkIASV14W0Hg/wlU+FyxOCQoRRBUp5ZqP10zrGXcZb9xKA==\n-----END AGE ENCRYPTED FILE-----\n" 44 - } 45 - ], 46 - "lastmodified": "2024-10-21T13:14:54Z", 47 - "mac": "ENC[AES256_GCM,data:8eeUCAWUrYz2fb4rgg8dIIHKdrWe/4JTfedoZX8OTE5kXyRuh0uJ8y//W9m450UZgozSEYrnBMiYJDwXHpEXgHoA2cK4Oah2ddp3JyHDsmRuLaWfuRZSVu9WVVXLrovmu/NVcagYiBiGY/Rx3IUsTaDfXQtiFxaR+7jAPB7eGQg=,iv:C7u1uczF5XPX7dSeck/IcEeRIwd3Bd42s66Uw6WXF3k=,tag:6O2b/90efYiNKeTe6pmZYA==,type:str]", 48 - "pgp": null, 49 - "unencrypted_suffix": "_unencrypted", 50 - "version": "3.8.1" 51 - } 52 - }
···
-94
creds/sops/global/passwords.yaml
··· 1 - passwords: 2 - _tester: ENC[AES256_GCM,data:9ho/2DMonRC2I/uYe31lUSw=,iv:8eZDKi1+naT8jAwJ0pD3muua11sk+v+7NNbgkwCJx3g=,tag:WEWo8GxuTI5M6s0FXl9/nQ==,type:str] 3 - sops: 4 - kms: [] 5 - gcp_kms: [] 6 - azure_kv: [] 7 - hc_vault: [] 8 - age: 9 - - recipient: age1kdctxllje2rw3kwpzell0rt6t7mruc3h3j5zfjelnpmahchjlaqs9v9vm9 10 - enc: | 11 - -----BEGIN AGE ENCRYPTED FILE----- 12 - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB3Mk9LYTdqWlRCUW9Lak0v 13 - K2pSVXh1SmNBYSt2OEdCTk1ld3VKWVhOUWhBCk0yM09lbDBBUWhHRVFDOWVIdkpO 14 - UUt3bWxzS0E0UGdqZzZjcEMva1kvR0UKLS0tIFA3ajlLOW9DekIvcFpBTFpoM2dS 15 - a05OVHRYNG1UMDkzNGQ1NjZUUHZvc2MKJ7wCH2S/l9jKPIwjunMlUF6xsT85/eQA 16 - EAcxWhJCMGSFz5p5y7QkMC7zUPwqgDhOZXdbWl8lwjsiyD9tO2T3gQ== 17 - -----END AGE ENCRYPTED FILE----- 18 - - recipient: age1qzma7prftj6d4atqcmatdl9le0tuuqzegm6f8e9gkwrp3pja0aaqs49g7n 19 - enc: | 20 - -----BEGIN AGE ENCRYPTED FILE----- 21 - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB6ajRseEE1YU5YV01UekV6 22 - dFcxazVEZy9rTVBUYi9hOWxSYUtuc01wdURrCjJkUVlhYW9yL2tSZER1ZGFRMTBK 23 - VzFaNGo1NnBMZCsxRVJjZ00zQmZNencKLS0tIDRZZlRGSFNpNmgyUGpjZjhkQWRa 24 - TE9vMHZxQmtGRGQvbS9CZ091MlZGeHMKVfUK6AEFFNROONGriB7+Quv92ddQQA5r 25 - OG1LsudEbva9uHlSI/+HX4OAypTBuIBg8QyO61nyNPM5zia+00H1Zw== 26 - -----END AGE ENCRYPTED FILE----- 27 - - recipient: age18h7hya5terghrwawgpny28swlat2nqkdrfd4clk0svujqlz9xfusd3zeqt 28 - enc: | 29 - -----BEGIN AGE ENCRYPTED FILE----- 30 - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBNWTNwZ0VtUG1mNW9JSHp3 31 - Vnh5aTI4TG5sQ0Rid0M4YXVTemtQQWpnNnhjClRZcTJycGpUenFMSUNZdnY2NmxT 32 - SmlqbzZsMkVoa2F0aFc0NDU5U3NyaDQKLS0tIGZwNitQSWh5VWRjUDF3QWlPeXkx 33 - MWMrMkNDNkNmNEhwV1pnb1VLZlNqbFUK6GYIiWWG3I5fy9LaTSbJ1/z8eKMeOQbC 34 - EYEps64U7ZJmlt6ly1TTfjk+pIvuf7N47qsniRv8u19JD9qAtPg0kQ== 35 - -----END AGE ENCRYPTED FILE----- 36 - - recipient: age1rzxugsgkpnf0ns0w70swdc3sndjpktx23eucah4w47zcppz56sls2c5e6m 37 - enc: | 38 - -----BEGIN AGE ENCRYPTED FILE----- 39 - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA3d3VrQmtHQVFTKzlKQldD 40 - U2haZ0FIemh5YmY4dG9wZk1QZ20xQVFSZVFJClZZWTBNRGppM1FqL0FXSHVCbG52 41 - TUxSL0ZTYS9Zak42Yk9UWFBoMG1IRlUKLS0tIEJYeWhObXZNT0ZzaXdGY2VSbEdh 42 - Ny9PS0Z4dlQxQVA1eS93ZWZOR2dGWDgKu4Cqblh/ghnjUCT0stvM0riRuY9YAAhT 43 - XRjJkiLKCBO4zg6CRSsfNh7B0GFQBmfLAiL2rhfhO7A6z49WQEY6ZQ== 44 - -----END AGE ENCRYPTED FILE----- 45 - - recipient: age1p6n5yh9fy09xspwf29klfsa4zdrhp04q22gvxkz2vvm88vt9tunsdn020s 46 - enc: | 47 - -----BEGIN AGE ENCRYPTED FILE----- 48 - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBMdGFPc0pibTdtbWFpSTRj 49 - UWoxSFcySlhJalBkcFZaYVpCK2dRdVc5d2dnCjgvNWdBWTc3eUJGVmo3MXBLRHFP 50 - NGtpeHpYaDVLV0VyYnZyRk9wTjVuTVkKLS0tIGd3NFBESGJCQzZTYm1nRXpWSkRq 51 - a3RnSVZlN2J4bXljWHhveTZNMkhDYjgKyQbKT5EHtO/90gmfnoXrgruqMcEI1Xcn 52 - TJbNvLueNWiCjXW2eMeTCrBnDRk+r/URxHoNjuV6e+9xgn0V/NtMHQ== 53 - -----END AGE ENCRYPTED FILE----- 54 - - recipient: age1tdatk0rrr6uf89g5vpq96wjcjcetkrs6yadkxv47v76q8qhtva2sn7tun2 55 - enc: | 56 - -----BEGIN AGE ENCRYPTED FILE----- 57 - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBuY3FacDIzU1V1eW84dWFS 58 - ako4bXFKTFFCQVlKSG56bDZXd0xPUnlRWUhBCldPVVBhZ0dFWjdZQXpBaGlLZnow 59 - RE9nTm1VajVLVkdHUDNSSjZ2Wjd6OEEKLS0tIGxRaGYxS1BjQVBoSkVQWmxoTXE4 60 - ZkN5OElhaE9CQUhJMjJQS2w0OHd0eU0K9YLGXqRYVKn70klldR2PsxffpVXUnFi5 61 - Lxhmj3/NuPZFR1cqA9sbX6XsuYk/paMjNUP1wmlD2U8UoqY3ogUmhg== 62 - -----END AGE ENCRYPTED FILE----- 63 - - recipient: age132qsqclmp5d6x968x5y8amdn90v64rldy3assprr8g8wjdpecvmqwryah8 64 - enc: | 65 - -----BEGIN AGE ENCRYPTED FILE----- 66 - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB2andoZUVaYjBiT05TYkhh 67 - M1I0cysycmYvV285bko1NEVQVEptVGxuVjA4CmhzWkZHK2NOWmVBZFZSRFZiTVRS 68 - V0phZ29DRFhHNUd5Ky9GUUNGNFNrcTAKLS0tIEQxYWp3SkQvTGFCTG1mQkpCMGVm 69 - bkJoVG9KeVBhNEhQUjRoNnE5Q3NXd2sK3lGbXtzSyClCYoBShQySLa0pysg7Vb2n 70 - +QqSxzC6MN5ZC0RXQZHTLCOiWtkYgwXQu5DimnOgwaoNRhNED3aKIw== 71 - -----END AGE ENCRYPTED FILE----- 72 - - recipient: age1zkafenrdkkmatjh034yykpzjzzs5fx6kft23jlmsung3dwyufcksds59l2 73 - enc: | 74 - -----BEGIN AGE ENCRYPTED FILE----- 75 - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAycDZxNFl2amxSZFJvNU5h 76 - USt4a0RMcGtuSmFmaEFaNWpwNWRJVWVScEU4CjlQRmRkQWlwVlpDRGVjbCszaSt2 77 - dVRXTUlTTlM2Nktscmp6L25YQThKUFUKLS0tIFJKZ3pyNVZaMzljT2R4bjNzbWdi 78 - Q2srRXlIZHdjMUE3VGwxeElFaFdlZmcKGzDTQkB+elOuwnvZFoc1hzv28UgtbZWu 79 - 6F1zQP17VQjlwCZANExxRUeVUacEXwmIGwnOD7jzQtjU8QIwaRXwEg== 80 - -----END AGE ENCRYPTED FILE----- 81 - - recipient: age1l3qxt6630dzesdclfm3eqgw3uuhwj09dh6typwlwr6clcv0qhfrqgtj2fk 82 - enc: | 83 - -----BEGIN AGE ENCRYPTED FILE----- 84 - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBrVExoVzlqMlE1Z2t5Tmxi 85 - dzJPRDY0L2dRcDF4V1VQd01pa2NlSnJkWkhjCmZiSktCd0l0THNRaXVmdjNQU1kz 86 - d2VCUFZnVnZuYjdQelNpakpKL01vVlEKLS0tIGtZUVgrcFErZVZhSjJpb0FSdUw4 87 - NHpPeitlcjdVK2RWeWN5aVlkQlRabWsKUrfxg20ocfEfjTGMEWLPTBemkPI8+EF5 88 - Cxvof8388C10DDkPXozpUlGIQY//9hBlPmro9sa0WPHlk8nY3mUibQ== 89 - -----END AGE ENCRYPTED FILE----- 90 - lastmodified: "2024-10-21T13:14:54Z" 91 - mac: ENC[AES256_GCM,data:ndRfHMQ52661Zwte2ntar6/uAM4aLnmvf4wp753DrRBg+7Pk+MQiqOFpM0twq98yXUfZzPNM32LwbWqIHdOtRpX3suWusSd8VKoNXV4iSSE7nT1uLa27TITz4kePYASrJI2Nwyg32dS3UEXFjMmPI3Xwj0ha4lQeep6wMp8w7NQ=,iv:+koj3cIVr2tCHtHrECdLEZhnqP9EzxZRguvinUKQeEw=,tag:kD8xWs4GWFMUIxxC/yGatg==,type:str] 92 - pgp: [] 93 - unencrypted_suffix: _unencrypted 94 - version: 3.8.1
···
-48
creds/sops/kita/default.yaml
··· 1 - vmetrics: 2 - auth: ENC[AES256_GCM,data:JW1Q2Eldbi69xSX0g4D7G+s50mzOkKsQlrXcJ7T8tA2FyiCRj7cfOIq84Pii3kqUtYGa5qy4Cdn+YS25vdx8eMn2998X8+G08q2gbAXQN7xhLlb7rdEF8bAso75csyGakb4vvMQ8GpqIYbdYaoTyp37suiRIa5XU48kQ5cnXUqg480grn7sZSoN0kU4pId1A8pfZPZO6X2gaY1DNXn91XQgYzdrJ6b95wJbESA==,iv:abGTu/sywBaDpBYYExivqxaHpk3rTOCKmcf8USczVXQ=,tag:xgXCErk1dOe14UUOEZIorw==,type:str] 3 - lego: 4 - cf_token: ENC[AES256_GCM,data:LU3iREF8nNBlouP/197u/Q9LWORwnzgpmZwIYW/yCb7lMOchFKcWog==,iv:mSrMj7ze50ue7V5/3PO29Wq38iUDxzXJ96DUeZU1RwU=,tag:yx+Ze12x9komS7zLK/tHXw==,type:str] 5 - dovecot: 6 - db_password: ENC[AES256_GCM,data:gwKhyuboMlQYkeatRvP+MJ+dWMpy2JFZxwSffXdDdLxhsOGrVk3VsQZeiJnvXQtXIc7lPK171AQ4zVKuuJ7WR0SMCFdtyq/D0OYB2YVCR93+UKtnCZ9wBDgoCI3cnt/F,iv:dX6HkDhz3r4huRWtP9UlxhKycQg5TMG+Wwei9rtVz0I=,tag:RKXK7DHGb1B/HAnyTcNl9w==,type:str] 7 - rspamd: 8 - controller_passwd: ENC[AES256_GCM,data:Fh9ClKohwvMfEH6vYVibvxaDFC+p869caOagsgRrHu5D/DpXwHhspwAfnOfcxF5pyIaEX1/yA2ehWj3G7jY6Fa0jLRyvc/7zyT/fYeQid6jakHafjQLcPw==,iv:Tp0vQji0u7aPydZLB6ARMhkLv5BGj4KjOzVKkWXCUlQ=,tag:2ZYreeXQf+7L/WCuDt8ohg==,type:str] 9 - keycloak: 10 - db_password: ENC[AES256_GCM,data:TFdFWLGW+Ditj4fb4Jk6R8b4augsO+pYV4ApLmVcONfMEFDx3leoIJbMtyk=,iv:DZYnh2gXk4dLWEQiiJQ+264yyXgIKaPQ/KjLirNCMJw=,tag:uhjquy2vNheJBAaevzdx8g==,type:str] 11 - sops: 12 - kms: [] 13 - gcp_kms: [] 14 - azure_kv: [] 15 - hc_vault: [] 16 - age: 17 - - recipient: age1l3qxt6630dzesdclfm3eqgw3uuhwj09dh6typwlwr6clcv0qhfrqgtj2fk 18 - enc: | 19 - -----BEGIN AGE ENCRYPTED FILE----- 20 - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBpbW9KVm5EK0pxc0dhaWVR 21 - WGtzSW1mRUEvSm5Vclg0YTJ5NFhWaWxFa0RnCmtZR3FhcDM0NEdWdE1NdWtjYVhm 22 - UVcxOXVVMUZXQ2pPSEtSdTIya09qWHMKLS0tIDlNZTZPOWZqM0tEeFpqWG5ObzEy 23 - M2Vpa2FPL2E5cmdvU0MwL0V5LzFPNncKz6Su+KS5LmJMTNTU/3X6M/wR1wc3kInE 24 - LM4Er0568ERxB65Pq2LS6Yf+fvlRvj6khfMAfH1fDS0w01HwHDcvQg== 25 - -----END AGE ENCRYPTED FILE----- 26 - - recipient: age1zkafenrdkkmatjh034yykpzjzzs5fx6kft23jlmsung3dwyufcksds59l2 27 - enc: | 28 - -----BEGIN AGE ENCRYPTED FILE----- 29 - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAwak5zS1FjU1pKQXdDZlBN 30 - Vm5JUU1KWGNESGJuQmtCd1lHWjQ4cDVSdUhjCmpuZnoyTGtDWGdxZ0FCV1NxcTk5 31 - dmlTZUttckFnd29HeW8zUUxQdTUxYmcKLS0tIGFmOFJWRUk3VGJEUk9FdlZjOWNR 32 - cjVmbHhOOHVPYnJ4clZHaE9VeDZJWFUKpa/K66fvxzpAh1hXMbz2l8qbN7buA4fk 33 - YDdpyG8jeEUcOXvJeHlI8kEgB2/nFLw3kZUYH3GNlMSX/vOTtlGYXw== 34 - -----END AGE ENCRYPTED FILE----- 35 - - recipient: age1qzma7prftj6d4atqcmatdl9le0tuuqzegm6f8e9gkwrp3pja0aaqs49g7n 36 - enc: | 37 - -----BEGIN AGE ENCRYPTED FILE----- 38 - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBxWWtIcWFzVDZGampwMDZj 39 - eVJHRzFqQVNkb1BpdXExMHozWnNIOVVKbVRVCjE0ZUJhSW0wZjFYYmRMbmlXK1RH 40 - bnNkcVdFZGZoZ0p3YWhPeTQ3M0ZyRDAKLS0tIGZQU0ViSVpraFY0LzBzMmluMFFx 41 - OS9pNVcvUkVKTlVRcDdJdHdXczZ1QVEKPnNkVBiu1bevKkM+KLDBU0CjF40tU1vm 42 - bNPznLB/qV/FydcBHZPi6BPytuPNloQ1inm85KTPpTyRjA1e9V+gaw== 43 - -----END AGE ENCRYPTED FILE----- 44 - lastmodified: "2024-10-21T13:14:54Z" 45 - mac: ENC[AES256_GCM,data:tBSSGJDHTzxW+10DDIlSMO7tD8x8UfZfwrW25l6XZ5+TWwoS8B/XWLYe51IjB655Z76Zu7z7q8SCXodnqb2zGHoer5pKMlOkNXiUHgmIHw6P2eIPpNIK5IT9ZAMTfd9HmyRsslee/mgV6cc4tzir14PGa7wUM1fcD/CfuOp0aJ8=,iv:OC9AKwM7gUc4lx5bmhhGviAAkKShrFrEfzJL1wRai78=,tag:Djrh9jW1gBTuPP//xP993w==,type:str] 46 - pgp: [] 47 - unencrypted_suffix: _unencrypted 48 - version: 3.9.0
···
-124
creds/sops/koumakan/default.yaml
··· 1 - synapse_comment_unencrypted: See https://github.com/Mic92/sops-nix/issues/120 for synapse.yaml quirks 2 - synapse.yaml: ENC[AES256_GCM,data:5xzvctFY/FHp6mEEjF5fkLe2f9ooUTY5Hi6T5mYAZv/4uueVvlpZ3NkPyNx0YIb37L4nEn4szYX9u0oEtGma4eBdVHIqcHIoA2hn4i9wZ4WdRgXTBgE67YKtR9ssVJMu05G+6kZJECiFUmNvpyuG0phXTv65a5XdtKV8NlmGtvIX5PrmBwPkgAZPFCWqsdHYK2craS95oBLWwsVYobECwEaHDjkOX4Y2NWr3/Hr6Drv1LEuxWwYJDpEZeImlty/DHJpqLSOjgSAOY1+Rq4pAVfAwAtySX2q66I96sDlQ4+YkttaVPmkxR1JKVyBYPnrIntKcSnGZjarJ3/lwEVTd3WRkVKeuOUcyF+kTeQX1qtYqGG8w3vacK07JVxTZisEzoNYu2aYqZUkHAdLwX3YPokPTXzz3GS8WfrAyLTMF75FfUO6kMv7+OHZPkShRV8b5qO2xPjyxIpdLItSVTYiLtsHRUUzqfa8eKtkuvYAWuXofw34IVxTFvqh0gkz4608+spYw9s5H3TrRy3J9O6Ja4qqskOLWL9QhkEJB2hcHsTFH+WNp0V0eUA8P9sn6LM1lZNyL3mD58EU4CVxvwa3cn4rVvspm5Yf1tabR6bbn+CrKrQTVyw9haPJw0sKLnIXOUSwvIBoGL/jr3M+6jbrBv7OvyKFf5lyQZV3acoDco6oRBJ4uSDmTgeGCBp4GwoAMrY4Fn4o4p5YASgnXpeC3k4GYAag4mT64KBEbv4oU7t7wUcF7c3KrEjgs9uk1dVmuQ74mxQfAOyfTL81khLHhYoZRvg1FcpLgBHtIICdA+CulsSI0wqWyMungD90cfXJf/PF4HaYylSVNeD1YHj6h0yzcL6LSMIZcl0dpwTqHgnwyvwUIkVLGVEWYjAJl8aQGKqr98V8QFaYVan5rBm0UU+jEOJBWneDfjBJM1qiJLWVCoCmppFNn0ALP7Cr2NY/5m6hr9VHfx3xYWACkV7feDQnLA7XRsv4=,iv:mP3E5swQw+LTEk88DjxV6NjHuJ+V7b6wYFCv953hp8U=,tag:ZrFilnwIEb2vzwpZRPxq/w==,type:str] 3 - matrix-signing-key: ENC[AES256_GCM,data:BeTwWMxbwC314CMn6BxPUKtnr48ipV2pbewRI0l8yNEuzbSFPNwU8a3i41viOoRS6Mg2jEHTSWDRMw==,iv:abvwkrNe324QCbWLwiPY0UwqezS0wbyk2Fvi0vs3SI0=,tag:1MkrL33pWhmdVUSJQviITg==,type:str] 4 - vaultwarden: 5 - admin_token: ENC[AES256_GCM,data:SLO0d6zZhC3t8vSx99mUlhUSkWcx5P+fKrNZvzy0SBGT+Ga4puHtteCXk3xALlTQJ2LmQTNg+uj9vI5XC0+4eNT+kjl4gmZvberT+6/ANQwylKWkL+IXMjfjMzRuX8yRJGH1R1j11fZDgtSWpGvNqMicDkasuA==,iv:BbBjgsHh1pl904COKCMAh41uI7UH9kHcyy79zKYcM8E=,tag:8goYKIdtE9QX92VgZpA9tQ==,type:str] 6 - smtp: 7 - host: ENC[AES256_GCM,data:8lWB6bWXvlSkJmshSw==,iv:7QtLQ3Wx5uw1TDjS5OP8vgMZMDIQ5wHZtq2JfkhTdLc=,tag:bHv3Yw/N1H8tDq8h66+Vwg==,type:str] 8 - security: ENC[AES256_GCM,data:4X5CLH4KoVQ=,iv:CTir/KO8cTDK0eDpa6dugYH694DLDcKG+ygRceaI7g0=,tag:J/WuWuNYKxrXZ08n9rG7+g==,type:str] 9 - port: ENC[AES256_GCM,data:XKc8,iv:g5aIKLKIB5++TI9se3a8DAm1TXBtFpraW7ZkuAUMT0Q=,tag:qumWtCf4qsyNh6dOkDPmiA==,type:str] 10 - username: ENC[AES256_GCM,data:RjGJbKkEmaMhKKsjdEvpb9YrvYBeAJJV,iv:5J73NP2SZQtvt3Uh3SemkEVLiQoPp2TpWGcgDbvVA7s=,tag:CkucUUmuRESTCSzdJ2EF8w==,type:str] 11 - password: ENC[AES256_GCM,data:DdBBZbN62iNlTNzxknygeZeaiTVQ5behsJzlswsRzDa+7L8wSqaHp5UsnkuomTfJdgGSqQo9ObnCqm3zBj3vEbUupj6Ur2o5OWJDYXK8hep+WRUMrYqd2w==,iv:M47gM1ZU+TgldQqP/PfogBFChDhyK5xckqtVRbAWzxQ=,tag:kNw+TslEPPena5jtdRLqNg==,type:str] 12 - database: 13 - username: ENC[AES256_GCM,data:UjcrR4QQxBtjoto=,iv:qPVLau+h4t1SiD5PqwoHjSuCwG/ftH1x+eLhpN5g+nM=,tag:msp2oCjlM7TzrFyit4Qi6Q==,type:str] 14 - password: ENC[AES256_GCM,data:5fZan5fT1mEKQp3j1BoLNKM8TZBj4D3GJEuHJC4iOjot/fCs+8CToU9K5ZbBlJmBLU0NQNmuw7ic1fajw3J0HkSLeKMR1IXYymQy9nGs7/Dtw7QmpanLRatZpSYfPCgQg3BM6lol2aW1rhwIgZGtuj03zp/+GhklRxZyj91k76M=,iv:yekf7PRi/bwpJ/bLrfSz8nxubJxs1ckJNBxfslnfvl4=,tag:adD+ZG/VNn9Q4shCU+6lrw==,type:str] 15 - yubico: 16 - id: ENC[AES256_GCM,data:P+Rg6xo=,iv:I6YWEq8+lpSvVicgnTnXyobK/dLi/hwyYOGUu52q1hU=,tag:QfF6mJJfklGlf3eqiISjeA==,type:str] 17 - secret: ENC[AES256_GCM,data:lUHh8w6FUR8HqDvLEVa9f27wrtpqsZOYDG8DhA==,iv:ovEwbuFtdnnYnr0qpmWrXM3AqmoUsPwe8nIW/4Mkn34=,tag:ikECSoxkqmFehjMJS2ju2w==,type:str] 18 - push: 19 - installation_id: ENC[AES256_GCM,data:u3uthapB5tvhLsyawp17H05zF9rgwpo/nulRc53zPQ6eKg9T,iv:kakIcF8ZUsdfeH65FfzsF0Vk5GotrDMmzWQF4IQRxhE=,tag:ytTT+k7EH+aYdkP0BpvI7Q==,type:str] 20 - installation_key: ENC[AES256_GCM,data:qYDdS5gV+1RWwjhZZVdQFvTqdNI=,iv:1jk1+5V278evEl/gU/aocOMgXUzAfbFVECG/sQC0s4k=,tag:yAEzpPbY8+7DCXq0gvUcDQ==,type:str] 21 - forgejo: 22 - database: 23 - pass: ENC[AES256_GCM,data:KJZATszG5hOCV6tlZiNNK9n0Psn+l14hys1ZzMy9Hwsy6gjanFQzedNn3fnwZgZ9ani9CO1ncdAj/xNk7EweO40FIBT12Ih6m9JvTugQDveYU38v9TKitQ==,iv:OTogoxwmalk4CiUlQstlER0JVN1YuVhWJgrhGJPYiuw=,tag:ZNavKCvqjkxzvOb3hSpd5g==,type:str] 24 - turnstile: 25 - secret: ENC[AES256_GCM,data:zmnN7OmRjf02BVTiEic3LzbxCOD/Q0GaBx6wTha0k1jB728=,iv:yMnxn15p5HYZSMOCBT30i3gpClyW/2fx8Ytx9sQKLSc=,tag:Hw/HZrO7QEYExCPWFkwYDw==,type:str] 26 - sitekey: ENC[AES256_GCM,data:9hOoGMaEPGUT0XgWc+tSeHqxNBKwavoc,iv:VaWMEu1QIh4LeauflFjJJgblLyOFkTpb4Db9wip6uY8=,tag:cPbcxVL3Ov+xlGqbx45NQw==,type:str] 27 - mailing: 28 - host: ENC[AES256_GCM,data:wIG697u0AjEo0Hu71g==,iv:00ahgX0qqr7905RgA1QoLW5xFC6EhMlfPvZpcjgWmkE=,tag:StOQOrXHVghW1WHkLdbZig==,type:str] 29 - protocol: ENC[AES256_GCM,data:N9xCOt4=,iv:5ryKSzDHl1Vo375IqCnRr2TrcjJCvQgkdHHuIJ0Tk6w=,tag:lIxU1dWDKfKtzSl7F/Q2KA==,type:str] 30 - from: ENC[AES256_GCM,data:mwcO1TA9w2A5hbkrKIwbpA8vApqaoGUeK+QVry87WmH52K6KXg1RztgFAi7E25w3cg==,iv:p1Xp/Szhh60QzBPN/7w+QgRe/s+VOzv4JlEEVhiysQI=,tag:WQSIoGEJ8gAbPO1ZArkU6w==,type:str] 31 - user: ENC[AES256_GCM,data:71ZJuyuFeT+YHCdYZ96ogP6NfErYnXLr+g==,iv:242pszmIpJzoaX4Rx+7nYSD8xoDt1aqViQeBCUH0SlQ=,tag:EOsPhFvozIFkqdA8/B03FQ==,type:str] 32 - pass: ENC[AES256_GCM,data:K7AwpFI5KNJC7lyTipnus2ynkAmbYikDeX17qUutun/EAprDgr2dufB7mlhvvsejj+m7b7toh8BcHYfjN8oqSjYpB74=,iv:qBqTOLuzS0E0uBQyUK8vsF9uAhKyCf0Q/Iuy22twGEk=,tag:43Ug+zcCDEPyWcOPDkpAdw==,type:str] 33 - lego: 34 - cf_token: ENC[AES256_GCM,data:b/04yeqgfzo3A6kx7ddnYCzRv+5hkDdbBNJNgCHceUPv8x98KQQDmg==,iv:uaOjV7F2ENE7PDt3z46JwSaT9prH6XAr8/XaDCzDXEc=,tag:92bnvrjciGWlD+sUwY9u1Q==,type:str] 35 - grafana: 36 - oauth2: 37 - github: 38 - cid: ENC[AES256_GCM,data:YZ6c5PHqdMwM30hCYxycpk2xapU=,iv:K/WKrdiq9mXaFV33zYQYeYgia/54t6/qCseVGykW/yg=,tag:e0UQEcMJg88JD/5s+pkK+Q==,type:str] 39 - cse: ENC[AES256_GCM,data:o9yW6DRgdV+eX1OQ6XyJUQsZ0SMtUY2MrWrfhhqf9LgDRdsHFZNxUQ==,iv:iNbKhyUIuKtBUVHXdR36KWCueMjQuKIErl8P7intFX8=,tag:OpzLX7zbOfxVxZmL6crLWA==,type:str] 40 - gateway: 41 - cid: ENC[AES256_GCM,data:M9LrS2w=,iv:F8A+gIGPUjziBTuBnhVS9kygzZYjnwFayL6Mx7LBwe4=,tag:ioQXCTFxqZo5yOnucSLz/Q==,type:str] 42 - cse: ENC[AES256_GCM,data:YYTOpfaOlwo08qnPCkydj92N3TxDtQxwXAA0xVVB1hQ=,iv:1InLcW58sbz9wfp9VnONsqE+iDrhCWhlBBkr13KfN1s=,tag:4/OIhs4kqgBeCHCNkIwAGg==,type:str] 43 - vmetrics: 44 - agent: null 45 - auth: 46 - hosts: 47 - #ENC[AES256_GCM,data:gh8JtuOIKKQuttfi8QiE+N1IzmIHvV/pnBuHmAZBJOYG6CJmOfCxoTVcN4/wyc4=,iv:IeAZya/9R5fF4iqmmMzZ28J8hj9yYBPXnljsCVhN73U=,tag:a2NofH9HbEL6+tJUSufFig==,type:comment] 48 - satori: ENC[AES256_GCM,data:LoTJoCWMtWtpJhcbS73kffix7QMhM0rPHtJQbM77oG4aT/D4sX8vWsWgKPmYsxzkAMeI9lUQ1rgX2u2yOd7asUSjuW/U4pUsaMSi8EEq5dxbxPoAZQVHRRCImBWtcHeOa8AMH17lohYDy01AiCmH1da8c7iMeg68IQ8DoHGLQMqY0GJVLIwoh9dnyvpf4ALFMPMnt39vGi3hXjHQlcwYSdTS0BIgcrW1oHMrhg==,iv:6NhlTlShIUrtl5844NGWq5903liy7pbbsaa9z/OBxSQ=,tag:7i48gmPmEKCzv1cq8P8jUw==,type:str] 49 - renko: ENC[AES256_GCM,data:PBo4AZ2ELq7+D142B2TdrAEPfcOAee7Go+dpN1crBvJy0DBLMvOCDnhRevRyf2hhqfJ57r++ILTMr+R3VmEVvTNG8ABhEDSria5F5IgAbuRTnk/ZJgi84xqlEyGVIkG84GsTF+QFNWBgS5OUOjuelBosYoi1OhhnQU+zxUIt4a/T+JNASq+ge/AQoyUJUOZcHv91mOG9AJEVqQCXA8nV8WQxPNBJII7qFimdIw==,iv:WA8CsytshgRN0LXWyxm6pHQ0N8vwDfvh7VNlemrja8o=,tag:h89e8WCDuzbkd+vLAA7EYg==,type:str] 50 - kita: ENC[AES256_GCM,data:Niwnk6+48nXbUOqGr66czfLffwNf22Uewr2NWI5WzLzxxQXmc4z5/PBzjDKScwoHwOCW8g1b310h4xOcEfzcco54xpGhRhdGuHYjZp+voVC7ugTsQ1qA72a1cjIfJekPtUeeWzX7tiav+6AcP9xdmVWGtPG8DWbCQRn58B4kR43G6fyIMD5XNW4VSJdcssZTR5EvT9DFSPVhdGBYPjEOsohnMB89W/+e4gVKFg==,iv:Wvx+ItZIrdHO4W4M6QWIZgyGDINWoNKKPWVbarnGYj4=,tag:PARM4+q0H+w4v9ZJUnTvQA==,type:str] 51 - ryo: ENC[AES256_GCM,data:vFOGhKs29DKvUUp/+N2YyOEf1eRz5Jr+F06zfAYSIcR8E7NHHlPeZO2xwok9V+4TRvCmFsJZs9X8OQ7DI929nKZ5xqE6ej7aXOhgd+3KPY4cLcSS+3QShW7I/EKNnt3P/TI479AZeXWToZ+QrcUQ4erH9FG3iiz7AD1c+oDc7BP1LjoNQcVJKrWch5P60tJoJE0tq8wwhOsvMCsSPW2lAJvLmuvXF98hTL8EZQ==,iv:eIIFeKHC6DygdX0JIqZgban10d/24UF8K49DiFLpqb8=,tag:qtGKAssQygryT+/aog8sfw==,type:str] 52 - nijika: ENC[AES256_GCM,data:VMwS0kJR3NByYh7GO6FMKJx1B8Oj0MG+JnPtBhZqq6B0uv1maLeZWfCC5u2vDUKy1kRuooKE3eD5cV+pnIclqrg8thuHGmQyffgmdVRZBCgf8sKyMLn2KjebmydfTrZafIn1XlMoNnCezfcWrRmyoA2fOotcDSiU4imnews1TtQOyupucaTXBq8miJHUkM6Ya9bhhVxTm9o2vZCwedxy+orz1GYHG3iLro/5Qw==,iv:VZnjKfSygCrt50k8rwhI/jG06ej5uDJ4UZk/54hArvU=,tag:j0X81BTprWUr1QilmpP06g==,type:str] 53 - miniflux: 54 - admin_pw: ENC[AES256_GCM,data:yad28v4L9v1U349tOqlSJLs+wxU2isFi,iv:zJMay0BMstifEbpzQ+fAEr6+exkVpdGvRLve5Ni8EiQ=,tag:eEChDTcEFytzkWA6/qEimQ==,type:str] 55 - pds: 56 - email: 57 - address: ENC[AES256_GCM,data:4GAp7aW4JtTlfKc7bohYRyY+6KeJjAXJW/R6lpF22qMEbOTNZA==,iv:GG9N8u6Tlse+rVTQ4Na3KhA85stsFSF874/5/TKlw38=,tag:NfW/5VqIX5raz411Jji6rQ==,type:str] 58 - url: ENC[AES256_GCM,data:wXRXEjrLeCVyrsTWfAHw0D95byOWHABU6SvIHguiOUW7r1fljAt8f0QkaSaaIg1AUN0jeSYESkoQG9yk8cxL7/vqLwK421j+Q/LZsWATbpLtkSHHdzX6YQUDw77MXqGON88YkTpk3Ur6P/ereQz2iBP9Ph8=,iv:nwED4OY1R3VWSjgNy79FbiuNQ5qKgOX3YPHhZJKTf9A=,tag:fVJtQwAr9rEtDcREXVqgwg==,type:str] 59 - pixivfe: 60 - token: ENC[AES256_GCM,data:N90DOJ0mip8FuuQD2iHA2OMDIePuM6tddLRLCjgNXpnp4PnRBFgt7UOvY/163DYphRtI/dl6Dl2odlpJ7UDtqYUKmNVtzGUGHLz38XQMCXN4rXnCXQ==,iv:3w5L2p+yQvKxusT3LBG/YXwQMrYhz+km1RuWmr4ZeO8=,tag:YHAHqrgqzq3K0x3XcNizwg==,type:str] 61 - searxng: 62 - secret: ENC[AES256_GCM,data:u1qFKXn4J21sO5a68/YJq8pWHHk98NINOG7FuwY8+o7M+hNod4vO2Axw1fJPUnDnUdcnEBQ/UUpUuH/DeAjr5HyjuZ1kyzHQYUVhjl8Mp7W7S/R2GCKoIg==,iv:bPKgs0ZAJl7TgNOjTh4aKks5/DHBYdfIemYa9SnfoXg=,tag:KiKf4sKhsi1dtwNFtzhEPw==,type:str] 63 - hydra: 64 - signing_key: 65 - v1: ENC[AES256_GCM,data:Oc1E2MNzUgRZvXm54HmumhomF3M7LIHQl1u/Jta8cdOKmZgB5jSzv8aUeaKa1SOGCtIfVSbsJb7ijKTULtrWOkge6SBtiNYkOAKlvDGXWhChAO4GRFrMyeJgjLFWgY7+OKFicNQwU3uLPA==,iv:j25ZwWmzt7r53CVxJkGia8tSpIUQD7UecQElM+JDJ3w=,tag:zxSvJV3qfius+QwBYbgNrw==,type:str] 66 - s3: 67 - key_id: ENC[AES256_GCM,data:lC3XCy3hKsMoJORqYO16Y12GpuTQu40gVhY=,iv:MZkDjjvWCCNjGtKlzBDfa7lXLC08HU/Q+2oNHkbaNok=,tag:jLS45EwjUg55/XjH6QRyPw==,type:str] 68 - key_secret: ENC[AES256_GCM,data:YHaIympdF4eJ/e1APFp/9+3fgNRwqNP/6tATkXUYWW3yIQQof0/wfipJYkOTnBMK06/F6hQdYMLX5AswaXpfog==,iv:x+iY6uli9wn9WskfhAB0JCApj0XoD5G4I9RJWxkGf9o=,tag:5Vg9CJkzD0OR4vaTYwoMEQ==,type:str] 69 - wastebasket: 70 - key: ENC[AES256_GCM,data:tvlRsZkX+jrJWJXXxBcFnZtweaiK6V+1YV6evN2ppu14I7h4vPOOTpqav9lvzol5y8PwJ98Uw1kXFUZWTZfUda204aK1G0o4n8OS/Q403xrWzouusUI+06Jm91L75a9+/M3ql5/sQOtR0/gTMAN/10gEcTSJGnCQQVy9MDe76ppkmXnp+Bk919S8qhh3kIJ2brRnZ98RmejpJsJKG/2D10e4k9pA8uiN4vhhWg==,iv:CBzRc7Oltetqo29M29cuUr6aI/Hu5tHkbRLInDFCRzc=,tag:m7GR8ZG7ymFhQRQfQIdodw==,type:str] 71 - zipline: 72 - core: 73 - secret: ENC[AES256_GCM,data:9Yro0dKRoW/q3nAJeBi2/DBVzq2l9Q8cNjg+ZlDf/ssn1oDNnxeBtW6C+VpChUssP59behc7NQAdEH1XnhE/5YITiRw0SpMclLBDO74KmSmfhoGvQBDWU0rRQqHoSg/8WpDJcVUs9iIU2LzUoKf2ZAPqRzS9IdegaKQA8l2djsgW1Io6fGeUAH7UdLh+QTYhRzhga0vRInDcRbm9dzrRW8rB41ff9Tsm++hYCA==,iv:loOALkfZFg0sd9t0k6XR5ckV0ix5Oda9X3H+7bnA2xs=,tag:NL+gyDxW5fS0TmYtiB6HLw==,type:str] 74 - s3: 75 - access_key: ENC[AES256_GCM,data:G1aUG9dvjedUTcSVytuaR/ZevFtoiEokEd0=,iv:N7rBB3O6l36IaAk5tAKRCNxxRlvKmj52nbIqFFirwDQ=,tag:3vt5Sj2yTie8K7Qsc6jY4g==,type:str] 76 - access_secret: ENC[AES256_GCM,data:6oFbU/0g+P6MTmvenjmjshet1wZ0FPfA5PYvHLZqIM14IdAntIo5rdFuntgxXDjPeFLiq6tEzMfqX/cONITXKg==,iv:fVoxMAj+xSOlp3MWtQ48TA62+L4UGxMFnJUIyFaYYxY=,tag:/1gV4TfE/kOV7CvRbpqPUw==,type:str] 77 - minio: 78 - root_user: ENC[AES256_GCM,data:q+w4FgnCA2QxWsxM,iv:NojzSMmZ2yq7VyPn7fOYauLpgMOE0NGCyTUQ6slGN2Q=,tag:5FfjO4KH8XfLuymxDgV2iA==,type:str] 79 - root_pass: ENC[AES256_GCM,data:oh/VQDU1dR9YLribrhZeVJxMoY9/7Ri8bloM650j6Ut/vHF6BB4NYY94RngkBYRVkHplF9oKx+Ey13kMyIPvC+EvPczoWKCHJ4pJqq3GgWigFp7ufUDdvY4hBjW7SU7fk0wYOjZYH2JlLqjmU0MsVKSqt66Rq9Si0MU7VACNrJzYDe6KbCbL/YT3DmTvBpPR6ysLCE525rH7Tg2LVyn775Si+vo+KGC5gqGMlw==,iv:8pbJMeuDIcvkI8Uda30i8ote/PRUSSAmaua22gQmbHc=,tag:6hNvVytKXbjrKZMKkQ5pEA==,type:str] 80 - vmetrics_token: ENC[AES256_GCM,data:ZZcCBpLlyjMOh55H44WKVSIcNgU+GVpQf9ApMfNV7Tg7dXtP0gF4Cy0RkgKT5hp2arO23HZB/jZGxAY60IDOr9nHVFih5+e2OaXeu5RPGlqsgpp6EZeBDcFvLBtJvx/3qmijuB92HdUXP8/x4Gr0d52xID9YXr3w/To50fMvK8UPFVwkh3Ck4tU7tYLWrhwNOmLu3jZCRMq47Adn7Gu090Zekie4S+LijB1pJvz9h3n36R1M5NOkEpLVb2MjMxtLLTQkoordLq82Vsvpd704VkZohTU=,iv:hiCRdE7dFGHcWjDEc3ZkXFIiTC+YkvCus3tbwVe8aBc=,tag:HflQTi3SuSgibEGKT0Zi1Q==,type:str] 81 - whitelisted-web: 82 - entra_secret: ENC[AES256_GCM,data:h5tiggV5MgUby5tZ7oLqxAiJReB9L07XfEzfBWoSkgxJFm3mTDH3jg==,iv:xBi9pBWmyg+KGcGMxTXsabzK/uqcNpHdXdJ36UtiET4=,tag:OFyuvZuXvE/L/jBJSU3Vpw==,type:str] 83 - turnstile_key: ENC[AES256_GCM,data:r60Jgabtrkx9vYenlb0u+IM00PbD+v+V4/Vb0JT8Y/7lcoQ=,iv:GfcCLWI+mRlbOr2DDDs6nzWKpABJUP0xtrAyK4xhP9g=,tag:J9MO8UULfIT7nhf7/icuoA==,type:str] 84 - ipc_token: ENC[AES256_GCM,data:Klu5jBDkvCSY3b0+MDQNSer6FQqUPOltjS8tYmu2VwL3q0QqRDtfzejJA6rqpsW1hboeTNrYLlZu6VP/NpV8NqH/0NR/C60S/X9JsMADeyiwrWqGw1YRHhFnd+5f8n1C/m6AhfV4OnAHNtWOx7EF9tTPzU4fJf6yU7h+xK828/TnE7PMie1en+TKbaGGyaTr/6cv/ciCzY6GTFkZcB7uokhXs/rJJ1an4KsfTQ==,iv:KsFwwr2uzVa88+42gZCGRjfxuVLFlJ/kIi9KQn4e8GY=,tag:WNOE3y1HgIaILPnLqSgDEQ==,type:str] 85 - pocket-id: 86 - encryption_key: ENC[AES256_GCM,data:aSWSWrd1dR6NpwLJE3Je4j6bnBMq7QFD8VX6u4XIKqFq3shwuM/fZitblSfVX92UdDFZnsZyRiAf57rH/9PB+saoOcdSUkC/rTYO0iGFLQLcOiSMfBdyKA==,iv:ZlCrKpT8LrcqDK7uCr1m8vp+reCdwcG6KhxFQsB+KqY=,tag:+MvOEXBnUP5QleY5f6kbuA==,type:str] 87 - maxmind_key: ENC[AES256_GCM,data:KfGuV+GbrZhDSDovV7eHu7nffOB6j+z6wsXQxlaEB/7tvwucn2wbxA==,iv:+t5nNpRE/x1cSZ+Ee6fHj5x1vKqTP/6NGqiUlhdzTxs=,tag://rUceu5SeIpgKGiP6+Pkw==,type:str] 88 - garage: 89 - rpc_secret: ENC[AES256_GCM,data:SYD8U1FLutpeX/zE8wWgUf3MPDQuS2rEx6loF8m0U1rolz6S7ynt98tUh04t1cFGon405bsCCqJeSesIgBAWjA==,iv:Vde1d+ap/hVRxPs3hgB+avS3s2cWRDGilqI7Odktgho=,tag:t9co728BfgQ78tfG8V93JA==,type:str] 90 - admin_token: ENC[AES256_GCM,data:in/UjRG4jehvI0kjfD3TvheWN+7NNmU4GRuXEqBZocyd1E0NqP6DKxhpG6M=,iv:yTA4dQd36ou3gs6UGrsuONJzQ8DNTIsOi765GZIIaQI=,tag:HD401PZLEOaPNszV/04jJQ==,type:str] 91 - metrics_token: ENC[AES256_GCM,data:BZ3TN+ubxwHNi8QZP+TmdVgcL88UzwDsv8Lema2ClxqYRZFddaQg2RIHHIM=,iv:k7xyeyzZiMK3R/Gr/f+8uN8zFOUJaaQ99AILoKMYa/c=,tag:mJhPxEjMKOjb/Z0KnGzN4w==,type:str] 92 - sops: 93 - age: 94 - - recipient: age1l3qxt6630dzesdclfm3eqgw3uuhwj09dh6typwlwr6clcv0qhfrqgtj2fk 95 - enc: | 96 - -----BEGIN AGE ENCRYPTED FILE----- 97 - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBRbm9IUFZKWW1obG03VmZM 98 - amR3N2NPMDhDUTNkTENPZStLV3luUEsrVkVJClVUL3JtYzNGYk90b3NubU5VVG1u 99 - Q0JVQXlhWjFBeHZVQUl4SGtBZHhJUWMKLS0tIDZ5RUpNdkFVaW1uRHIrQ09EczZa 100 - U1FQbVRKMGw0eURlY0I5S1BPTmFvK0kKF/NluxRwkAkS11AujkOzdMlUXfkAolvl 101 - 2Mt62hDtFwxh1gCQDq1j1RC2LtcG7FnQpm1CI10POIDE+HfuYNj7uA== 102 - -----END AGE ENCRYPTED FILE----- 103 - - recipient: age1zkafenrdkkmatjh034yykpzjzzs5fx6kft23jlmsung3dwyufcksds59l2 104 - enc: | 105 - -----BEGIN AGE ENCRYPTED FILE----- 106 - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBFYzJWZjNQOGNaZTB3NGpG 107 - ZzlBY3lPeDVXNmhjR21CTUVBRWZYZ3pPRldRCjJjN1E1YVFrMkorYVZRSFRhTzRM 108 - clJkL3RyalllUldVbmkvWjdsV2JJNjgKLS0tICs5WVFvQzBITGtJT1FnSU9lSUpQ 109 - cElpckVHZG5WTXV5b2dML041UW9Md1kKtqsN/agZiQSEmsRcuWoe0FZwYk+CTjld 110 - xhVsLW4STRZ7Xxd//RTrKf77uPfyZglQ1TdstXi1WbFnruJbOq+piw== 111 - -----END AGE ENCRYPTED FILE----- 112 - - recipient: age18h7hya5terghrwawgpny28swlat2nqkdrfd4clk0svujqlz9xfusd3zeqt 113 - enc: | 114 - -----BEGIN AGE ENCRYPTED FILE----- 115 - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBoRlVoZERKTWpESXlFRkEv 116 - Ukx5b240RDllT0xsYnZJQ2MrSGZHeXBuMDNRCjA1VTRpRzJaMHpicmJWSXpFa0Yv 117 - b3lxSnFGMysvbFIvaTBPVFg0dldwR1kKLS0tIFgySVNQT1QxOE5SVGNvWUY0ejNC 118 - QUlVNExmVGd2QXJwVmRGa0JvMmtocEUK7Zo0Mtj3oZm5Etp61cGbLs+2XP97pjR6 119 - rtfHnuxceJj0+yBugfwgFD1TGJ+6M7z5YCwTx+GAvbPDrmSm2TGrwg== 120 - -----END AGE ENCRYPTED FILE----- 121 - lastmodified: "2025-10-31T06:22:39Z" 122 - mac: ENC[AES256_GCM,data:cRRtc1MzZ+1+lzWRQA/IIVSyQgIO2b0FZ+Xf/Riu4ry8c9FeqLCIrOJzYUUYA4h3z+KQLKL8mgYKJ8xrhMOEmOBhmtEFhyOJp9IdQeEjjQyNy2uRnJRrUtJpTe95LSKBV1At/hPZMcwCSx6h7zDTI7sBWsNCxkMSp/Zcpr1AyZI=,iv:lc19cb+rUMcTZbjxdlLXNE2uWKvwHIK8p7FuPXfvZUo=,tag:U48mLo/y+zjWT+p6/L+eBg==,type:str] 123 - unencrypted_suffix: _unencrypted 124 - version: 3.11.0
···
-28
creds/sops/koumakan/vsftpdUsers.db
··· 1 - { 2 - "data": "ENC[AES256_GCM,data:IDfGOtV6/JBsDxGbsy63TDTeVFRHIrivOmhoigW4IhRLjqigWHYWlyqM4a87enfOxti6o6FiRtwxM035XTNTX66H7x6vsmr7SdqtuXdgemxrQ8SRse6MOpkJqNtOophYRjIDzFvfSNZT+wAJJGdQOnQegXQDKUCBzIiLCOOffQZfoY/UKJRU7tIYAhv/fFu/sXvVpokmmmcPq3QFeDYu/Fto0JO9fgxNCUcPN7xfzICm6q/qCzNEDx79xZRlqPXzgz0Z5bXkkUl52Flh1APGU23xJPH+N2lBfrHDj2v+BdDZ20n1TV4OdiF6d5Ib+2LmYpiOJCTXZrtC0fQSNHj0lNmSaIWQzkQy3RNg2PVQ+k3EnJmLMTsCIN227rtAg0tY87fYL6IN7ndkJ17uetuxr0iF1BnpZ/j6zUdsk+ftSo9UfPp494u8CIkR0gSuEABi12cppZKW22sh62AOASQw9qHqYWP9qkJc9nNJNYr8w7UL2lOpIisyrR7T8MVzAWzKJg9lnOh1PCfyTZUZqy2jKYhv/Wsufmdve9EtjS/DvxLVK+Z0+mZccziYbS1EBzLuKc8HGTp7aWx8xvWdKLCEkbcGGZf8oPQ+df9eHCAOZRHA0PeDLjEfuY42hKLdmVSr+ETcNCLNhLOBNxxBh94KP5BvkaP8Fxkpigp7aeCFKTfUPa6nSo7vrtPvBtLXQLcPGmCBgyIScLQ3d4kX5qbM6VVhQOj8nvFiarF3QHUerc5sP3bZJnND4Dzeba0J4o0QNzMk31BuvhaFL1a7Tn551TeHT65AzIBFNAI/filNWhYAy37OefIubk1tfmVGtxBlP9LNyw96LtUaRvqIPMAwwLBfWW2AzpGUFpSwis6Tp4RF2Iv5c84qTE3m377dRrMvi3oQnNvO69q8oOnCGfZikv6EMuTTdx8LhyemsKlVDE/Iou98adHcCMGC0A/+GNgnn7yLfyWAcNLHil4mpZx9rqhqytV+GJ4dZ6fBGIdj9hbtzwYaevgtkTw2vVDa+F2DET32gl78RyV/JSmumlkKJK7ueEBdr7Nnbpw4w6mas8mWx9IZn9ah4LBWdnlFrG3tWoVRGcJH/waC8KMr/t0rzpWzqk45UU89wmn2vM6woo9gpTRymlIVAtb5DCouW/rwcc3muJS0tABs0LlsET/IAovvR2wYauJGlLz2Hs+YHnIyzRCzPO8Awxvkvie/jH+iFHE1kjPhxYeq9o9vmHktj/kVa4XoYg0iG7S0gGQgFM1WjL4XcqPrxgjd7uHa44H1d3agzLQqEHSnQ+v7CF2xxJnvgxseQIQepTMxn40VePbMERTwbMM8ayUgiCd2PevCAxk+/fSSOzWFSmsXg3lEEZUbu+uGgnXqL9nVtVKC+H+D9IgKqxufLexZ8OapOxblHRfQoV4kB37uaM+xeLNq275QSKR5l/lONc6lrKbTuOAFa2z2IfONkoDnR8xkz8U4YoovnivMblHi/0IzdqcaTFnKKCanvpMP2QPZH8QuWuq3KdepzEJzWQUP8LmpGupFNqeg7lv85a+/yG6dRcJlkyLzw/0SqvQAjPlaMPtfbAkAJh3/3EO1cKnF7Cf26/LuTZvssNyx2yGcJJHneMqyuiURivIAnzFY1/DRiIOoFPw1XRud/J1dpwGB9NInQ7TfeJY4PMQcMsN8eUru1doByTGUoTQDJuN7oJiXy3zNkcWqwT92gmQIfpUVQjNd+Ge/kVkJ+N7/9xSSPxC+RwtyO/1ky5FHiEJ7F0OPCnC/womV1Di5JAt0kEKFfg1n4EuWR2xqdIJvAnSVhGEfdfxlOYEsoIpiaTczewd6Y006rQxswx9EcER+H3UIL5MOqMkaWrcMHal10012wHJk15UxOZXfCfxaDtsRkf+MVSELTl+3NLG9n1s9k5Chl5pd6dYxjWtT+53PDZz5Maa59YhnrgMIapzHCIf4vSM0BkdvkH0wtrf3u9VEsROcJ3tCAew3ju6ogxQrld3pNKUojq9ayfdF9U3YntdbeY9ii3REI0qQhQVSEU+XIiKiuPzuUSUi9Z4+XBlLkH7o+Jz/0KiLYMEz4LDDeYTEyZPSLtsFJYd6V//2nKMBHTuhrUgQS/P6WA/aM4Q+9zxAVdVGuWwtlXNwI6DZ+eFVp3r0yVoSW8q/cRH0XCOCvKOIwta0qrudWbYNWX9E99JXGsuBApa5gIx09EQm1qaY/UGXmV8axDp+smp3/ru344RVTDPaC2WmTqD50GEzQAV3WFvZL6D5gOhvxJVRUQu+LdxAl8Mwrhvv1skH0QqIFiTDm/EffSx4jPV759b9VJ1N3+lV+Zx+XJg7YxffFL969ZeW26YLW2iZDOr3kG/MDUpOH6NV7/xcN37IWGlKwskgTItNDoe2J09HdbuRjicDVEOJ/1SwHmXHujhpCqNS4TpFD+2a1ehZFBOpQgLioUr6PsYkvKdBqcEZy5Dhv9DcZtqHpKPYrAuy76ubdeYLnAcfCTJoR6+yE/4IZCHVd7u814CpJuefbCQDvB1JclyAK6daRckDNx7Rl/VT+sWDlE6wcOR4+av7AlUBa/Xf2zsy1TfG8CV/p5L8AxKFi9Bulr5wY9wGDzapiVUtKXVlZFWOY9xMsZjIXqSjhY+zVIDWTKJ8Bx0dHcedTkG6ZBCGOD7fMdvHbca89LxwK5QLGQ+VzFrNHht77fOIOdzS63MlnmPEU244QZgmAVuz5GB+Nu/f3tqq0V9QwbDjGktwnAQZrdKAQ6O5N+qe9g4kNOS68OM+cnEzPbXtwWtKMu4RmFVo3ekEic+1ZUcEckd3vtpxA7Dz1wCAy65rGsDvJ8WlK7Fdsm2J2f+6IBlil/D82cA0ThUHO1BkWiuy0AhomcQ7idpzS4Kqm8n/vSk+sWFfJ89HGEnJHK/9sGspOa3L+eI+rCJKdYHPjNqYXi65BwINxrnPe27dWKufbBsmhyYG1JNgHnefp+NB+PGJMzWFniBCIZ6vyxoBJTLMYj3s/0tQu01gFrI4wWccNznm6knneSYev/XpWu1kKUQt/+5DoirccTQ0EfNap0F6ebeEZYDCBymWVqXcxI2CCiyjlBvsbT0dBoySzoixY+tT6zLxv7kqKngLdOyo5bfXbSC70Y9/DyRFlMCQTfiOUBXp/t5opbBaT0WJy+4KUsLJqsIakKuyCC3biykFq9epFRPd41VHptWkiLwX7Zyq09t+DB6JjOHTLftw1Pxz2qt0yww1ws6XhcH2U3twOy2JbP3usuzmkRSXb4Hd3XIWWmTHbZprzIPB2cR2G7Fg6bZALCWkaPbu0hQgNT0PKC4q7g9QG7jkV+bf+KfRZmq6NYH4UOKvgTFsyzBcJVWrzmVVqT3wmaRmOW9tQepiHGTxF4v6E4lFbQdo8NyM/Vv4HAX31bDW0ROwuLhG7ebG6g4P7CbdtrGG+TjiPNOQUBiN50iWwI9iIZBx0ckCcz/MXGhqJ67tD1SGApr8pbUTX0oOxBUHkKdKRrtZrZNiyxUYIFzyVzhA35rPPlj6syELQXAS+/G+xVyIo8DVMk/DYdTlx2C/cdJRgiQQ+dtZ05+2NbtalqtO8CThK9jCLI4mQONKqT9MuvvOfkKQzeCAyvTe8XvoHdbmC/f87XT7ChBQNbxmlwsuULlC9bjuNk2etzxk05BTohT8H8UpbcaGKKAczZUwPKfU4a/4OZnYcGF7WOnAVwQlY/4j+SKDOT1I5CGYQY2+kvCciM4vZoRZk245tRorwIfQMq/8VBmJ6mIG6VigpwWaZwPDUAKEZgEmC+sByOrSmrdMWoFHZM3KcA5VVJYvc81RTCwolw4M0ZgBGV+wqW0QDD3D5bYNr4iTfAGK7a2QYHH5XEFDMjG2imp90mNsly3o9DV906z2P+Db0tBcleyt61QdYfNyiazMtt9QpTIRU3pyyvY/HdR4GyJpznoLrMksLIOQuFzYWSru19aRUflAjH5YKi97sj+6TT6pBrKS2m+jASCk+C9X8UJBXN1+jMOSYtJ2/HBIYivjOfT85QbzTxXpcYsSd83sld57JpW7/s0WJzWQOoutZkC/B6N2HsVZ0MSSUaD0ElMWJKQRZL8kl6gTT8O/g7nvDbw8v4nHs8FASinCGtzmjv9F7Jq661p+uV6Yzv8yA2jsQ1+3cPoicN6bKWWOEaQNFP85gMmv3MNLuxBeIS473/pjkFjNF9ucc5RO3uDW/PvkvfWvqttmyyWQqAR7IkHjwr+yhWl9eyCL7uEKsLPc4QRNME1CKTduzwAvm5AdDUj93T4ivt8RpDBrocnqsxaSCO+ZMeueNc5JamajYjObQldLxvwePEV8eqaaKmGkV04Ynl1PKDv1plkWnDPLxP2E4fapaP8UKnt6njddR1Me3g5o0rbFitJ44S7aAghr5z/IRQNewb/VkYdnICVHG9/UGS3wGWKoU0suokx68hIBRUy0deHesqRbY6BcaHmsyj5DSRm+ZQZU5DuwcV+ZMIHX1RwcvZqBxTTneD3DX1rLBMaz3hX70E5vAzXDo0kfI0eZebN2eB4tcVLKw2yOMPfCfZN+8xJmbVYkYNV7gukK9uXF/4cu6drYUNo8vYr4/NimRayp/qydtZkp7TdosmGTIDxuMTagHKpyoCXcQf1gQn7JhQboxNbEcbYSdcfclA2XflXgtdP6H6+szJOPoZg8MtxQTSow0A42Cw02wVm7NjaWwJXTA/iN0dwjZFhuzvmtcnuXXuj7WPnPJgnK4aJW/eopMRDnEvUGH4ptK1iTmPx8Gn/k1yEyHFlTpIgbVf8SONhclF5LYIcrxHhLMrFNDNmUML6KenQwaRAQz91jxygAFWhC+5PyH65lqDOEFaVjn1vBnO65VSp1MBwKLogsSFq546X86IlJBJask7O0zU4uA7Mqu44w87T+qM6fGpcbSpIJmVgL7Rm/+S5ehSd1egl9ByUWS3qMOxrwptV+90pWp9s5VmCaUDmKZHjctAFd3NtpM8/1CViu82dwGVmTMFN6l+mhXyGIWT+Dg5bEfEisKYSUgU90iQuWQLiYX6rfAZeSRShZdYX3aalwv+tb7rxgYvzmJxyTLoO/IUVhajSKklrBJx4yjSTiTZcIYYdzP8aL3SgUQFc1/JixLQWI66/HboI/zgGdzWYH3UEug3qC1idKq9k7TfDDzBuwSuWp2fX/nelvzviXtT+uhWBM8xQmz77eSDrZCWAc3rVH8dNfj7HkyFIBfE38+JmRiZnu6OdF5LEIVpZiLMgNrQT1JlUSeBenzFpBXo8rh1pCzsmcsiLfSKGd2rBAb/U+HBHUPnGQqP53ZTJvEQie7d1XCHlJyVrhE7tG7SU7ySnVL82kJyHJkBaMvduuyUHOMu0ZIl33GtIMGOokM6EOV2AM2gZrH9FgbWGWaYiEvPq4pmVJEUilmAoa912n2VO0eEDjwuIN3dggvHralMp7t5tMyMr2+DamVVBaK+TJoTZ/Dz7SdmH/MDVs7GyCc0yXXMGt7PzDUgGqMxB2QIt68zYTwPv7ywZHMH4R5T1QKKlgaN2af2/VKW8tL6f6KFe5jBZPz5bCNg8vuZBOdyVeJ6IAiyvr9n81nS1XONtgPEo28FubzmhoXJUJbRxpiXisy/Sqkb/SGtXs9q9+tJ/WWUkytfHLfLS9vSUdEprTfTk1Lc/Oct0nHTIDvyzD3f+8496Yag5qcyitExg3kv1AHXqWFeleSPVnIKC1f5CGmRf9yEaYDK/DMaW6usbWGzXxyy3dYk0bvwpHiQa5D4tvLO646qn5XpR8sKSMZBpqsJv3+BiYrXK+mIwR4x4SjXWW0SwFKN4XEWzYd9jZOZ39k0KMvICKbsr3ZbvQAr0ehESS+UUkryIxQ7WfmoDv3Rqm/H05P95RjH04WM5CAkOxoMoRm6TDFJk0axcBA1WtCR00trlQLK28m47EQlbSgY5ASwQqgUh/6DGGcf/6mVh6bZmqygJlVYkmdw5u0cVEluMZSFX4dseBFDSE0WPzG9/qaAZL7T/iMgM9pW68w57BzW95o9x2Ht3TyAjBrcBO053sVkDHo8CAQ+AhzNv4SbnOOMm2fdC9bb6sxKukQcgHK6yStAj5e6t/p7paLLxTYrWSaIY0Vo58j1+RQtJBNn8DJ9/oGuejVAwhXr3CGwIXZFySGMCgiwzOc9eLnleoXa2bpOKSyh1FYK3owiRQdVQPV7fK7tJkKsJW8L0nkKADDj9b8iM9emY9cVoN/sUgxqd+YwbzL0fn85I0w36ixtiQ9ojgjA7OGQQ2+/LtqRqwIDBZp7ZbG05v87ewNL5jgGgrXfQR5xhJKGueokIg4sGlUBqu4JUZScguwjUA2KRinaFc7zGS/RilBshOULIpQVULsUAOYDWy7YY6LJ96SP/mwY3kd63+hWM6qNtjelajdHuDhIVGKMBtbYnm8c4RR9Gtd6XGhXJtQxxnL1nWxve2EY2mqNul8GJPhPN3Hj8RNyvDYNXEncl+Q6YcZTbdMXGGoLjnPbjA6ZxHVx1Me/IEGRplrWUWgYwR3CWkuV+rcErMlj7VOts0XnnstFZ73H1Gjpk1PqhrRak+Bky5JYSlzlPGtGdOosbVJEdiBGToZrdRMqq5ABKYROiLj+cIe7+YdkdZ9yEEWqNik4oUt2/ag8pNtdu7Wh1R12XJ7FCswrAUfvNmgSMt1XeFKFNE1VskpSMeGXPacAgPDDJjhXxxGvb69Paz0jfD3FN345YLDKR2kpD6Ekqu4fOmsWVUYakIXtXEf95q5LgP9wo0BpGsRswJ+ymBw5WOHURzAAKpYJI6lnhz2N3q6e1x7RBSlGHanrPoMNCurO4nkOc52XHpqTj3wblkQ9owoB6dnfNdI5P0bTx+u3mt5Ul3Js1tqFmj2Jj7F1y2A7OidhXvDALEI1CN9OHp2cHld/BFdj0lEw6IZzWbvwR5Qnlw9KmWJwKzqR7vmtN1Bq3LeGSvrX4q1H2NCBumCYjJgm8ajye/Ac6Q9m7mBomOemEwmss1HfYnEqGlLE5BxbVbTKF2cW2u0y1zDiSZ4+TJnxAgmYJABtTZJQbockCszqFpFl+uvuxrfB9TJRGe4nO+W7rvr9vUagcUOKejBqWU8FE4qNRrm6j/662juuYwlnXhynwQRpGG08Ci+A1CQK9DS8q+rvgS6jT2yIiaexJe2zyWCeGP8sOAbEGhvc5DmbY5V5t+6RnPmsI4SIdfMHPqYSmD2rDUlz2eMl3WAylJxzLuAvrRxCEmz0qzaQJXE0d9TuXjmvnnfc0NWdHRB30pfzojEdy/yy5g7gStvd2Rw2Nn6YhPkKLeWHwqEllLO4fqVIBntS3UOmp9zYUObk30Jjj+1JEZICyC/2CuGNxqFOnGamZDJDJudRoZASd/GLW9Ld1ylNx+oVqsOQy0opoQLDx+CWRw9iu+l3HkahoQOlm8Jk4ziQ+uJpOEpJzxt84DMWz0DxDbfrmfxkCpNsx363fRsq+b74nQUjxA3+ULLdYlauroyb9ClDO/pQyeumXKgaXJm5QitTfvh0jgaNjslnU6afDnpzbod6d8Nn3Aod0vDIqfAyT87vONN9sdPmfKstVxQ7GCn20UTRH6T1UakkWDlpmKtjQLZaSP/R+L2cy4YX1zXF9Yvi9eZUvTonIhfxq3smDNLqanjtSyq6io7X21r025twEPoKSxTqtvoSsSDTJuAFLqi0TTRZCI5jERHzAfyk2sznmzBcpyAPMQOhux5d23yIFTMllKUQ/OIx/8X2Pr1Y1IvQ/5R33biZu5lag2DZddSBGD9B/7paxbobSrT6UqhzXovFzvUPRiI9bP1C+JQST0PHgLNu7AlQ+bNdPii+APdxQ3+MYzF3HYbfLU7AW6x3+yg4vLKamCco5/MVWL1QPEgiZFcf2g7S2Xx8b0+SNZ/PXW/nU+pMW9lbAhx96ToOhtg1ND3t0LjtVlQb5wur9oOc1X/WB2dLC5BWrvVkKjsNRB5Ko+2bF8ig+24duyJVJjPhaSXqz7zT+B1m/J4gFjpEM80kUNltOCKn2t/PNxiUu531TKgg/7verl51cqdetZ1YI4Ww1AOt4r5FUHEmPw+khZGCmx2MOuJUw81Wn8FtomFAo1FwLZsF5DJNFgJS3nMw9lRKTUQuJglZFavEj5eZ9ee3OX1rf0+aw+kGwip7pwAuDKfrxI0Q8MBho1rn+2Cox65EaUljiOpzDR44x3PtaBs36zlkWyKnaNDToqbiULu/a0d8YgYgaqeLJHQ29qU3l+rK3bARrwfFJEqD1SQdt8LZcWgcsW3WmX9mbnrh0IQmqnNOTAgO5/EzZUKZqySpJh7oeRgJ99HQhcf+wEGcZ3uge4G561UtXsEDarcHUNppnHsmilDchMxLZ0q0m1Oh9UtgJ4eSWq355ypZyiEryZtTnm95Nq4HTGtCV8NCc6HXNA75LYfwtuJqoS8QxKO+G0M9/w0adx39KVc8JlW0br12VGyyej5kZfUIgHY5mFvmuSL9qk6MNlDhHNZI3CfWf4Wq7ORiXYQ65dX/KQjfaJoLf97ZRupCZqQCzPIUQLympxiYi+V/h2dk491uNkkeMRVppHK1Wp+IsjE5MbNxEanRPomJ6Aq02AvMI6okpgQWfx1IKBGeZ/ye/4HUWYH64Ry5BZfAyIpW8KPvfA384S3PZGJRQpw5Bl062tV9CsEZsH446OnvZUGXO1c7wx08VTC3nCzvbrjP3UMyRZhqgPPbhwR5nsTeI8+OM04GV+6MMX8qQ86x7ISKBnxLO8WQ5HcSa/CFPuaWZ0c3imyDj+Jw2Tmf8F2RGvYHxX9xvU5g5PtjzRxLuqf18Nxiw3DBBAZ11XRC0AdNBeCojpSOI6kOHzbP6VjOpocYXXm3i9o5ayBX7Ys1uk4Q6PD3UJHwoFKQAWH8DgvBfmFIlknPLIZaAIq5KJpJUDHysqJ0EO9pb61ZEll2dXtBtEOFugajgLqL7Ir2+9fIcr51xPpWAYW6V45xwYnrfiHsq8uBNvRGxiIEBamwN6WHvy0ZWotDfAmD6NDKqOLWP6NmhqrS+FxoAyXdcBQPzH97NaFsA0sHbv+Xzq9r8+BruuvAkSLNEqK7apgXo0D6kN99/Upk+RAwgHhjMr69O8OVBj+iDDUXurvH7+qAM6wsL1TpZINvo11QFh9e2LpF48pAr5RRi5fjcwcRvvUqv70f7RmNcLOP7o1i7CQ1a4ff6FFGZpcWUNiyLUlzLtwVpMO7xGm+i++TW5BcKsRK3VKR0FnzGoYJzA8WAjnakcX1rvt9gzEs93vagJn+gnu/I4v/GzUrc6oGku3VLFYaiOD7NgjZ7PMIuf/tTbF9wubuPfddzJkO8Fs1x2ByH2YALz01pVsx5IFBQXpWdv4YZxCxDQRbarQRR6cfvnhtfuEEmdIRgQk5Sc7EXwguyfEY4KJyjJyL0+jui7qgrPp8GLsp7eIm0bX3y3LlmuwKk/Kcq7LCdnFZs/H/YRkh2dWYqaD1SxBA9XpLdIsTlZ2zQuNdfMovqHGQGXl5pwbuSBe3qaaopzAc704n1WUIrmxQaai4ua706G0l6FABBa90r4G4q8+BDwGn06u4wedffSbsZebzKBmR+vXiu1yW0+5UL2RNhOAsIHFJOIF+nQ2+XVafROq7iS/5nHGsBuh7NpxOiIR8aiyNCNrtOnGVkKUiiJk1Jz6wn9QKISlfIsgp8XK8Z7UQWX3F0xmOuevmwddBZEESPuEBmrnuHGybkp9qRGXspur9eHFMXqvbOif995Ogju5CDOIgxmXaLaaufXlpxh+zPY8ZdXX32gcwpJaxTBbqC+liHq1i/yeaqrVHNM/Yiesjckv/NHK8HoUNKexrjI2J2ClqvFR+i2KagSW4DvU/E2vttW3OKFw9/+RiSlonbrua2hcyWVLfQXVLVTvIFjsZe8BOvJq1hHIlfPiGjJQou0Dio8p5x5bgmQS32WmefTyc4WusxlArKSj1HmSbS/q5H8Z89XPcoxLNszuPotp/Bwy6Kaa4xqIJtl4IpdSuwEEmLLrr7BW3GhNwQVNFe572N54thQ0FYXr1Gb2lN5st/pYxuWuKF78753g8VuctOAzbLqZBCWlExC5/xQd3oQdOHHWXUEZR7j+ugdzvwokfdLkrJiDAxz8dvyWtmQ7XFhaB1Mi78TDVAwF7L2l8zIRMp4Yhoer+ps3peyxDro/gEESKW+HssWENxZVqWfaOxlhYvr/hs99fDwRgjCOnRIFXt0jYGi4t1Qo6ij/S81Ruo9PBas+MIkN74TYcbVpxD+abyNrxtcZb2qeeUotpRXa/1twIVF4Cr/2QYXMD0BC0XU0ypnqimGolbQaOffUbPElL4ENecUkjP5LdC/E6qTUfLC28jOxFq/EQ7ZLWJrwrClUS1ArHUA9HUeK+kxrBbMn1MdZytdlQCX5+vlsyBqrwQ7XS+RefU+50R5WYnKJOm2Pn+xa7sNSYMcqgzeP5w5loTiRlfOy1I6+j7KgTmLG8ozGH6r6I77U7vIBTp3QrDDrfKdfx8HS3jTkNbr6r3442J0IYnG+WzzKOdNgPkOdF85lJx4O3KgDsSWjwUp7yMJooJfc2U2fVLx/ZIgVNi4wbkN248NJKhWl5hOGpiye5NIyEbjjhHYOUdoPjrxjF4xrgE0hg9dVWHcAPPB1Rl66VGK8ROhK7wn4fHz5ZYHpIp1l/Tqd/Ld3aIbZI7fC1eMraL1sPt2Zwwyj+SzQzhu/SWaSCvHRNGEiJmfqDgqzMF8Yvb+LVC6TqrHIP8nbuhSGegNq6kiTMqdRuyBCF8X8U4bDD/fqv2UouEcynnK6qFEY/wd/9w1kYMGQ8C/p5P9pQZy7l8zk0aG88Q65gWKc6ZLmyCBCcdkM4EYbyBaLi+nq/QBGNvHAUPe/VAj5HkJifz0N25eAd5/TlSqxAVah2W+azITYbWq4PVXOAlggZU2bJZkpg76xeOolFrf9q/sYORKPY2zOncAUHCpCjLmtK1E473ud5hVEiE+QH6tgV6HflrNlnLUwz0yz9aw5qwNuVO76MTL5hoCayCuXTTZKnMo4c0H0LAmPvKnCP/cH8vQntGZgBtArs8ysvWAByt7B2CNmKnsOxDoZpKQPIqptZ7MfnJfX/PX2IEPhwOMNAU+GF7xayuYriW+c/xnyQqMDsgJqDUNUPIOVM/HvSHen5jhmj5Ryej/o3a9f+yYjZVowiTmHiEEWQSeBiHEluDs5lNvNnIzUIMJtxUQT2BWONWfMSDSx3bsyYKhla1iBe16sTYsKTXuCtneHi3Muhz0+hA5KXNrejE3vTpIvz7eO0B7ZUXlLgfHlqjL3Yx3DpC+E1V7+sLtydQy9QqTqjmuR21g0Pyne6NHyLhJ1MYYQjRWb6j3ebu1TEl9L2gCQUhl8urMwZEnFEBvfPxTK0+eXHAY7zOdv/3t1+EEjm6DXSdyc1nlyUggMG2Pd0BxCzS90QWRYK0E298cDK/cYAMQBzyL01GyGXQTARn5wmLovgqp4+Eq+byBkxgnI5l+MCBqP0UhA3ZepGSFlNHlCPeEFyOOUqmpLi57kAM9NRZAZ5e/MptW0Gwl/UujbDDyGqRONUkdmSEGPrVDrn5hbe07wbQ3HTXuCrV8htu5Yod10z601aTyZfcIwnRvR9B77eEb4KCABcyMQ+Yr3iscGX6ZcuxHa1FI0c4+dsnvNOb8NnGGTCPLqc0JlNLw8TlUGjPzadrxF1sxsccxJ2atc9jz/Pk9o8IWNSKneW+wRv+A7Gf6SpzaPdBC+rTwZMpGxhAMdK0/VcMzGFZcfRJp0JxiPivbcEx3wLnbAz85f9yEtfa1XadeS1GFw0yxJvzEePcPu0Z4MjwA/MCfyK8a/bGybrSoxgCaIrOlsnljg1VYs3vFw2gL57CdltxL1jBb1ZQKhVBIswcup8TwZN5bGNCqdU6ubfhaGb7O55Azw6u3C7nYPtFs/NXelVRATCJphpDS62qQVFRn8e383yJ6sYRenPBx5EyvsvaRDMClfNI4mgP+k3eK7UzwG6jcKpBu2xAbZuXBwaQI5TSwiW44p+LWb7sqCOmHW3VMasy0ZrK31KztyKdjwTLkxyMPnIv4IDmJIm1brUCGud/vwtIicjQyYMUZupe8h6tWX6O2BqUG/E4dcsXPG4OVRjVeQyk7DxrowLfkySNBoTFgclhFbC322mocrcQBPeb5ogVzqiGvXHKcQABi8S/c3YrnzWkgyY+m0NbE0kyFpTN6lAuInQa5NdmWl6BvvTCiVbmIZt/6unt+fnjPmyL09pNzWTzUlpTeFeyi6qmoWibHWUVgW5wls4Zz+/kjidl8yDk9l42lsUl95ikNf9wSoNqK/n8kh9x2pV6whCqsIckte9ItbX/k1PIyJjjUM8Sv5cv5rlVi0XU7ad8/VSvJGV0yKeIOnshW95KSU+FjcJbxtpK53jcTf+7VrjbxKnC9/GXGj9JWBGYuAhLgoBUUFrz+9rguUM+HJe+Xix85riSRA9w4BYCPW7iwxFvZzL9gYBLHK7Lej6sQZy4dIimQ52KKjI63jPP9BemCy/HGVYWnp285GLYtAcIHlnunZVQTknfXVFe0GBA9h8ORyrpkqQbZtEINzokJolpU/EOCasuetSR4bU9nEYNIXFbYtKtsZ+ubmABelmHr/wk4nwwftHDR8ngHlntZOJcJSqqjUqWVH4HMbV1VskLzyb5hlfJ1hGa9lGj0SB02cfYYLUUhxuTye6V89uB0LZoDdAJ8wWe+3qlTrGEM6OW/ku7iZYHc1ffhvTwEMDKuNCLEwtESIHXHX6LFQgPu06G2Ab4IX1XglsVvlVJhHXb6588gacIr9UH6cDocqIGNvyjwHX6PHiDOW04shbO9hlG9XZJZUiLvBbAylserVAvXyuGbkfTEj9w/gjdKu0comIr++3wLAijBOSGDqT7ui70LBJhBJ1x0OKyTOd9YoRA1qljhK2hSi7BQy4y7pPwUexm77WIn0U+uM9VJKBdILq/sltJGfm2d1GoikoV3A+LyRq7M3S0tMzgvMhQIGFY8p2zaWVtBjZE22hfWpiMguq7cxB8KKF2MMJR6FQtoebc6Jvy3pb8lUFcHqFNH5JHgAtYbnIyFx542FM24C3+xypyDFftXnfvlKTfh7251MU0b6relutq7LKHryVoZiURtp/O5/Nvktm57GcvP1C87G9bIczboBwIYTM87RpGiocyxLkNymdkODTOxWF66VzCHYR0O0S7FTLK8EBSdYqRXMB5FfwBD2q11ztFjt9bGeYQ8gx603wGq7Mq76MRC5gbtdmWwaM4hRZc7x0j0X6p9M/A3XBRdZeAWcBbIh4CoLAx7LZey5TBTOfAcJGiFTcEqtDUjBOe/vo/IdVY9u0nzjq0iQfC+wQlV2uxaZPtStplayYByEqwW4BxpY+uvPQkYMMU4CYl8PyPK6NchETz/UqswCe/gMPfP2Q4ZQIkWZqcFM4a36+ETSPSXvH2TTVzbS+aBGif2Qmlf/HEO2fR2UUt4m8SLUTdPBxF9DK6uI2LEDueY5Oy/ILhytovXSMLPdW+NfWEUr4joagSpEDpItsthfQgXUf2h4wDiv8I6UA7jRsDeMa8k3PaW/ypJmHNBsYSmi80lufbbSgH5XhEBPmxOC4eEQa9B3SiIDpkWRZJBGogAUBtkJgusxrnYu9lju7U+Qn4Bt5DMt+GSYPIitxcHPOjQO8TCqSNdqMxUt5CNjZUWJhl7ks5SSUabMfTwFxud5PnAZwF7/MBGoMckfMF5PivGlOL81rOjpr/7+2s4qvRlzBghNE/7dE4kbmq1wKzLBeHtHohLi6vbAmYyhS3jgbE1jQYhUN7lxzgsNJHhnJ3kcLbHpNrcBaFNt1PO35qQiS8QUssLYuKjO8YQgrJpFqPQIYv4X5c7DfRG/+bE9j3cTie07HQpuO6F3ggYgOfptkOCW8CxbRZCM2QKlxF3ONer10vZX/Jik/PU6fiNqOLGOjcpIoLD+0Qj/YgAfQYxE4Or9KCZ49KJFm/vVFlAprXny17KiAAeIJO5CYg6BvjpJOhDr4Q2XN76idy85UhlC7JiS/FRJ28HwvtuLWoNWxUTUbPMd/kiNXj3m86Zknska7h/TgdTd4tyOxxz+sD42jV5oBEikO6glEWhux9Qvl45wAk4vsmS4nT0o3qYeRO3gBi7TN02+80mR0mMlwuYdd6JfBt9j9GSQCzbU3n0KBHMScvDyPwU2W2Zbhu3o6Xq3WP+jc69ZDdoWU4Sb9TvSlhOGaHLp4YLOVKkgzS88dysGtaidotrkYRbImfp9/vUMt/U2ijxgkYTLFoiOJ29E+h4z2Rl1y2kskQcvzpUa7X6ligObAMzFrDBaxYpizqav55fc2NaGR6Ttpaa0nw7mh1HcFNlwMZ3jkBOVmza4LMR+ZYoUhBCNBiqTg2xqwEbHS3rRPsnP7p20Pjep0dbQLHYa5YJo3amJPTXtBPJ/WAgS9PcTgyuYY5GpjE6Kn030HEZKYoCMazpUeRJ3g3FeWZxHot4FAfUuIer4zOZT2+QEa4LhPqf9Pw+cL0mAzU5HahkBppRKXLiSmrMT+J3in0DW+ys0RImGTw454lpGDNCLItRGQfapcQjzhifDVovGTv88hqHVI1ZjewNihoCTmRWvsCZolBkqK+uuAt36URkE0LNnkvfGnJAB3p4AoOtphPcER8f0R7qN8KM2WTA6FbTy2THJo20MjEF8JB/qh9mUtS65A3yN69B3Kq3jM8JJ96nphqR8Kx0/D+C8DuqZR+eEKvuv6RT++fHlVOGtc0yvGc/p2uJjAjbA+TvRPZjnZxBwjcN38s4/vpt3MPVlsJraWj8fnst9bKC9K2QXIFL3m6UC4aJKWzvvz0VUktrS465KPLPZQSxmJH3n89i2Rh+tTIz6CPJpsA8PYEmNMGUSgKHzvEX4USxvyb0bW8eMoi/cYfJP+2L1q15loMTCQVQRyMpSJ/fSS1ldz7NNj4KxtSyBF3gl3W83mD9HOczlnsTBEXxyXLwQ+0BRybmYgulMBCOLI2VvzC47Btqn3m+sHBH1sioH8SMln8t9Rk3fr3uz9mGLj3sw6RC0d0U+qVntltI3Any5vFua1pU++3nxgvX7IImf1EU5YqijYZ13jQqtXVDyu40kHEt7rvZ0I4noYT/GbOKRJgIC/cP1BH34MasQFMFxt/1hOipNPwmnm3UBTxgGu7B4TTRRwdJGkNBkbvhAabFQOeNWfWLHxW/Dix4rLGZF4WyOPSyrSXLU862Eec9GRIGWJH1NMDBmye/of20q22Hd/S0oOz5e9bkpRcGUPG92S5/7No6P7FDoVsx/Hx0dF042h2fI8IwoNc3tExsyo4mOeIdF6D/bgXvFMlrQyiEJcms7pS9pWWPkQlIJZ9x0r8oxhAqwWtJoRtJaAL1bhkGO9JOwH/HKL9fGr+SUZOxj5maHK1Srcb1MYoXpAInSWEjxBqp1pyJf+qkWkCEniZcWJeq+IgSkyrI0y/p5bncAaRrt0Chq0KkdWjQSSYQ8WYjPE8XejEXyq6i8q9nHEg+xj288RJ5eTzI8siVh/pUzrmWHWiJllf6WJ5A+xgQOW3HAk3QdR87LHrgP4MHHeGrRBKMhRIgSslCoMgRbnrVtbeZUbI1CD5O21OqytnxvoCQEl2zx3KNDdqdxgBRUQv+1Ei+75lQ4NRafN0cJ/JBM2/iK7d75P/PcLPXGVT2i0JHdsLtJjLabHHznhXsMFWiZNsC04A5q3uc6FC0cEHmKhVqG4qpSj164QPl+I9U0jmjuCy6UX2/jdXF0wY1GulKkJvK43DFv6NjAYyFkRpLPbJIurHuZrgu6FHLIXhS44P3ntiPnLSVwsAmGDYZ7JRZLe3ZUPYWPlhJjR8jpLj7xjamqzP079Gz1vDVg3vEjIJpsBbIzroRBmGJvAwHrxQqi+KdjQujhQI/IevVVgLVmLPumsxzvAPsPbKPXkl/jVj1PJYoPGrnTkfg4eg7HFmkB8hoAR749gifkUFJAC8I6zL1i4RPBkBNeVJPSF/24o3Wp5/VXYM8zwWC4NfmN4JFnSOXLNbIaVNNgylNLi/qGrHaLAwM8vvuvn03K8QJmv4PDLAdwa+fFtu18WRK5YF762UkKHOXmMkzaTvkjz/337WpO7D3OvxzeLh27wT0kAtexfUAS/eHxbJKUPnQ7X+952C0N47CclWcYQ6DObyMHZSygYH8Mqkq3hSu2Alm+ETY2IC6qCPZxorXzocdxRYu7XniIAnBlmXNfYTVUrWvfFQWkLm8Mv5ijqfcBYwJFQ04MgEEfeGZJj+p9gfhwhyC3z/w+NEKIf8DPiE5sfOVKMo88ZMMEBasFKi+6XpCy8J4UvcDMzj8Zhu1KddUjhWq9vKAwbWIxPefMjuFlGMv,iv:qryCK3Rjysl1/w6fya0RhcdjOGXWyLDGdCsOzm/5pWw=,tag:3wr6TJiRU1nu8BjYaR8YXQ==,type:str]", 3 - "sops": { 4 - "kms": null, 5 - "gcp_kms": null, 6 - "azure_kv": null, 7 - "hc_vault": null, 8 - "age": [ 9 - { 10 - "recipient": "age1l3qxt6630dzesdclfm3eqgw3uuhwj09dh6typwlwr6clcv0qhfrqgtj2fk", 11 - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB4eEVwR1dPTEFWMHQ1WFh0\nVUxoaXRaRFJKZWtQTkx1ekpuUGJmb0FRaXdVCjJkZ0xTdUx0WlhveHhjZHRrM3k2\naWMzSXVkZVlyd2JTdXFVSTlVbWFlZVUKLS0tIElvYWtNeXBCTUJTcHkvODRkR0lt\nVno3U3p1ekxvL3JKMXQ1R3psSjlMUWcKDQEhGe8cRlHjfw+sQFdK/DwG8QoJnSxx\nYtbyI8fsEJGrhVXaz7eDH7smWcNBxlVe1SSF0AUI6no1sOlbiW+B0A==\n-----END AGE ENCRYPTED FILE-----\n" 12 - }, 13 - { 14 - "recipient": "age1zkafenrdkkmatjh034yykpzjzzs5fx6kft23jlmsung3dwyufcksds59l2", 15 - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAvU2piejFJc29STjVmVkV0\nRWxPbVZGVjV2U3NudGRvcnlOTFdMTU5Oa0g0CllyNFNVNVFuQnNnV2FORHY0SkZ3\nczJMOHNEZjhJaEVtYlQrc0N1NXZhaWMKLS0tIEYxMnp5bmhYZ2cwNGpBeHJyS00r\ncnF4YWdpNXdjRzdUcXRvQW1TcnFBNW8KsQz72b6nW10nv2/f3I5glQy+5lQzBGvH\nMV5gllulel7SyAISLvR7te0rmGixHqiv1g1IiI39Z1RiuXnDqeBFFA==\n-----END AGE ENCRYPTED FILE-----\n" 16 - }, 17 - { 18 - "recipient": "age18h7hya5terghrwawgpny28swlat2nqkdrfd4clk0svujqlz9xfusd3zeqt", 19 - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBwRzFESVhWVFNPQ0d5ODVY\nbnJRYVBwUjhSTG4yRFUrSUNDTzU4SnRuRlNvCnNiWVBrOTJjWVlqTW5sV3FSUHk2\nUFF5cVYvZVRlQVpUTnZ1QUVJLytlK3cKLS0tIDRweUtNR3RJOS9ZdHZRRjRDN2Qr\nYzRnTVZvNHJxSE9OU1pwZkc5NnpGNE0KqA9d5X7hUPSbcl48mTiXKZCy7gZqHsjk\nYLS4UOAcWgQBfJU80Wu0jSD6+y7wVsrdZ3pwjrxyHcjHHGrZz0ldDA==\n-----END AGE ENCRYPTED FILE-----\n" 20 - } 21 - ], 22 - "lastmodified": "2024-10-21T13:14:54Z", 23 - "mac": "ENC[AES256_GCM,data:oT/WC92JMTqPVop840fnMi8nw6H1lXiHglUY6iyIjeh/8lxzkdgV7A2lGxhAf0RhjvO1Tfd435Wd0+1bTg4PRTOsDKj9ucOtb+Rq58JupBGeS+AjE9HK7BvpC4zkdaATePuXAfFZvc3GIzQRkYYb1FIPrjxqT6JHqo/U8tb/7Co=,iv:PSrZRzmoAukLb3QCWvwRoNcVQWYEAwCMHGvHNlikQZk=,tag:QbXkblPXjgz1ftwwEkUAGA==,type:str]", 24 - "pgp": null, 25 - "unencrypted_suffix": "_unencrypted", 26 - "version": "3.8.1" 27 - } 28 - }
···
-28
creds/sops/koumakan/webdav.scan.htpasswd
··· 1 - { 2 - "data": "ENC[AES256_GCM,data:PJmL5puYlmCKyj+CfCIJ1AYZEP1X9ZoHV5Clq40qI5gT5WRWTsG4s+uU+MWvluB3gOQyPfLUzckm6ewEdsYBb8P4HwQ=,iv:sU/WZ+d1nE8zIzLWVqPsg9NbD4nsVq2CBLbTZEqH6uE=,tag:AqfmErBFOtrJIrss4kMl/w==,type:str]", 3 - "sops": { 4 - "kms": null, 5 - "gcp_kms": null, 6 - "azure_kv": null, 7 - "hc_vault": null, 8 - "age": [ 9 - { 10 - "recipient": "age1l3qxt6630dzesdclfm3eqgw3uuhwj09dh6typwlwr6clcv0qhfrqgtj2fk", 11 - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBGZmxhblp2SDh0RElUK3Jv\nbFhGYXBScGJISnROcEg5OVlXRUZvMGY2S1dJClo4dGdWMUVsbjBvU2hRWEhMVUVK\neCtHczRLSXFubmZjNkpoYXRlS3c4QVEKLS0tIDZWNkluamhjTnh2cFlpdmg3UmZs\nNmtqbS9LSEZ0UjFyWkNwSTgwa29iYVEKsY2j+gbb3cwie2le8ngWGzWz5SD/1NhR\nGg0IWVCjH5SXFKKlAjLlnmF3kmNs7mUCbglG9kJZ1r8/62mY3jeYsg==\n-----END AGE ENCRYPTED FILE-----\n" 12 - }, 13 - { 14 - "recipient": "age1zkafenrdkkmatjh034yykpzjzzs5fx6kft23jlmsung3dwyufcksds59l2", 15 - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA0QzBDSFBXbzJQNXZIbThj\nQ200U1VOMUhHVVg4UC9ha25TTHd6TnRKTmg4CkRpRk5Kdld6T1JUS3E0WWdoNUVr\nbVJnS2tDZHg3T2VDb2FWeEttdWpidUkKLS0tIG04c1gxWVBtZGpoVWZZSDRTZ3A5\nelVYcFdML292RkxDM0VmTGl5Qmc0Q2MKB8lJ9hrB/j+XNhJnUxwOfmy3Py/hZFSN\n9mYmJOE9U9fQBIiosVZFeXaXXZ/QlzSipV2sWPIvbJBBpDOZ36JKZw==\n-----END AGE ENCRYPTED FILE-----\n" 16 - }, 17 - { 18 - "recipient": "age18h7hya5terghrwawgpny28swlat2nqkdrfd4clk0svujqlz9xfusd3zeqt", 19 - "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBONmxubmltRU84L3dITFEy\nRE1hT1NoQy85dlQwZE8zNzRoUklaS0E1YkhFCjRYWUJLZy9IRFVUNi9PdmNUdFRE\ncjU5NXNwa0lZei96Qzl3OUFvZWdreDgKLS0tIE1qeG5ZQ0tFVmx5Nm9qYjkycTVU\nMjJ2RERHZFBCbjM0RkplV2l2WEZtNGsKHItOPOKeL4rsWB8bDpuGaKf7uoEw89tk\ng+XX+RO2EnJ+fi3R2mi6rT63FKvDIx52FeNKUL8isqeY2R47inQCOA==\n-----END AGE ENCRYPTED FILE-----\n" 20 - } 21 - ], 22 - "lastmodified": "2024-10-21T13:14:55Z", 23 - "mac": "ENC[AES256_GCM,data:oXii6vKcekEh3Ca8nwpfUnGMz1FA5r0lhcGuupr3tgvo19LAtbMz+0aB+mBK4pbW9lXi4Db6pmn+P9doxJcaJeOYyinN/NLDNEB7cFixf+53zALJPpZXsJ0R7KR66UJs+KoFB8xf+rmt2A6YhIiwx5cyTjAMgGF5uhparX0k5Iw=,iv:2VvpS+2uxSbLsIEyimLD/GKmTMERZZcVRvbpTy0NllQ=,tag:CKO8H58Anha4nIArnPYg+g==,type:str]", 24 - "pgp": null, 25 - "unencrypted_suffix": "_unencrypted", 26 - "version": "3.8.1" 27 - } 28 - }
···
+68
creds/sops/koumakan.yaml
···
··· 1 + comment_unencrypted: See https://github.com/Mic92/sops-nix/issues/120 for synapse.yaml quirks 2 + synapse.yaml: ENC[AES256_GCM,data:eQsUW4mwbSPzsoi8HIEngfU5x/PEaqPxvx1AXXJJj7WDX9RsPtQOqQJjuTAEPtz32Hm1nob+VVYuzAXXfCO8Cd0CIHG+xlV4cWNc4JB8wj1YgtMJu9J3yC7iv3HMULT0TL8MxmwWYKqSPKIVarLVN5gQl1G1SAfxEK3ET6qtmkmCD8y6ZVM/84fTR5lxpLe82CaplbUHXEHKk51XwGYLSp5IZsPwtMMFhYuaoqCsEVr65IiSozbD4LKddYNQKUlYmkSfThQsoPpe9ixE7+HS11S+LklyP1q3usWTfOPsQS8k5NJdcGkrCH2A4ddjWkDBAzdav3qauYoQEvbMd8BpoDqD/67lKuvoyXqDoPf5sLrQcxcUl8ObTI1I8zWhabGa9uTuiaTd3wYdMhvMvs/KIfPXNDqcBuIY9sR6LQmY2Zb9+FtYiQVnrr0XmzjB59oN023y1xC/xqkgRyXysndhnj4P1Q+PYbOMQi7hwAjM5xMk/mLkpLn41Ju4u0MqDwHSxA/NXbsEBp/u3Tim2jsrMZqjRZwQHt1n/gtMjm2cMTminM99c/fV2fcvAmcNB9u1KWgEte1JjQSRftg7pkaznYlfrQLyCQYghVu3kgeAJCaSPMewHVWOF/onTauNHYFMlJ8VDUuYOnt2LNJUk1Wap5dGfKm7661mTeYB8aw0h3111YEViuGkSp+oM5A8X6CBI6YsYYOWq5Qd+A3fFJVpcf9hhhdx0JsRmR3EZOupIVx5Y4ruuA6ipj/xMDRNfTZjqukpn3Y1s5xTjUYEo3moLdgd1PYxAVIY/KjPn31pmRThGG1NZpYHZ1yjmptVydtqf/tTd32i3e0WjIjUEZD1NE7Z5AiWJ+XAEaE3S804C6QxN1jHZvqIokA9C4HO+R/es1uDyf2KDvxf1It0hMLg7CAnq1AQcbLCDqXXZaqibSRNfv09lO4jZ3vBe3owvd1wGbK513nqC6m2gh8YDYiHdw7UlXMbMP9+,iv:fvaZQ66VKU+uzvn5AwTIFgzz+F2kJ8/QR2AfmynRfGU=,tag:8c/cAMZ6c7h3J+shh7l7tw==,type:str] 3 + matrix-signing-key: ENC[AES256_GCM,data:u6miE2oM3TUXaQ7wc776SwSMaOAxJOVlpl2kBW+AjI/aDH5vcGBp0L0uTpZbVfOtIe+RDNEv5E/mKA==,iv:abvwkrNe324QCbWLwiPY0UwqezS0wbyk2Fvi0vs3SI0=,tag:ZmpDB9LHbezQrxuwHNgpRg==,type:str] 4 + akkoma: 5 + dist: 6 + cookie: ENC[AES256_GCM,data:5jpsa4KsOAoCMGAt9laK9ioVTJfuT9+viKva8wDWRnAimVY6jDoNr4+hxVty6yQAAfSJYA7ddTxaSCEjnJtneg==,iv:V8+MpX/IEc57zEfhNGX5f+eMyipraaXDKPDNDOy0Ieo=,tag:+xCy18Ni8F5wYkO/4NbSzw==,type:str] 7 + endpoint: 8 + secret_base: ENC[AES256_GCM,data:l34Rj4iIQIykgzTLJolqWLQQz5pcfa0o5U/ZMKeNc2CBQedxiMXYrLSNOx6OuV38aqoOolccJEOSiVjfbTawtg==,iv:/x0ydo2gOPrhIZI7at877bzfFgMpraauozfLq95aHCk=,tag:RQI4aeLiAkAcWYlwLaTj5w==,type:str] 9 + salt: ENC[AES256_GCM,data:CP4805tG05A=,iv:aSun7ABJdbDQrFcrGQMM9H1/7d5lJqeMwO08gUYrD2A=,tag:ikhxbijsqyBFJs02j2j/vw==,type:str] 10 + live_view: 11 + salt: ENC[AES256_GCM,data:4fKLclucoV0=,iv:ZvWKutuMTOm2X8w8a0fOTq+ldrXemayIUY2PUcurY80=,tag:qkIB1gPCI5HO0G0mLEsV+w==,type:str] 12 + joken_default_signer: ENC[AES256_GCM,data:myCEFUkf8s1YNQAigjxygRYvbwkpsv7cqgs00fARe9nxSFl2wveWM5JcfOnoVPwVBVV2GaAjFe4oMWXkaTPtqg==,iv:Yk1f/fzzbruW64mvTTeiyTlbrOO/G47CKKfr9BLtQ5g=,tag:QLpM22ec+VWtkjx5U/mzCw==,type:str] 13 + search: 14 + meili: 15 + host_unencrypted: https://megumin.soopy.moe/ 16 + key: ENC[AES256_GCM,data:00TLCUneHn7NcSK1joURfIzxNFWyOBf/0/fceOn4RMcMt59dZz9LOvbs3F8B0vcH7tf/eUi3SnhYJNyRdPklyw==,iv:t0kQUCmjhFw8Z2CTmYOPUNFvyiYfsXETU8GSxhRR5KE=,tag:CPjtd7jQzgHJDrsIjHlVFQ==,type:str] 17 + vapid: 18 + pub: ENC[AES256_GCM,data:HYMKjhVCW/7DsMfPPssEduuwWnFezH4OOq4hfAovI82RUPsfVEKhgvkI9INY8hArAb/AIfyyxZhVx+bd2QkPlnASz51L7MxPtkPfZNUKqafjlMmK0nwH,iv:154BP5EmBqnKyf9BND2laKV3caVxa34MCRzrsg6/dik=,tag:wHLYdI6oQXPUzbw8dSxgwg==,type:str] 19 + key: ENC[AES256_GCM,data:t+da4NLEPZBMvq3MQkFEr+Fsj3XMGPMFKUWwbHDWNJAyuUZuiVcn3zX0kw==,iv:yQLu5CFl73GCojMBa2II6OhLrNNinsiVG1aPOAx+HtM=,tag:n0oelXaNFvilyee+MRSB8A==,type:str] 20 + postgres: 21 + hostname: ENC[AES256_GCM,data:rFEnhnn/Bw85,iv:GM2SH4Gkvt8tLG8AYIKxfHTZvB1sT+hgIoqkiViH6Es=,tag:yyGY9/nS9WFcJTGXlYpz6Q==,type:str] 22 + database_unencrypted: akkoma 23 + username: ENC[AES256_GCM,data:6skzOqv1,iv:OQ6zNmDn0uqKqNKEqOHWY6VBuT/4/CHog7b0Pf0TAPM=,tag:8HLmGykXg2V4t4RHzB8yaA==,type:str] 24 + password: ENC[AES256_GCM,data:J3OewVKr2A3TlT7ZUTk7tQr4olFs7bKx47Lus4LGbwGAZfNEmyk9coFTeQ8L/EJ0hpLfPfD1OcGBc+p0ZWK/XQ==,iv:UFe/3H/AfTgSlJikHqE1IED3zINjDuOs5niXpGWXGYE=,tag:MvT0z3TMs1dehg4gp54MyQ==,type:str] 25 + smtp: 26 + username: ENC[AES256_GCM,data:N7XbQkngWcUGzn/SR4AXCQ==,iv:wBXWtRYawOkjumsvTPcKfvL95CCB+RbsEyJv0YUG3WA=,tag:vGQREe+Cv0ITTxszl21J2g==,type:str] 27 + password: ENC[AES256_GCM,data:oU/aWkVmDU8WJhmwqOcXJ/EngiF7hvfUzPwpdjwkyh7Dw50dyG5AY7b2+hh6LIv9RZrN4yU+fXPAYr1W21OG/A==,iv:ds8Bg9JSJdNHUXh0FvD5a4pquyRnIXowcsJcVV1TyB4=,tag:JoYqas2RGSv8xyvJT9wHAQ==,type:str] 28 + relay: ENC[AES256_GCM,data:F2NnRLSTO5kmbWy4fx0=,iv:omnyn+Xa/cjqK+9l5bI573aR2p7UsUvqGX5ZQGf3CD0=,tag:t4u/jLQ1nZchyxf3WrhW6w==,type:str] 29 + sops: 30 + kms: [] 31 + gcp_kms: [] 32 + azure_kv: [] 33 + hc_vault: [] 34 + age: 35 + - recipient: age10rkyshu0lswdqyvun4cs9cekm9zt4fw5c8ssa38tn3lukgcahcvsltnqx2 36 + enc: | 37 + -----BEGIN AGE ENCRYPTED FILE----- 38 + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBYMFBMZHdrR2ZMaEErZVlE 39 + RmRZNnoxRVpVSDc5Rlg3MmhiVkxnK1NkNmljCjBsNE5oejcyOTRJRVVvdzJsMmw3 40 + SGdyaUM1T0JvN3lDQjd4V054MWc1UjQKLS0tIDVvSndXZ29KSC8yUW5SRjdIcEZL 41 + WkFkK1hsdzRnMmRBdDI0dWU3a1hBOEUKf+pJ6PAH1tPLXG14ghG4gxHpVN4D6TU1 42 + GHCvsS5qNW8Cjis/Ubb3PHJfFiN4quN3rLaM/Ivkl5G1gzf9cGSDyQ== 43 + -----END AGE ENCRYPTED FILE----- 44 + - recipient: age18h7hya5terghrwawgpny28swlat2nqkdrfd4clk0svujqlz9xfusd3zeqt 45 + enc: | 46 + -----BEGIN AGE ENCRYPTED FILE----- 47 + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBXbVhFQXJ5ZWVVZTJocmpn 48 + Q1VFc01mcnZLRGtqQVF0VjB3RU1DL0phaFVVCkFmU2w3WlhuTDFHYnF5VC9TM0xz 49 + VGdSSVpVbkN1Tlh4WnQxdHJkQU42dGMKLS0tIFVnVERoQWk1N1dmdWk0KzA0R1ZG 50 + cHJ5aWIrQ2Zrb1dhbC9yZ1lIMU1jbzgK4mx+S5bF6KBMe6+TrSZfaBcuWEg9cHyd 51 + tbJty1zxS9pndA/u3qz5EJxDouiAODvyAR07yeegtEcbw1FlG6W/gA== 52 + -----END AGE ENCRYPTED FILE----- 53 + lastmodified: "2023-09-14T17:13:38Z" 54 + mac: ENC[AES256_GCM,data:Jyx0f+w9fJ+B1lz4jVVkcKxd1xUh3FzxDhk+KaxJLVh0BG/1d8Nx0/cOnxZV1FfJkn5Z2wYiLzBPSvJKe8MjlExOSH1mIAnuXcSP6dvXp21bgX17CXM6OP91Ny6IvwSZriqs6EIpWOkZNdxsEnySwtECoQfgs09ZnA4qmbtb01U=,iv:XHnY20d0WsnaECF1/68eu2/xcGLGeGnzba+/kBxDcc0=,tag:alo+8B2fVHon0lHGsQSUyQ==,type:str] 55 + pgp: 56 + - created_at: "2023-09-08T14:11:19Z" 57 + enc: |- 58 + -----BEGIN PGP MESSAGE----- 59 + 60 + wV4DAxCcDC4ukRQSAQdA6IXTpPTgsoAuUSW0NqFw4MpqX4j3Wt9IqcGbrDobZGIw 61 + FFZDSKuMgO7ADZCFoADJ9OWOQBUyE3htwkXWjT/NQdBbVX3nuANbsfRfTdPN5NJt 62 + 0lEB30Vck2fEXQsIGrIeg3pPRBl3U/z7F35tw+79EFZ5yOrAsOzSn3wzNA549/T7 63 + dEVnej/86D4ZxtMqMjVB2NjsXrphqd7ENozlljMM6QKkjtg= 64 + =juKF 65 + -----END PGP MESSAGE----- 66 + fp: 8F3B277901484C6EA7E63F82D539637D518022C6 67 + unencrypted_suffix: _unencrypted 68 + version: 3.7.3
-42
creds/sops/nijika/default.yaml
··· 1 - vmetrics: 2 - auth: ENC[AES256_GCM,data:Mxr5/RN/cHbZTlGBMhtZ3qM/gavzdZ5QZm/Z+cWCayCxzer+dk2LV18W/3Fb+k6ylQDuBYoo9PdnwOA20IvRkdnmUPFI5z7dvmG3sFlM79uL5bzXl8E1AncAAWFbrVaFy9ip8O5vo14iMGP4quxIU9GVRYr2L4NI/7Nc8oCSl/kUQil4wIOn46AsCALalwrgPUzyTi1i5+6L/xSE6pXz15GSjy3G2+FhjxIp2g==,iv:IXgBGWvPGVVFg8NAbrnSr/a+E8k+punmkH1sowXXpFo=,tag:b46Xevxomq3ZXqmXFsThWA==,type:str] 3 - lego: 4 - cf_token: ENC[AES256_GCM,data:qxF3WPZlhX3G,iv:kNFCT0zJype1OrAqngAOsQRp1zxzGIUJfhTBwhACxTs=,tag:Z6W4fKvGQAfi3ATWaTGg8Q==,type:str] 5 - sops: 6 - kms: [] 7 - gcp_kms: [] 8 - azure_kv: [] 9 - hc_vault: [] 10 - age: 11 - - recipient: age1l3qxt6630dzesdclfm3eqgw3uuhwj09dh6typwlwr6clcv0qhfrqgtj2fk 12 - enc: | 13 - -----BEGIN AGE ENCRYPTED FILE----- 14 - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBFK2lYV0Rac00vYldQd1JL 15 - ajE5bXRDVnFTN280VFBWYjBhZnFjVHBNT1FFCnVHcTBETjNQMGtmUDFMRUExOHFV 16 - Z1E2b1UxcFErRjhxaXdVNUg0OFRkblkKLS0tIDNZM0M1emhoMUFUaFRVeDNrS3Fn 17 - ZERvVjUzbVpQMzR6N0dSOWgwcXNHNU0KvNyvxVuQzBOyn9ufoJVMnLg4R3mHC2dV 18 - LKL2sZHq2iuMAVoXwaf1ZXQHlV1qilB+fxWKx710KrqHH1/ezKMnRA== 19 - -----END AGE ENCRYPTED FILE----- 20 - - recipient: age1zkafenrdkkmatjh034yykpzjzzs5fx6kft23jlmsung3dwyufcksds59l2 21 - enc: | 22 - -----BEGIN AGE ENCRYPTED FILE----- 23 - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBaM0tnelUzcU9lMVdMdjBs 24 - dVdSVVVNS01jek12cEpqZVN3aUxOc3JKK0VjCndaRnJoRmQ4aXdaS0lmelVMOW5h 25 - WmFITzhKUHR2a2RQb0RyVnZ6Qkp0T1UKLS0tIEIwQkE1R1Ftd0RWZUNkZUNwc09I 26 - Wm5WRjBaNS9jbDhMaWkyaU0rVE9Pa1kKql2UBxIB3DLlXud1Sh5b4/YJwu/brzqy 27 - hxUiO9HtftBsXEtgph+mJn2GAj+2K8eKEJe5oP1sNs4CFdAIup4U4Q== 28 - -----END AGE ENCRYPTED FILE----- 29 - - recipient: age1rzxugsgkpnf0ns0w70swdc3sndjpktx23eucah4w47zcppz56sls2c5e6m 30 - enc: | 31 - -----BEGIN AGE ENCRYPTED FILE----- 32 - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBwV2ljZUJRaXlLdEFoZ25m 33 - TE1RUFd0S1R1ekNhakozWFpBNEJid29RVjFZCkZkL3o5ZnVtSXpmdUVGT04yczdT 34 - MTdENmtZZ0xnS2Rkc0RMTG9XZzdjU1kKLS0tIE1MS2lwTExhWkNRTkNEQW10Ukpz 35 - eTNNaUJablhCZ21sUWZHNk5UVmVzMmsKyImtNp3LC/dSsCVEvR2ME9pdtmpOTkQN 36 - AEkzIy1Lbt5mCRCEawwJvQSHATztwjJ/1v24tbiPH5YeP+2C0JwYOg== 37 - -----END AGE ENCRYPTED FILE----- 38 - lastmodified: "2025-03-25T02:15:52Z" 39 - mac: ENC[AES256_GCM,data:+VBCgQ/rAYC8YKZDeJQcK263ODAPfT1KiDfniMruHM1fQ0hZSlmHLLUr31HVxGiTWrswnpBEmqbkHCEUKK/zUFx+u0u2fgLHtDgIl2kIs6/JAljJdEsVTbx1+OCt6Q+Dd54ZyFuNEGzzMgWldrR7TEGlB0AjDNGJTI9QynSSX6w=,iv:zWWvxph6uqLdSTgrYax0TFjPIHra1BJkHtR51LLRg0E=,tag:COlo1jHhQ9wsmoxPXbE/vQ==,type:str] 40 - pgp: [] 41 - unencrypted_suffix: _unencrypted 42 - version: 3.9.4
···
-37
creds/sops/renko/default.yaml
··· 1 - vmetrics: 2 - auth: ENC[AES256_GCM,data:oxbj18DlfPJ+PEdIj6YEdF66ZZNar1l9Mak0Bmqu2AOZWlhCo2aRlrcGfvs7mORplvQmcfh5MwjTqGExjQX4ke28SZ7pszoLMGM3XR2BdedPNsO0KcI/zV19dAL1wijBr1c2qqDJGqqO1P0UzLaUbonl9bskG8L9+lB2pr8aU7z1Unejd/Qq2Ae/3x9Ku82deeP5jGWJkeUae9wADEsBPdbqRbv1bpW5zzmc2A==,iv:x65jPFbodvp3/v09OJ0BIgxMUFOLBkpiKRVMoB8seP4=,tag:wz5UVNBJoSl2994GYjVgpA==,type:str] 3 - forgejo: 4 - tokenFile: ENC[AES256_GCM,data:zY6+75ES2lKwOl9L0lTbolpOu7XqWkfJPYw59557DUqjCFyEqyP2BknCgVhqWA==,iv:U6xv/0CE3i6ea67QBo3PeOhzuyRWbEEtDZbvLgBnrko=,tag:K6KrXGqArx9Dd+Q53T+Ilw==,type:str] 5 - sops: 6 - age: 7 - - recipient: age1l3qxt6630dzesdclfm3eqgw3uuhwj09dh6typwlwr6clcv0qhfrqgtj2fk 8 - enc: | 9 - -----BEGIN AGE ENCRYPTED FILE----- 10 - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBnS1NickYrNUFrWS83bUEz 11 - bzIrNUxYdy9zYjVaMVZDVi9PNTcwdmgyekF3ClUyTDhFallLTU9aWnk3Qk8wcHF2 12 - VXJ6UjROSEJiOWNBdm1YM3ZYMEVxUHMKLS0tIHFEbzdaM2FBQTh5d2tqbUVHMmM4 13 - R0dpU2lNaHBDVFlrekpwbVgyczQ2MGcKA855+mgYImDqlENOYINg3SMfml9UOcp7 14 - z7RJaRIybWxd/usOdaCyfYtDqJTzZT9qNdZCm4YEFVYk9HZ4fHUzOA== 15 - -----END AGE ENCRYPTED FILE----- 16 - - recipient: age1zkafenrdkkmatjh034yykpzjzzs5fx6kft23jlmsung3dwyufcksds59l2 17 - enc: | 18 - -----BEGIN AGE ENCRYPTED FILE----- 19 - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB0aFJGczBvVmQ4aUN4OEZL 20 - MngveEx5dHVCWERicmhIK1BDcGlSZFJJQ0NjCklvYjRXQ3prREppemdWc25CdGMz 21 - UEhzQlhWQVh3azdYYVhNR044c3lZRk0KLS0tIExUYmVVYzR2ODI5S3dIS0ZISitm 22 - Q1AzM09MSENFV2R4SDVkY2trcnVrTFkKjnsHGr/CkW+xW1owa4WYk2x23luUtQJT 23 - aC1kfRw5hjo5byMTb+NfKzW5Ogj2QRyHKxRhAkWvYGr7oSonnzd2Ig== 24 - -----END AGE ENCRYPTED FILE----- 25 - - recipient: age1p6n5yh9fy09xspwf29klfsa4zdrhp04q22gvxkz2vvm88vt9tunsdn020s 26 - enc: | 27 - -----BEGIN AGE ENCRYPTED FILE----- 28 - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBhQjRMcEVyVFh5M2FaQkNN 29 - WDBoeklpS05xdUlNSXBSa0svYmpmQnRDSXdVCk1tc0s2WW9vajBLTHRyR0YyMnRr 30 - ZTl3N3ZDb3hBa3V1cWJoYlhZdGo4TlUKLS0tIEliY1I3VysxdGY5L1hZRUVDdXZj 31 - S2duS3ZmMVZJYW9HOERMc1FadlZIekEKaXDFW+Szv9WlqQMIr6Mc5qYlMyt8M19u 32 - DmMZu5Mzl2bLQK5LQvT/iLktWZZidYKfOuP73HpAFf8iIhYXBOLKMQ== 33 - -----END AGE ENCRYPTED FILE----- 34 - lastmodified: "2025-10-03T01:46:03Z" 35 - mac: ENC[AES256_GCM,data:zD5HByLfLjAvAC1XjN0ZhSVkihEAnNs2tKT8dN11NLy5ne52wMDcWaaxnUSj6zFC98vnlELATCUu7JuOzaFp0YTBWcD5hknXbcCKMhAnF92ArXw0O4Iq7wYSX5xZzbCoYfU9FMZi76GfJ1RoY1c6R+6gACTNeYml1ZgH7IGDTAY=,iv:xZvHlck+vYELhWP2yvTP4eWx4lTfJvQYSwm8LHJyiuc=,tag:LlPEJpLbkTsIktjeSWY1bw==,type:str] 36 - unencrypted_suffix: _unencrypted 37 - version: 3.10.2
···
-42
creds/sops/ryo/default.yaml
··· 1 - vmetrics: 2 - auth: ENC[AES256_GCM,data:D+EKKAsDVIrTdXyxhQQ65rkgbOUlTfbMqYn3a1GWYwHQDAplb1lAqY7yPbvrLhC7QJRagMMfMxN1q39dsz5eBiUZU3YORrt/Eo3sjlZGT5HcZo7ASnGWO62FarjAZOk2dFk6Qj3TtZ+z8OOnmW4JpoaILKBA3KTb5PQKRmrF7iEJwjr3w8ojqmRjt/nGn6CE5xU6Fpq3tuwSHNmfGiK9hpVRig9WyzDv6Ii+Fg==,iv:BVNHFOmGisiiEvX4+qyFrY/kfF9lhFh+iLXO3lLVIbE=,tag:H7N5XPqr1wjAZeKnBjCH8Q==,type:str] 3 - lego: 4 - cf_token: ENC[AES256_GCM,data:rH9al1jeSY/FsyQ2dDsjyi39m4VKjouBydo85wTxE3qTKDNLY/anhQ==,iv:XssbI1d82KkP0OLK4hHe2a4UwCdT+4TZX51JalSRZ2c=,tag:bqOCrxg6+HX6hDRn4xLOhQ==,type:str] 5 - sops: 6 - kms: [] 7 - gcp_kms: [] 8 - azure_kv: [] 9 - hc_vault: [] 10 - age: 11 - - recipient: age1l3qxt6630dzesdclfm3eqgw3uuhwj09dh6typwlwr6clcv0qhfrqgtj2fk 12 - enc: | 13 - -----BEGIN AGE ENCRYPTED FILE----- 14 - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB6ZU5HM202V3QzeVpPeklL 15 - Sk0vVS9TQy94cW1qYmtsa3NJbmZRcUc1Z1VJCmJBNW1tYy83ejUwV1VoLzBzQSto 16 - OHRkSEw0RUhZbDBONDhIS1F1aWtRM0EKLS0tIGZvRVNHYS9qVXRIeWx1NGVrMUIx 17 - WVB6Zmh6dGRGMXNvblFoTEJ0VnBES1UKpfzPPf/Afk1GNdR/h2hZM6TonyuhH4i6 18 - OUSiZwdiLq5zBA5c0f0EeM+tuK8H2pLy9PeFF26aFx7N1tqzqtR+HA== 19 - -----END AGE ENCRYPTED FILE----- 20 - - recipient: age1zkafenrdkkmatjh034yykpzjzzs5fx6kft23jlmsung3dwyufcksds59l2 21 - enc: | 22 - -----BEGIN AGE ENCRYPTED FILE----- 23 - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBLYlFxeTNkNVVpcTlJZzZF 24 - aWdiRFdaS2dRQkhreVNhdzQ5ZDZ3WjZtS3dNCm1MSExNeGlEc2xRdHJHMmw2YS9T 25 - Mmd0aTcyUmVaeTRpK1VOekhHNFVObHcKLS0tIEs2dTNqVU9URG13dHltamN2Ullx 26 - RG1uZmVWM1RyR2NKdkFGZlFLdmxlSlkKN8qJEePEjtbFxVW3BkA5j1BEd0Ylr/rm 27 - 5EdOfEU7A16blv+i3/tgfxGEEVls2+YfpRhkI9IKLICFjNlq6wX3NA== 28 - -----END AGE ENCRYPTED FILE----- 29 - - recipient: age1tdatk0rrr6uf89g5vpq96wjcjcetkrs6yadkxv47v76q8qhtva2sn7tun2 30 - enc: | 31 - -----BEGIN AGE ENCRYPTED FILE----- 32 - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB6akdJME5zMmdSSVNXUnFu 33 - bjBXSzcxQjRWVEdxRVM5SncrcFNIK3lTcGd3Ci9tclZrbHZ2Z29kclAvckp3dnUy 34 - aHJsVDNsamFDUVpkNDFITDFBRzA5WVEKLS0tIDVqN0VPaE13REJxRVhvTlRUOEtC 35 - emlNZ1dUT2J6TlNRVjJsZlJDeWZOQ3MKEj9zpAX8PJ1wWuokrXJf0tkwPJx3zZAD 36 - MTy/t6dddmzfrltmZnE+MdsS9U5Dol/TdGOR7YhjdvsWfHcCT6g2TA== 37 - -----END AGE ENCRYPTED FILE----- 38 - lastmodified: "2025-01-20T13:19:18Z" 39 - mac: ENC[AES256_GCM,data:vSZDS9yqyQNiBbqvI4fCsPU/vEbxjX22E6d+N2Dz2oa+/0OP1X7aQiT4JJ2g5HRGo4ziGUrE8fZLR32s7V3VEErx6AETotwnzVMRYbfw+rHbjaWWb4kjgMOiJRO1iYa28t+0FnEXdFICDw/DB9unJT2Vtj55Og1p8sp3UqBGef4=,iv:HPisIwKptZSPkgIhzPnVbRa9aInOTZWrN38aIVpWC+c=,tag:YM8sZFee7RTKHkaYC07mzQ==,type:str] 40 - pgp: [] 41 - unencrypted_suffix: _unencrypted 42 - version: 3.9.2
···
creds/sops/satori/.gitkeep

This is a binary file and will not be displayed.

-40
creds/sops/satori/default.yaml
··· 1 - vmetrics: 2 - auth: ENC[AES256_GCM,data:oXCxA++8+GR8IRjknnZA5eHns4dWj9TIzECU5U0t5F86v16SGeq/eFSDqRF0fFNa//By+2Uk8CgozrLcQbsyRYSoyTBQX5S69vu5EXrwLsmHEQtj/xFs4nPjM7zAXABM+fpROh4R8C0cmI1nkP9v5Ks+fzU9lQAyHELAWf50BnZWhlMdt2t4aXBr8qFJKq5C7E6LITWP9/H2AZw9GowoZ07oNebJHwowFer8/g==,iv:Q49WI+0O4MzeLK7TbKZFal5Q37UVjZ7+J2uyBQkgzd0=,tag:lUXCwp2ErOQjCo5E4TqOGg==,type:str] 3 - sops: 4 - kms: [] 5 - gcp_kms: [] 6 - azure_kv: [] 7 - hc_vault: [] 8 - age: 9 - - recipient: age1l3qxt6630dzesdclfm3eqgw3uuhwj09dh6typwlwr6clcv0qhfrqgtj2fk 10 - enc: | 11 - -----BEGIN AGE ENCRYPTED FILE----- 12 - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBGdGh2dllDeDNmU0VneDVs 13 - anhaSEtqaWtzSkxsMml5L0wxK09pVU5QTEFrCkM2U21vRWRSUUN0SGJBa3ZEcGtL 14 - elpIU1pGMzZ2Uko4dnUxRHcrYnZMQlkKLS0tIHJKekJCRHdibU4zUlpDTzdmZnpa 15 - MnI5RlhMUjRLQXNrSGVxajZXdllPaFEKmXzHmdGE6qNFMDA1VMVSe9qRUTBZALOO 16 - 26VhNllKNoc9pHdrSwVng98Ss4zHzImoP7NQX+EEy0lXJ2N8wISyfA== 17 - -----END AGE ENCRYPTED FILE----- 18 - - recipient: age1zkafenrdkkmatjh034yykpzjzzs5fx6kft23jlmsung3dwyufcksds59l2 19 - enc: | 20 - -----BEGIN AGE ENCRYPTED FILE----- 21 - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBFSWh1dHA4eFhsZ3lzaEtr 22 - SHRiOElYcnpEUnEyZVRKSjRLTXNpZHBqaDNJClMxYTNoVlVldnVad2NsK2VlZmo4 23 - M1hGZFFBUUhkb3ZqS296MGc1MkxEMjgKLS0tIGhrQUhneHY1SXNLUy9KSGN2OGdu 24 - d2NBc3grZ3U5UmlEcmNZSUN1SzFJanMKiZL51wTg58x8zGdE4f2B4Ao9UPgcrOa7 25 - T4MkeHdIV56SykeVsbPDPoRBFusKllc2KKJtTRbG4+WlvdBCkQYLBQ== 26 - -----END AGE ENCRYPTED FILE----- 27 - - recipient: age132qsqclmp5d6x968x5y8amdn90v64rldy3assprr8g8wjdpecvmqwryah8 28 - enc: | 29 - -----BEGIN AGE ENCRYPTED FILE----- 30 - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBJMStoTHRMRGRWSlJwVWhG 31 - M0VLaFNIK0tTTHJCVVFFUUg4ZXNjUHJ5T2xBCnB2NkNZMWtHUkxMU05lZFRaTG5a 32 - amJzOVhHeUxyQWJwUldQZTRUMzFnRUEKLS0tIFpsWVhEc2lNdzBySWxNRGxOcVNt 33 - eUorbDJEVWwrMDJ6NkQ4L1UwL1V5QnMKItqoMM/gk3WP4EOxrTqnZT+V6l44BAna 34 - ucZVT3t1xBK+qYzLf4zjmncTuk3r9QCCZBTiK6Q7nyVBKfcXHwBZYA== 35 - -----END AGE ENCRYPTED FILE----- 36 - lastmodified: "2024-10-21T13:14:55Z" 37 - mac: ENC[AES256_GCM,data:37hju7YsT2eQ9u6ZYp57GCS71CZY0/RWU6icVytz80ioS0vYqO59a+751sUIy19H6+874AU5cmk4gwruU5jk2UbuYJ0JE70BLMWjz/AElZWN17psfUq/0LR1dg1UTIElxCAC9vQjR93ciDWaNyB+eZQTLLZ2inAL9GZdINYlvrY=,iv:qH5KvySvPI2nZRNNMJ8CVMiPEO99+W6OWR2tgU12z6o=,tag:E2MjGrfH9pOBOxH7lQ5QkA==,type:str] 38 - pgp: [] 39 - unencrypted_suffix: _unencrypted 40 - version: 3.8.1
···
-1
creds/ssh/auth
··· 1 - sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAILJ3mxaweLrFL//bYIJvE1XVmjQf2Dq/CjKIPkIVmDpXAAAABHNzaDo= YubiKey #19302295
···
+12
creds/ssh/cassie
···
··· 1 + # If I had an option, I would not use ecdsa keys. 2 + # SmartCards 3 + ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGvCpt7yWIptJ9XFBhwVIj9zR30OzkWI976B/P5+0whD cardno:13 901 056 4 + ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJxpXpPlPEZPfnw2mIuWJEy/C/5h1bb6pIMeFsHAICQ+lLdEkbBSeDXQuA8feLN0MJw8KaB9jqrJbYgFadV/nVA= YubiKey #19302295 PIV Slot 9a 5 + ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICMjRM3BNkLbU57RyfUx7kOlZeBEj/NByr1PfXri82aP cardno:19 302 432 6 + 7 + # Static devices 8 + ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIPTbZL0dq0ynBl8fy9yZmrKVWd/fOybZoqBKchP0MPM sophie@marisa 9 + 10 + # Phones 11 + ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIELnUun49XZwfj535a5COURTKF85A79jn7oyUt4EDa8+ u0_a288@localhost 12 + ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOsxx+UE9xiHbQM+lKF5CbDcZOlu0AGg7rrzMbldJARO u0_a282@localhost
-1
creds/ssh/users/backup
··· 1 - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKU8Vxg12sa9HmupfMYGQV/4aK4kHlcD66JolpCJeGzv
···
-1
creds/ssh/users/builder
··· 1 - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILJtCpuxmzHqW6GCZ5D+ECyP45MSfZWCZRJFlGGwALeF builder@*
···
-11
creds/ssh/users/cassie
··· 1 - # If I had an option, I would not use ecdsa keys. 2 - # SmartCards 3 - # ssh-keygen -t ed25519-sk -C "YubiKey #${invalid:?gock}" -O{resident,verify-required} 4 - # -> To obtain resident keys, use ssh-keygen -K 5 - #ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJxpXpPlPEZPfnw2mIuWJEy/C/5h1bb6pIMeFsHAICQ+lLdEkbBSeDXQuA8feLN0MJw8KaB9jqrJbYgFadV/nVA= YubiKey #19302295 PIV Slot 9a 6 - sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIEP1oum6r6bTb4My/ZRqhVWxYKYGEqDyijUqqL1ZCIWjAAAABHNzaDo= YubiKey #13901056 7 - sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAILJ3mxaweLrFL//bYIJvE1XVmjQf2Dq/CjKIPkIVmDpXAAAABHNzaDo= YubiKey #19302295 8 - 9 - # Phones and Portables (portals) 10 - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICPydYsQOmcjpsuhwi+w7TD5DRPXIe3pemUYyUbmOLMt pixel7a+graphite@portal.d.soopy.moe 11 - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID41KR2A+6frMVx7VVsONXmPi88RcHLQLOs1QVNngqoY vault.stored@portal.d.soopy.moe
···
-1
docs/.gitignore
··· 1 - dist/
···
+6
docs/_config.yml
···
··· 1 + remote_theme: pages-themes/leap-day@v0.2.0 2 + plugins: 3 + - jekyll-remote-theme # add this line to the plugins list if you already have one 4 + 5 + title: nix-on-koumakan 6 + show_downloads: false
-29
docs/book.toml
··· 1 - [book] 2 - authors = ["Cassie Cheung"] 3 - language = "en" 4 - multilingual = false 5 - src = "src" 6 - title = "gensokyo" 7 - 8 - [build] 9 - build-dir = "./dist" 10 - 11 - [output.html] 12 - default-theme = "latte" 13 - preferred-dark-theme = "mocha" 14 - git-repository-url = "https://patchy.soopy.moe/cassie/gensokyo" 15 - git-repository-icon = "fa-code-fork" 16 - edit-url-template = "https://patchy.soopy.moe/cassie/gensokyo/_edit/main/docs/{path}" 17 - cname = "flake.soopy.moe" 18 - 19 - additional-js = ["theme/pagetoc.js"] 20 - additional-css = ["mdbook-admonish.css", "./theme/catppuccin.css", "./theme/catppuccin-admonish.css", "theme/pagetoc.css"] 21 - 22 - [preprocessor.admonish] 23 - command = "mdbook-admonish" 24 - assets_version = "3.0.2" # do not edit: managed by `mdbook-admonish install` 25 - 26 - [preprocessor.pagetoc] 27 - 28 - # [preprocessor.catppuccin] 29 - # assets_version = "2.1.0" # DO NOT EDIT: Managed by `mdbook-catppuccin install`
···
+6
docs/docs.md
···
··· 1 + # documentation 2 + lmao bals 3 + 4 + ## table of contents 5 + - [tips_n_tricks.md](./tips_n_tricks.md) Tips and tricks for nix 6 + - [utils.md](./utils.md) _utils functions reference
+10
docs/ext-files.md
···
··· 1 + # external files not tracked by flakes 2 + 3 + due to the required secure nature of these files, we are unable to include 4 + thses sets of files/directories in this repository. 5 + 6 + <!-- These are coincidentally the same length. magic! --> 7 + - `-rw------- /etc/atticd.env`: attic credentials file 8 + - `-r-------- /etc/lego/desec`: acme credentials 9 + - `drwx------ /etc/secureboot`: secureboot keys 10 + - `-r-------- /etc/nitter/guest_accounts.json`: nitter guest account tokens
+18
docs/index.md
···
··· 1 + # Cow 2 + ![a yak on some grass](./quaritsch-photography-1_6rJHQ2Gmw-unsplash.jpg) 3 + 4 + *Gracefully provided by [Quaritsch Photography](https://unsplash.com/@quaritsch) on Unsplash, via https://unsplash.com/photos/1_6rJHQ2Gmw* 5 + 6 + # NixOS Configuration 7 + This is a bare minimum nix configuration for koumakan. 8 + 9 + I'm still very, very new to Nix and its ecosystem so pointers to better 10 + way of doing things are very much appreciated. 11 + 12 + ## docs 13 + documentation and extra tips can be found [here](./docs) 14 + 15 + couldn't find what you needed? suffer with me! see the 16 + [How 2 Nix section in this repo.](https://github.com/hlissner/dotfiles#frequently-asked-questions) 17 + 18 + โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“
-348
docs/mdbook-admonish.css
··· 1 - @charset "UTF-8"; 2 - :is(.admonition) { 3 - display: flow-root; 4 - margin: 1.5625em 0; 5 - padding: 0 1.2rem; 6 - color: var(--fg); 7 - page-break-inside: avoid; 8 - background-color: var(--bg); 9 - border: 0 solid black; 10 - border-inline-start-width: 0.4rem; 11 - border-radius: 0.2rem; 12 - box-shadow: 0 0.2rem 1rem rgba(0, 0, 0, 0.05), 0 0 0.1rem rgba(0, 0, 0, 0.1); 13 - } 14 - @media print { 15 - :is(.admonition) { 16 - box-shadow: none; 17 - } 18 - } 19 - :is(.admonition) > * { 20 - box-sizing: border-box; 21 - } 22 - :is(.admonition) :is(.admonition) { 23 - margin-top: 1em; 24 - margin-bottom: 1em; 25 - } 26 - :is(.admonition) > .tabbed-set:only-child { 27 - margin-top: 0; 28 - } 29 - html :is(.admonition) > :last-child { 30 - margin-bottom: 1.2rem; 31 - } 32 - 33 - a.admonition-anchor-link { 34 - display: none; 35 - position: absolute; 36 - left: -1.2rem; 37 - padding-right: 1rem; 38 - } 39 - a.admonition-anchor-link:link, a.admonition-anchor-link:visited { 40 - color: var(--fg); 41 - } 42 - a.admonition-anchor-link:link:hover, a.admonition-anchor-link:visited:hover { 43 - text-decoration: none; 44 - } 45 - a.admonition-anchor-link::before { 46 - content: "ยง"; 47 - } 48 - 49 - :is(.admonition-title, summary.admonition-title) { 50 - position: relative; 51 - min-height: 4rem; 52 - margin-block: 0; 53 - margin-inline: -1.6rem -1.2rem; 54 - padding-block: 0.8rem; 55 - padding-inline: 4.4rem 1.2rem; 56 - font-weight: 700; 57 - background-color: rgba(68, 138, 255, 0.1); 58 - print-color-adjust: exact; 59 - -webkit-print-color-adjust: exact; 60 - display: flex; 61 - } 62 - :is(.admonition-title, summary.admonition-title) p { 63 - margin: 0; 64 - } 65 - html :is(.admonition-title, summary.admonition-title):last-child { 66 - margin-bottom: 0; 67 - } 68 - :is(.admonition-title, summary.admonition-title)::before { 69 - position: absolute; 70 - top: 0.625em; 71 - inset-inline-start: 1.6rem; 72 - width: 2rem; 73 - height: 2rem; 74 - background-color: #448aff; 75 - print-color-adjust: exact; 76 - -webkit-print-color-adjust: exact; 77 - mask-image: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"></svg>'); 78 - -webkit-mask-image: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"></svg>'); 79 - mask-repeat: no-repeat; 80 - -webkit-mask-repeat: no-repeat; 81 - mask-size: contain; 82 - -webkit-mask-size: contain; 83 - content: ""; 84 - } 85 - :is(.admonition-title, summary.admonition-title):hover a.admonition-anchor-link { 86 - display: initial; 87 - } 88 - 89 - details.admonition > summary.admonition-title::after { 90 - position: absolute; 91 - top: 0.625em; 92 - inset-inline-end: 1.6rem; 93 - height: 2rem; 94 - width: 2rem; 95 - background-color: currentcolor; 96 - mask-image: var(--md-details-icon); 97 - -webkit-mask-image: var(--md-details-icon); 98 - mask-repeat: no-repeat; 99 - -webkit-mask-repeat: no-repeat; 100 - mask-size: contain; 101 - -webkit-mask-size: contain; 102 - content: ""; 103 - transform: rotate(0deg); 104 - transition: transform 0.25s; 105 - } 106 - details[open].admonition > summary.admonition-title::after { 107 - transform: rotate(90deg); 108 - } 109 - 110 - :root { 111 - --md-details-icon: url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M8.59 16.58 13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.42Z'/></svg>"); 112 - } 113 - 114 - :root { 115 - --md-admonition-icon--admonish-note: url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z'/></svg>"); 116 - --md-admonition-icon--admonish-abstract: url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M17 9H7V7h10m0 6H7v-2h10m-3 6H7v-2h7M12 3a1 1 0 0 1 1 1 1 1 0 0 1-1 1 1 1 0 0 1-1-1 1 1 0 0 1 1-1m7 0h-4.18C14.4 1.84 13.3 1 12 1c-1.3 0-2.4.84-2.82 2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2z'/></svg>"); 117 - --md-admonition-icon--admonish-info: url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M13 9h-2V7h2m0 10h-2v-6h2m-1-9A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 10-10A10 10 0 0 0 12 2z'/></svg>"); 118 - --md-admonition-icon--admonish-tip: url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M17.66 11.2c-.23-.3-.51-.56-.77-.82-.67-.6-1.43-1.03-2.07-1.66C13.33 7.26 13 4.85 13.95 3c-.95.23-1.78.75-2.49 1.32-2.59 2.08-3.61 5.75-2.39 8.9.04.1.08.2.08.33 0 .22-.15.42-.35.5-.23.1-.47.04-.66-.12a.58.58 0 0 1-.14-.17c-1.13-1.43-1.31-3.48-.55-5.12C5.78 10 4.87 12.3 5 14.47c.06.5.12 1 .29 1.5.14.6.41 1.2.71 1.73 1.08 1.73 2.95 2.97 4.96 3.22 2.14.27 4.43-.12 6.07-1.6 1.83-1.66 2.47-4.32 1.53-6.6l-.13-.26c-.21-.46-.77-1.26-.77-1.26m-3.16 6.3c-.28.24-.74.5-1.1.6-1.12.4-2.24-.16-2.9-.82 1.19-.28 1.9-1.16 2.11-2.05.17-.8-.15-1.46-.28-2.23-.12-.74-.1-1.37.17-2.06.19.38.39.76.63 1.06.77 1 1.98 1.44 2.24 2.8.04.14.06.28.06.43.03.82-.33 1.72-.93 2.27z'/></svg>"); 119 - --md-admonition-icon--admonish-success: url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='m9 20.42-6.21-6.21 2.83-2.83L9 14.77l9.88-9.89 2.83 2.83L9 20.42z'/></svg>"); 120 - --md-admonition-icon--admonish-question: url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='m15.07 11.25-.9.92C13.45 12.89 13 13.5 13 15h-2v-.5c0-1.11.45-2.11 1.17-2.83l1.24-1.26c.37-.36.59-.86.59-1.41a2 2 0 0 0-2-2 2 2 0 0 0-2 2H8a4 4 0 0 1 4-4 4 4 0 0 1 4 4 3.2 3.2 0 0 1-.93 2.25M13 19h-2v-2h2M12 2A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 10-10c0-5.53-4.5-10-10-10z'/></svg>"); 121 - --md-admonition-icon--admonish-warning: url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M13 14h-2V9h2m0 9h-2v-2h2M1 21h22L12 2 1 21z'/></svg>"); 122 - --md-admonition-icon--admonish-failure: url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M20 6.91 17.09 4 12 9.09 6.91 4 4 6.91 9.09 12 4 17.09 6.91 20 12 14.91 17.09 20 20 17.09 14.91 12 20 6.91z'/></svg>"); 123 - --md-admonition-icon--admonish-danger: url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M11 15H6l7-14v8h5l-7 14v-8z'/></svg>"); 124 - --md-admonition-icon--admonish-bug: url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M14 12h-4v-2h4m0 6h-4v-2h4m6-6h-2.81a5.985 5.985 0 0 0-1.82-1.96L17 4.41 15.59 3l-2.17 2.17a6.002 6.002 0 0 0-2.83 0L8.41 3 7 4.41l1.62 1.63C7.88 6.55 7.26 7.22 6.81 8H4v2h2.09c-.05.33-.09.66-.09 1v1H4v2h2v1c0 .34.04.67.09 1H4v2h2.81c1.04 1.79 2.97 3 5.19 3s4.15-1.21 5.19-3H20v-2h-2.09c.05-.33.09-.66.09-1v-1h2v-2h-2v-1c0-.34-.04-.67-.09-1H20V8z'/></svg>"); 125 - --md-admonition-icon--admonish-example: url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M7 13v-2h14v2H7m0 6v-2h14v2H7M7 7V5h14v2H7M3 8V5H2V4h2v4H3m-1 9v-1h3v4H2v-1h2v-.5H3v-1h1V17H2m2.25-7a.75.75 0 0 1 .75.75c0 .2-.08.39-.21.52L3.12 13H5v1H2v-.92L4 11H2v-1h2.25z'/></svg>"); 126 - --md-admonition-icon--admonish-quote: url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M14 17h3l2-4V7h-6v6h3M6 17h3l2-4V7H5v6h3l-2 4z'/></svg>"); 127 - } 128 - 129 - :is(.admonition):is(.admonish-note) { 130 - border-color: #448aff; 131 - } 132 - 133 - :is(.admonish-note) > :is(.admonition-title, summary.admonition-title) { 134 - background-color: rgba(68, 138, 255, 0.1); 135 - } 136 - :is(.admonish-note) > :is(.admonition-title, summary.admonition-title)::before { 137 - background-color: #448aff; 138 - mask-image: var(--md-admonition-icon--admonish-note); 139 - -webkit-mask-image: var(--md-admonition-icon--admonish-note); 140 - mask-repeat: no-repeat; 141 - -webkit-mask-repeat: no-repeat; 142 - mask-size: contain; 143 - -webkit-mask-repeat: no-repeat; 144 - } 145 - 146 - :is(.admonition):is(.admonish-abstract, .admonish-summary, .admonish-tldr) { 147 - border-color: #00b0ff; 148 - } 149 - 150 - :is(.admonish-abstract, .admonish-summary, .admonish-tldr) > :is(.admonition-title, summary.admonition-title) { 151 - background-color: rgba(0, 176, 255, 0.1); 152 - } 153 - :is(.admonish-abstract, .admonish-summary, .admonish-tldr) > :is(.admonition-title, summary.admonition-title)::before { 154 - background-color: #00b0ff; 155 - mask-image: var(--md-admonition-icon--admonish-abstract); 156 - -webkit-mask-image: var(--md-admonition-icon--admonish-abstract); 157 - mask-repeat: no-repeat; 158 - -webkit-mask-repeat: no-repeat; 159 - mask-size: contain; 160 - -webkit-mask-repeat: no-repeat; 161 - } 162 - 163 - :is(.admonition):is(.admonish-info, .admonish-todo) { 164 - border-color: #00b8d4; 165 - } 166 - 167 - :is(.admonish-info, .admonish-todo) > :is(.admonition-title, summary.admonition-title) { 168 - background-color: rgba(0, 184, 212, 0.1); 169 - } 170 - :is(.admonish-info, .admonish-todo) > :is(.admonition-title, summary.admonition-title)::before { 171 - background-color: #00b8d4; 172 - mask-image: var(--md-admonition-icon--admonish-info); 173 - -webkit-mask-image: var(--md-admonition-icon--admonish-info); 174 - mask-repeat: no-repeat; 175 - -webkit-mask-repeat: no-repeat; 176 - mask-size: contain; 177 - -webkit-mask-repeat: no-repeat; 178 - } 179 - 180 - :is(.admonition):is(.admonish-tip, .admonish-hint, .admonish-important) { 181 - border-color: #00bfa5; 182 - } 183 - 184 - :is(.admonish-tip, .admonish-hint, .admonish-important) > :is(.admonition-title, summary.admonition-title) { 185 - background-color: rgba(0, 191, 165, 0.1); 186 - } 187 - :is(.admonish-tip, .admonish-hint, .admonish-important) > :is(.admonition-title, summary.admonition-title)::before { 188 - background-color: #00bfa5; 189 - mask-image: var(--md-admonition-icon--admonish-tip); 190 - -webkit-mask-image: var(--md-admonition-icon--admonish-tip); 191 - mask-repeat: no-repeat; 192 - -webkit-mask-repeat: no-repeat; 193 - mask-size: contain; 194 - -webkit-mask-repeat: no-repeat; 195 - } 196 - 197 - :is(.admonition):is(.admonish-success, .admonish-check, .admonish-done) { 198 - border-color: #00c853; 199 - } 200 - 201 - :is(.admonish-success, .admonish-check, .admonish-done) > :is(.admonition-title, summary.admonition-title) { 202 - background-color: rgba(0, 200, 83, 0.1); 203 - } 204 - :is(.admonish-success, .admonish-check, .admonish-done) > :is(.admonition-title, summary.admonition-title)::before { 205 - background-color: #00c853; 206 - mask-image: var(--md-admonition-icon--admonish-success); 207 - -webkit-mask-image: var(--md-admonition-icon--admonish-success); 208 - mask-repeat: no-repeat; 209 - -webkit-mask-repeat: no-repeat; 210 - mask-size: contain; 211 - -webkit-mask-repeat: no-repeat; 212 - } 213 - 214 - :is(.admonition):is(.admonish-question, .admonish-help, .admonish-faq) { 215 - border-color: #64dd17; 216 - } 217 - 218 - :is(.admonish-question, .admonish-help, .admonish-faq) > :is(.admonition-title, summary.admonition-title) { 219 - background-color: rgba(100, 221, 23, 0.1); 220 - } 221 - :is(.admonish-question, .admonish-help, .admonish-faq) > :is(.admonition-title, summary.admonition-title)::before { 222 - background-color: #64dd17; 223 - mask-image: var(--md-admonition-icon--admonish-question); 224 - -webkit-mask-image: var(--md-admonition-icon--admonish-question); 225 - mask-repeat: no-repeat; 226 - -webkit-mask-repeat: no-repeat; 227 - mask-size: contain; 228 - -webkit-mask-repeat: no-repeat; 229 - } 230 - 231 - :is(.admonition):is(.admonish-warning, .admonish-caution, .admonish-attention) { 232 - border-color: #ff9100; 233 - } 234 - 235 - :is(.admonish-warning, .admonish-caution, .admonish-attention) > :is(.admonition-title, summary.admonition-title) { 236 - background-color: rgba(255, 145, 0, 0.1); 237 - } 238 - :is(.admonish-warning, .admonish-caution, .admonish-attention) > :is(.admonition-title, summary.admonition-title)::before { 239 - background-color: #ff9100; 240 - mask-image: var(--md-admonition-icon--admonish-warning); 241 - -webkit-mask-image: var(--md-admonition-icon--admonish-warning); 242 - mask-repeat: no-repeat; 243 - -webkit-mask-repeat: no-repeat; 244 - mask-size: contain; 245 - -webkit-mask-repeat: no-repeat; 246 - } 247 - 248 - :is(.admonition):is(.admonish-failure, .admonish-fail, .admonish-missing) { 249 - border-color: #ff5252; 250 - } 251 - 252 - :is(.admonish-failure, .admonish-fail, .admonish-missing) > :is(.admonition-title, summary.admonition-title) { 253 - background-color: rgba(255, 82, 82, 0.1); 254 - } 255 - :is(.admonish-failure, .admonish-fail, .admonish-missing) > :is(.admonition-title, summary.admonition-title)::before { 256 - background-color: #ff5252; 257 - mask-image: var(--md-admonition-icon--admonish-failure); 258 - -webkit-mask-image: var(--md-admonition-icon--admonish-failure); 259 - mask-repeat: no-repeat; 260 - -webkit-mask-repeat: no-repeat; 261 - mask-size: contain; 262 - -webkit-mask-repeat: no-repeat; 263 - } 264 - 265 - :is(.admonition):is(.admonish-danger, .admonish-error) { 266 - border-color: #ff1744; 267 - } 268 - 269 - :is(.admonish-danger, .admonish-error) > :is(.admonition-title, summary.admonition-title) { 270 - background-color: rgba(255, 23, 68, 0.1); 271 - } 272 - :is(.admonish-danger, .admonish-error) > :is(.admonition-title, summary.admonition-title)::before { 273 - background-color: #ff1744; 274 - mask-image: var(--md-admonition-icon--admonish-danger); 275 - -webkit-mask-image: var(--md-admonition-icon--admonish-danger); 276 - mask-repeat: no-repeat; 277 - -webkit-mask-repeat: no-repeat; 278 - mask-size: contain; 279 - -webkit-mask-repeat: no-repeat; 280 - } 281 - 282 - :is(.admonition):is(.admonish-bug) { 283 - border-color: #f50057; 284 - } 285 - 286 - :is(.admonish-bug) > :is(.admonition-title, summary.admonition-title) { 287 - background-color: rgba(245, 0, 87, 0.1); 288 - } 289 - :is(.admonish-bug) > :is(.admonition-title, summary.admonition-title)::before { 290 - background-color: #f50057; 291 - mask-image: var(--md-admonition-icon--admonish-bug); 292 - -webkit-mask-image: var(--md-admonition-icon--admonish-bug); 293 - mask-repeat: no-repeat; 294 - -webkit-mask-repeat: no-repeat; 295 - mask-size: contain; 296 - -webkit-mask-repeat: no-repeat; 297 - } 298 - 299 - :is(.admonition):is(.admonish-example) { 300 - border-color: #7c4dff; 301 - } 302 - 303 - :is(.admonish-example) > :is(.admonition-title, summary.admonition-title) { 304 - background-color: rgba(124, 77, 255, 0.1); 305 - } 306 - :is(.admonish-example) > :is(.admonition-title, summary.admonition-title)::before { 307 - background-color: #7c4dff; 308 - mask-image: var(--md-admonition-icon--admonish-example); 309 - -webkit-mask-image: var(--md-admonition-icon--admonish-example); 310 - mask-repeat: no-repeat; 311 - -webkit-mask-repeat: no-repeat; 312 - mask-size: contain; 313 - -webkit-mask-repeat: no-repeat; 314 - } 315 - 316 - :is(.admonition):is(.admonish-quote, .admonish-cite) { 317 - border-color: #9e9e9e; 318 - } 319 - 320 - :is(.admonish-quote, .admonish-cite) > :is(.admonition-title, summary.admonition-title) { 321 - background-color: rgba(158, 158, 158, 0.1); 322 - } 323 - :is(.admonish-quote, .admonish-cite) > :is(.admonition-title, summary.admonition-title)::before { 324 - background-color: #9e9e9e; 325 - mask-image: var(--md-admonition-icon--admonish-quote); 326 - -webkit-mask-image: var(--md-admonition-icon--admonish-quote); 327 - mask-repeat: no-repeat; 328 - -webkit-mask-repeat: no-repeat; 329 - mask-size: contain; 330 - -webkit-mask-repeat: no-repeat; 331 - } 332 - 333 - .navy :is(.admonition) { 334 - background-color: var(--sidebar-bg); 335 - } 336 - 337 - .ayu :is(.admonition), 338 - .coal :is(.admonition) { 339 - background-color: var(--theme-hover); 340 - } 341 - 342 - .rust :is(.admonition) { 343 - background-color: var(--sidebar-bg); 344 - color: var(--sidebar-fg); 345 - } 346 - .rust .admonition-anchor-link:link, .rust .admonition-anchor-link:visited { 347 - color: var(--sidebar-fg); 348 - }
···
docs/quaritsch-photography-1_6rJHQ2Gmw-unsplash.jpg

This is a binary file and will not be displayed.

-24
docs/src/README.md
··· 1 - # Cow 2 - ![a yak on some grass](./images/quaritsch-photography-1_6rJHQ2Gmw-unsplash.jpg) 3 - 4 - *Picture by [Quaritsch Photography](https://unsplash.com/@quaritsch) on Unsplash, via 5 - https://unsplash.com/photos/1_6rJHQ2Gmw* 6 - 7 - # NixOS Configuration 8 - This is a bare minimum nix configuration for various gensokyo servers. 9 - 10 - I'm still very, very new to Nix and its ecosystem so pointers to better 11 - way of doing things are very much appreciated. 12 - 13 - The canonical URL of this site is <https://flake.soopy.moe>. 14 - 15 - ## Documentation 16 - Documentation and other tips can be found in this book. See the sidebar on the left for a table of contents. 17 - 18 - couldn't find what you needed? suffer with me! see the 19 - [How 2 Nix section in this repo.](https://github.com/hlissner/dotfiles#frequently-asked-questions) 20 - 21 - <div class="center" style="margin: auto; text-align: center;"> 22 - <p>โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“</p> 23 - <img src="./images/xeniatrans.gif" alt="A 88x31 pixel art button of Xenia, a proposed mascot for the Linux. On the left is a square portrait of Xenia, with the transgender flag as the background. To the right is the text Linux NOW!." title="Trans rights" /> 24 - </div>
···
-27
docs/src/SUMMARY.md
··· 1 - # Summary 2 - [Welcome to the Cow](README.md) 3 - 4 - # Documentation 5 - - [Tips and Tricks](tips/README.md) 6 - - [Overriding packages](tips/overriding-packages.md) 7 - - [Overlays](tips/overlays.md) 8 - - ["Global" Options](tips/global-options.md) 9 - - [Passing large secrets to DynamicUser=true services](tips/pass-big-secrets-to-dynamic-user.md) 10 - - [Miscellaneous Tips](tips/misc.md) 11 - - [Pitfalls](tips/pitfalls.md) 12 - - [Utility Functions](utils/README.md) 13 - - [mkVhost](utils/mkVhost.md) 14 - - [mkSimpleProxy](utils/mkSimpleProxy.md) 15 - - [genSecrets](utils/genSecrets.md) 16 - - [setupSecrets](utils/setupSecrets.md) 17 - - [mkNginxFile](utils/mkNginxFile.md) 18 - - [mkNginxJSON](utils/mkNginxJSON.md) 19 - 20 - # Internal documentation 21 - - ["Private" use]() 22 - - [Ports](internal/ports.md) 23 - - [External Untracked Files](internal/ext-files.md) 24 - - [Presets]() 25 - - [`certificates`](internal/presets/certificates.md) 26 - - [`nginx`](internal/presets/nginx.md) 27 - - [`vmetrics`](internal/presets/vmetrics.md)
···
docs/src/images/quaritsch-photography-1_6rJHQ2Gmw-unsplash.jpg

This is a binary file and will not be displayed.

docs/src/images/xeniatrans.gif

This is a binary file and will not be displayed.

-19
docs/src/internal/ext-files.md
··· 1 - # External Untracked Files 2 - 3 - due to the required secure nature of these files, we are unable to include thses 4 - sets of files/directories in this repository. 5 - 6 - <!-- These are coincidentally the same length. magic! --> 7 - 8 - - `-r-------- /etc/lego/desec`: acme credentials 9 - - `drwx------ /var/lib/sbctl`: secure boot keys 10 - - `-r-------- /v/l/forgejo/data/jwt/oauth.pem`: forgejo oauth jwt private key 11 - - `-r-------- kita:/etc/radicale/users`: radicale user htpasswd mappings 12 - 13 - ## changelog 14 - 15 - This section will only list removals. 16 - 17 - ### as of commit 8501880 (`850188052ea0968e7eb96724c2027ad998cbbefb`) 18 - 19 - - ~~`nitter/guest_tokens.json`~~ managed in-tree
···
-10
docs/src/internal/new-host.md
··· 1 - # Adding a new host 2 - 3 - ## Secret configuration 4 - 5 - ```yaml 6 - vmetrics: 7 - auth: # openssl rand 129 | base64 -w0 | tr "/=+" "-_." 8 - lego: 9 - cf_token: # generate from cloudflare 10 - ```
···
-18
docs/src/internal/ports.md
··· 1 - # Ports 2 - 3 - This section mainly focuses on our existing port definition stuff. 4 - We try to not use ports as much and to use unix sockets, but sometimes it's just not possible. 5 - 6 - Note: most of this document focuses on koumakan. 7 - 8 - ## Defined port ranges 9 - 10 - - `20xxx`: Prometheus/Metrics 11 - - `2009x`: core metrics, node metrics 12 - - `201xx`: service metrics 13 - - `21000`: VMAuth (special case as this is not strictly metrics but a proxy) 14 - <!-- note: grafana uses unix sockets instead. --> 15 - 16 - - `3xxxx`: Service ports 17 - - `34723`: miniflux 18 - - `35xxx`: exposed docker container ports
···
-16
docs/src/internal/presets/certificates.md
··· 1 - # Certificates presets 2 - 3 - ```nix 4 - {...}: { 5 - gensokyo.presets.certificates = true; 6 - } 7 - ``` 8 - 9 - This enables and set some ACME related configurations to a common value. 10 - 11 - This requires the following secrets to be set: 12 - 13 - ```yaml 14 - lego: 15 - cf_token: # generate from cloudflare 16 - ```
···
-9
docs/src/internal/presets/nginx.md
··· 1 - # Nginx presets 2 - 3 - ```nix 4 - {...}: { 5 - gensokyo.presets.nginx = true; 6 - } 7 - ``` 8 - 9 - This enables nginx and related default configurations.
···
-37
docs/src/internal/presets/vmetrics.md
··· 1 - # VictoriaMetrics presets 2 - 3 - ```nix 4 - {...}: { 5 - gensokyo.presets.vmetrics = true; 6 - } 7 - ``` 8 - 9 - This enables vmetrics and some default configurations. Afterwards, you can add new scrape configs like below. 10 - 11 - ```nix 12 - {...}: { 13 - services.vmagent.prometheusConfig.scrape_configs = [{ 14 - job_name = "nginx"; 15 - static_configs = [{targets = ["localhost:${builtins.toString config.services.prometheus.exporters.nginx.port}"];}]; 16 - relabel_configs = [{ 17 - target_label = "instance"; 18 - replacement = "${config.networking.fqdnOrHostName}"; 19 - }]; 20 - }]; 21 - } 22 - ``` 23 - 24 - ## Prerequisites 25 - 26 - You need to do the following things when adding a new host. 27 - 28 - ### Secrets 29 - 30 - Include the follow secret configuration. 31 - 32 - ```yaml 33 - vmetrics: 34 - auth: # openssl rand 129 | base64 -w0 | tr "/=+" "-_." 35 - ``` 36 - 37 - Then add to koumakan.
···
-14
docs/src/tips/README.md
··· 1 - # Tips and Tricks 2 - *formerly known as tops and bottoms* 3 - 4 - This section outlines things that I've learned from various sources and some pure guesswork. 5 - 6 - > To learn Nix is to learn to suffer, and to learn the way of numbing the pain 7 - > 8 - > *โ€” Cassie circa. 2023* 9 - 10 - There might be more undocumented things. Interesting things are usually marked with `#โ€ HACK:`. 11 - 12 - Of course, I might completely miss stuff. in that case, feel free to open an issue. 13 - 14 - To get started, look at the sidebar to the left.
···
-41
docs/src/tips/global-options.md
··· 1 - # "Global"/Extra Options 2 - a way of passing additional options "globally" to modules is by using extraOpts. 3 - 4 - in nix flakes, this is accomplished by using `specialArgs` in `nixosSystem`. 5 - 6 - for example, check out these few lines in our flake.nix: [[source]](https://github.com/soopyc/nix-on-koumakan/blob/492dfaa01808c2aa5dbb2d8223163e92bcef673b/flake.nix#L29-L34) 7 - 8 - ```nix 9 - # note: unrelated attributes stripped and removed. 10 - # note2: this code is now out of date from our code, but can still be referenced. 11 - { 12 - outputs = { ... }:{ 13 - nixosConfigurations = { 14 - koumakan = lib.nixosSystem { 15 - specialArgs = { 16 - _utils = (import ./global/utils.nix) { inherit pkgs; }; 17 - 18 - someOtherArg = {thisCanBe = "LiterallyAnything";}; 19 - }; 20 - }; 21 - }; 22 - }; 23 - } 24 - ``` 25 - 26 - With this, you can now do this in other imported nixos modules. 27 - 28 - ```nix 29 - { someOtherArg, ... }: { 30 - users.users.${someOtherArg} = {}; 31 - } 32 - ``` 33 - 34 - this avoids the horror of `import ../../../utils/bar.nix;` and various other things. 35 - 36 - refer to [nixpkgs:nixos/lib/eval-config.nix] and [nixpkgs:lib/modules.nix#122] for more info 37 - 38 - *pointers by \@natsukagami* 39 - 40 - [nixpkgs:lib/modules.nix#122]: https://github.com/NixOS/nixpkgs/blob/6e68daefde56a7a8e6fe7c3ca9ceeb436294bb9f/lib/modules.nix#L122 41 - [nixpkgs:nixos/lib/eval-config.nix]: https://github.com/NixOS/nixpkgs/blob/5054472759a3b0df8e18cfe4031a5eff92d4cdc3/nixos/lib/eval-config.nix
···
-10
docs/src/tips/hydra.md
··· 1 - # Hydra Setup 2 - 3 - ## Config options 4 - 5 - see <https://patchy.soopy.moe/soopyc/nix-missing-doc/src/branch/main/src/hydra-config.md> 6 - 7 - ## Remote builds 8 - 9 - Remote building works. 10 -
···
-51
docs/src/tips/misc.md
··· 1 - # Misc tips 2 - 3 - This page contains stuff that ~~I couldn't be bothered to move to the new format~~ is probably outdated or just short tips. 4 - 5 - *previously: tops and bottoms* 6 - 7 - ## @ (at) syntax 8 - very simple. 9 - 10 - ```nix 11 - args@{a, b, c, ...}: { 12 - # args.a and a are the same 13 - some = "value"; 14 - } 15 - ``` 16 - 17 - ## nginx regex location 18 - ```nix 19 - { 20 - locations."~ \.php$".extraConfig = '' 21 - # balls 22 - ''; 23 - } 24 - ``` 25 - from [nixos wiki](https://nixos.wiki/wiki/Nginx#LEMP_stack) 26 - 27 - ## adding a package with an overlay to a package set 28 - 29 - for package sets with a scope, you will have to do something like 30 - ```nix 31 - final: prev: { 32 - nimPackages = prev.nimPackages.overrideScope (final': prev': { 33 - sha1 = final'.callPackage ./sha1.nix {}; 34 - oauth = final'.callPackage ./oauth.nix {}; 35 - }); 36 - } 37 - ``` 38 - There's an alternative method that i used to use here: 39 - 40 - https://github.com/soopyc/nix-on-koumakan/blob/30e65402d22b000a3b5af6c9e5ea48a2b58a54e0/overlays/nim/oauth/default.nix 41 - 42 - however i do not think that's the best way lol 43 - 44 - ## what the hell is an IFD?? 45 - IFD stands for import from derivation. 46 - 47 - *nixos/nixpkgs really need better and significantly less scattered documentation while improving manual readability.* 48 - 49 - # Useful links 50 - 51 - Builtin stdlib functions search engine: https://noogle.dev/
···
-73
docs/src/tips/overlays.md
··· 1 - # Overlays 2 - overlays are useful when you want to refer to a package globally, or to fix a broken package locally. 3 - 4 - you might also want to use overlays when something hasn't made it into nixos-unstable or whatever you're on yet, but you 5 - desparately need said thing. 6 - 7 - the gist of overlays is as thus: 8 - 9 - > overlay is just `final: prev: {}` functions 10 - > 11 - > dumbed down idea is that you do `pkg = prev.pkg.override` and 12 - > refer to everything else from `final` 13 - > 14 - > idea is like final = prev // overlay(prev, final) 15 - > 16 - > (it's a recursive definition) 17 - 18 - (poorly made) example overlays can be found [here](https://github.com/soopyc/nixos-config/blob/master/overlays/discord-canary.nix) 19 - 20 - ~~currently in-use and slightly better overlays can be found in this repo! head over to /overlays to see them.~~ 21 - 22 - *note: replace `self: super:` with `final: prev:` for consistency* 23 - 24 - UPDATE: we don't really use overlays anymore. If you'd like an example, please reach out and we can add some here. 25 - 26 - *concept and quote content by @natsukagami* 27 - 28 - ```admonish info 29 - If you write 3rd party nix modules, it is a bad idea to do overlays as the performance impact propagates to everyone 30 - in the stream. See [this article that talks about overlays]( 31 - https://zimbatm.com/notes/1000-instances-of-nixpkgs 32 - ). 33 - ``` 34 - 35 - ## Overlaying python packages 36 - In some situations a python package may be bugged. This might have been fixed upstream by Nixpkgs devs, but has not reached `nixos-unstable` or whatever. 37 - 38 - While overriding normal packages is relatively straightforward, doing so with python is most definitely not. 39 - 40 - We have done this recently with the help of [Scrumplex] (thank you!) because a package was broken on nixos-unstable. Someone made a fix and it was merged, but it has yet to make it to nixos-unstable. This was blocking our systems from building so we decided to just say sod it, we're doing this. 41 - 42 - Again, overriding simple packages that are not inside any package groups is wildly easier than this operation. Since not every package group is the same, this sample only focuses on Python because we only have experience with that. 43 - 44 - Copy-paste the new package definiton next to the place where you're defining the overlay. We will be referencing it as `./package.nix`. 45 - 46 - ```nix 47 - final: prev: { 48 - # this does not work because the package uses python3Packages. this is defining standalone package. 49 - pyscard = prev.python3Packages.callPackage ./package.nix {}; 50 - 51 - python3 = prev.python3.override { 52 - self = final.python3; 53 - 54 - # to their credit we do have this thing here which was already great 55 - packageOverrides = (final': prev': { 56 - # we cannot use final'.pkgs.callPackage here because it's missing buildPythonModule or something. 57 - pyscard = final.python3Packages.callPackage ./package.nix { 58 - inherit (final.darwin.apple_sdk.frameworks) PCSC; # apple carp 59 - }; 60 - }); 61 - }; 62 - 63 - # probably some `rec` carp 64 - # IMPORTANT: you need this! this is needed to let nix know we want to use our overrided python3 package earlier. 65 - # if you don't add this, you will still be building the old package like nothing changed at all. 66 - # Yes, nix is this sad. 67 - python3Packages = final.python3.pkgs; 68 - } 69 - ``` 70 - 71 - A full example is accessible [here](https://github.com/soopyc/gensokyo/tree/53fcb9bdeeede6e250c84a05ff8c6c1aca9b5fe6/global/overlays/temp/pyscard). 72 - 73 - [Scrumplex]: https://github.com/scrumplex
···
-16
docs/src/tips/overriding-packages.md
··· 1 - # Overriding Packages 2 - The nix pill confused me and i thought i had to make overlays to do overrides but no 3 - 4 - in packages (i.e. `environment.systemPackages`), just do 5 - ```nix 6 - {pkgs, ...}: { 7 - environment.systemPackages = with pkgs; [ 8 - (discord.override {withOpenASAR = true;}) 9 - ]; 10 - } 11 - ``` 12 - 13 - This works as well 14 - ```nix 15 - security.sudo.package = (pkgs.sudo.override {withInsults = true;}); 16 - ```
···
-78
docs/src/tips/pass-big-secrets-to-dynamic-user.md
··· 1 - <!-- 2 - vim:fileencoding=utf-8:foldmethod=marker 3 - --> 4 - 5 - ## using sops-nix or other stuff to pass big chungus files to services with DynamicUser=true 6 - 7 - afaik this is not possible. 8 - 9 - The option that makes the most sense, LoadCredentials only supports files up to 1 MB in size. 10 - ([relevant documentation (`systemd.exec(5)`)](https://www.freedesktop.org/software/systemd/man/systemd.exec.html#LoadCredential=ID:PATH:~:text=Currently%2C%20an,is%20enforced)) 11 - 12 - Without that option, we are only left with giving a user access to the file somehow. 13 - 14 - Doing that directly via systemd is not possible either. We cannot get the dynamic user's id in a ExecStartPre hook with the `+` prefix to `chown` the file. 15 - The user is ran with root privileges and there are no signs of the final ephemeral user id. the same happens with 16 - ones prefixed with `!`. 17 - 18 - ```admonish note 19 - While the `!` syntax do preallocate a dynamic user, we cannot use it to change any permissions. (at least per my last attempt) 20 - ``` 21 - 22 - <!-- 23 - This is a vim fold. press z+o to open, z+c to close. 24 - Terminal output {{{ 25 - --> 26 - ~~~admonish tldr title="Terminal Output" collapsible=true 27 - ```ShellSession 28 - cassie in marisa in ~ took 1s 29 - โœ— 1 โžœ systemd-run -pPrivateTmp=true -pDynamicUser=true --property="SystemCallFilter=@system-service ~@privileged ~@resources" -pExecStartPre="+env" -pPrivateUsers=true -t bash 30 - 31 - Running as unit: run-u1196.service 32 - Press ^] three times within 1s to disconnect TTY. 33 - LANG=en_US.UTF-8 34 - PATH=/usr/local/sbin:/usr/local/bin:/usr/bin 35 - LOGNAME=run-u1196 36 - USER=run-u1196 37 - [...] 38 - ^C% 39 - 40 - cassie in marisa in ~ took 2s 41 - โžœ systemd-run -pPrivateTmp=true -pDynamicUser=true --property="SystemCallFilter=@system-service ~@privileged ~@resources" -pExecStartPre="\!env" -pPrivateUsers=true -t bash 42 - 43 - Running as unit: run-u1200.service 44 - Press ^] three times within 1s to disconnect TTY. 45 - LANG=en_US.UTF-8 46 - PATH=/usr/local/sbin:/usr/local/bin:/usr/bin 47 - LOGNAME=run-u1200 48 - USER=run-u1200 49 - [...] 50 - ^C% 51 - 52 - cassie in marisa in ~ took 2s 53 - โžœ systemd-run -pPrivateTmp=true -pDynamicUser=true -pSystemCallFilter=@system-service -pSystemCallFilter=~@privileged -pSystemCallFilter=~@resources -pExecStartPre="\!bash -c 'echo \$UID'" -pPrivateUsers=true -t bash -c "ls" 54 - 55 - Running as unit: run-u1236.service 56 - Press ^] three times within 1s to disconnect TTY. 57 - 0 58 - ^C% 59 - 60 - cassie in marisa in ~ took 4s 61 - โžœ systemd-run -pPrivateTmp=true -pDynamicUser=true -pSystemCallFilter=@system-service -pSystemCallFilter=~@privileged -pSystemCallFilter=~@resources -pExecStartPre="+bash -c 'echo \$UID'" -pPrivateUsers=true -t bash -c "ls" 62 - 63 - Running as unit: run-u1241.service 64 - Press ^] three times within 1s to disconnect TTY. 65 - 0 66 - ^C% 67 - ``` 68 - ~~~ 69 - <!-- 70 - }}} 71 - --> 72 - 73 - So now, we are left with the only option, which is to create a non-ephemeral user, assign it to the unit and disable DynamicUser. 74 - This step is a little involved, you will have to add a user option to the service and forcibly disable DynamicUser. 75 - 76 - I opted to replace the entire module file with my own under a different name, as I had to fix a mistake in it anyways. 77 - Here's the link to [the modified source file.](https://github.com/soopyc/mystia/blob/a999736/modules/fixups/nitter.nix) 78 - For clarity's sake, [this is the diff of the changes made.](https://github.com/soopyc/mystia/compare/3be5eef..a999736)
···
-64
docs/src/tips/pitfalls.md
··· 1 - # Pitfalls 2 - 3 - "There are pitfalls in this language???!??!?" 4 - 5 - *-- The uninitiated* 6 - 7 - ## importing nixpkgs with an empty attrset 8 - 9 - ever had this in your flake.nix 10 - 11 - ```nix 12 - { 13 - outputs = { nixpkgs, ... }@inputs: let 14 - pkgs = import nixpkgs {}; 15 - lib = nixpkgs.lib; 16 - in { 17 - # ... 18 - }; 19 - } 20 - ``` 21 - 22 - ... and got fucked with this? 23 - ```shell 24 - error: 25 - โ€ฆ while checking flake output 'nixosConfigurations' 26 - 27 - at /nix/store/lz2ra1180qfffmpwg41jpyg1z602qdgx-source/flake.nix:50:5: 28 - 29 - 49| in { 30 - 50| nixosConfigurations = { 31 - | ^ 32 - 51| koumakan = (import ./systems/koumakan { inherit pkgs lib inputs; }); 33 - 34 - โ€ฆ while checking the NixOS configuration 'nixosConfigurations.koumakan' 35 - 36 - at /nix/store/lz2ra1180qfffmpwg41jpyg1z602qdgx-source/flake.nix:51:7: 37 - 38 - 50| nixosConfigurations = { 39 - 51| koumakan = (import ./systems/koumakan { inherit pkgs lib inputs; }); 40 - | ^ 41 - 52| }; 42 - 43 - (stack trace truncated; use '--show-trace' to show the full trace) 44 - 45 - error: attribute 'currentSystem' missing 46 - 47 - at /nix/store/5c0k827yjq7j24qaq8l2fcnsxp7nv8v1-source/pkgs/top-level/impure.nix:17:43: 48 - 49 - 16| # (build, in GNU Autotools parlance) platform. 50 - 17| localSystem ? { system = args.system or builtins.currentSystem; } 51 - | ^ 52 - 18| 53 - ``` 54 - 55 - just don't!!!11 remove the pkgs definition. (note that this only applies to `pkgs = import nixpkgs {};`) 56 - 57 - explanation 58 - 59 - > you shouldn't ever really import nixpkgs with an empty attrset either 60 - > 61 - > that causes it to fall back on guessing your system using `builtins.currentSystem`, 62 - > which is impure and so not allowed in pure evaluation mode 63 - > 64 - > โ€”- @getchoo
···
-32
docs/src/utils/README.md
··· 1 - # Utility Functions 2 - 3 - In this section you will find various utility functions available in this flake. 4 - 5 - You are free to use them as you wish if you find them useful. 6 - 7 - Watch out! Here's a hint box! 8 - 9 - ```admonish hint title="Hint Box" 10 - Please take care when using these functions. They are opinionated by nature and are designed to be used on our systems. 11 - 12 - There is a high chance for you to be discontent with them. In which case, please feel free to copy them and adapt them 13 - to your needs. 14 - 15 - Also what in the world? Is that discrimination against hint boxes? I demand this be rectified immediately! 16 - ``` 17 - 18 - ## Getting started 19 - You first need to import this flake as an input. 20 - 21 - If you don't know how to do so, you should not be here. Please refer to various Nix documentation first, then come back. 22 - Using these utilities when you're just starting out causes unnecessary pain later on when it doesn't match your needs. 23 - 24 - For NixOS users, it is possible to make the utils module "globally" available in your NixOS configuration modules. 25 - To do so, please refer to [Tips/"Global" Options](../tips/global-options.md). 26 - 27 - We are dogfooding on these functions ourselves so they should be relatively error-free. If you encounter unexpected 28 - behavior though, do reach out and open an issue/send us a message. We won't bite. Promise. 29 - 30 - ```admonish hint title="Hint Box" 31 - Hey! Are you even listening? 32 - ```
···
-29
docs/src/utils/genSecrets.md
··· 1 - # `_utils.genSecrets` 2 - `namespace<str> -> files<list[str]> -> value<attrset> -> attrset` 3 - 4 - ```admonish danger 5 - This function is now an internal function. The signature is not likely to be changed, but there are better utilities to 6 - do the job even better. Consider using [`setupSecrets`](./setupSecrets.md) instead. 7 - ``` 8 - 9 - generate an attrset to be passed into sops.secrets. 10 - 11 - ## Example 12 - ```nix 13 - { _utils, ... }: 14 - let 15 - secrets = [ 16 - "secure_secret" 17 - # this is a directory structure, so secrets will be stored as a file in /run/secrets/service/test/secret. 18 - "service/test/secret" 19 - ]; 20 - in { 21 - sops.secrets = _utils.genSecrets "" secrets {}; # it's recommended to use a namespace, but having none is still fine. 22 - # -> sops.secrets."secure_secret" = {}; 23 - # sops.secrets."service/test/secret" = {}; 24 - sops.secrets = _utils.genSecrets "balls" ["balls_secret"] {owner = "balls";}; 25 - # -> sops.secrets."balls/balls_secret" = {owner = "balls";}; 26 - } 27 - ``` 28 - 29 - See <https://github.com/soopyc/nix-on-koumakan/blob/b7983776143c15c91df69ef34ba4264a22047ec6/systems/koumakan/services/fedivese/akkoma.nix#L8-L34> for a more extensive example
···
-15
docs/src/utils/mkArionProject.md
··· 1 - # `_utils.mkArionProject` 2 - `(lambda: freeformAttrset) -> freeformAttrset` 3 - 4 - Flattened Arion project configuration 5 - 6 - ## Example 7 - ```nix 8 - {_utils, ...}: { 9 - virtualisation.arion.projects."cop" = _utils.mkArionProject (config': { 10 - networks.main.enable_ipv6 = true; 11 - }); 12 - } 13 - ``` 14 - 15 - See <https://docs.hercules-ci.com/arion/options> for more information.
···
-23
docs/src/utils/mkNginxFile.md
··· 1 - # `_utils.mkNginxFile` 2 - `{filename<str> ? "index.html", content<str>, status<int> ? 200} -> {alias<str>, tryFiles<str>}` 3 - 4 - Helper function to generate an attrset compatible with a nginx vhost `locations` attribute that serves a single file. 5 - 6 - ## Example 7 - 8 - ### Without filename 9 - ```nix 10 - services.nginx.virtualHosts."example.com".locations."/" = _utils.mkNginxFile { 11 - content = '' 12 - <!doctype html><html><body>We've been trying to reach you about your car's Extended Warranty.</body></html> 13 - ''; 14 - }; 15 - ``` 16 - 17 - ### With filename 18 - ```nix 19 - services.nginx.virtualHosts."filename.example.com".locations."/filename" = _utils.mkNginxFile { 20 - content = "the filename doesn't really matter, but it's there to help you figure out where your things are"; 21 - filename = "random.txt"; 22 - } 23 - ```
···
-19
docs/src/utils/mkNginxJSON.md
··· 1 - # `_utils.mkNginxJSON` 2 - `filename<str> -> freeformAttrset ==> attrset` 3 - 4 - Simple wrapper around [`mkNginxFile`](./mkNginxFile.md) that takes in an attrset and formats it as JSON. 5 - 6 - Note that the function signature is different in that it doesn't take in only one attrset. 7 - This may change in the future. 8 - 9 - ## Example 10 - ```nix 11 - services.nginx.virtualHosts."balls.org" = _utils.mkVhost { 12 - locations."/" = _utils.mkNginxJSON "index.json" { 13 - arbitraryAttribute = "arbitraryValue"; 14 - doTheyKnow = false; 15 - }; 16 - }; 17 - ``` 18 - 19 - <!-- TODO: check if Content-Type is correctly returned with this -->
···
-26
docs/src/utils/mkSimpleProxy.md
··· 1 - # `_utils.mkSimpleProxy` 2 - `attrSet -> freeformAttrset` 3 - 4 - make a simple reverse proxy 5 - 6 - takes a set: 7 - ```nix 8 - { 9 - host ? "localhost", # proxying servers on the network 10 - port ? null, 11 - socketPath ? null, 12 - protocol ? "http", 13 - location ? "/", 14 - websockets ? false, 15 - extraConfig ? {} 16 - } 17 - ``` 18 - 19 - Provide either a `socketPath` to a UNIX socket or a `port` to connect to the upstream via TCP. 20 - Note that both of these options are mutually exclusive in that only one can be specified. 21 - 22 - It is recommended to override/add attributes with `extraConfig` to 23 - preserve defaults. 24 - 25 - Items in `extraConfig` are merged verbatim to the base attrset with defaults. 26 - They are overridden based on their priority order (i.e. via `lib.mk{Default,Force,Order}`).
···
-11
docs/src/utils/mkVhost.md
··· 1 - # `_utils.mkVhost` 2 - `freeformAttrset -> freeformAttrset` 3 - 4 - make a virtual host with sensible defaults. 5 - 6 - pass in an attrset to override the defaults. the attrset is essentially the same as any virtual host config. 7 - 8 - ## Example 9 - ```nix 10 - services.nginx.virtualHosts."balls.example" = _utils.mkVhost {}; 11 - ```
···
-49
docs/src/utils/setupSecrets.md
··· 1 - # `_utils.setupSecrets` 2 - `attrset<nixos config attr> -> {namespace<str> ? "", secrets[list<str>], config ? freeformAttrset} -> secretHelpers` 3 - 4 - This is a higher-level setup that wraps around `_utils.genSecrets` and provides some additional helper functions. 5 - Usage of this function should make more sense than just using `genSecrets`. 6 - 7 - ```admonish note 8 - `<ReturnValue>.generate` is not actually a function. The attrset is "already" "rendered" should it be actually 9 - resolved by not being ignored by lazy eval. This is essentially equivalent to `genSecrets`, but is now an inline module 10 - that can be put inside an input block instead of being a random attrset. 11 - ``` 12 - 13 - NOTE: does not support overriding config for only 1 path. might implement when demand arises. 14 - 15 - The definition of `secretHelpers` is defined as follows: 16 - ```nix 17 - secretHelpers = { 18 - generate = {}; # => {sops.secrets.* = <sopsConfig>} (inline module) 19 - get = path: ""; # => actual path of the secret, usually /run/secrets/the/secret 20 - 21 - placeholder = path: ""; # => placeholder string generated by sops-nix, for that secret path to be used in templates. 22 - getTemplate = file: ""; # => actual path of the template, realized at activation time, similar to the get function. 23 - mkTemplate = file: content: {}; # => {sops.templates.* = ...;} 24 - # ^ => filename of the template. can be any arbitrary string. 25 - } 26 - ``` 27 - 28 - ## Example 29 - ```nix 30 - { _utils, config, ... }: let 31 - secrets = _utils.setupSecrets config { 32 - namespace = "balls"; # for us, the namespace is just the top level element in our secrets yaml file. 33 - config = { 34 - owner = "jane"; 35 - }; 36 - secrets = [ "my/definitions/gock" "my/sizes/gock" ]; 37 - }; 38 - in { 39 - imports = [ 40 - secrets.generate 41 - (secrets.mkTemplate "my-secret.env" '' 42 - MY_GOCK_SIZE=${secrets.placeholder "my/sizes/gock"} 43 - '') 44 - ]; 45 - 46 - some.service.settings.gock.file = secrets.get "my/definitions/gock"; # resolves to the path of balls/my/definitions/gock. 47 - some.service.settings.envFile = secrets.getTemplate "my-secret.env"; 48 - } 49 - ```
···
-363
docs/theme/catppuccin-admonish.css
··· 1 - .latte :is(.admonition):is(.admonish-hint, .admonish-important, .admonish-tip) { 2 - border-color: #df8e1d; 3 - } 4 - .latte :is(.admonish-hint, .admonish-important, .admonish-tip) > :is(.admonition-title, summary.admonition-title) { 5 - background-color: rgba(223, 142, 29, 0.2); 6 - } 7 - .latte :is(.admonish-hint, .admonish-important, .admonish-tip) > :is(.admonition-title, summary.admonition-title)::before { 8 - background-color: #df8e1d; 9 - } 10 - .latte :is(.admonition):is(.admonish-abstract, .admonish-summary, .admonish-tldr) { 11 - border-color: #dd7878; 12 - } 13 - .latte :is(.admonish-abstract, .admonish-summary, .admonish-tldr) > :is(.admonition-title, summary.admonition-title) { 14 - background-color: rgba(221, 120, 120, 0.2); 15 - } 16 - .latte :is(.admonish-abstract, .admonish-summary, .admonish-tldr) > :is(.admonition-title, summary.admonition-title)::before { 17 - background-color: #dd7878; 18 - } 19 - .latte :is(.admonition):is(.admonish-example) { 20 - border-color: #8839ef; 21 - } 22 - .latte :is(.admonish-example) > :is(.admonition-title, summary.admonition-title) { 23 - background-color: rgba(136, 57, 239, 0.2); 24 - } 25 - .latte :is(.admonish-example) > :is(.admonition-title, summary.admonition-title)::before { 26 - background-color: #8839ef; 27 - } 28 - .latte :is(.admonition):is(.admonish-info, .admonish-todo) { 29 - border-color: #04a5e5; 30 - } 31 - .latte :is(.admonish-info, .admonish-todo) > :is(.admonition-title, summary.admonition-title) { 32 - background-color: rgba(4, 165, 229, 0.2); 33 - } 34 - .latte :is(.admonish-info, .admonish-todo) > :is(.admonition-title, summary.admonition-title)::before { 35 - background-color: #04a5e5; 36 - } 37 - .latte :is(.admonition):is(.admonish-check, .admonish-done, .admonish-success) { 38 - border-color: #40a02b; 39 - } 40 - .latte :is(.admonish-check, .admonish-done, .admonish-success) > :is(.admonition-title, summary.admonition-title) { 41 - background-color: rgba(64, 160, 43, 0.2); 42 - } 43 - .latte :is(.admonish-check, .admonish-done, .admonish-success) > :is(.admonition-title, summary.admonition-title)::before { 44 - background-color: #40a02b; 45 - } 46 - .latte :is(.admonition):is(.admonish-note) { 47 - border-color: #1e66f5; 48 - } 49 - .latte :is(.admonish-note) > :is(.admonition-title, summary.admonition-title) { 50 - background-color: rgba(30, 102, 245, 0.2); 51 - } 52 - .latte :is(.admonish-note) > :is(.admonition-title, summary.admonition-title)::before { 53 - background-color: #1e66f5; 54 - } 55 - .latte :is(.admonition):is(.admonish-attention, .admonish-caution, .admonish-warning) { 56 - border-color: #fe640b; 57 - } 58 - .latte :is(.admonish-attention, .admonish-caution, .admonish-warning) > :is(.admonition-title, summary.admonition-title) { 59 - background-color: rgba(254, 100, 11, 0.2); 60 - } 61 - .latte :is(.admonish-attention, .admonish-caution, .admonish-warning) > :is(.admonition-title, summary.admonition-title)::before { 62 - background-color: #fe640b; 63 - } 64 - .latte :is(.admonition):is(.admonish-faq, .admonish-help, .admonish-question) { 65 - border-color: #179299; 66 - } 67 - .latte :is(.admonish-faq, .admonish-help, .admonish-question) > :is(.admonition-title, summary.admonition-title) { 68 - background-color: rgba(23, 146, 153, 0.2); 69 - } 70 - .latte :is(.admonish-faq, .admonish-help, .admonish-question) > :is(.admonition-title, summary.admonition-title)::before { 71 - background-color: #179299; 72 - } 73 - .latte :is(.admonition):is(.admonish-bug, .admonish-danger, .admonish-error, .admonish-fail, .admonish-failure, .admonish-missing) { 74 - border-color: #d20f39; 75 - } 76 - .latte :is(.admonish-bug, .admonish-danger, .admonish-error, .admonish-fail, .admonish-failure, .admonish-missing) > :is(.admonition-title, summary.admonition-title) { 77 - background-color: rgba(210, 15, 57, 0.2); 78 - } 79 - .latte :is(.admonish-bug, .admonish-danger, .admonish-error, .admonish-fail, .admonish-failure, .admonish-missing) > :is(.admonition-title, summary.admonition-title)::before { 80 - background-color: #d20f39; 81 - } 82 - .latte :is(.admonition):is(.admonish-cite, .admonish-quote) { 83 - border-color: #ea76cb; 84 - } 85 - .latte :is(.admonish-cite, .admonish-quote) > :is(.admonition-title, summary.admonition-title) { 86 - background-color: rgba(234, 118, 203, 0.2); 87 - } 88 - .latte :is(.admonish-cite, .admonish-quote) > :is(.admonition-title, summary.admonition-title)::before { 89 - background-color: #ea76cb; 90 - } 91 - 92 - .frappe :is(.admonition):is(.admonish-hint, .admonish-important, .admonish-tip) { 93 - border-color: #e5c890; 94 - } 95 - .frappe :is(.admonish-hint, .admonish-important, .admonish-tip) > :is(.admonition-title, summary.admonition-title) { 96 - background-color: rgba(229, 200, 144, 0.2); 97 - } 98 - .frappe :is(.admonish-hint, .admonish-important, .admonish-tip) > :is(.admonition-title, summary.admonition-title)::before { 99 - background-color: #e5c890; 100 - } 101 - .frappe :is(.admonition):is(.admonish-abstract, .admonish-summary, .admonish-tldr) { 102 - border-color: #eebebe; 103 - } 104 - .frappe :is(.admonish-abstract, .admonish-summary, .admonish-tldr) > :is(.admonition-title, summary.admonition-title) { 105 - background-color: rgba(238, 190, 190, 0.2); 106 - } 107 - .frappe :is(.admonish-abstract, .admonish-summary, .admonish-tldr) > :is(.admonition-title, summary.admonition-title)::before { 108 - background-color: #eebebe; 109 - } 110 - .frappe :is(.admonition):is(.admonish-example) { 111 - border-color: #ca9ee6; 112 - } 113 - .frappe :is(.admonish-example) > :is(.admonition-title, summary.admonition-title) { 114 - background-color: rgba(202, 158, 230, 0.2); 115 - } 116 - .frappe :is(.admonish-example) > :is(.admonition-title, summary.admonition-title)::before { 117 - background-color: #ca9ee6; 118 - } 119 - .frappe :is(.admonition):is(.admonish-info, .admonish-todo) { 120 - border-color: #99d1db; 121 - } 122 - .frappe :is(.admonish-info, .admonish-todo) > :is(.admonition-title, summary.admonition-title) { 123 - background-color: rgba(153, 209, 219, 0.2); 124 - } 125 - .frappe :is(.admonish-info, .admonish-todo) > :is(.admonition-title, summary.admonition-title)::before { 126 - background-color: #99d1db; 127 - } 128 - .frappe :is(.admonition):is(.admonish-check, .admonish-done, .admonish-success) { 129 - border-color: #a6d189; 130 - } 131 - .frappe :is(.admonish-check, .admonish-done, .admonish-success) > :is(.admonition-title, summary.admonition-title) { 132 - background-color: rgba(166, 209, 137, 0.2); 133 - } 134 - .frappe :is(.admonish-check, .admonish-done, .admonish-success) > :is(.admonition-title, summary.admonition-title)::before { 135 - background-color: #a6d189; 136 - } 137 - .frappe :is(.admonition):is(.admonish-note) { 138 - border-color: #8caaee; 139 - } 140 - .frappe :is(.admonish-note) > :is(.admonition-title, summary.admonition-title) { 141 - background-color: rgba(140, 170, 238, 0.2); 142 - } 143 - .frappe :is(.admonish-note) > :is(.admonition-title, summary.admonition-title)::before { 144 - background-color: #8caaee; 145 - } 146 - .frappe :is(.admonition):is(.admonish-attention, .admonish-caution, .admonish-warning) { 147 - border-color: #ef9f76; 148 - } 149 - .frappe :is(.admonish-attention, .admonish-caution, .admonish-warning) > :is(.admonition-title, summary.admonition-title) { 150 - background-color: rgba(239, 159, 118, 0.2); 151 - } 152 - .frappe :is(.admonish-attention, .admonish-caution, .admonish-warning) > :is(.admonition-title, summary.admonition-title)::before { 153 - background-color: #ef9f76; 154 - } 155 - .frappe :is(.admonition):is(.admonish-faq, .admonish-help, .admonish-question) { 156 - border-color: #81c8be; 157 - } 158 - .frappe :is(.admonish-faq, .admonish-help, .admonish-question) > :is(.admonition-title, summary.admonition-title) { 159 - background-color: rgba(129, 200, 190, 0.2); 160 - } 161 - .frappe :is(.admonish-faq, .admonish-help, .admonish-question) > :is(.admonition-title, summary.admonition-title)::before { 162 - background-color: #81c8be; 163 - } 164 - .frappe :is(.admonition):is(.admonish-bug, .admonish-danger, .admonish-error, .admonish-fail, .admonish-failure, .admonish-missing) { 165 - border-color: #e78284; 166 - } 167 - .frappe :is(.admonish-bug, .admonish-danger, .admonish-error, .admonish-fail, .admonish-failure, .admonish-missing) > :is(.admonition-title, summary.admonition-title) { 168 - background-color: rgba(231, 130, 132, 0.2); 169 - } 170 - .frappe :is(.admonish-bug, .admonish-danger, .admonish-error, .admonish-fail, .admonish-failure, .admonish-missing) > :is(.admonition-title, summary.admonition-title)::before { 171 - background-color: #e78284; 172 - } 173 - .frappe :is(.admonition):is(.admonish-cite, .admonish-quote) { 174 - border-color: #f4b8e4; 175 - } 176 - .frappe :is(.admonish-cite, .admonish-quote) > :is(.admonition-title, summary.admonition-title) { 177 - background-color: rgba(244, 184, 228, 0.2); 178 - } 179 - .frappe :is(.admonish-cite, .admonish-quote) > :is(.admonition-title, summary.admonition-title)::before { 180 - background-color: #f4b8e4; 181 - } 182 - 183 - .macchiato :is(.admonition):is(.admonish-hint, .admonish-important, .admonish-tip) { 184 - border-color: #eed49f; 185 - } 186 - .macchiato :is(.admonish-hint, .admonish-important, .admonish-tip) > :is(.admonition-title, summary.admonition-title) { 187 - background-color: rgba(238, 212, 159, 0.2); 188 - } 189 - .macchiato :is(.admonish-hint, .admonish-important, .admonish-tip) > :is(.admonition-title, summary.admonition-title)::before { 190 - background-color: #eed49f; 191 - } 192 - .macchiato :is(.admonition):is(.admonish-abstract, .admonish-summary, .admonish-tldr) { 193 - border-color: #f0c6c6; 194 - } 195 - .macchiato :is(.admonish-abstract, .admonish-summary, .admonish-tldr) > :is(.admonition-title, summary.admonition-title) { 196 - background-color: rgba(240, 198, 198, 0.2); 197 - } 198 - .macchiato :is(.admonish-abstract, .admonish-summary, .admonish-tldr) > :is(.admonition-title, summary.admonition-title)::before { 199 - background-color: #f0c6c6; 200 - } 201 - .macchiato :is(.admonition):is(.admonish-example) { 202 - border-color: #c6a0f6; 203 - } 204 - .macchiato :is(.admonish-example) > :is(.admonition-title, summary.admonition-title) { 205 - background-color: rgba(198, 160, 246, 0.2); 206 - } 207 - .macchiato :is(.admonish-example) > :is(.admonition-title, summary.admonition-title)::before { 208 - background-color: #c6a0f6; 209 - } 210 - .macchiato :is(.admonition):is(.admonish-info, .admonish-todo) { 211 - border-color: #91d7e3; 212 - } 213 - .macchiato :is(.admonish-info, .admonish-todo) > :is(.admonition-title, summary.admonition-title) { 214 - background-color: rgba(145, 215, 227, 0.2); 215 - } 216 - .macchiato :is(.admonish-info, .admonish-todo) > :is(.admonition-title, summary.admonition-title)::before { 217 - background-color: #91d7e3; 218 - } 219 - .macchiato :is(.admonition):is(.admonish-check, .admonish-done, .admonish-success) { 220 - border-color: #a6da95; 221 - } 222 - .macchiato :is(.admonish-check, .admonish-done, .admonish-success) > :is(.admonition-title, summary.admonition-title) { 223 - background-color: rgba(166, 218, 149, 0.2); 224 - } 225 - .macchiato :is(.admonish-check, .admonish-done, .admonish-success) > :is(.admonition-title, summary.admonition-title)::before { 226 - background-color: #a6da95; 227 - } 228 - .macchiato :is(.admonition):is(.admonish-note) { 229 - border-color: #8aadf4; 230 - } 231 - .macchiato :is(.admonish-note) > :is(.admonition-title, summary.admonition-title) { 232 - background-color: rgba(138, 173, 244, 0.2); 233 - } 234 - .macchiato :is(.admonish-note) > :is(.admonition-title, summary.admonition-title)::before { 235 - background-color: #8aadf4; 236 - } 237 - .macchiato :is(.admonition):is(.admonish-attention, .admonish-caution, .admonish-warning) { 238 - border-color: #f5a97f; 239 - } 240 - .macchiato :is(.admonish-attention, .admonish-caution, .admonish-warning) > :is(.admonition-title, summary.admonition-title) { 241 - background-color: rgba(245, 169, 127, 0.2); 242 - } 243 - .macchiato :is(.admonish-attention, .admonish-caution, .admonish-warning) > :is(.admonition-title, summary.admonition-title)::before { 244 - background-color: #f5a97f; 245 - } 246 - .macchiato :is(.admonition):is(.admonish-faq, .admonish-help, .admonish-question) { 247 - border-color: #8bd5ca; 248 - } 249 - .macchiato :is(.admonish-faq, .admonish-help, .admonish-question) > :is(.admonition-title, summary.admonition-title) { 250 - background-color: rgba(139, 213, 202, 0.2); 251 - } 252 - .macchiato :is(.admonish-faq, .admonish-help, .admonish-question) > :is(.admonition-title, summary.admonition-title)::before { 253 - background-color: #8bd5ca; 254 - } 255 - .macchiato :is(.admonition):is(.admonish-bug, .admonish-danger, .admonish-error, .admonish-fail, .admonish-failure, .admonish-missing) { 256 - border-color: #ed8796; 257 - } 258 - .macchiato :is(.admonish-bug, .admonish-danger, .admonish-error, .admonish-fail, .admonish-failure, .admonish-missing) > :is(.admonition-title, summary.admonition-title) { 259 - background-color: rgba(237, 135, 150, 0.2); 260 - } 261 - .macchiato :is(.admonish-bug, .admonish-danger, .admonish-error, .admonish-fail, .admonish-failure, .admonish-missing) > :is(.admonition-title, summary.admonition-title)::before { 262 - background-color: #ed8796; 263 - } 264 - .macchiato :is(.admonition):is(.admonish-cite, .admonish-quote) { 265 - border-color: #f5bde6; 266 - } 267 - .macchiato :is(.admonish-cite, .admonish-quote) > :is(.admonition-title, summary.admonition-title) { 268 - background-color: rgba(245, 189, 230, 0.2); 269 - } 270 - .macchiato :is(.admonish-cite, .admonish-quote) > :is(.admonition-title, summary.admonition-title)::before { 271 - background-color: #f5bde6; 272 - } 273 - 274 - .mocha :is(.admonition):is(.admonish-hint, .admonish-important, .admonish-tip) { 275 - border-color: #f9e2af; 276 - } 277 - .mocha :is(.admonish-hint, .admonish-important, .admonish-tip) > :is(.admonition-title, summary.admonition-title) { 278 - background-color: rgba(249, 226, 175, 0.2); 279 - } 280 - .mocha :is(.admonish-hint, .admonish-important, .admonish-tip) > :is(.admonition-title, summary.admonition-title)::before { 281 - background-color: #f9e2af; 282 - } 283 - .mocha :is(.admonition):is(.admonish-abstract, .admonish-summary, .admonish-tldr) { 284 - border-color: #f2cdcd; 285 - } 286 - .mocha :is(.admonish-abstract, .admonish-summary, .admonish-tldr) > :is(.admonition-title, summary.admonition-title) { 287 - background-color: rgba(242, 205, 205, 0.2); 288 - } 289 - .mocha :is(.admonish-abstract, .admonish-summary, .admonish-tldr) > :is(.admonition-title, summary.admonition-title)::before { 290 - background-color: #f2cdcd; 291 - } 292 - .mocha :is(.admonition):is(.admonish-example) { 293 - border-color: #cba6f7; 294 - } 295 - .mocha :is(.admonish-example) > :is(.admonition-title, summary.admonition-title) { 296 - background-color: rgba(203, 166, 247, 0.2); 297 - } 298 - .mocha :is(.admonish-example) > :is(.admonition-title, summary.admonition-title)::before { 299 - background-color: #cba6f7; 300 - } 301 - .mocha :is(.admonition):is(.admonish-info, .admonish-todo) { 302 - border-color: #89dceb; 303 - } 304 - .mocha :is(.admonish-info, .admonish-todo) > :is(.admonition-title, summary.admonition-title) { 305 - background-color: rgba(137, 220, 235, 0.2); 306 - } 307 - .mocha :is(.admonish-info, .admonish-todo) > :is(.admonition-title, summary.admonition-title)::before { 308 - background-color: #89dceb; 309 - } 310 - .mocha :is(.admonition):is(.admonish-check, .admonish-done, .admonish-success) { 311 - border-color: #a6e3a1; 312 - } 313 - .mocha :is(.admonish-check, .admonish-done, .admonish-success) > :is(.admonition-title, summary.admonition-title) { 314 - background-color: rgba(166, 227, 161, 0.2); 315 - } 316 - .mocha :is(.admonish-check, .admonish-done, .admonish-success) > :is(.admonition-title, summary.admonition-title)::before { 317 - background-color: #a6e3a1; 318 - } 319 - .mocha :is(.admonition):is(.admonish-note) { 320 - border-color: #89b4fa; 321 - } 322 - .mocha :is(.admonish-note) > :is(.admonition-title, summary.admonition-title) { 323 - background-color: rgba(137, 180, 250, 0.2); 324 - } 325 - .mocha :is(.admonish-note) > :is(.admonition-title, summary.admonition-title)::before { 326 - background-color: #89b4fa; 327 - } 328 - .mocha :is(.admonition):is(.admonish-attention, .admonish-caution, .admonish-warning) { 329 - border-color: #fab387; 330 - } 331 - .mocha :is(.admonish-attention, .admonish-caution, .admonish-warning) > :is(.admonition-title, summary.admonition-title) { 332 - background-color: rgba(250, 179, 135, 0.2); 333 - } 334 - .mocha :is(.admonish-attention, .admonish-caution, .admonish-warning) > :is(.admonition-title, summary.admonition-title)::before { 335 - background-color: #fab387; 336 - } 337 - .mocha :is(.admonition):is(.admonish-faq, .admonish-help, .admonish-question) { 338 - border-color: #94e2d5; 339 - } 340 - .mocha :is(.admonish-faq, .admonish-help, .admonish-question) > :is(.admonition-title, summary.admonition-title) { 341 - background-color: rgba(148, 226, 213, 0.2); 342 - } 343 - .mocha :is(.admonish-faq, .admonish-help, .admonish-question) > :is(.admonition-title, summary.admonition-title)::before { 344 - background-color: #94e2d5; 345 - } 346 - .mocha :is(.admonition):is(.admonish-bug, .admonish-danger, .admonish-error, .admonish-fail, .admonish-failure, .admonish-missing) { 347 - border-color: #f38ba8; 348 - } 349 - .mocha :is(.admonish-bug, .admonish-danger, .admonish-error, .admonish-fail, .admonish-failure, .admonish-missing) > :is(.admonition-title, summary.admonition-title) { 350 - background-color: rgba(243, 139, 168, 0.2); 351 - } 352 - .mocha :is(.admonish-bug, .admonish-danger, .admonish-error, .admonish-fail, .admonish-failure, .admonish-missing) > :is(.admonition-title, summary.admonition-title)::before { 353 - background-color: #f38ba8; 354 - } 355 - .mocha :is(.admonition):is(.admonish-cite, .admonish-quote) { 356 - border-color: #f5c2e7; 357 - } 358 - .mocha :is(.admonish-cite, .admonish-quote) > :is(.admonition-title, summary.admonition-title) { 359 - background-color: rgba(245, 194, 231, 0.2); 360 - } 361 - .mocha :is(.admonish-cite, .admonish-quote) > :is(.admonition-title, summary.admonition-title)::before { 362 - background-color: #f5c2e7; 363 - }
···
-836
docs/theme/catppuccin.css
··· 1 - /* https://highlightjs.readthedocs.io/en/latest/css-classes-reference.html */ 2 - .latte.hljs { 3 - color: #4c4f69; 4 - background: #eff1f5; 5 - } 6 - .latte .hljs-keyword { 7 - color: #8839ef; 8 - } 9 - .latte .hljs-built_in { 10 - color: #d20f39; 11 - } 12 - .latte .hljs-type { 13 - color: #df8e1d; 14 - } 15 - .latte .hljs-literal { 16 - color: #fe640b; 17 - } 18 - .latte .hljs-number { 19 - color: #fe640b; 20 - } 21 - .latte .hljs-operator { 22 - color: #04a5e5; 23 - } 24 - .latte .hljs-punctuation { 25 - color: #5c5f77; 26 - } 27 - .latte .hljs-property { 28 - color: #179299; 29 - } 30 - .latte .hljs-regexp { 31 - color: #ea76cb; 32 - } 33 - .latte .hljs-string { 34 - color: #40a02b; 35 - } 36 - .latte .hljs-char.escape_ { 37 - color: #40a02b; 38 - } 39 - .latte .hljs-subst { 40 - color: #6c6f85; 41 - } 42 - .latte .hljs-symbol { 43 - color: #dd7878; 44 - } 45 - .latte .hljs-variable { 46 - color: #8839ef; 47 - } 48 - .latte .hljs-variable.language_ { 49 - color: #8839ef; 50 - } 51 - .latte .hljs-variable.constant_ { 52 - color: #fe640b; 53 - } 54 - .latte .hljs-title { 55 - color: #1e66f5; 56 - } 57 - .latte .hljs-title.class_ { 58 - color: #df8e1d; 59 - } 60 - .latte .hljs-title.function_ { 61 - color: #1e66f5; 62 - } 63 - .latte .hljs-params { 64 - color: #4c4f69; 65 - } 66 - .latte .hljs-comment { 67 - color: #7c7f93; 68 - } 69 - .latte .hljs-doctag { 70 - color: #d20f39; 71 - } 72 - .latte .hljs-meta { 73 - color: #fe640b; 74 - } 75 - .latte .hljs-section { 76 - color: #1e66f5; 77 - } 78 - .latte .hljs-tag { 79 - color: #179299; 80 - } 81 - .latte .hljs-name { 82 - color: #8839ef; 83 - } 84 - .latte .hljs-attr { 85 - color: #1e66f5; 86 - } 87 - .latte .hljs-attribute { 88 - color: #40a02b; 89 - } 90 - .latte .hljs-bullet { 91 - color: #179299; 92 - } 93 - .latte .hljs-code { 94 - color: #40a02b; 95 - } 96 - .latte .hljs-emphasis { 97 - color: #d20f39; 98 - font-style: italic; 99 - } 100 - .latte .hljs-strong { 101 - color: #d20f39; 102 - font-weight: bold; 103 - } 104 - .latte .hljs-formula { 105 - color: #179299; 106 - } 107 - .latte .hljs-link { 108 - color: #209fb5; 109 - font-style: italic; 110 - } 111 - .latte .hljs-quote { 112 - color: #40a02b; 113 - font-style: italic; 114 - } 115 - .latte .hljs-selector-tag { 116 - color: #df8e1d; 117 - } 118 - .latte .hljs-selector-id { 119 - color: #1e66f5; 120 - } 121 - .latte .hljs-selector-class { 122 - color: #179299; 123 - } 124 - .latte .hljs-selector-attr { 125 - color: #8839ef; 126 - } 127 - .latte .hljs-selector-pseudo { 128 - color: #179299; 129 - } 130 - .latte .hljs-template-tag { 131 - color: #dd7878; 132 - } 133 - .latte .hljs-template-variable { 134 - color: #dd7878; 135 - } 136 - .latte .hljs-addition { 137 - color: #40a02b; 138 - background: rgba(64, 160, 43, 0.15); 139 - } 140 - .latte .hljs-deletion { 141 - color: #d20f39; 142 - background: rgba(210, 15, 57, 0.15); 143 - } 144 - .latte :is(h1, h2, h3, h4, h5, h6) a code { 145 - color: #4c4f69; 146 - } 147 - .latte a code { 148 - color: #1e66f5; 149 - } 150 - .latte code { 151 - color: #4c4f69; 152 - background: #e6e9ef; 153 - } 154 - .latte blockquote blockquote { 155 - border-top: 0.1em solid #acb0be; 156 - border-bottom: 0.1em solid #acb0be; 157 - } 158 - .latte hr { 159 - border-color: #acb0be; 160 - border-style: solid; 161 - } 162 - .latte del { 163 - color: #7c7f93; 164 - } 165 - .latte .ace_gutter { 166 - color: #8c8fa1; 167 - background: #e6e9ef; 168 - } 169 - .latte .ace_gutter-active-line.ace_gutter-cell { 170 - color: #ea76cb; 171 - background: #e6e9ef; 172 - } 173 - .latte .tooltiptext { 174 - background: #e6e9ef; 175 - color: #4c4f69; 176 - } 177 - 178 - .frappe.hljs { 179 - color: #c6d0f5; 180 - background: #303446; 181 - } 182 - .frappe .hljs-keyword { 183 - color: #ca9ee6; 184 - } 185 - .frappe .hljs-built_in { 186 - color: #e78284; 187 - } 188 - .frappe .hljs-type { 189 - color: #e5c890; 190 - } 191 - .frappe .hljs-literal { 192 - color: #ef9f76; 193 - } 194 - .frappe .hljs-number { 195 - color: #ef9f76; 196 - } 197 - .frappe .hljs-operator { 198 - color: #99d1db; 199 - } 200 - .frappe .hljs-punctuation { 201 - color: #b5bfe2; 202 - } 203 - .frappe .hljs-property { 204 - color: #81c8be; 205 - } 206 - .frappe .hljs-regexp { 207 - color: #f4b8e4; 208 - } 209 - .frappe .hljs-string { 210 - color: #a6d189; 211 - } 212 - .frappe .hljs-char.escape_ { 213 - color: #a6d189; 214 - } 215 - .frappe .hljs-subst { 216 - color: #a5adce; 217 - } 218 - .frappe .hljs-symbol { 219 - color: #eebebe; 220 - } 221 - .frappe .hljs-variable { 222 - color: #ca9ee6; 223 - } 224 - .frappe .hljs-variable.language_ { 225 - color: #ca9ee6; 226 - } 227 - .frappe .hljs-variable.constant_ { 228 - color: #ef9f76; 229 - } 230 - .frappe .hljs-title { 231 - color: #8caaee; 232 - } 233 - .frappe .hljs-title.class_ { 234 - color: #e5c890; 235 - } 236 - .frappe .hljs-title.function_ { 237 - color: #8caaee; 238 - } 239 - .frappe .hljs-params { 240 - color: #c6d0f5; 241 - } 242 - .frappe .hljs-comment { 243 - color: #949cbb; 244 - } 245 - .frappe .hljs-doctag { 246 - color: #e78284; 247 - } 248 - .frappe .hljs-meta { 249 - color: #ef9f76; 250 - } 251 - .frappe .hljs-section { 252 - color: #8caaee; 253 - } 254 - .frappe .hljs-tag { 255 - color: #81c8be; 256 - } 257 - .frappe .hljs-name { 258 - color: #ca9ee6; 259 - } 260 - .frappe .hljs-attr { 261 - color: #8caaee; 262 - } 263 - .frappe .hljs-attribute { 264 - color: #a6d189; 265 - } 266 - .frappe .hljs-bullet { 267 - color: #81c8be; 268 - } 269 - .frappe .hljs-code { 270 - color: #a6d189; 271 - } 272 - .frappe .hljs-emphasis { 273 - color: #e78284; 274 - font-style: italic; 275 - } 276 - .frappe .hljs-strong { 277 - color: #e78284; 278 - font-weight: bold; 279 - } 280 - .frappe .hljs-formula { 281 - color: #81c8be; 282 - } 283 - .frappe .hljs-link { 284 - color: #85c1dc; 285 - font-style: italic; 286 - } 287 - .frappe .hljs-quote { 288 - color: #a6d189; 289 - font-style: italic; 290 - } 291 - .frappe .hljs-selector-tag { 292 - color: #e5c890; 293 - } 294 - .frappe .hljs-selector-id { 295 - color: #8caaee; 296 - } 297 - .frappe .hljs-selector-class { 298 - color: #81c8be; 299 - } 300 - .frappe .hljs-selector-attr { 301 - color: #ca9ee6; 302 - } 303 - .frappe .hljs-selector-pseudo { 304 - color: #81c8be; 305 - } 306 - .frappe .hljs-template-tag { 307 - color: #eebebe; 308 - } 309 - .frappe .hljs-template-variable { 310 - color: #eebebe; 311 - } 312 - .frappe .hljs-addition { 313 - color: #a6d189; 314 - background: rgba(166, 209, 137, 0.15); 315 - } 316 - .frappe .hljs-deletion { 317 - color: #e78284; 318 - background: rgba(231, 130, 132, 0.15); 319 - } 320 - .frappe :is(h1, h2, h3, h4, h5, h6) a code { 321 - color: #c6d0f5; 322 - } 323 - .frappe a code { 324 - color: #8caaee; 325 - } 326 - .frappe code { 327 - color: #c6d0f5; 328 - background: #292c3c; 329 - } 330 - .frappe blockquote blockquote { 331 - border-top: 0.1em solid #626880; 332 - border-bottom: 0.1em solid #626880; 333 - } 334 - .frappe hr { 335 - border-color: #626880; 336 - border-style: solid; 337 - } 338 - .frappe del { 339 - color: #949cbb; 340 - } 341 - .frappe .ace_gutter { 342 - color: #838ba7; 343 - background: #292c3c; 344 - } 345 - .frappe .ace_gutter-active-line.ace_gutter-cell { 346 - color: #f4b8e4; 347 - background: #292c3c; 348 - } 349 - .frappe .tooltiptext { 350 - background: #292c3c; 351 - color: #c6d0f5; 352 - } 353 - 354 - .macchiato.hljs { 355 - color: #cad3f5; 356 - background: #24273a; 357 - } 358 - .macchiato .hljs-keyword { 359 - color: #c6a0f6; 360 - } 361 - .macchiato .hljs-built_in { 362 - color: #ed8796; 363 - } 364 - .macchiato .hljs-type { 365 - color: #eed49f; 366 - } 367 - .macchiato .hljs-literal { 368 - color: #f5a97f; 369 - } 370 - .macchiato .hljs-number { 371 - color: #f5a97f; 372 - } 373 - .macchiato .hljs-operator { 374 - color: #91d7e3; 375 - } 376 - .macchiato .hljs-punctuation { 377 - color: #b8c0e0; 378 - } 379 - .macchiato .hljs-property { 380 - color: #8bd5ca; 381 - } 382 - .macchiato .hljs-regexp { 383 - color: #f5bde6; 384 - } 385 - .macchiato .hljs-string { 386 - color: #a6da95; 387 - } 388 - .macchiato .hljs-char.escape_ { 389 - color: #a6da95; 390 - } 391 - .macchiato .hljs-subst { 392 - color: #a5adcb; 393 - } 394 - .macchiato .hljs-symbol { 395 - color: #f0c6c6; 396 - } 397 - .macchiato .hljs-variable { 398 - color: #c6a0f6; 399 - } 400 - .macchiato .hljs-variable.language_ { 401 - color: #c6a0f6; 402 - } 403 - .macchiato .hljs-variable.constant_ { 404 - color: #f5a97f; 405 - } 406 - .macchiato .hljs-title { 407 - color: #8aadf4; 408 - } 409 - .macchiato .hljs-title.class_ { 410 - color: #eed49f; 411 - } 412 - .macchiato .hljs-title.function_ { 413 - color: #8aadf4; 414 - } 415 - .macchiato .hljs-params { 416 - color: #cad3f5; 417 - } 418 - .macchiato .hljs-comment { 419 - color: #939ab7; 420 - } 421 - .macchiato .hljs-doctag { 422 - color: #ed8796; 423 - } 424 - .macchiato .hljs-meta { 425 - color: #f5a97f; 426 - } 427 - .macchiato .hljs-section { 428 - color: #8aadf4; 429 - } 430 - .macchiato .hljs-tag { 431 - color: #8bd5ca; 432 - } 433 - .macchiato .hljs-name { 434 - color: #c6a0f6; 435 - } 436 - .macchiato .hljs-attr { 437 - color: #8aadf4; 438 - } 439 - .macchiato .hljs-attribute { 440 - color: #a6da95; 441 - } 442 - .macchiato .hljs-bullet { 443 - color: #8bd5ca; 444 - } 445 - .macchiato .hljs-code { 446 - color: #a6da95; 447 - } 448 - .macchiato .hljs-emphasis { 449 - color: #ed8796; 450 - font-style: italic; 451 - } 452 - .macchiato .hljs-strong { 453 - color: #ed8796; 454 - font-weight: bold; 455 - } 456 - .macchiato .hljs-formula { 457 - color: #8bd5ca; 458 - } 459 - .macchiato .hljs-link { 460 - color: #7dc4e4; 461 - font-style: italic; 462 - } 463 - .macchiato .hljs-quote { 464 - color: #a6da95; 465 - font-style: italic; 466 - } 467 - .macchiato .hljs-selector-tag { 468 - color: #eed49f; 469 - } 470 - .macchiato .hljs-selector-id { 471 - color: #8aadf4; 472 - } 473 - .macchiato .hljs-selector-class { 474 - color: #8bd5ca; 475 - } 476 - .macchiato .hljs-selector-attr { 477 - color: #c6a0f6; 478 - } 479 - .macchiato .hljs-selector-pseudo { 480 - color: #8bd5ca; 481 - } 482 - .macchiato .hljs-template-tag { 483 - color: #f0c6c6; 484 - } 485 - .macchiato .hljs-template-variable { 486 - color: #f0c6c6; 487 - } 488 - .macchiato .hljs-addition { 489 - color: #a6da95; 490 - background: rgba(166, 218, 149, 0.15); 491 - } 492 - .macchiato .hljs-deletion { 493 - color: #ed8796; 494 - background: rgba(237, 135, 150, 0.15); 495 - } 496 - .macchiato :is(h1, h2, h3, h4, h5, h6) a code { 497 - color: #cad3f5; 498 - } 499 - .macchiato a code { 500 - color: #8aadf4; 501 - } 502 - .macchiato code { 503 - color: #cad3f5; 504 - background: #1e2030; 505 - } 506 - .macchiato blockquote blockquote { 507 - border-top: 0.1em solid #5b6078; 508 - border-bottom: 0.1em solid #5b6078; 509 - } 510 - .macchiato hr { 511 - border-color: #5b6078; 512 - border-style: solid; 513 - } 514 - .macchiato del { 515 - color: #939ab7; 516 - } 517 - .macchiato .ace_gutter { 518 - color: #8087a2; 519 - background: #1e2030; 520 - } 521 - .macchiato .ace_gutter-active-line.ace_gutter-cell { 522 - color: #f5bde6; 523 - background: #1e2030; 524 - } 525 - .macchiato .tooltiptext { 526 - background: #1e2030; 527 - color: #cad3f5; 528 - } 529 - 530 - .mocha.hljs { 531 - color: #cdd6f4; 532 - background: #1e1e2e; 533 - } 534 - .mocha .hljs-keyword { 535 - color: #cba6f7; 536 - } 537 - .mocha .hljs-built_in { 538 - color: #f38ba8; 539 - } 540 - .mocha .hljs-type { 541 - color: #f9e2af; 542 - } 543 - .mocha .hljs-literal { 544 - color: #fab387; 545 - } 546 - .mocha .hljs-number { 547 - color: #fab387; 548 - } 549 - .mocha .hljs-operator { 550 - color: #89dceb; 551 - } 552 - .mocha .hljs-punctuation { 553 - color: #bac2de; 554 - } 555 - .mocha .hljs-property { 556 - color: #94e2d5; 557 - } 558 - .mocha .hljs-regexp { 559 - color: #f5c2e7; 560 - } 561 - .mocha .hljs-string { 562 - color: #a6e3a1; 563 - } 564 - .mocha .hljs-char.escape_ { 565 - color: #a6e3a1; 566 - } 567 - .mocha .hljs-subst { 568 - color: #a6adc8; 569 - } 570 - .mocha .hljs-symbol { 571 - color: #f2cdcd; 572 - } 573 - .mocha .hljs-variable { 574 - color: #cba6f7; 575 - } 576 - .mocha .hljs-variable.language_ { 577 - color: #cba6f7; 578 - } 579 - .mocha .hljs-variable.constant_ { 580 - color: #fab387; 581 - } 582 - .mocha .hljs-title { 583 - color: #89b4fa; 584 - } 585 - .mocha .hljs-title.class_ { 586 - color: #f9e2af; 587 - } 588 - .mocha .hljs-title.function_ { 589 - color: #89b4fa; 590 - } 591 - .mocha .hljs-params { 592 - color: #cdd6f4; 593 - } 594 - .mocha .hljs-comment { 595 - color: #9399b2; 596 - } 597 - .mocha .hljs-doctag { 598 - color: #f38ba8; 599 - } 600 - .mocha .hljs-meta { 601 - color: #fab387; 602 - } 603 - .mocha .hljs-section { 604 - color: #89b4fa; 605 - } 606 - .mocha .hljs-tag { 607 - color: #94e2d5; 608 - } 609 - .mocha .hljs-name { 610 - color: #cba6f7; 611 - } 612 - .mocha .hljs-attr { 613 - color: #89b4fa; 614 - } 615 - .mocha .hljs-attribute { 616 - color: #a6e3a1; 617 - } 618 - .mocha .hljs-bullet { 619 - color: #94e2d5; 620 - } 621 - .mocha .hljs-code { 622 - color: #a6e3a1; 623 - } 624 - .mocha .hljs-emphasis { 625 - color: #f38ba8; 626 - font-style: italic; 627 - } 628 - .mocha .hljs-strong { 629 - color: #f38ba8; 630 - font-weight: bold; 631 - } 632 - .mocha .hljs-formula { 633 - color: #94e2d5; 634 - } 635 - .mocha .hljs-link { 636 - color: #74c7ec; 637 - font-style: italic; 638 - } 639 - .mocha .hljs-quote { 640 - color: #a6e3a1; 641 - font-style: italic; 642 - } 643 - .mocha .hljs-selector-tag { 644 - color: #f9e2af; 645 - } 646 - .mocha .hljs-selector-id { 647 - color: #89b4fa; 648 - } 649 - .mocha .hljs-selector-class { 650 - color: #94e2d5; 651 - } 652 - .mocha .hljs-selector-attr { 653 - color: #cba6f7; 654 - } 655 - .mocha .hljs-selector-pseudo { 656 - color: #94e2d5; 657 - } 658 - .mocha .hljs-template-tag { 659 - color: #f2cdcd; 660 - } 661 - .mocha .hljs-template-variable { 662 - color: #f2cdcd; 663 - } 664 - .mocha .hljs-addition { 665 - color: #a6e3a1; 666 - background: rgba(166, 227, 161, 0.15); 667 - } 668 - .mocha .hljs-deletion { 669 - color: #f38ba8; 670 - background: rgba(243, 139, 168, 0.15); 671 - } 672 - .mocha :is(h1, h2, h3, h4, h5, h6) a code { 673 - color: #cdd6f4; 674 - } 675 - .mocha a code { 676 - color: #89b4fa; 677 - } 678 - .mocha code { 679 - color: #cdd6f4; 680 - background: #181825; 681 - } 682 - .mocha blockquote blockquote { 683 - border-top: 0.1em solid #585b70; 684 - border-bottom: 0.1em solid #585b70; 685 - } 686 - .mocha hr { 687 - border-color: #585b70; 688 - border-style: solid; 689 - } 690 - .mocha del { 691 - color: #9399b2; 692 - } 693 - .mocha .ace_gutter { 694 - color: #7f849c; 695 - background: #181825; 696 - } 697 - .mocha .ace_gutter-active-line.ace_gutter-cell { 698 - color: #f5c2e7; 699 - background: #181825; 700 - } 701 - .mocha .tooltiptext { 702 - background: #181825; 703 - color: #cdd6f4; 704 - } 705 - 706 - .latte { 707 - --bg: #eff1f5; 708 - --fg: #4c4f69; 709 - --sidebar-bg: #e6e9ef; 710 - --sidebar-fg: #4c4f69; 711 - --sidebar-non-existant: #9ca0b0; 712 - --sidebar-active: #1e66f5; 713 - --sidebar-spacer: #9ca0b0; 714 - --scrollbar: #9ca0b0; 715 - --icons: #9ca0b0; 716 - --icons-hover: #7c7f93; 717 - --links: #1e66f5; 718 - --inline-code-color: #4c4f69; 719 - --theme-popup-bg: #e6e9ef; 720 - --theme-popup-border: #9ca0b0; 721 - --theme-hover: #ccd0da; 722 - --quote-bg: #e6e9ef; 723 - --quote-border: #dce0e8; 724 - --table-border-color: #ccd0da; 725 - --table-header-bg: #e6e9ef; 726 - --table-alternate-bg: #e6e9ef; 727 - --searchbar-border-color: #ccd0da; 728 - --searchbar-bg: #e6e9ef; 729 - --searchbar-fg: #4c4f69; 730 - --searchbar-shadow-color: #dce0e8; 731 - --searchresults-header-fg: #4c4f69; 732 - --searchresults-border-color: #ccd0da; 733 - --searchresults-li-bg: #eff1f5; 734 - --search-mark-bg: #fe640b; 735 - --warning-border: #fe640b; 736 - --color-scheme: light; 737 - } 738 - 739 - .frappe { 740 - --bg: #303446; 741 - --fg: #c6d0f5; 742 - --sidebar-bg: #292c3c; 743 - --sidebar-fg: #c6d0f5; 744 - --sidebar-non-existant: #737994; 745 - --sidebar-active: #8caaee; 746 - --sidebar-spacer: #737994; 747 - --scrollbar: #737994; 748 - --icons: #737994; 749 - --icons-hover: #949cbb; 750 - --links: #8caaee; 751 - --inline-code-color: #c6d0f5; 752 - --theme-popup-bg: #292c3c; 753 - --theme-popup-border: #737994; 754 - --theme-hover: #414559; 755 - --quote-bg: #292c3c; 756 - --quote-border: #232634; 757 - --table-border-color: #414559; 758 - --table-header-bg: #292c3c; 759 - --table-alternate-bg: #292c3c; 760 - --searchbar-border-color: #414559; 761 - --searchbar-bg: #292c3c; 762 - --searchbar-fg: #c6d0f5; 763 - --searchbar-shadow-color: #232634; 764 - --searchresults-header-fg: #c6d0f5; 765 - --searchresults-border-color: #414559; 766 - --searchresults-li-bg: #303446; 767 - --search-mark-bg: #ef9f76; 768 - --warning-border: #ef9f76; 769 - --color-scheme: dark; 770 - } 771 - 772 - .macchiato { 773 - --bg: #24273a; 774 - --fg: #cad3f5; 775 - --sidebar-bg: #1e2030; 776 - --sidebar-fg: #cad3f5; 777 - --sidebar-non-existant: #6e738d; 778 - --sidebar-active: #8aadf4; 779 - --sidebar-spacer: #6e738d; 780 - --scrollbar: #6e738d; 781 - --icons: #6e738d; 782 - --icons-hover: #939ab7; 783 - --links: #8aadf4; 784 - --inline-code-color: #cad3f5; 785 - --theme-popup-bg: #1e2030; 786 - --theme-popup-border: #6e738d; 787 - --theme-hover: #363a4f; 788 - --quote-bg: #1e2030; 789 - --quote-border: #181926; 790 - --table-border-color: #363a4f; 791 - --table-header-bg: #1e2030; 792 - --table-alternate-bg: #1e2030; 793 - --searchbar-border-color: #363a4f; 794 - --searchbar-bg: #1e2030; 795 - --searchbar-fg: #cad3f5; 796 - --searchbar-shadow-color: #181926; 797 - --searchresults-header-fg: #cad3f5; 798 - --searchresults-border-color: #363a4f; 799 - --searchresults-li-bg: #24273a; 800 - --search-mark-bg: #f5a97f; 801 - --warning-border: #f5a97f; 802 - --color-scheme: dark; 803 - } 804 - 805 - .mocha { 806 - --bg: #1e1e2e; 807 - --fg: #cdd6f4; 808 - --sidebar-bg: #181825; 809 - --sidebar-fg: #cdd6f4; 810 - --sidebar-non-existant: #6c7086; 811 - --sidebar-active: #89b4fa; 812 - --sidebar-spacer: #6c7086; 813 - --scrollbar: #6c7086; 814 - --icons: #6c7086; 815 - --icons-hover: #9399b2; 816 - --links: #89b4fa; 817 - --inline-code-color: #cdd6f4; 818 - --theme-popup-bg: #181825; 819 - --theme-popup-border: #6c7086; 820 - --theme-hover: #313244; 821 - --quote-bg: #181825; 822 - --quote-border: #11111b; 823 - --table-border-color: #313244; 824 - --table-header-bg: #181825; 825 - --table-alternate-bg: #181825; 826 - --searchbar-border-color: #313244; 827 - --searchbar-bg: #181825; 828 - --searchbar-fg: #cdd6f4; 829 - --searchbar-shadow-color: #11111b; 830 - --searchresults-header-fg: #cdd6f4; 831 - --searchresults-border-color: #313244; 832 - --searchresults-li-bg: #1e1e2e; 833 - --search-mark-bg: #fab387; 834 - --warning-border: #fab387; 835 - --color-scheme: dark; 836 - }
···
docs/theme/favicon.png

This is a binary file and will not be displayed.

-1
docs/theme/highlight.js
··· 1 - ../vendor/highlight.min.js
···
-329
docs/theme/index.hbs
··· 1 - <!DOCTYPE HTML> 2 - <html lang="{{ language }}" class="{{ default_theme }} sidebar-visible" dir="{{ text_direction }}"> 3 - <head> 4 - <!-- Book generated using mdBook --> 5 - <meta charset="UTF-8"> 6 - <title>{{ title }}</title> 7 - {{#if is_print }} 8 - <meta name="robots" content="noindex"> 9 - {{/if}} 10 - {{#if base_url}} 11 - <base href="{{ base_url }}"> 12 - {{/if}} 13 - 14 - 15 - <!-- Custom HTML head --> 16 - {{> head}} 17 - 18 - <meta name="description" content="{{ description }}"> 19 - <meta name="viewport" content="width=device-width, initial-scale=1"> 20 - <meta name="theme-color" content="#ffffff"> 21 - 22 - {{#if favicon_svg}} 23 - <link rel="icon" href="{{ path_to_root }}favicon.svg"> 24 - {{/if}} 25 - {{#if favicon_png}} 26 - <link rel="shortcut icon" href="{{ path_to_root }}favicon.png"> 27 - {{/if}} 28 - <link rel="stylesheet" href="{{ path_to_root }}css/variables.css"> 29 - <link rel="stylesheet" href="{{ path_to_root }}css/general.css"> 30 - <link rel="stylesheet" href="{{ path_to_root }}css/chrome.css"> 31 - {{#if print_enable}} 32 - <link rel="stylesheet" href="{{ path_to_root }}css/print.css" media="print"> 33 - {{/if}} 34 - 35 - <!-- Fonts --> 36 - <link rel="stylesheet" href="{{ path_to_root }}FontAwesome/css/font-awesome.css"> 37 - {{#if copy_fonts}} 38 - <link rel="stylesheet" href="{{ path_to_root }}fonts/fonts.css"> 39 - {{/if}} 40 - 41 - <!-- Highlight.js Stylesheets --> 42 - <link rel="stylesheet" href="{{ path_to_root }}highlight.css"> 43 - <link rel="stylesheet" href="{{ path_to_root }}tomorrow-night.css"> 44 - <link rel="stylesheet" href="{{ path_to_root }}ayu-highlight.css"> 45 - 46 - <!-- Custom theme stylesheets --> 47 - {{#each additional_css}} 48 - <link rel="stylesheet" href="{{ ../path_to_root }}{{ this }}"> 49 - {{/each}} 50 - 51 - {{#if mathjax_support}} 52 - <!-- MathJax --> 53 - <script async src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> 54 - {{/if}} 55 - 56 - <!-- Provide site root to javascript --> 57 - <script> 58 - var path_to_root = "{{ path_to_root }}"; 59 - var default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "{{ preferred_dark_theme }}" : "{{ default_theme }}"; 60 - </script> 61 - <!-- Start loading toc.js asap --> 62 - <script src="{{ path_to_root }}toc.js"></script> 63 - </head> 64 - <body> 65 - <div id="body-container"> 66 - <!-- Work around some values being stored in localStorage wrapped in quotes --> 67 - <script> 68 - try { 69 - var theme = localStorage.getItem('mdbook-theme'); 70 - var sidebar = localStorage.getItem('mdbook-sidebar'); 71 - 72 - if (theme.startsWith('"') && theme.endsWith('"')) { 73 - localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1)); 74 - } 75 - 76 - if (sidebar.startsWith('"') && sidebar.endsWith('"')) { 77 - localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1)); 78 - } 79 - } catch (e) { } 80 - </script> 81 - 82 - <!-- Set the theme before any content is loaded, prevents flash --> 83 - <script> 84 - var theme; 85 - try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } 86 - if (theme === null || theme === undefined) { theme = default_theme; } 87 - const html = document.documentElement; 88 - html.classList.remove('{{ default_theme }}') 89 - html.classList.add(theme); 90 - html.classList.add("js"); 91 - </script> 92 - 93 - <input type="checkbox" id="sidebar-toggle-anchor" class="hidden"> 94 - 95 - <!-- Hide / unhide sidebar before it is displayed --> 96 - <script> 97 - var sidebar = null; 98 - var sidebar_toggle = document.getElementById("sidebar-toggle-anchor"); 99 - if (document.body.clientWidth >= 1080) { 100 - try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { } 101 - sidebar = sidebar || 'visible'; 102 - } else { 103 - sidebar = 'hidden'; 104 - } 105 - sidebar_toggle.checked = sidebar === 'visible'; 106 - html.classList.remove('sidebar-visible'); 107 - html.classList.add("sidebar-" + sidebar); 108 - </script> 109 - 110 - <nav id="sidebar" class="sidebar" aria-label="Table of contents"> 111 - <!-- populated by js --> 112 - <mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox> 113 - <noscript> 114 - <iframe class="sidebar-iframe-outer" src="{{ path_to_root }}toc.html"></iframe> 115 - </noscript> 116 - <div id="sidebar-resize-handle" class="sidebar-resize-handle"> 117 - <div class="sidebar-resize-indicator"></div> 118 - </div> 119 - </nav> 120 - 121 - <div id="page-wrapper" class="page-wrapper"> 122 - 123 - <div class="page"> 124 - {{> header}} 125 - <div id="menu-bar-hover-placeholder"></div> 126 - <div id="menu-bar" class="menu-bar sticky"> 127 - <div class="left-buttons"> 128 - <label id="sidebar-toggle" class="icon-button" for="sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar"> 129 - <i class="fa fa-bars"></i> 130 - </label> 131 - <button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list"> 132 - <i class="fa fa-paint-brush"></i> 133 - </button> 134 - <ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu"> 135 - <li role="none"><button role="menuitem" class="theme" id="latte">Catppuccin Latte</button></li> 136 - <li role="none"><button role="menuitem" class="theme" id="frappe">Catppuccin Frappรฉ</button></li> 137 - <li role="none"><button role="menuitem" class="theme" id="macchiato">Catppuccin Macchiato</button></li> 138 - <li role="none"><button role="menuitem" class="theme" id="mocha">Catppuccin Mocha</button></li> 139 - <li role="none"><button role="menuitem" class="theme" id="light">Light</button></li> 140 - <li role="none"><button role="menuitem" class="theme" id="rust">Rust</button></li> 141 - <li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li> 142 - <li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li> 143 - <li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button></li> 144 - </ul> 145 - {{#if search_enabled}} 146 - <button id="search-toggle" class="icon-button" type="button" title="Search. (Shortkey: s)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="S" aria-controls="searchbar"> 147 - <i class="fa fa-search"></i> 148 - </button> 149 - {{/if}} 150 - </div> 151 - 152 - <h1 class="menu-title">{{ book_title }}</h1> 153 - 154 - <div class="right-buttons"> 155 - {{#if print_enable}} 156 - <a href="{{ path_to_root }}print.html" title="Print this book" aria-label="Print this book"> 157 - <i id="print-button" class="fa fa-print"></i> 158 - </a> 159 - {{/if}} 160 - {{#if git_repository_url}} 161 - <a href="{{git_repository_url}}" title="Git repository" aria-label="Git repository"> 162 - <i id="git-repository-button" class="fa {{git_repository_icon}}"></i> 163 - </a> 164 - {{/if}} 165 - {{#if git_repository_edit_url}} 166 - <a href="{{git_repository_edit_url}}" title="Suggest an edit" aria-label="Suggest an edit"> 167 - <i id="git-edit-button" class="fa fa-edit"></i> 168 - </a> 169 - {{/if}} 170 - 171 - </div> 172 - </div> 173 - 174 - {{#if search_enabled}} 175 - <div id="search-wrapper" class="hidden"> 176 - <form id="searchbar-outer" class="searchbar-outer"> 177 - <input type="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header"> 178 - </form> 179 - <div id="searchresults-outer" class="searchresults-outer hidden"> 180 - <div id="searchresults-header" class="searchresults-header"></div> 181 - <ul id="searchresults"> 182 - </ul> 183 - </div> 184 - </div> 185 - {{/if}} 186 - 187 - <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM --> 188 - <script> 189 - document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible'); 190 - document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible'); 191 - Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) { 192 - link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1); 193 - }); 194 - </script> 195 - 196 - <div id="content" class="content"> 197 - <main> 198 - {{{ content }}} 199 - </main> 200 - 201 - <nav class="nav-wrapper" aria-label="Page navigation"> 202 - <!-- Mobile navigation buttons --> 203 - {{#previous}} 204 - <a rel="prev" href="{{ path_to_root }}{{link}}" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> 205 - <i class="fa fa-angle-left"></i> 206 - </a> 207 - {{/previous}} 208 - 209 - {{#next}} 210 - <a rel="next prefetch" href="{{ path_to_root }}{{link}}" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> 211 - <i class="fa fa-angle-right"></i> 212 - </a> 213 - {{/next}} 214 - 215 - <div style="clear: both"></div> 216 - </nav> 217 - </div> 218 - </div> 219 - 220 - <nav class="nav-wide-wrapper" aria-label="Page navigation"> 221 - {{#previous}} 222 - <a rel="prev" href="{{ path_to_root }}{{link}}" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left"> 223 - <i class="fa fa-angle-left"></i> 224 - </a> 225 - {{/previous}} 226 - 227 - {{#next}} 228 - <a rel="next prefetch" href="{{ path_to_root }}{{link}}" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right"> 229 - <i class="fa fa-angle-right"></i> 230 - </a> 231 - {{/next}} 232 - </nav> 233 - 234 - </div> 235 - 236 - {{#if live_reload_endpoint}} 237 - <!-- Livereload script (if served using the cli tool) --> 238 - <script> 239 - const wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:'; 240 - const wsAddress = wsProtocol + "//" + location.host + "/" + "{{{live_reload_endpoint}}}"; 241 - const socket = new WebSocket(wsAddress); 242 - socket.onmessage = function (event) { 243 - if (event.data === "reload") { 244 - socket.close(); 245 - location.reload(); 246 - } 247 - }; 248 - 249 - window.onbeforeunload = function() { 250 - socket.close(); 251 - } 252 - </script> 253 - {{/if}} 254 - 255 - {{#if google_analytics}} 256 - <!-- Google Analytics Tag --> 257 - <script> 258 - var localAddrs = ["localhost", "127.0.0.1", ""]; 259 - 260 - // make sure we don't activate google analytics if the developer is 261 - // inspecting the book locally... 262 - if (localAddrs.indexOf(document.location.hostname) === -1) { 263 - (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ 264 - (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), 265 - m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) 266 - })(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); 267 - 268 - ga('create', '{{google_analytics}}', 'auto'); 269 - ga('send', 'pageview'); 270 - } 271 - </script> 272 - {{/if}} 273 - 274 - {{#if playground_line_numbers}} 275 - <script> 276 - window.playground_line_numbers = true; 277 - </script> 278 - {{/if}} 279 - 280 - {{#if playground_copyable}} 281 - <script> 282 - window.playground_copyable = true; 283 - </script> 284 - {{/if}} 285 - 286 - {{#if playground_js}} 287 - <script src="{{ path_to_root }}ace.js"></script> 288 - <script src="{{ path_to_root }}editor.js"></script> 289 - <script src="{{ path_to_root }}mode-rust.js"></script> 290 - <script src="{{ path_to_root }}theme-dawn.js"></script> 291 - <script src="{{ path_to_root }}theme-tomorrow_night.js"></script> 292 - {{/if}} 293 - 294 - {{#if search_js}} 295 - <script src="{{ path_to_root }}elasticlunr.min.js"></script> 296 - <script src="{{ path_to_root }}mark.min.js"></script> 297 - <script src="{{ path_to_root }}searcher.js"></script> 298 - {{/if}} 299 - 300 - <script src="{{ path_to_root }}clipboard.min.js"></script> 301 - <script src="{{ path_to_root }}highlight.js"></script> 302 - <script src="{{ path_to_root }}book.js"></script> 303 - 304 - <!-- Custom JS scripts --> 305 - {{#each additional_js}} 306 - <script src="{{ ../path_to_root }}{{this}}"></script> 307 - {{/each}} 308 - 309 - {{#if is_print}} 310 - {{#if mathjax_support}} 311 - <script> 312 - window.addEventListener('load', function() { 313 - MathJax.Hub.Register.StartupHook('End', function() { 314 - window.setTimeout(window.print, 100); 315 - }); 316 - }); 317 - </script> 318 - {{else}} 319 - <script> 320 - window.addEventListener('load', function() { 321 - window.setTimeout(window.print, 100); 322 - }); 323 - </script> 324 - {{/if}} 325 - {{/if}} 326 - 327 - </div> 328 - </body> 329 - </html>
···
-71
docs/theme/pagetoc.css
··· 1 - @media only screen and (max-width:1439px) { 2 - .sidetoc { 3 - display: none; 4 - } 5 - } 6 - 7 - @media only screen and (min-width:1440px) { 8 - main { 9 - position: relative; 10 - } 11 - 12 - .sidetoc { 13 - margin-left: auto; 14 - margin-right: auto; 15 - left: calc(100% + (var(--content-max-width))/4 - 140px); 16 - position: absolute; 17 - } 18 - 19 - .pagetoc { 20 - position: fixed; 21 - width: 200px; 22 - height: calc(100vh - var(--menu-bar-height) - 0.67em * 4); 23 - overflow: auto; 24 - } 25 - 26 - .pagetoc a { 27 - border-left: 1px solid var(--sidebar-bg); 28 - color: var(--fg) !important; 29 - display: block; 30 - padding-bottom: 5px; 31 - padding-top: 5px; 32 - padding-left: 10px; 33 - text-align: left; 34 - text-decoration: none; 35 - } 36 - 37 - .pagetoc a:hover, 38 - .pagetoc a.active { 39 - background: var(--sidebar-bg); 40 - color: var(--sidebar-fg) !important; 41 - } 42 - 43 - .pagetoc .active { 44 - background: var(--sidebar-bg); 45 - color: var(--sidebar-fg); 46 - } 47 - 48 - .pagetoc .pagetoc-H2 { 49 - padding-left: 20px; 50 - } 51 - 52 - .pagetoc .pagetoc-H3 { 53 - padding-left: 40px; 54 - } 55 - 56 - .pagetoc .pagetoc-H4 { 57 - padding-left: 60px; 58 - } 59 - 60 - .pagetoc .pagetoc-H5 { 61 - display: none; 62 - } 63 - 64 - .pagetoc .pagetoc-H6 { 65 - display: none; 66 - } 67 - } 68 - 69 - a[class^='pagetoc-H']:only-child { 70 - display: none; 71 - }
···
-73
docs/theme/pagetoc.js
··· 1 - let scrollTimeout; 2 - 3 - const listenActive = () => { 4 - const elems = document.querySelector(".pagetoc").children; 5 - [...elems].forEach((el) => { 6 - el.addEventListener("click", (event) => { 7 - clearTimeout(scrollTimeout); 8 - [...elems].forEach((el) => el.classList.remove("active")); 9 - el.classList.add("active"); 10 - // Prevent scroll updates for a short period 11 - scrollTimeout = setTimeout(() => { 12 - scrollTimeout = null; 13 - }, 100); // Adjust timing as needed 14 - }); 15 - }); 16 - }; 17 - 18 - const getPagetoc = () => 19 - document.querySelector(".pagetoc") || autoCreatePagetoc(); 20 - 21 - const autoCreatePagetoc = () => { 22 - const main = document.querySelector("#content > main"); 23 - const content = Object.assign(document.createElement("div"), { 24 - className: "content-wrap", 25 - }); 26 - content.append(...main.childNodes); 27 - main.prepend(content); 28 - main.insertAdjacentHTML( 29 - "afterbegin", 30 - '<div class="sidetoc"><nav class="pagetoc"></nav></div>', 31 - ); 32 - return document.querySelector(".pagetoc"); 33 - }; 34 - const updateFunction = () => { 35 - if (scrollTimeout) return; // Skip updates if within the cooldown period from a click 36 - const headers = [...document.getElementsByClassName("header")]; 37 - const scrolledY = window.scrollY; 38 - let lastHeader = null; 39 - 40 - // Find the last header that is above the current scroll position 41 - for (let i = headers.length - 1; i >= 0; i--) { 42 - if (scrolledY >= headers[i].offsetTop) { 43 - lastHeader = headers[i]; 44 - break; 45 - } 46 - } 47 - 48 - const pagetocLinks = [...document.querySelector(".pagetoc").children]; 49 - pagetocLinks.forEach((link) => link.classList.remove("active")); 50 - 51 - if (lastHeader) { 52 - const activeLink = pagetocLinks.find((link) => 53 - lastHeader.href === link.href 54 - ); 55 - if (activeLink) activeLink.classList.add("active"); 56 - } 57 - }; 58 - 59 - window.addEventListener("load", () => { 60 - const pagetoc = getPagetoc(); 61 - const headers = [...document.getElementsByClassName("header")]; 62 - headers.forEach((header) => { 63 - const link = Object.assign(document.createElement("a"), { 64 - textContent: header.text, 65 - href: header.href, 66 - className: `pagetoc-${header.parentElement.tagName}`, 67 - }); 68 - pagetoc.appendChild(link); 69 - }); 70 - updateFunction(); 71 - listenActive(); 72 - window.addEventListener("scroll", updateFunction); 73 - });
···
+167
docs/tips_n_tricks.md
···
··· 1 + # tops and bottoms 2 + this document outlines things that i learned from various sources and some pure guesswork 3 + 4 + > To learn Nix is to learn to suffer, and to learn the way of numbing the pain 5 + > 6 + > โ€” Cassie circa. 2023 7 + 8 + ## overriding packages 9 + the pill confused me and i thought i had to make overlays to do overrides but no 10 + 11 + in packages (i.e. `environment.systemPackages`), just do 12 + ```nix 13 + #-------8<-Snip------- 14 + environment = { 15 + systemPackages = with pkgs; [ 16 + (discord.override {withOpenASAR = true;}) 17 + () 18 + ]; 19 + }; 20 + #-------Snip->8------- 21 + ``` 22 + 23 + This works as well 24 + ```nix 25 + security.sudo.package = (pkgs.sudo.override {withInsults = true;}); 26 + ``` 27 + 28 + ## overlays 29 + overlays are useful when you want to refer to a package globally. 30 + 31 + the gist of overlays is as thus: 32 + 33 + > overlay is just `final: pref: {}` functions where dumbed down idea is 34 + > that you do pkg = prev.pkg.override and refer to everything else from 35 + > final 36 + > 37 + > idea is like final = prev // overlay(prev, final) 38 + > (it's a recursive definition) 39 + 40 + (poorly made) example overlays can be found [here](https://github.com/soopyc/nixos-config/blob/master/overlays/discord-canary.nix) 41 + 42 + currently in-use and slightly better overlays can be found in this repo! head over to /overlays to see them. 43 + 44 + *note: replace `self: super:` with `final: prev:` for consistency* 45 + 46 + *concept and content by \@natsukagami* 47 + 48 + ## extra opts 49 + a way of passing additional options globally to modules is by using extraOpts. 50 + 51 + in nix flakes, this is accomplished by using `specialArgs` in `nixosSystem`. 52 + 53 + for example, check out this line in our flake.nix: 54 + 55 + https://github.com/soopyc/nix-on-koumakan/blob/492dfaa01808c2aa5dbb2d8223163e92bcef673b/flake.nix#L22-L28 56 + 57 + this avoids the horror of `import ../../../utils/bar.nix;` 58 + 59 + refer to [nixpkgs:nixos/lib/eval-config.nix] and [nixpkgs:lib/modules.nix#122] for more info 60 + 61 + *pointers by \@natsukagami* 62 + 63 + ## @ (at) syntax 64 + very simple. 65 + 66 + ```nix 67 + args@{a, b, c, ...}: { 68 + # args.a and a are the same 69 + some = "value"; 70 + } 71 + ``` 72 + 73 + ## nginx regex location 74 + ```nix 75 + { 76 + locations."~ \.php$".extraConfig = '' 77 + # balls 78 + ''; 79 + } 80 + ``` 81 + from [nixos wiki](https://nixos.wiki/wiki/Nginx#LEMP_stack) 82 + 83 + ## adding a package with an overlay to a package set 84 + 85 + for package sets with a scope, you will have to do something like 86 + ```nix 87 + final: prev: { 88 + nimPackages = prev.nimPackages.overrideScope (final': prev': { 89 + sha1 = final'.callPackage ./sha1.nix {}; 90 + oauth = final'.callPackage ./oauth.nix {}; 91 + }); 92 + } 93 + ``` 94 + There's an alternative method that i used to use here: 95 + 96 + https://github.com/soopyc/nix-on-koumakan/blob/30e65402d22b000a3b5af6c9e5ea48a2b58a54e0/overlays/nim/oauth/default.nix 97 + 98 + however i do not think that's the best way lol 99 + 100 + # Common pitfalls 101 + ## importing nixpkgs with an empty attrset 102 + 103 + ever had this in your flake.nix 104 + 105 + ```nix 106 + { 107 + outputs = { nixpkgs, ... }@inputs: let 108 + pkgs = import nixpkgs {}; 109 + lib = nixpkgs.lib; 110 + in { 111 + # ... 112 + }; 113 + } 114 + ``` 115 + 116 + ... and got fucked with this? 117 + ```shell 118 + error: 119 + โ€ฆ while checking flake output 'nixosConfigurations' 120 + 121 + at /nix/store/lz2ra1180qfffmpwg41jpyg1z602qdgx-source/flake.nix:50:5: 122 + 123 + 49| in { 124 + 50| nixosConfigurations = { 125 + | ^ 126 + 51| koumakan = (import ./systems/koumakan { inherit pkgs lib inputs; }); 127 + 128 + โ€ฆ while checking the NixOS configuration 'nixosConfigurations.koumakan' 129 + 130 + at /nix/store/lz2ra1180qfffmpwg41jpyg1z602qdgx-source/flake.nix:51:7: 131 + 132 + 50| nixosConfigurations = { 133 + 51| koumakan = (import ./systems/koumakan { inherit pkgs lib inputs; }); 134 + | ^ 135 + 52| }; 136 + 137 + (stack trace truncated; use '--show-trace' to show the full trace) 138 + 139 + error: attribute 'currentSystem' missing 140 + 141 + at /nix/store/5c0k827yjq7j24qaq8l2fcnsxp7nv8v1-source/pkgs/top-level/impure.nix:17:43: 142 + 143 + 16| # (build, in GNU Autotools parlance) platform. 144 + 17| localSystem ? { system = args.system or builtins.currentSystem; } 145 + | ^ 146 + 18| 147 + ``` 148 + 149 + just don't!!!11 remove the pkgs definition. (note that this only applies to `pkgs = import nixpkgs {};`) 150 + 151 + explanation 152 + 153 + > you shouldn't ever really import nixpkgs with an empty attrset either 154 + > 155 + > that causes it to fall back on guessing your system using `builtins.currentSystem`, 156 + > which is impure and so not allowed in pure evaluation mode 157 + > 158 + > โ€” \@getchoo 159 + 160 + # Useful links 161 + 162 + Builtin stdlib functions search engine: https://noogle.dev/ 163 + 164 + 165 + <!--links--> 166 + [nixpkgs:lib/modules.nix#122]: https://github.com/NixOS/nixpkgs/blob/6e68daefde56a7a8e6fe7c3ca9ceeb436294bb9f/lib/modules.nix#L122 167 + [nixpkgs:nixos/lib/eval-config.nix]: https://github.com/NixOS/nixpkgs/blob/5054472759a3b0df8e18cfe4031a5eff92d4cdc3/nixos/lib/eval-config.nix
+59
docs/utils.md
···
··· 1 + # utility functions 2 + 3 + ## `_utils.mkVhost` 4 + `attrset -> attrset` 5 + make a virtual host with sensible defaults 6 + 7 + pass in a set to override the defaults. 8 + 9 + ### Example 10 + ```nix 11 + services.nginx.virtualHosts."balls.example" = _utils.mkVhost {}; 12 + ``` 13 + 14 + ## `_utils.mkSimpleProxy` 15 + `attrset -> attrset` 16 + 17 + make a simple reverse proxy 18 + 19 + takes a set: 20 + ```nix 21 + { 22 + port, 23 + protocol ? "http", 24 + location ? "/", 25 + websockets ? false, 26 + extraConfig ? {} 27 + } 28 + ``` 29 + 30 + It is recommended to override/add attributes with `extraConfig` to 31 + preserve defaults. 32 + 33 + Items in `extraConfig` are merged verbatim to the base attrset with defaults. 34 + They are overridden based on their order. 35 + 36 + ## `_utils.genSecrets` 37 + `namespace[str] -> files[list[str]] -> value[attrset] -> attrset` 38 + a 39 + generate an attrset to be passed into sops.secrets. 40 + 41 + ### Example 42 + ```nix 43 + { _utils, ... }: 44 + let 45 + secrets = [ 46 + "secure_secret" 47 + # this is a directory structure, so secrets will be stored as a file in /run/secrets/service/test/secret. 48 + "service/test/secret" 49 + ]; 50 + in { 51 + sops.secrets = _utils.genSecrets "" secrets {}; # it's recommended to use a namespace, but having none is still fine. 52 + # -> sops.secrets."secure_secret" = {}; 53 + # sops.secrets."service/test/secret" = {}; 54 + sops.secrets = _utils.genSecrets "balls" ["balls_secret"] {owner = "balls"}; 55 + # -> sops.secrets."balls/balls_secret" = {owner = "balls";}; 56 + } 57 + ``` 58 + 59 + See https://github.com/soopyc/nix-on-koumakan/blob/b7983776143c15c91df69ef34ba4264a22047ec6/systems/koumakan/services/fedivese/akkoma.nix#L8-L34 for a more extensive example
-528
docs/vendor/highlight.min.js
··· 1 - /*! 2 - Highlight.js v11.11.1 (git: d301848ccf) 3 - (c) 2006-2025 Josh Goebel <hello@joshgoebel.com> and other contributors 4 - License: BSD-3-Clause 5 - */ 6 - var hljs=function(){"use strict";function e(n){ 7 - return n instanceof Map?n.clear=n.delete=n.set=()=>{ 8 - throw Error("map is read-only")}:n instanceof Set&&(n.add=n.clear=n.delete=()=>{ 9 - throw Error("set is read-only") 10 - }),Object.freeze(n),Object.getOwnPropertyNames(n).forEach((t=>{ 11 - const a=n[t],s=typeof a;"object"!==s&&"function"!==s||Object.isFrozen(a)||e(a) 12 - })),n}class n{constructor(e){ 13 - void 0===e.data&&(e.data={}),this.data=e.data,this.isMatchIgnored=!1} 14 - ignoreMatch(){this.isMatchIgnored=!0}}function t(e){ 15 - return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;") 16 - }function a(e,...n){const t=Object.create(null);for(const n in e)t[n]=e[n] 17 - ;return n.forEach((e=>{for(const n in e)t[n]=e[n]})),t}const s=e=>!!e.scope 18 - ;class i{constructor(e,n){ 19 - this.buffer="",this.classPrefix=n.classPrefix,e.walk(this)}addText(e){ 20 - this.buffer+=t(e)}openNode(e){if(!s(e))return;const n=((e,{prefix:n})=>{ 21 - if(e.startsWith("language:"))return e.replace("language:","language-") 22 - ;if(e.includes(".")){const t=e.split(".") 23 - ;return[`${n}${t.shift()}`,...t.map(((e,n)=>`${e}${"_".repeat(n+1)}`))].join(" ") 24 - }return`${n}${e}`})(e.scope,{prefix:this.classPrefix});this.span(n)} 25 - closeNode(e){s(e)&&(this.buffer+="</span>")}value(){return this.buffer}span(e){ 26 - this.buffer+=`<span class="${e}">`}}const r=(e={})=>{const n={children:[]} 27 - ;return Object.assign(n,e),n};class o{constructor(){ 28 - this.rootNode=r(),this.stack=[this.rootNode]}get top(){ 29 - return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){ 30 - this.top.children.push(e)}openNode(e){const n=r({scope:e}) 31 - ;this.add(n),this.stack.push(n)}closeNode(){ 32 - if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){ 33 - for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)} 34 - walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,n){ 35 - return"string"==typeof n?e.addText(n):n.children&&(e.openNode(n), 36 - n.children.forEach((n=>this._walk(e,n))),e.closeNode(n)),e}static _collapse(e){ 37 - "string"!=typeof e&&e.children&&(e.children.every((e=>"string"==typeof e))?e.children=[e.children.join("")]:e.children.forEach((e=>{ 38 - o._collapse(e)})))}}class c extends o{constructor(e){super(),this.options=e} 39 - addText(e){""!==e&&this.add(e)}startScope(e){this.openNode(e)}endScope(){ 40 - this.closeNode()}__addSublanguage(e,n){const t=e.root 41 - ;n&&(t.scope="language:"+n),this.add(t)}toHTML(){ 42 - return new i(this,this.options).value()}finalize(){ 43 - return this.closeAllNodes(),!0}}function l(e){ 44 - return e?"string"==typeof e?e:e.source:null}function d(e){return h("(?=",e,")")} 45 - function g(e){return h("(?:",e,")*")}function u(e){return h("(?:",e,")?")} 46 - function h(...e){return e.map((e=>l(e))).join("")}function b(...e){const n=(e=>{ 47 - const n=e[e.length-1] 48 - ;return"object"==typeof n&&n.constructor===Object?(e.splice(e.length-1,1),n):{} 49 - })(e);return"("+(n.capture?"":"?:")+e.map((e=>l(e))).join("|")+")"} 50 - function p(e){return RegExp(e.toString()+"|").exec("").length-1} 51 - const m=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./ 52 - ;function f(e,{joinWith:n}){let t=0;return e.map((e=>{t+=1;const n=t 53 - ;let a=l(e),s="";for(;a.length>0;){const e=m.exec(a);if(!e){s+=a;break} 54 - s+=a.substring(0,e.index), 55 - a=a.substring(e.index+e[0].length),"\\"===e[0][0]&&e[1]?s+="\\"+(Number(e[1])+n):(s+=e[0], 56 - "("===e[0]&&t++)}return s})).map((e=>`(${e})`)).join(n)} 57 - const E="[a-zA-Z]\\w*",_="[a-zA-Z_]\\w*",y="\\b\\d+(\\.\\d+)?",w="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",N="\\b(0b[01]+)",S={ 58 - begin:"\\\\[\\s\\S]",relevance:0},v={scope:"string",begin:"'",end:"'", 59 - illegal:"\\n",contains:[S]},x={scope:"string",begin:'"',end:'"',illegal:"\\n", 60 - contains:[S]},A=(e,n,t={})=>{const s=a({scope:"comment",begin:e,end:n, 61 - contains:[]},t);s.contains.push({scope:"doctag", 62 - begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)", 63 - end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0}) 64 - ;const i=b("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/) 65 - ;return s.contains.push({begin:h(/[ ]+/,"(",i,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),s 66 - },k=A("//","$"),O=A("/\\*","\\*/"),R=A("#","$");var M=Object.freeze({ 67 - __proto__:null,APOS_STRING_MODE:v,BACKSLASH_ESCAPE:S,BINARY_NUMBER_MODE:{ 68 - scope:"number",begin:N,relevance:0},BINARY_NUMBER_RE:N,COMMENT:A, 69 - C_BLOCK_COMMENT_MODE:O,C_LINE_COMMENT_MODE:k,C_NUMBER_MODE:{scope:"number", 70 - begin:w,relevance:0},C_NUMBER_RE:w,END_SAME_AS_BEGIN:e=>Object.assign(e,{ 71 - "on:begin":(e,n)=>{n.data._beginMatch=e[1]},"on:end":(e,n)=>{ 72 - n.data._beginMatch!==e[1]&&n.ignoreMatch()}}),HASH_COMMENT_MODE:R,IDENT_RE:E, 73 - MATCH_NOTHING_RE:/\b\B/,METHOD_GUARD:{begin:"\\.\\s*"+_,relevance:0}, 74 - NUMBER_MODE:{scope:"number",begin:y,relevance:0},NUMBER_RE:y, 75 - PHRASAL_WORDS_MODE:{ 76 - begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/ 77 - },QUOTE_STRING_MODE:x,REGEXP_MODE:{scope:"regexp",begin:/\/(?=[^/\n]*\/)/, 78 - end:/\/[gimuy]*/,contains:[S,{begin:/\[/,end:/\]/,relevance:0,contains:[S]}]}, 79 - RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~", 80 - SHEBANG:(e={})=>{const n=/^#![ ]*\// 81 - ;return e.binary&&(e.begin=h(n,/.*\b/,e.binary,/\b.*/)),a({scope:"meta",begin:n, 82 - end:/$/,relevance:0,"on:begin":(e,n)=>{0!==e.index&&n.ignoreMatch()}},e)}, 83 - TITLE_MODE:{scope:"title",begin:E,relevance:0},UNDERSCORE_IDENT_RE:_, 84 - UNDERSCORE_TITLE_MODE:{scope:"title",begin:_,relevance:0}});function T(e,n){ 85 - "."===e.input[e.index-1]&&n.ignoreMatch()}function I(e,n){ 86 - void 0!==e.className&&(e.scope=e.className,delete e.className)}function C(e,n){ 87 - n&&e.beginKeywords&&(e.begin="\\b("+e.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)", 88 - e.__beforeBegin=T,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords, 89 - void 0===e.relevance&&(e.relevance=0))}function B(e,n){ 90 - Array.isArray(e.illegal)&&(e.illegal=b(...e.illegal))}function $(e,n){ 91 - if(e.match){ 92 - if(e.begin||e.end)throw Error("begin & end are not supported with match") 93 - ;e.begin=e.match,delete e.match}}function L(e,n){ 94 - void 0===e.relevance&&(e.relevance=1)}const D=(e,n)=>{if(!e.beforeMatch)return 95 - ;if(e.starts)throw Error("beforeMatch cannot be used with starts") 96 - ;const t=Object.assign({},e);Object.keys(e).forEach((n=>{delete e[n] 97 - })),e.keywords=t.keywords,e.begin=h(t.beforeMatch,d(t.begin)),e.starts={ 98 - relevance:0,contains:[Object.assign(t,{endsParent:!0})] 99 - },e.relevance=0,delete t.beforeMatch 100 - },j=["of","and","for","in","not","or","if","then","parent","list","value"] 101 - ;function P(e,n,t="keyword"){const a=Object.create(null) 102 - ;return"string"==typeof e?s(t,e.split(" ")):Array.isArray(e)?s(t,e):Object.keys(e).forEach((t=>{ 103 - Object.assign(a,P(e[t],n,t))})),a;function s(e,t){ 104 - n&&(t=t.map((e=>e.toLowerCase()))),t.forEach((n=>{const t=n.split("|") 105 - ;a[t[0]]=[e,z(t[0],t[1])]}))}}function z(e,n){ 106 - return n?Number(n):(e=>j.includes(e.toLowerCase()))(e)?0:1}const H={},U=e=>{ 107 - console.error(e)},F=(e,...n)=>{console.log("WARN: "+e,...n)},Z=(e,n)=>{ 108 - H[`${e}/${n}`]||(console.log(`Deprecated as of ${e}. ${n}`),H[`${e}/${n}`]=!0) 109 - },K=Error();function G(e,n,{key:t}){let a=0;const s=e[t],i={},r={} 110 - ;for(let e=1;e<=n.length;e++)r[e+a]=s[e],i[e+a]=!0,a+=p(n[e-1]) 111 - ;e[t]=r,e[t]._emit=i,e[t]._multi=!0}function q(e){(e=>{ 112 - e.scope&&"object"==typeof e.scope&&null!==e.scope&&(e.beginScope=e.scope, 113 - delete e.scope)})(e),"string"==typeof e.beginScope&&(e.beginScope={ 114 - _wrap:e.beginScope}),"string"==typeof e.endScope&&(e.endScope={_wrap:e.endScope 115 - }),(e=>{if(Array.isArray(e.begin)){ 116 - if(e.skip||e.excludeBegin||e.returnBegin)throw U("skip, excludeBegin, returnBegin not compatible with beginScope: {}"), 117 - K 118 - ;if("object"!=typeof e.beginScope||null===e.beginScope)throw U("beginScope must be object"), 119 - K;G(e,e.begin,{key:"beginScope"}),e.begin=f(e.begin,{joinWith:""})}})(e),(e=>{ 120 - if(Array.isArray(e.end)){ 121 - if(e.skip||e.excludeEnd||e.returnEnd)throw U("skip, excludeEnd, returnEnd not compatible with endScope: {}"), 122 - K 123 - ;if("object"!=typeof e.endScope||null===e.endScope)throw U("endScope must be object"), 124 - K;G(e,e.end,{key:"endScope"}),e.end=f(e.end,{joinWith:""})}})(e)}function W(e){ 125 - function n(n,t){ 126 - return RegExp(l(n),"m"+(e.case_insensitive?"i":"")+(e.unicodeRegex?"u":"")+(t?"g":"")) 127 - }class t{constructor(){ 128 - this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0} 129 - addRule(e,n){ 130 - n.position=this.position++,this.matchIndexes[this.matchAt]=n,this.regexes.push([n,e]), 131 - this.matchAt+=p(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null) 132 - ;const e=this.regexes.map((e=>e[1]));this.matcherRe=n(f(e,{joinWith:"|" 133 - }),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex 134 - ;const n=this.matcherRe.exec(e);if(!n)return null 135 - ;const t=n.findIndex(((e,n)=>n>0&&void 0!==e)),a=this.matchIndexes[t] 136 - ;return n.splice(0,t),Object.assign(n,a)}}class s{constructor(){ 137 - this.rules=[],this.multiRegexes=[], 138 - this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){ 139 - if(this.multiRegexes[e])return this.multiRegexes[e];const n=new t 140 - ;return this.rules.slice(e).forEach((([e,t])=>n.addRule(e,t))), 141 - n.compile(),this.multiRegexes[e]=n,n}resumingScanAtSamePosition(){ 142 - return 0!==this.regexIndex}considerAll(){this.regexIndex=0}addRule(e,n){ 143 - this.rules.push([e,n]),"begin"===n.type&&this.count++}exec(e){ 144 - const n=this.getMatcher(this.regexIndex);n.lastIndex=this.lastIndex 145 - ;let t=n.exec(e) 146 - ;if(this.resumingScanAtSamePosition())if(t&&t.index===this.lastIndex);else{ 147 - const n=this.getMatcher(0);n.lastIndex=this.lastIndex+1,t=n.exec(e)} 148 - return t&&(this.regexIndex+=t.position+1, 149 - this.regexIndex===this.count&&this.considerAll()),t}} 150 - if(e.compilerExtensions||(e.compilerExtensions=[]), 151 - e.contains&&e.contains.includes("self"))throw Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.") 152 - ;return e.classNameAliases=a(e.classNameAliases||{}),function t(i,r){const o=i 153 - ;if(i.isCompiled)return o 154 - ;[I,$,q,D].forEach((e=>e(i,r))),e.compilerExtensions.forEach((e=>e(i,r))), 155 - i.__beforeBegin=null,[C,B,L].forEach((e=>e(i,r))),i.isCompiled=!0;let c=null 156 - ;return"object"==typeof i.keywords&&i.keywords.$pattern&&(i.keywords=Object.assign({},i.keywords), 157 - c=i.keywords.$pattern, 158 - delete i.keywords.$pattern),c=c||/\w+/,i.keywords&&(i.keywords=P(i.keywords,e.case_insensitive)), 159 - o.keywordPatternRe=n(c,!0), 160 - r&&(i.begin||(i.begin=/\B|\b/),o.beginRe=n(o.begin),i.end||i.endsWithParent||(i.end=/\B|\b/), 161 - i.end&&(o.endRe=n(o.end)), 162 - o.terminatorEnd=l(o.end)||"",i.endsWithParent&&r.terminatorEnd&&(o.terminatorEnd+=(i.end?"|":"")+r.terminatorEnd)), 163 - i.illegal&&(o.illegalRe=n(i.illegal)), 164 - i.contains||(i.contains=[]),i.contains=[].concat(...i.contains.map((e=>(e=>(e.variants&&!e.cachedVariants&&(e.cachedVariants=e.variants.map((n=>a(e,{ 165 - variants:null},n)))),e.cachedVariants?e.cachedVariants:X(e)?a(e,{ 166 - starts:e.starts?a(e.starts):null 167 - }):Object.isFrozen(e)?a(e):e))("self"===e?i:e)))),i.contains.forEach((e=>{t(e,o) 168 - })),i.starts&&t(i.starts,r),o.matcher=(e=>{const n=new s 169 - ;return e.contains.forEach((e=>n.addRule(e.begin,{rule:e,type:"begin" 170 - }))),e.terminatorEnd&&n.addRule(e.terminatorEnd,{type:"end" 171 - }),e.illegal&&n.addRule(e.illegal,{type:"illegal"}),n})(o),o}(e)}function X(e){ 172 - return!!e&&(e.endsWithParent||X(e.starts))}class V extends Error{ 173 - constructor(e,n){super(e),this.name="HTMLInjectionError",this.html=n}} 174 - const J=t,Q=a,Y=Symbol("nomatch"),ee=t=>{ 175 - const a=Object.create(null),s=Object.create(null),i=[];let r=!0 176 - ;const o="Could not find the language '{}', did you forget to load/include a language module?",l={ 177 - disableAutodetect:!0,name:"Plain text",contains:[]};let p={ 178 - ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i, 179 - languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-", 180 - cssSelector:"pre code",languages:null,__emitter:c};function m(e){ 181 - return p.noHighlightRe.test(e)}function f(e,n,t){let a="",s="" 182 - ;"object"==typeof n?(a=e, 183 - t=n.ignoreIllegals,s=n.language):(Z("10.7.0","highlight(lang, code, ...args) has been deprecated."), 184 - Z("10.7.0","Please use highlight(code, options) instead.\nhttps://github.com/highlightjs/highlight.js/issues/2277"), 185 - s=e,a=n),void 0===t&&(t=!0);const i={code:a,language:s};A("before:highlight",i) 186 - ;const r=i.result?i.result:E(i.language,i.code,t) 187 - ;return r.code=i.code,A("after:highlight",r),r}function E(e,t,s,i){ 188 - const c=Object.create(null);function l(){if(!A.keywords)return void O.addText(R) 189 - ;let e=0;A.keywordPatternRe.lastIndex=0;let n=A.keywordPatternRe.exec(R),t="" 190 - ;for(;n;){t+=R.substring(e,n.index) 191 - ;const s=N.case_insensitive?n[0].toLowerCase():n[0],i=(a=s,A.keywords[a]);if(i){ 192 - const[e,a]=i 193 - ;if(O.addText(t),t="",c[s]=(c[s]||0)+1,c[s]<=7&&(M+=a),e.startsWith("_"))t+=n[0];else{ 194 - const t=N.classNameAliases[e]||e;g(n[0],t)}}else t+=n[0] 195 - ;e=A.keywordPatternRe.lastIndex,n=A.keywordPatternRe.exec(R)}var a 196 - ;t+=R.substring(e),O.addText(t)}function d(){null!=A.subLanguage?(()=>{ 197 - if(""===R)return;let e=null;if("string"==typeof A.subLanguage){ 198 - if(!a[A.subLanguage])return void O.addText(R) 199 - ;e=E(A.subLanguage,R,!0,k[A.subLanguage]),k[A.subLanguage]=e._top 200 - }else e=_(R,A.subLanguage.length?A.subLanguage:null) 201 - ;A.relevance>0&&(M+=e.relevance),O.__addSublanguage(e._emitter,e.language) 202 - })():l(),R=""}function g(e,n){ 203 - ""!==e&&(O.startScope(n),O.addText(e),O.endScope())}function u(e,n){let t=1 204 - ;const a=n.length-1;for(;t<=a;){if(!e._emit[t]){t++;continue} 205 - const a=N.classNameAliases[e[t]]||e[t],s=n[t];a?g(s,a):(R=s,l(),R=""),t++}} 206 - function h(e,n){ 207 - return e.scope&&"string"==typeof e.scope&&O.openNode(N.classNameAliases[e.scope]||e.scope), 208 - e.beginScope&&(e.beginScope._wrap?(g(R,N.classNameAliases[e.beginScope._wrap]||e.beginScope._wrap), 209 - R=""):e.beginScope._multi&&(u(e.beginScope,n),R="")),A=Object.create(e,{parent:{ 210 - value:A}}),A}function b(e,t,a){let s=((e,n)=>{const t=e&&e.exec(n) 211 - ;return t&&0===t.index})(e.endRe,a);if(s){if(e["on:end"]){const a=new n(e) 212 - ;e["on:end"](t,a),a.isMatchIgnored&&(s=!1)}if(s){ 213 - for(;e.endsParent&&e.parent;)e=e.parent;return e}} 214 - if(e.endsWithParent)return b(e.parent,t,a)}function m(e){ 215 - return 0===A.matcher.regexIndex?(R+=e[0],1):(C=!0,0)}function f(e){ 216 - const n=e[0],a=t.substring(e.index),s=b(A,e,a);if(!s)return Y;const i=A 217 - ;A.endScope&&A.endScope._wrap?(d(), 218 - g(n,A.endScope._wrap)):A.endScope&&A.endScope._multi?(d(), 219 - u(A.endScope,e)):i.skip?R+=n:(i.returnEnd||i.excludeEnd||(R+=n), 220 - d(),i.excludeEnd&&(R=n));do{ 221 - A.scope&&O.closeNode(),A.skip||A.subLanguage||(M+=A.relevance),A=A.parent 222 - }while(A!==s.parent);return s.starts&&h(s.starts,e),i.returnEnd?0:n.length} 223 - let y={};function w(a,i){const o=i&&i[0];if(R+=a,null==o)return d(),0 224 - ;if("begin"===y.type&&"end"===i.type&&y.index===i.index&&""===o){ 225 - if(R+=t.slice(i.index,i.index+1),!r){const n=Error(`0 width match regex (${e})`) 226 - ;throw n.languageName=e,n.badRule=y.rule,n}return 1} 227 - if(y=i,"begin"===i.type)return(e=>{ 228 - const t=e[0],a=e.rule,s=new n(a),i=[a.__beforeBegin,a["on:begin"]] 229 - ;for(const n of i)if(n&&(n(e,s),s.isMatchIgnored))return m(t) 230 - ;return a.skip?R+=t:(a.excludeBegin&&(R+=t), 231 - d(),a.returnBegin||a.excludeBegin||(R=t)),h(a,e),a.returnBegin?0:t.length})(i) 232 - ;if("illegal"===i.type&&!s){ 233 - const e=Error('Illegal lexeme "'+o+'" for mode "'+(A.scope||"<unnamed>")+'"') 234 - ;throw e.mode=A,e}if("end"===i.type){const e=f(i);if(e!==Y)return e} 235 - if("illegal"===i.type&&""===o)return i.index===t.length||(R+="\n"),1 236 - ;if(I>1e5&&I>3*i.index)throw Error("potential infinite loop, way more iterations than matches") 237 - ;return R+=o,o.length}const N=S(e) 238 - ;if(!N)throw U(o.replace("{}",e)),Error('Unknown language: "'+e+'"') 239 - ;const v=W(N);let x="",A=i||v;const k={},O=new p.__emitter(p);(()=>{const e=[] 240 - ;for(let n=A;n!==N;n=n.parent)n.scope&&e.unshift(n.scope) 241 - ;e.forEach((e=>O.openNode(e)))})();let R="",M=0,T=0,I=0,C=!1;try{ 242 - if(N.__emitTokens)N.__emitTokens(t,O);else{for(A.matcher.considerAll();;){ 243 - I++,C?C=!1:A.matcher.considerAll(),A.matcher.lastIndex=T 244 - ;const e=A.matcher.exec(t);if(!e)break;const n=w(t.substring(T,e.index),e) 245 - ;T=e.index+n}w(t.substring(T))}return O.finalize(),x=O.toHTML(),{language:e, 246 - value:x,relevance:M,illegal:!1,_emitter:O,_top:A}}catch(n){ 247 - if(n.message&&n.message.includes("Illegal"))return{language:e,value:J(t), 248 - illegal:!0,relevance:0,_illegalBy:{message:n.message,index:T, 249 - context:t.slice(T-100,T+100),mode:n.mode,resultSoFar:x},_emitter:O};if(r)return{ 250 - language:e,value:J(t),illegal:!1,relevance:0,errorRaised:n,_emitter:O,_top:A} 251 - ;throw n}}function _(e,n){n=n||p.languages||Object.keys(a);const t=(e=>{ 252 - const n={value:J(e),illegal:!1,relevance:0,_top:l,_emitter:new p.__emitter(p)} 253 - ;return n._emitter.addText(e),n})(e),s=n.filter(S).filter(x).map((n=>E(n,e,!1))) 254 - ;s.unshift(t);const i=s.sort(((e,n)=>{ 255 - if(e.relevance!==n.relevance)return n.relevance-e.relevance 256 - ;if(e.language&&n.language){if(S(e.language).supersetOf===n.language)return 1 257 - ;if(S(n.language).supersetOf===e.language)return-1}return 0})),[r,o]=i,c=r 258 - ;return c.secondBest=o,c}function y(e){let n=null;const t=(e=>{ 259 - let n=e.className+" ";n+=e.parentNode?e.parentNode.className:"" 260 - ;const t=p.languageDetectRe.exec(n);if(t){const n=S(t[1]) 261 - ;return n||(F(o.replace("{}",t[1])), 262 - F("Falling back to no-highlight mode for this block.",e)),n?t[1]:"no-highlight"} 263 - return n.split(/\s+/).find((e=>m(e)||S(e)))})(e);if(m(t))return 264 - ;if(A("before:highlightElement",{el:e,language:t 265 - }),e.dataset.highlighted)return void console.log("Element previously highlighted. To highlight again, first unset `dataset.highlighted`.",e) 266 - ;if(e.children.length>0&&(p.ignoreUnescapedHTML||(console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."), 267 - console.warn("https://github.com/highlightjs/highlight.js/wiki/security"), 268 - console.warn("The element with unescaped HTML:"), 269 - console.warn(e)),p.throwUnescapedHTML))throw new V("One of your code blocks includes unescaped HTML.",e.innerHTML) 270 - ;n=e;const a=n.textContent,i=t?f(a,{language:t,ignoreIllegals:!0}):_(a) 271 - ;e.innerHTML=i.value,e.dataset.highlighted="yes",((e,n,t)=>{const a=n&&s[n]||t 272 - ;e.classList.add("hljs"),e.classList.add("language-"+a) 273 - })(e,t,i.language),e.result={language:i.language,re:i.relevance, 274 - relevance:i.relevance},i.secondBest&&(e.secondBest={ 275 - language:i.secondBest.language,relevance:i.secondBest.relevance 276 - }),A("after:highlightElement",{el:e,result:i,text:a})}let w=!1;function N(){ 277 - if("loading"===document.readyState)return w||window.addEventListener("DOMContentLoaded",(()=>{ 278 - N()}),!1),void(w=!0);document.querySelectorAll(p.cssSelector).forEach(y)} 279 - function S(e){return e=(e||"").toLowerCase(),a[e]||a[s[e]]} 280 - function v(e,{languageName:n}){"string"==typeof e&&(e=[e]),e.forEach((e=>{ 281 - s[e.toLowerCase()]=n}))}function x(e){const n=S(e) 282 - ;return n&&!n.disableAutodetect}function A(e,n){const t=e;i.forEach((e=>{ 283 - e[t]&&e[t](n)}))}Object.assign(t,{highlight:f,highlightAuto:_,highlightAll:N, 284 - highlightElement:y, 285 - highlightBlock:e=>(Z("10.7.0","highlightBlock will be removed entirely in v12.0"), 286 - Z("10.7.0","Please use highlightElement now."),y(e)),configure:e=>{p=Q(p,e)}, 287 - initHighlighting:()=>{ 288 - N(),Z("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")}, 289 - initHighlightingOnLoad:()=>{ 290 - N(),Z("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.") 291 - },registerLanguage:(e,n)=>{let s=null;try{s=n(t)}catch(n){ 292 - if(U("Language definition for '{}' could not be registered.".replace("{}",e)), 293 - !r)throw n;U(n),s=l} 294 - s.name||(s.name=e),a[e]=s,s.rawDefinition=n.bind(null,t),s.aliases&&v(s.aliases,{ 295 - languageName:e})},unregisterLanguage:e=>{delete a[e] 296 - ;for(const n of Object.keys(s))s[n]===e&&delete s[n]}, 297 - listLanguages:()=>Object.keys(a),getLanguage:S,registerAliases:v, 298 - autoDetection:x,inherit:Q,addPlugin:e=>{(e=>{ 299 - e["before:highlightBlock"]&&!e["before:highlightElement"]&&(e["before:highlightElement"]=n=>{ 300 - e["before:highlightBlock"](Object.assign({block:n.el},n)) 301 - }),e["after:highlightBlock"]&&!e["after:highlightElement"]&&(e["after:highlightElement"]=n=>{ 302 - e["after:highlightBlock"](Object.assign({block:n.el},n))})})(e),i.push(e)}, 303 - removePlugin:e=>{const n=i.indexOf(e);-1!==n&&i.splice(n,1)}}),t.debugMode=()=>{ 304 - r=!1},t.safeMode=()=>{r=!0},t.versionString="11.11.1",t.regex={concat:h, 305 - lookahead:d,either:b,optional:u,anyNumberOfTimes:g} 306 - ;for(const n in M)"object"==typeof M[n]&&e(M[n]);return Object.assign(t,M),t 307 - },ne=ee({});ne.newInstance=()=>ee({}) 308 - ;const te="[A-Za-z$_][0-9A-Za-z$_]*",ae=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends","using"],se=["true","false","null","undefined","NaN","Infinity"],ie=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],re=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],oe=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],ce=["arguments","this","super","console","window","document","localStorage","sessionStorage","module","global"],le=[].concat(oe,ie,re) 309 - ;var de=Object.freeze({__proto__:null,grmr_bash:e=>{const n=e.regex,t={},a={ 310 - begin:/\$\{/,end:/\}/,contains:["self",{begin:/:-/,contains:[t]}]} 311 - ;Object.assign(t,{className:"variable",variants:[{ 312 - begin:n.concat(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},a]});const s={ 313 - className:"subst",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE] 314 - },i=e.inherit(e.COMMENT(),{match:[/(^|\s)/,/#.*$/],scope:{2:"comment"}}),r={ 315 - begin:/<<-?\s*(?=\w+)/,starts:{contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/, 316 - end:/(\w+)/,className:"string"})]}},o={className:"string",begin:/"/,end:/"/, 317 - contains:[e.BACKSLASH_ESCAPE,t,s]};s.contains.push(o);const c={begin:/\$?\(\(/, 318 - end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},e.NUMBER_MODE,t] 319 - },l=e.SHEBANG({binary:"(fish|bash|zsh|sh|csh|ksh|tcsh|dash|scsh)",relevance:10 320 - }),d={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0, 321 - contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0};return{ 322 - name:"Bash",aliases:["sh","zsh"],keywords:{$pattern:/\b[a-z][a-z0-9._-]+\b/, 323 - keyword:["if","then","else","elif","fi","time","for","while","until","in","do","done","case","esac","coproc","function","select"], 324 - literal:["true","false"], 325 - built_in:["break","cd","continue","eval","exec","exit","export","getopts","hash","pwd","readonly","return","shift","test","times","trap","umask","unset","alias","bind","builtin","caller","command","declare","echo","enable","help","let","local","logout","mapfile","printf","read","readarray","source","sudo","type","typeset","ulimit","unalias","set","shopt","autoload","bg","bindkey","bye","cap","chdir","clone","comparguments","compcall","compctl","compdescribe","compfiles","compgroups","compquote","comptags","comptry","compvalues","dirs","disable","disown","echotc","echoti","emulate","fc","fg","float","functions","getcap","getln","history","integer","jobs","kill","limit","log","noglob","popd","print","pushd","pushln","rehash","sched","setcap","setopt","stat","suspend","ttyctl","unfunction","unhash","unlimit","unsetopt","vared","wait","whence","where","which","zcompile","zformat","zftp","zle","zmodload","zparseopts","zprof","zpty","zregexparse","zsocket","zstyle","ztcp","chcon","chgrp","chown","chmod","cp","dd","df","dir","dircolors","ln","ls","mkdir","mkfifo","mknod","mktemp","mv","realpath","rm","rmdir","shred","sync","touch","truncate","vdir","b2sum","base32","base64","cat","cksum","comm","csplit","cut","expand","fmt","fold","head","join","md5sum","nl","numfmt","od","paste","ptx","pr","sha1sum","sha224sum","sha256sum","sha384sum","sha512sum","shuf","sort","split","sum","tac","tail","tr","tsort","unexpand","uniq","wc","arch","basename","chroot","date","dirname","du","echo","env","expr","factor","groups","hostid","id","link","logname","nice","nohup","nproc","pathchk","pinky","printenv","printf","pwd","readlink","runcon","seq","sleep","stat","stdbuf","stty","tee","test","timeout","tty","uname","unlink","uptime","users","who","whoami","yes"] 326 - },contains:[l,e.SHEBANG(),d,c,i,r,{match:/(\/[a-z._-]+)+/},o,{match:/\\"/},{ 327 - className:"string",begin:/'/,end:/'/},{match:/\\'/},t]}},grmr_ini:e=>{ 328 - const n=e.regex,t={className:"number",relevance:0,variants:[{ 329 - begin:/([+-]+)?[\d]+_[\d_]+/},{begin:e.NUMBER_RE}]},a=e.COMMENT();a.variants=[{ 330 - begin:/;/,end:/$/},{begin:/#/,end:/$/}];const s={className:"variable", 331 - variants:[{begin:/\$[\w\d"][\w\d_]*/},{begin:/\$\{(.*?)\}/}]},i={ 332 - className:"literal",begin:/\bon|off|true|false|yes|no\b/},r={className:"string", 333 - contains:[e.BACKSLASH_ESCAPE],variants:[{begin:"'''",end:"'''",relevance:10},{ 334 - begin:'"""',end:'"""',relevance:10},{begin:'"',end:'"'},{begin:"'",end:"'"}] 335 - },o={begin:/\[/,end:/\]/,contains:[a,i,s,r,t,"self"],relevance:0 336 - },c=n.either(/[A-Za-z0-9_-]+/,/"(\\"|[^"])*"/,/'[^']*'/);return{ 337 - name:"TOML, also INI",aliases:["toml"],case_insensitive:!0,illegal:/\S/, 338 - contains:[a,{className:"section",begin:/\[+/,end:/\]+/},{ 339 - begin:n.concat(c,"(\\s*\\.\\s*",c,")*",n.lookahead(/\s*=\s*[^#\s]/)), 340 - className:"attr",starts:{end:/$/,contains:[a,o,i,s,r,t]}}]}}, 341 - grmr_javascript:e=>{const n=e.regex,t=te,a={begin:/<[A-Za-z0-9\\._:-]+/, 342 - end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(e,n)=>{ 343 - const t=e[0].length+e.index,a=e.input[t] 344 - ;if("<"===a||","===a)return void n.ignoreMatch();let s 345 - ;">"===a&&(((e,{after:n})=>{const t="</"+e[0].slice(1) 346 - ;return-1!==e.input.indexOf(t,n)})(e,{after:t})||n.ignoreMatch()) 347 - ;const i=e.input.substring(t) 348 - ;((s=i.match(/^\s*=/))||(s=i.match(/^\s+extends\s+/))&&0===s.index)&&n.ignoreMatch() 349 - }},s={$pattern:te,keyword:ae,literal:se,built_in:le,"variable.language":ce 350 - },i="[0-9](_?[0-9])*",r=`\\.(${i})`,o="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",c={ 351 - className:"number",variants:[{ 352 - begin:`(\\b(${o})((${r})|\\.)?|(${r}))[eE][+-]?(${i})\\b`},{ 353 - begin:`\\b(${o})\\b((${r})\\b|\\.)?|(${r})\\b`},{ 354 - begin:"\\b(0|[1-9](_?[0-9])*)n\\b"},{ 355 - begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{ 356 - begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{ 357 - begin:"\\b0[0-7]+n?\\b"}],relevance:0},l={className:"subst",begin:"\\$\\{", 358 - end:"\\}",keywords:s,contains:[]},d={begin:".?html`",end:"",starts:{end:"`", 359 - returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,l],subLanguage:"xml"}},g={ 360 - begin:".?css`",end:"",starts:{end:"`",returnEnd:!1, 361 - contains:[e.BACKSLASH_ESCAPE,l],subLanguage:"css"}},u={begin:".?gql`",end:"", 362 - starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,l], 363 - subLanguage:"graphql"}},h={className:"string",begin:"`",end:"`", 364 - contains:[e.BACKSLASH_ESCAPE,l]},b={className:"comment", 365 - variants:[e.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{ 366 - begin:"(?=@[A-Za-z]+)",relevance:0,contains:[{className:"doctag", 367 - begin:"@[A-Za-z]+"},{className:"type",begin:"\\{",end:"\\}",excludeEnd:!0, 368 - excludeBegin:!0,relevance:0},{className:"variable",begin:t+"(?=\\s*(-)|$)", 369 - endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}] 370 - }),e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE] 371 - },p=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,d,g,u,h,{match:/\$\d+/},c] 372 - ;l.contains=p.concat({begin:/\{/,end:/\}/,keywords:s,contains:["self"].concat(p) 373 - });const m=[].concat(b,l.contains),f=m.concat([{begin:/(\s*)\(/,end:/\)/, 374 - keywords:s,contains:["self"].concat(m)}]),E={className:"params",begin:/(\s*)\(/, 375 - end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:s,contains:f},_={variants:[{ 376 - match:[/class/,/\s+/,t,/\s+/,/extends/,/\s+/,n.concat(t,"(",n.concat(/\./,t),")*")], 377 - scope:{1:"keyword",3:"title.class",5:"keyword",7:"title.class.inherited"}},{ 378 - match:[/class/,/\s+/,t],scope:{1:"keyword",3:"title.class"}}]},y={relevance:0, 379 - match:n.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,/\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/), 380 - className:"title.class",keywords:{_:[...ie,...re]}},w={variants:[{ 381 - match:[/function/,/\s+/,t,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}], 382 - className:{1:"keyword",3:"title.function"},label:"func.def",contains:[E], 383 - illegal:/%/},N={ 384 - match:n.concat(/\b/,(S=[...oe,"super","import"].map((e=>e+"\\s*\\(")), 385 - n.concat("(?!",S.join("|"),")")),t,n.lookahead(/\s*\(/)), 386 - className:"title.function",relevance:0};var S;const v={ 387 - begin:n.concat(/\./,n.lookahead(n.concat(t,/(?![0-9A-Za-z$_(])/))),end:t, 388 - excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},x={ 389 - match:[/get|set/,/\s+/,t,/(?=\()/],className:{1:"keyword",3:"title.function"}, 390 - contains:[{begin:/\(\)/},E] 391 - },A="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+e.UNDERSCORE_IDENT_RE+")\\s*=>",k={ 392 - match:[/const|var|let/,/\s+/,t,/\s*/,/=\s*/,/(async\s*)?/,n.lookahead(A)], 393 - keywords:"async",className:{1:"keyword",3:"title.function"},contains:[E]} 394 - ;return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:s,exports:{ 395 - PARAMS_CONTAINS:f,CLASS_REFERENCE:y},illegal:/#(?![$_A-z])/, 396 - contains:[e.SHEBANG({label:"shebang",binary:"node",relevance:5}),{ 397 - label:"use_strict",className:"meta",relevance:10, 398 - begin:/^\s*['"]use (strict|asm)['"]/ 399 - },e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,d,g,u,h,b,{match:/\$\d+/},c,y,{ 400 - scope:"attr",match:t+n.lookahead(":"),relevance:0},k,{ 401 - begin:"("+e.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*", 402 - keywords:"return throw case",relevance:0,contains:[b,e.REGEXP_MODE,{ 403 - className:"function",begin:A,returnBegin:!0,end:"\\s*=>",contains:[{ 404 - className:"params",variants:[{begin:e.UNDERSCORE_IDENT_RE,relevance:0},{ 405 - className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/, 406 - excludeBegin:!0,excludeEnd:!0,keywords:s,contains:f}]}]},{begin:/,/,relevance:0 407 - },{match:/\s+/,relevance:0},{variants:[{begin:"<>",end:"</>"},{ 408 - match:/<[A-Za-z0-9\\._:-]+\s*\/>/},{begin:a.begin, 409 - "on:begin":a.isTrulyOpeningTag,end:a.end}],subLanguage:"xml",contains:[{ 410 - begin:a.begin,end:a.end,skip:!0,contains:["self"]}]}]},w,{ 411 - beginKeywords:"while if switch catch for"},{ 412 - begin:"\\b(?!function)"+e.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{", 413 - returnBegin:!0,label:"func.def",contains:[E,e.inherit(e.TITLE_MODE,{begin:t, 414 - className:"title.function"})]},{match:/\.\.\./,relevance:0},v,{match:"\\$"+t, 415 - relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"}, 416 - contains:[E]},N,{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/, 417 - className:"variable.constant"},_,x,{match:/\$[(.]/}]}},grmr_makefile:e=>{ 418 - const n={className:"variable",variants:[{ 419 - begin:"\\$\\("+e.UNDERSCORE_IDENT_RE+"\\)",contains:[e.BACKSLASH_ESCAPE]},{ 420 - begin:/\$[@%<?\^\+\*]/}]},t={className:"string",begin:/"/,end:/"/, 421 - contains:[e.BACKSLASH_ESCAPE,n]},a={className:"variable",begin:/\$\([\w-]+\s/, 422 - end:/\)/,keywords:{ 423 - built_in:"subst patsubst strip findstring filter filter-out sort word wordlist firstword lastword dir notdir suffix basename addsuffix addprefix join wildcard realpath abspath error warning shell origin flavor foreach if or and call eval file value" 424 - },contains:[n,t]},s={begin:"^"+e.UNDERSCORE_IDENT_RE+"\\s*(?=[:+?]?=)"},i={ 425 - className:"section",begin:/^[^\s]+:/,end:/$/,contains:[n]};return{ 426 - name:"Makefile",aliases:["mk","mak","make"],keywords:{$pattern:/[\w-]+/, 427 - keyword:"define endef undefine ifdef ifndef ifeq ifneq else endif include -include sinclude override export unexport private vpath" 428 - },contains:[e.HASH_COMMENT_MODE,n,t,a,s,{className:"meta",begin:/^\.PHONY:/, 429 - end:/$/,keywords:{$pattern:/[\.\w]+/,keyword:".PHONY"}},i]}},grmr_nix:e=>{ 430 - const n=e.regex,t={ 431 - keyword:["assert","else","if","in","inherit","let","or","rec","then","with"], 432 - literal:["true","false","null"], 433 - built_in:["abort","baseNameOf","builtins","derivation","derivationStrict","dirOf","fetchGit","fetchMercurial","fetchTarball","fetchTree","fromTOML","import","isNull","map","placeholder","removeAttrs","scopedImport","throw","toString"] 434 - },a={scope:"built_in", 435 - match:n.either(...["abort","add","addDrvOutputDependencies","addErrorContext","all","any","appendContext","attrNames","attrValues","baseNameOf","bitAnd","bitOr","bitXor","break","builtins","catAttrs","ceil","compareVersions","concatLists","concatMap","concatStringsSep","convertHash","currentSystem","currentTime","deepSeq","derivation","derivationStrict","dirOf","div","elem","elemAt","false","fetchGit","fetchMercurial","fetchTarball","fetchTree","fetchurl","filter","filterSource","findFile","flakeRefToString","floor","foldl'","fromJSON","fromTOML","functionArgs","genList","genericClosure","getAttr","getContext","getEnv","getFlake","groupBy","hasAttr","hasContext","hashFile","hashString","head","import","intersectAttrs","isAttrs","isBool","isFloat","isFunction","isInt","isList","isNull","isPath","isString","langVersion","length","lessThan","listToAttrs","map","mapAttrs","match","mul","nixPath","nixVersion","null","parseDrvName","parseFlakeRef","partition","path","pathExists","placeholder","readDir","readFile","readFileType","removeAttrs","replaceStrings","scopedImport","seq","sort","split","splitVersion","storeDir","storePath","stringLength","sub","substring","tail","throw","toFile","toJSON","toPath","toString","toXML","trace","traceVerbose","true","tryEval","typeOf","unsafeDiscardOutputDependency","unsafeDiscardStringContext","unsafeGetAttrPos","warn","zipAttrsWith"].map((e=>"builtins\\."+e))), 436 - relevance:10},s="[A-Za-z_][A-Za-z0-9_'-]*",i={scope:"symbol", 437 - match:RegExp(`<${s}(/${s})*>`)},r="[A-Za-z0-9_\\+\\.-]+",o={scope:"symbol", 438 - match:RegExp(`(\\.\\.|\\.|~)?/(${r})?(/${r})*(?=[\\s;])`) 439 - },c=n.either("==","=","\\+\\+","\\+","<=","<\\|","<",">=",">","->","//","/","!=","!","\\|\\|","\\|>","\\?","\\*","&&"),l={ 440 - scope:"operator",match:n.concat(c,/(?!-)/),relevance:0},d={scope:"number", 441 - match:RegExp(e.NUMBER_RE+"(?!-)"),relevance:0},g={variants:[{scope:"operator", 442 - beforeMatch:/\s/,begin:/-(?!>)/},{begin:[RegExp(""+e.NUMBER_RE),/-/,/(?!>)/], 443 - beginScope:{1:"number",2:"operator"}},{begin:[c,/-/,/(?!>)/],beginScope:{ 444 - 1:"operator",2:"operator"}}],relevance:0},u={beforeMatch:/(^|\{|;)\s*/, 445 - begin:RegExp(`${s}(\\.${s})*\\s*=(?!=)`),returnBegin:!0,relevance:0,contains:[{ 446 - scope:"attr",match:RegExp(`${s}(\\.${s})*(?=\\s*=)`),relevance:.2}]},h={ 447 - scope:"subst",begin:/\$\{/,end:/\}/,keywords:t},b={scope:"char.escape", 448 - match:/\\(?!\$)./},p={scope:"string",variants:[{begin:"''",end:"''",contains:[{ 449 - scope:"char.escape",match:/''\$/},h,{scope:"char.escape",match:/'''/},b]},{ 450 - begin:'"',end:'"',contains:[{scope:"char.escape",match:/\\\$/},h,b]}]},m={ 451 - scope:"params",match:RegExp(s+"\\s*:(?=\\s)") 452 - },f=[d,e.HASH_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.COMMENT(/\/\*\*(?!\/)/,/\*\//,{ 453 - subLanguage:"markdown",relevance:0}),a,p,i,o,m,u,g,l];return h.contains=f,{ 454 - name:"Nix",aliases:["nixos"],keywords:t,contains:f.concat([{scope:"meta.prompt", 455 - match:/^nix-repl>(?=\s)/,relevance:10},{scope:"meta",beforeMatch:/\s+/, 456 - begin:/:([a-z]+|\?)/}])}},grmr_python:e=>{ 457 - const n=e.regex,t=/[\p{XID_Start}_]\p{XID_Continue}*/u,a=["and","as","assert","async","await","break","case","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","in","is","lambda","match","nonlocal|10","not","or","pass","raise","return","try","while","with","yield"],s={ 458 - $pattern:/[A-Za-z]\w+|__\w+__/,keyword:a, 459 - built_in:["__import__","abs","all","any","ascii","bin","bool","breakpoint","bytearray","bytes","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","exec","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","print","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip"], 460 - literal:["__debug__","Ellipsis","False","None","NotImplemented","True"], 461 - type:["Any","Callable","Coroutine","Dict","List","Literal","Generic","Optional","Sequence","Set","Tuple","Type","Union"] 462 - },i={className:"meta",begin:/^(>>>|\.\.\.) /},r={className:"subst",begin:/\{/, 463 - end:/\}/,keywords:s,illegal:/#/},o={begin:/\{\{/,relevance:0},c={ 464 - className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{ 465 - begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,end:/'''/, 466 - contains:[e.BACKSLASH_ESCAPE,i],relevance:10},{ 467 - begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?"""/,end:/"""/, 468 - contains:[e.BACKSLASH_ESCAPE,i],relevance:10},{ 469 - begin:/([fF][rR]|[rR][fF]|[fF])'''/,end:/'''/, 470 - contains:[e.BACKSLASH_ESCAPE,i,o,r]},{begin:/([fF][rR]|[rR][fF]|[fF])"""/, 471 - end:/"""/,contains:[e.BACKSLASH_ESCAPE,i,o,r]},{begin:/([uU]|[rR])'/,end:/'/, 472 - relevance:10},{begin:/([uU]|[rR])"/,end:/"/,relevance:10},{ 473 - begin:/([bB]|[bB][rR]|[rR][bB])'/,end:/'/},{begin:/([bB]|[bB][rR]|[rR][bB])"/, 474 - end:/"/},{begin:/([fF][rR]|[rR][fF]|[fF])'/,end:/'/, 475 - contains:[e.BACKSLASH_ESCAPE,o,r]},{begin:/([fF][rR]|[rR][fF]|[fF])"/,end:/"/, 476 - contains:[e.BACKSLASH_ESCAPE,o,r]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE] 477 - },l="[0-9](_?[0-9])*",d=`(\\b(${l}))?\\.(${l})|\\b(${l})\\.`,g="\\b|"+a.join("|"),u={ 478 - className:"number",relevance:0,variants:[{ 479 - begin:`(\\b(${l})|(${d}))[eE][+-]?(${l})[jJ]?(?=${g})`},{begin:`(${d})[jJ]?`},{ 480 - begin:`\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${g})`},{ 481 - begin:`\\b0[bB](_?[01])+[lL]?(?=${g})`},{begin:`\\b0[oO](_?[0-7])+[lL]?(?=${g})` 482 - },{begin:`\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${g})`},{begin:`\\b(${l})[jJ](?=${g})` 483 - }]},h={className:"comment",begin:n.lookahead(/# type:/),end:/$/,keywords:s, 484 - contains:[{begin:/# type:/},{begin:/#/,end:/\b\B/,endsWithParent:!0}]},b={ 485 - className:"params",variants:[{className:"",begin:/\(\s*\)/,skip:!0},{begin:/\(/, 486 - end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:s, 487 - contains:["self",i,u,c,e.HASH_COMMENT_MODE]}]};return r.contains=[c,u,i],{ 488 - name:"Python",aliases:["py","gyp","ipython"],unicodeRegex:!0,keywords:s, 489 - illegal:/(<\/|\?)|=>/,contains:[i,u,{scope:"variable.language",match:/\bself\b/ 490 - },{beginKeywords:"if",relevance:0},{match:/\bor\b/,scope:"keyword" 491 - },c,h,e.HASH_COMMENT_MODE,{match:[/\bdef/,/\s+/,t],scope:{1:"keyword", 492 - 3:"title.function"},contains:[b]},{variants:[{ 493 - match:[/\bclass/,/\s+/,t,/\s*/,/\(\s*/,t,/\s*\)/]},{match:[/\bclass/,/\s+/,t]}], 494 - scope:{1:"keyword",3:"title.class",6:"title.class.inherited"}},{ 495 - className:"meta",begin:/^[\t ]*@/,end:/(?=#)|$/,contains:[u,b,c]}]}}, 496 - grmr_python_repl:e=>({aliases:["pycon"],contains:[{className:"meta.prompt", 497 - starts:{end:/ |$/,starts:{end:"$",subLanguage:"python"}},variants:[{ 498 - begin:/^>>>(?=[ ]|$)/},{begin:/^\.\.\.(?=[ ]|$)/}]}]}),grmr_rust:e=>{ 499 - const n=e.regex,t=/(r#)?/,a=n.concat(t,e.UNDERSCORE_IDENT_RE),s=n.concat(t,e.IDENT_RE),i={ 500 - className:"title.function.invoke",relevance:0, 501 - begin:n.concat(/\b/,/(?!let|for|while|if|else|match\b)/,s,n.lookahead(/\s*\(/)) 502 - },r="([ui](8|16|32|64|128|size)|f(32|64))?",o=["drop ","Copy","Send","Sized","Sync","Drop","Fn","FnMut","FnOnce","ToOwned","Clone","Debug","PartialEq","PartialOrd","Eq","Ord","AsRef","AsMut","Into","From","Default","Iterator","Extend","IntoIterator","DoubleEndedIterator","ExactSizeIterator","SliceConcatExt","ToString","assert!","assert_eq!","bitflags!","bytes!","cfg!","col!","concat!","concat_idents!","debug_assert!","debug_assert_eq!","env!","eprintln!","panic!","file!","format!","format_args!","include_bytes!","include_str!","line!","local_data_key!","module_path!","option_env!","print!","println!","select!","stringify!","try!","unimplemented!","unreachable!","vec!","write!","writeln!","macro_rules!","assert_ne!","debug_assert_ne!"],c=["i8","i16","i32","i64","i128","isize","u8","u16","u32","u64","u128","usize","f32","f64","str","char","bool","Box","Option","Result","String","Vec"] 503 - ;return{name:"Rust",aliases:["rs"],keywords:{$pattern:e.IDENT_RE+"!?",type:c, 504 - keyword:["abstract","as","async","await","become","box","break","const","continue","crate","do","dyn","else","enum","extern","false","final","fn","for","if","impl","in","let","loop","macro","match","mod","move","mut","override","priv","pub","ref","return","self","Self","static","struct","super","trait","true","try","type","typeof","union","unsafe","unsized","use","virtual","where","while","yield"], 505 - literal:["true","false","Some","None","Ok","Err"],built_in:o},illegal:"</", 506 - contains:[e.C_LINE_COMMENT_MODE,e.COMMENT("/\\*","\\*/",{contains:["self"] 507 - }),e.inherit(e.QUOTE_STRING_MODE,{begin:/b?"/,illegal:null}),{ 508 - className:"symbol",begin:/'[a-zA-Z_][a-zA-Z0-9_]*(?!')/},{scope:"string", 509 - variants:[{begin:/b?r(#*)"(.|\n)*?"\1(?!#)/},{begin:/b?'/,end:/'/,contains:[{ 510 - scope:"char.escape",match:/\\('|\w|x\w{2}|u\w{4}|U\w{8})/}]}]},{ 511 - className:"number",variants:[{begin:"\\b0b([01_]+)"+r},{begin:"\\b0o([0-7_]+)"+r 512 - },{begin:"\\b0x([A-Fa-f0-9_]+)"+r},{ 513 - begin:"\\b(\\d[\\d_]*(\\.[0-9_]+)?([eE][+-]?[0-9_]+)?)"+r}],relevance:0},{ 514 - begin:[/fn/,/\s+/,a],className:{1:"keyword",3:"title.function"}},{ 515 - className:"meta",begin:"#!?\\[",end:"\\]",contains:[{className:"string", 516 - begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE]}]},{ 517 - begin:[/let/,/\s+/,/(?:mut\s+)?/,a],className:{1:"keyword",3:"keyword", 518 - 4:"variable"}},{begin:[/for/,/\s+/,a,/\s+/,/in/],className:{1:"keyword", 519 - 3:"variable",5:"keyword"}},{begin:[/type/,/\s+/,a],className:{1:"keyword", 520 - 3:"title.class"}},{begin:[/(?:trait|enum|struct|union|impl|for)/,/\s+/,a], 521 - className:{1:"keyword",3:"title.class"}},{begin:e.IDENT_RE+"::",keywords:{ 522 - keyword:"Self",built_in:o,type:c}},{className:"punctuation",begin:"->"},i]}}, 523 - grmr_shell:e=>({name:"Shell Session",aliases:["console","shellsession"], 524 - contains:[{className:"meta.prompt",begin:/^\s{0,3}[/~\w\d[\]()@-]*[>%$#][ ]?/, 525 - starts:{end:/[^\\](?=\s*$)/,subLanguage:"bash"}}]})});const ge=ne 526 - ;for(const e of Object.keys(de)){const n=e.replace("grmr_","").replace("_","-") 527 - ;ge.registerLanguage(n,de[e])}return ge}() 528 - ;"object"==typeof exports&&"undefined"!=typeof module&&(module.exports=hljs);
···
+181 -670
flake.lock
··· 1 { 2 "nodes": { 3 - "actor-typeahead-src": { 4 - "flake": false, 5 - "locked": { 6 - "lastModified": 1762835797, 7 - "narHash": "sha256-heizoWUKDdar6ymfZTnj3ytcEv/L4d4fzSmtr0HlXsQ=", 8 - "ref": "refs/heads/main", 9 - "rev": "677fe7f743050a4e7f09d4a6f87bbf1325a06f6b", 10 - "revCount": 6, 11 - "type": "git", 12 - "url": "https://tangled.org/@jakelazaroff.com/actor-typeahead" 13 - }, 14 - "original": { 15 - "type": "git", 16 - "url": "https://tangled.org/@jakelazaroff.com/actor-typeahead" 17 - } 18 - }, 19 - "arion": { 20 "inputs": { 21 - "flake-parts": "flake-parts", 22 - "haskell-flake": "haskell-flake", 23 "nixpkgs": [ 24 "nixpkgs" 25 - ] 26 }, 27 "locked": { 28 - "lastModified": 1767581175, 29 - "narHash": "sha256-d9ztdDD4EIbsGbERzXhg6Vlo7zMChjpZci4IrS0hSAY=", 30 - "owner": "hercules-ci", 31 - "repo": "arion", 32 - "rev": "3534dd9d0f32c7dbee4f87378d4c95ffcd8838c5", 33 "type": "github" 34 }, 35 "original": { 36 - "owner": "hercules-ci", 37 - "repo": "arion", 38 "type": "github" 39 } 40 }, 41 - "catppuccin": { 42 "inputs": { 43 - "nixpkgs": "nixpkgs" 44 }, 45 "locked": { 46 - "lastModified": 1763111355, 47 - "narHash": "sha256-iUTS8wV7tCo7A456Ro6ZOJ6Bbk0V5Is3zPd+BmJHJ/Q=", 48 - "owner": "catppuccin", 49 - "repo": "nix", 50 - "rev": "5375a9d80c4b2a835c7203920f997f3ea4224423", 51 "type": "github" 52 }, 53 "original": { 54 - "owner": "catppuccin", 55 - "ref": "release-25.05", 56 - "repo": "nix", 57 "type": "github" 58 } 59 }, 60 - "crane": { 61 "locked": { 62 - "lastModified": 1765145449, 63 - "narHash": "sha256-aBVHGWWRzSpfL++LubA0CwOOQ64WNLegrYHwsVuVN7A=", 64 "owner": "ipetkov", 65 "repo": "crane", 66 - "rev": "69f538cdce5955fcd47abfed4395dc6d5194c1c5", 67 "type": "github" 68 }, 69 "original": { ··· 75 "flake-compat": { 76 "flake": false, 77 "locked": { 78 - "lastModified": 1761588595, 79 - "narHash": "sha256-XKUZz9zewJNUj46b4AJdiRZJAvSZ0Dqj2BNfXvFlJC4=", 80 "owner": "edolstra", 81 "repo": "flake-compat", 82 - "rev": "f387cd2afec9419c8ee37694406ca490c3f34ee5", 83 "type": "github" 84 }, 85 "original": { ··· 91 "flake-compat_2": { 92 "flake": false, 93 "locked": { 94 - "lastModified": 1761588595, 95 - "narHash": "sha256-XKUZz9zewJNUj46b4AJdiRZJAvSZ0Dqj2BNfXvFlJC4=", 96 "owner": "edolstra", 97 "repo": "flake-compat", 98 - "rev": "f387cd2afec9419c8ee37694406ca490c3f34ee5", 99 "type": "github" 100 }, 101 "original": { ··· 107 "flake-compat_3": { 108 "flake": false, 109 "locked": { 110 - "lastModified": 1761588595, 111 - "narHash": "sha256-XKUZz9zewJNUj46b4AJdiRZJAvSZ0Dqj2BNfXvFlJC4=", 112 "owner": "edolstra", 113 "repo": "flake-compat", 114 - "rev": "f387cd2afec9419c8ee37694406ca490c3f34ee5", 115 "type": "github" 116 }, 117 "original": { ··· 120 "type": "github" 121 } 122 }, 123 - "flake-compat_4": { 124 - "flake": false, 125 - "locked": { 126 - "lastModified": 1751685974, 127 - "narHash": "sha256-NKw96t+BgHIYzHUjkTK95FqYRVKB8DHpVhefWSz/kTw=", 128 - "rev": "549f2762aebeff29a2e5ece7a7dc0f955281a1d1", 129 - "type": "tarball", 130 - "url": "https://git.lix.systems/api/v1/repos/lix-project/flake-compat/archive/549f2762aebeff29a2e5ece7a7dc0f955281a1d1.tar.gz?rev=549f2762aebeff29a2e5ece7a7dc0f955281a1d1" 131 - }, 132 - "original": { 133 - "type": "tarball", 134 - "url": "https://git.lix.systems/lix-project/flake-compat/archive/main.tar.gz" 135 - } 136 - }, 137 "flake-parts": { 138 "inputs": { 139 "nixpkgs-lib": [ 140 - "arion", 141 "nixpkgs" 142 ] 143 }, 144 "locked": { 145 - "lastModified": 1765835352, 146 - "narHash": "sha256-XswHlK/Qtjasvhd1nOa1e8MgZ8GS//jBoTqWtrS1Giw=", 147 "owner": "hercules-ci", 148 "repo": "flake-parts", 149 - "rev": "a34fae9c08a15ad73f295041fec82323541400a9", 150 - "type": "github" 151 - }, 152 - "original": { 153 - "owner": "hercules-ci", 154 - "repo": "flake-parts", 155 - "type": "github" 156 - } 157 - }, 158 - "flake-parts_2": { 159 - "inputs": { 160 - "nixpkgs-lib": [ 161 - "mystia", 162 - "nix-update-soopy", 163 - "nixpkgs" 164 - ] 165 - }, 166 - "locked": { 167 - "lastModified": 1698882062, 168 - "narHash": "sha256-HkhafUayIqxXyHH1X8d9RDl1M2CkFgZLjKD3MzabiEo=", 169 - "owner": "hercules-ci", 170 - "repo": "flake-parts", 171 - "rev": "8c9fa2545007b49a5db5f650ae91f227672c3877", 172 "type": "github" 173 }, 174 "original": { ··· 178 } 179 }, 180 "flake-utils": { 181 - "inputs": { 182 - "systems": "systems" 183 - }, 184 "locked": { 185 - "lastModified": 1731533236, 186 - "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", 187 "owner": "numtide", 188 "repo": "flake-utils", 189 - "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", 190 "type": "github" 191 }, 192 "original": { ··· 197 }, 198 "flake-utils_2": { 199 "inputs": { 200 - "systems": "systems_2" 201 }, 202 "locked": { 203 - "lastModified": 1731533236, 204 - "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", 205 "owner": "numtide", 206 "repo": "flake-utils", 207 - "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", 208 "type": "github" 209 }, 210 "original": { ··· 213 "type": "github" 214 } 215 }, 216 - "ghostty": { 217 - "inputs": { 218 - "flake-compat": "flake-compat", 219 - "flake-utils": "flake-utils", 220 - "home-manager": "home-manager", 221 - "nixpkgs": "nixpkgs_2", 222 - "zig": "zig", 223 - "zon2nix": "zon2nix" 224 - }, 225 - "locked": { 226 - "lastModified": 1767798180, 227 - "narHash": "sha256-rCwl7URLoGr/YDkJifsbLYPDreFwyshhVKPjdNufOUw=", 228 - "owner": "ghostty-org", 229 - "repo": "ghostty", 230 - "rev": "ba1952c8c289d46be89c9a888c3c9aae97cf725b", 231 - "type": "github" 232 - }, 233 - "original": { 234 - "owner": "ghostty-org", 235 - "repo": "ghostty", 236 - "type": "github" 237 - } 238 - }, 239 "gitignore": { 240 "inputs": { 241 "nixpkgs": [ 242 "lanzaboote", 243 - "pre-commit", 244 "nixpkgs" 245 ] 246 }, 247 "locked": { 248 - "lastModified": 1709087332, 249 - "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", 250 "owner": "hercules-ci", 251 "repo": "gitignore.nix", 252 - "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", 253 "type": "github" 254 }, 255 "original": { ··· 258 "type": "github" 259 } 260 }, 261 - "gomod2nix": { 262 - "inputs": { 263 - "flake-utils": "flake-utils_2", 264 - "nixpkgs": [ 265 - "tangled-core", 266 - "nixpkgs" 267 - ] 268 - }, 269 - "locked": { 270 - "lastModified": 1763982521, 271 - "narHash": "sha256-ur4QIAHwgFc0vXiaxn5No/FuZicxBr2p0gmT54xZkUQ=", 272 - "owner": "nix-community", 273 - "repo": "gomod2nix", 274 - "rev": "02e63a239d6eabd595db56852535992c898eba72", 275 - "type": "github" 276 - }, 277 - "original": { 278 - "owner": "nix-community", 279 - "repo": "gomod2nix", 280 - "type": "github" 281 - } 282 - }, 283 - "haskell-flake": { 284 - "locked": { 285 - "lastModified": 1675296942, 286 - "narHash": "sha256-u1X1sblozi5qYEcLp1hxcyo8FfDHnRUVX3dJ/tW19jY=", 287 - "owner": "srid", 288 - "repo": "haskell-flake", 289 - "rev": "c2cafce9d57bfca41794dc3b99c593155006c71e", 290 - "type": "github" 291 - }, 292 - "original": { 293 - "owner": "srid", 294 - "ref": "0.1.0", 295 - "repo": "haskell-flake", 296 - "type": "github" 297 - } 298 - }, 299 "home-manager": { 300 "inputs": { 301 "nixpkgs": [ 302 - "ghostty", 303 "nixpkgs" 304 ] 305 }, 306 "locked": { 307 - "lastModified": 1755776884, 308 - "narHash": "sha256-CPM7zm6csUx7vSfKvzMDIjepEJv1u/usmaT7zydzbuI=", 309 "owner": "nix-community", 310 "repo": "home-manager", 311 - "rev": "4fb695d10890e9fc6a19deadf85ff79ffb78da86", 312 "type": "github" 313 }, 314 "original": { 315 "owner": "nix-community", 316 - "ref": "release-25.05", 317 "repo": "home-manager", 318 "type": "github" 319 } 320 }, 321 - "home-manager_2": { 322 - "inputs": { 323 - "nixpkgs": [ 324 - "nixpkgs" 325 - ] 326 - }, 327 - "locked": { 328 - "lastModified": 1767780135, 329 - "narHash": "sha256-5SbmsLMgxzPd9YMbFR4IHfOXv6bjWs+dfl6IbSq3r7s=", 330 - "owner": "nix-community", 331 - "repo": "home-manager", 332 - "rev": "c08430923ed417abc653884328a39e98496cfd0f", 333 - "type": "github" 334 - }, 335 - "original": { 336 - "owner": "nix-community", 337 - "ref": "release-25.11", 338 - "repo": "home-manager", 339 - "type": "github" 340 - } 341 - }, 342 - "htmx-src": { 343 - "flake": false, 344 - "locked": { 345 - "narHash": "sha256-nm6avZuEBg67SSyyZUhjpXVNstHHgUxrtBHqJgowU08=", 346 - "type": "file", 347 - "url": "https://unpkg.com/htmx.org@2.0.4/dist/htmx.min.js" 348 - }, 349 - "original": { 350 - "type": "file", 351 - "url": "https://unpkg.com/htmx.org@2.0.4/dist/htmx.min.js" 352 - } 353 - }, 354 - "htmx-ws-src": { 355 - "flake": false, 356 - "locked": { 357 - "narHash": "sha256-2fg6KyEJoO24q0fQqbz9RMaYNPQrMwpZh29tkSqdqGY=", 358 - "type": "file", 359 - "url": "https://cdn.jsdelivr.net/npm/htmx-ext-ws@2.0.2" 360 - }, 361 - "original": { 362 - "type": "file", 363 - "url": "https://cdn.jsdelivr.net/npm/htmx-ext-ws@2.0.2" 364 - } 365 - }, 366 - "hydra": { 367 - "inputs": { 368 - "nix": "nix", 369 - "nix-eval-jobs": "nix-eval-jobs", 370 - "nixpkgs": "nixpkgs_3" 371 - }, 372 - "locked": { 373 - "lastModified": 1767626752, 374 - "narHash": "sha256-VKBXQV3sWJB4DMm8xCMBsyp9HLe5isb+dduWrzPRj7A=", 375 - "owner": "NixOS", 376 - "repo": "hydra", 377 - "rev": "41daeb3cc94077c42395bf1e9f1698e3e1bf5532", 378 - "type": "github" 379 - }, 380 - "original": { 381 - "owner": "NixOS", 382 - "repo": "hydra", 383 - "type": "github" 384 - } 385 - }, 386 - "ibm-plex-mono-src": { 387 - "flake": false, 388 - "locked": { 389 - "lastModified": 1731402384, 390 - "narHash": "sha256-OwUmrPfEehLDz0fl2ChYLK8FQM2p0G1+EMrGsYEq+6g=", 391 - "type": "tarball", 392 - "url": "https://github.com/IBM/plex/releases/download/@ibm%2Fplex-mono@1.1.0/ibm-plex-mono.zip" 393 - }, 394 - "original": { 395 - "type": "tarball", 396 - "url": "https://github.com/IBM/plex/releases/download/@ibm%2Fplex-mono@1.1.0/ibm-plex-mono.zip" 397 - } 398 - }, 399 - "indigo": { 400 - "flake": false, 401 - "locked": { 402 - "lastModified": 1753693716, 403 - "narHash": "sha256-DMIKnCJRODQXEHUxA+7mLzRALmnZhkkbHlFT2rCQYrE=", 404 - "owner": "oppiliappan", 405 - "repo": "indigo", 406 - "rev": "5f170569da9360f57add450a278d73538092d8ca", 407 - "type": "github" 408 - }, 409 - "original": { 410 - "owner": "oppiliappan", 411 - "repo": "indigo", 412 - "type": "github" 413 - } 414 - }, 415 - "inter-fonts-src": { 416 - "flake": false, 417 - "locked": { 418 - "lastModified": 1731687360, 419 - "narHash": "sha256-5vdKKvHAeZi6igrfpbOdhZlDX2/5+UvzlnCQV6DdqoQ=", 420 - "type": "tarball", 421 - "url": "https://github.com/rsms/inter/releases/download/v4.1/Inter-4.1.zip" 422 - }, 423 - "original": { 424 - "type": "tarball", 425 - "url": "https://github.com/rsms/inter/releases/download/v4.1/Inter-4.1.zip" 426 - } 427 - }, 428 - "knotserver-module": { 429 - "inputs": { 430 - "nixpkgs": [ 431 - "nixpkgs" 432 - ], 433 - "tangledCore": [ 434 - "tangled-core" 435 - ] 436 - }, 437 - "locked": { 438 - "lastModified": 1750698324, 439 - "narHash": "sha256-yzHqS8XzYjxuygOVekjFScZf81fZvRtXZpz1xx6mRc0=", 440 - "ref": "knot-fix", 441 - "rev": "3eb304f66d1f5583fedfea8ec3744105f0771239", 442 - "revCount": 17, 443 - "type": "git", 444 - "url": "https://tangled.org/soopy.moe/knotserver-module/" 445 - }, 446 - "original": { 447 - "ref": "knot-fix", 448 - "type": "git", 449 - "url": "https://tangled.org/soopy.moe/knotserver-module/" 450 - } 451 - }, 452 "lanzaboote": { 453 "inputs": { 454 - "crane": "crane", 455 "nixpkgs": [ 456 "nixpkgs" 457 ], 458 - "pre-commit": "pre-commit", 459 - "rust-overlay": "rust-overlay" 460 }, 461 "locked": { 462 - "lastModified": 1765382359, 463 - "narHash": "sha256-RJmgVDzjRI18BWVogG6wpsl1UCuV6ui8qr4DJ1LfWZ8=", 464 "owner": "nix-community", 465 "repo": "lanzaboote", 466 - "rev": "e8c096ade12ec9130ff931b0f0e25d2f1bc63607", 467 "type": "github" 468 }, 469 "original": { 470 "owner": "nix-community", 471 - "ref": "v1.0.0", 472 "repo": "lanzaboote", 473 "type": "github" 474 } 475 }, 476 - "lucide-src": { 477 - "flake": false, 478 - "locked": { 479 - "lastModified": 1754044466, 480 - "narHash": "sha256-+exBR2OToB1iv7ZQI2S4B0lXA/QRvC9n6U99UxGpJGs=", 481 - "type": "tarball", 482 - "url": "https://github.com/lucide-icons/lucide/releases/download/0.536.0/lucide-icons-0.536.0.zip" 483 - }, 484 - "original": { 485 - "type": "tarball", 486 - "url": "https://github.com/lucide-icons/lucide/releases/download/0.536.0/lucide-icons-0.536.0.zip" 487 - } 488 - }, 489 "mystia": { 490 "inputs": { 491 "flake-compat": "flake-compat_3", 492 - "nix-update-soopy": "nix-update-soopy", 493 - "nixpkgs": "nixpkgs_4", 494 - "treefmt-nix": "treefmt-nix_2" 495 }, 496 "locked": { 497 - "lastModified": 1765558006, 498 - "narHash": "sha256-8o8J6YJgx7ZLZJfXlKL/upDyGuRFoTOTKeaLT4ZgUHw=", 499 "owner": "soopyc", 500 "repo": "mystia", 501 - "rev": "5b177c1b32e2f671c1b4b92f0d71ec2a6a55fa9a", 502 "type": "github" 503 }, 504 "original": { ··· 507 "type": "github" 508 } 509 }, 510 - "nix": { 511 - "flake": false, 512 "locked": { 513 - "lastModified": 1767367029, 514 - "narHash": "sha256-RsVlkBkxvPPePEo59AVolBFdayxny9FFv8X4aNq9qFc=", 515 - "owner": "NixOS", 516 - "repo": "nix", 517 - "rev": "394a8da9dd9c046de715e451a96b70e64ce4aa7a", 518 - "type": "github" 519 - }, 520 - "original": { 521 "owner": "NixOS", 522 - "ref": "2.32-maintenance", 523 - "repo": "nix", 524 - "type": "github" 525 - } 526 - }, 527 - "nix-eval-jobs": { 528 - "flake": false, 529 - "locked": { 530 - "lastModified": 1760478325, 531 - "narHash": "sha256-hA+NOH8KDcsuvH7vJqSwk74PyZP3MtvI/l+CggZcnTc=", 532 - "owner": "nix-community", 533 - "repo": "nix-eval-jobs", 534 - "rev": "daa42f9e9c84aeff1e325dd50fda321f53dfd02c", 535 "type": "github" 536 }, 537 "original": { 538 - "owner": "nix-community", 539 - "ref": "v2.32.1", 540 - "repo": "nix-eval-jobs", 541 - "type": "github" 542 } 543 }, 544 - "nix-index-database": { 545 - "inputs": { 546 - "nixpkgs": [ 547 - "nixpkgs" 548 - ] 549 - }, 550 "locked": { 551 - "lastModified": 1765267181, 552 - "narHash": "sha256-d3NBA9zEtBu2JFMnTBqWj7Tmi7R5OikoU2ycrdhQEws=", 553 - "owner": "nix-community", 554 - "repo": "nix-index-database", 555 - "rev": "82befcf7dc77c909b0f2a09f5da910ec95c5b78f", 556 - "type": "github" 557 - }, 558 - "original": { 559 - "owner": "nix-community", 560 - "repo": "nix-index-database", 561 - "type": "github" 562 - } 563 - }, 564 - "nix-update-soopy": { 565 - "inputs": { 566 - "flake-parts": "flake-parts_2", 567 - "nixpkgs": [ 568 - "mystia", 569 - "nixpkgs" 570 - ], 571 - "treefmt-nix": "treefmt-nix" 572 - }, 573 - "locked": { 574 - "lastModified": 1713692400, 575 - "narHash": "sha256-x5T4i96pbVBWm2f7RrE+Y6IOrubKOZRr9vKXpgsWfv0=", 576 - "owner": "soopyc", 577 - "repo": "nix-update", 578 - "rev": "1aca3f7647cb528cb854e09171f7c0b65fa594d9", 579 - "type": "github" 580 - }, 581 - "original": { 582 - "owner": "soopyc", 583 - "repo": "nix-update", 584 - "type": "github" 585 - } 586 - }, 587 - "nixos-hardware": { 588 - "locked": { 589 - "lastModified": 1767105924, 590 - "narHash": "sha256-Sr2uqrc5VVFm5zIqJw87MtB2skLcIQGMywmtjFecWn0=", 591 - "owner": "soopyc", 592 - "repo": "nixos-hardware", 593 - "rev": "cd2b93bdcf720c6b68522eafd5aa1347a25a41b0", 594 - "type": "github" 595 - }, 596 - "original": { 597 - "owner": "soopyc", 598 - "ref": "apple-t2-updates", 599 - "repo": "nixos-hardware", 600 - "type": "github" 601 - } 602 - }, 603 - "nixpkgs": { 604 - "locked": { 605 - "lastModified": 1753749649, 606 - "narHash": "sha256-+jkEZxs7bfOKfBIk430K+tK9IvXlwzqQQnppC2ZKFj4=", 607 "owner": "NixOS", 608 "repo": "nixpkgs", 609 - "rev": "1f08a4df998e21f4e8be8fb6fbf61d11a1a5076a", 610 "type": "github" 611 }, 612 "original": { 613 "owner": "NixOS", 614 - "ref": "nixos-25.05", 615 "repo": "nixpkgs", 616 "type": "github" 617 } 618 }, 619 - "nixpkgs_2": { 620 "locked": { 621 - "lastModified": 1763191728, 622 - "narHash": "sha256-gI9PpaoX4/f28HkjcTbFVpFhtOxSDtOEdFaHZrdETe0=", 623 - "rev": "1d4c88323ac36805d09657d13a5273aea1b34f0c", 624 - "type": "tarball", 625 - "url": "https://releases.nixos.org/nixpkgs/nixpkgs-25.11pre896415.1d4c88323ac3/nixexprs.tar.xz" 626 - }, 627 - "original": { 628 - "type": "tarball", 629 - "url": "https://channels.nixos.org/nixpkgs-unstable/nixexprs.tar.xz" 630 - } 631 - }, 632 - "nixpkgs_3": { 633 - "locked": { 634 - "lastModified": 1767475907, 635 - "narHash": "sha256-w10AFfl20h5MSBCsCegD4xtmcgDlQQeoFsOaIFwHOrE=", 636 "owner": "NixOS", 637 "repo": "nixpkgs", 638 - "rev": "7a0d60a03534a2d14b0805616aa1fd403fccfa55", 639 "type": "github" 640 }, 641 "original": { 642 "owner": "NixOS", 643 - "ref": "nixos-25.11-small", 644 "repo": "nixpkgs", 645 "type": "github" 646 } 647 }, 648 - "nixpkgs_4": { 649 "locked": { 650 - "lastModified": 1763966396, 651 - "narHash": "sha256-6eeL1YPcY1MV3DDStIDIdy/zZCDKgHdkCmsrLJFiZf0=", 652 "owner": "NixOS", 653 "repo": "nixpkgs", 654 - "rev": "5ae3b07d8d6527c42f17c876e404993199144b6a", 655 "type": "github" 656 }, 657 "original": { 658 - "id": "nixpkgs", 659 - "ref": "nixos-unstable", 660 - "type": "indirect" 661 - } 662 - }, 663 - "nixpkgs_5": { 664 - "locked": { 665 - "lastModified": 1767634882, 666 - "narHash": "sha256-BroLZHVDysnh4EdOKKFVVu44/9LYjwZnDdpcQEd6g68=", 667 - "rev": "3c9db02515ef1d9b6b709fc60ba9a540957f661c", 668 - "type": "tarball", 669 - "url": "https://releases.nixos.org/nixos/25.11/nixos-25.11.3265.3c9db02515ef/nixexprs.tar.xz" 670 - }, 671 - "original": { 672 - "type": "tarball", 673 - "url": "https://nixpkgs.dev/channel/nixos-25.11" 674 } 675 }, 676 - "pre-commit": { 677 "inputs": { 678 - "flake-compat": "flake-compat_2", 679 "gitignore": "gitignore", 680 "nixpkgs": [ 681 "lanzaboote", 682 "nixpkgs" 683 - ] 684 }, 685 "locked": { 686 - "lastModified": 1765016596, 687 - "narHash": "sha256-rhSqPNxDVow7OQKi4qS5H8Au0P4S3AYbawBSmJNUtBQ=", 688 "owner": "cachix", 689 "repo": "pre-commit-hooks.nix", 690 - "rev": "548fc44fca28a5e81c5d6b846e555e6b9c2a5a3c", 691 "type": "github" 692 }, 693 "original": { ··· 698 }, 699 "root": { 700 "inputs": { 701 - "arion": "arion", 702 - "catppuccin": "catppuccin", 703 - "ghostty": "ghostty", 704 - "home-manager": "home-manager_2", 705 - "hydra": "hydra", 706 - "knotserver-module": "knotserver-module", 707 "lanzaboote": "lanzaboote", 708 "mystia": "mystia", 709 - "nix-index-database": "nix-index-database", 710 - "nixos-hardware": "nixos-hardware", 711 - "nixpkgs": "nixpkgs_5", 712 - "sops-nix": "sops-nix", 713 - "tangled-core": "tangled-core", 714 - "treefmt-nix": "treefmt-nix_3", 715 - "whitelisted-web": "whitelisted-web" 716 } 717 }, 718 "rust-overlay": { 719 "inputs": { 720 "nixpkgs": [ 721 - "lanzaboote", 722 "nixpkgs" 723 ] 724 }, 725 "locked": { 726 - "lastModified": 1765075567, 727 - "narHash": "sha256-KFDCdQcHJ0hE3Nt5Gm5enRIhmtEifAjpxgUQ3mzSJpA=", 728 "owner": "oxalica", 729 "repo": "rust-overlay", 730 - "rev": "769156779b41e8787a46ca3d7d76443aaf68be6f", 731 "type": "github" 732 }, 733 "original": { ··· 736 "type": "github" 737 } 738 }, 739 - "sops-nix": { 740 "inputs": { 741 "nixpkgs": [ 742 "nixpkgs" 743 ] 744 }, 745 "locked": { 746 - "lastModified": 1767499857, 747 - "narHash": "sha256-0zUU/PW09d6oBaR8x8vMHcAhg1MOvo3CwoXgHijzzNE=", 748 - "owner": "Mic92", 749 - "repo": "sops-nix", 750 - "rev": "ecc41505948ec2ab0325f14c9862a4329c2b4190", 751 "type": "github" 752 }, 753 "original": { 754 - "owner": "Mic92", 755 - "repo": "sops-nix", 756 "type": "github" 757 } 758 }, 759 - "sqlite-lib-src": { 760 - "flake": false, 761 - "locked": { 762 - "lastModified": 1706631843, 763 - "narHash": "sha256-bJoMjirsBjm2Qk9KPiy3yV3+8b/POlYe76/FQbciHro=", 764 - "type": "tarball", 765 - "url": "https://sqlite.org/2024/sqlite-amalgamation-3450100.zip" 766 }, 767 - "original": { 768 - "type": "tarball", 769 - "url": "https://sqlite.org/2024/sqlite-amalgamation-3450100.zip" 770 - } 771 - }, 772 - "systems": { 773 "locked": { 774 - "lastModified": 1681028828, 775 - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", 776 - "owner": "nix-systems", 777 - "repo": "default", 778 - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", 779 "type": "github" 780 }, 781 "original": { 782 - "owner": "nix-systems", 783 - "repo": "default", 784 "type": "github" 785 } 786 }, 787 - "systems_2": { 788 "locked": { 789 "lastModified": 1681028828, 790 "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", ··· 796 "original": { 797 "owner": "nix-systems", 798 "repo": "default", 799 - "type": "github" 800 - } 801 - }, 802 - "tangled-core": { 803 - "inputs": { 804 - "actor-typeahead-src": "actor-typeahead-src", 805 - "flake-compat": "flake-compat_4", 806 - "gomod2nix": "gomod2nix", 807 - "htmx-src": "htmx-src", 808 - "htmx-ws-src": "htmx-ws-src", 809 - "ibm-plex-mono-src": "ibm-plex-mono-src", 810 - "indigo": "indigo", 811 - "inter-fonts-src": "inter-fonts-src", 812 - "lucide-src": "lucide-src", 813 - "nixpkgs": [ 814 - "nixpkgs" 815 - ], 816 - "sqlite-lib-src": "sqlite-lib-src" 817 - }, 818 - "locked": { 819 - "lastModified": 1767767073, 820 - "narHash": "sha256-BSZJ1TY5lGt7xNgFRtcKwYcSOI6VC2CHLfm7y/GgHwU=", 821 - "ref": "refs/heads/master", 822 - "rev": "6dc86ffbed5a290ca6a4890caa2dadea5c8b8a81", 823 - "revCount": 1792, 824 - "type": "git", 825 - "url": "https://tangled.org/tangled.sh/core" 826 - }, 827 - "original": { 828 - "type": "git", 829 - "url": "https://tangled.org/tangled.sh/core" 830 - } 831 - }, 832 - "treefmt-nix": { 833 - "inputs": { 834 - "nixpkgs": [ 835 - "mystia", 836 - "nix-update-soopy", 837 - "nixpkgs" 838 - ] 839 - }, 840 - "locked": { 841 - "lastModified": 1698438538, 842 - "narHash": "sha256-AWxaKTDL3MtxaVTVU5lYBvSnlspOS0Fjt8GxBgnU0Do=", 843 - "owner": "numtide", 844 - "repo": "treefmt-nix", 845 - "rev": "5deb8dc125a9f83b65ca86cf0c8167c46593e0b1", 846 - "type": "github" 847 - }, 848 - "original": { 849 - "owner": "numtide", 850 - "repo": "treefmt-nix", 851 - "type": "github" 852 - } 853 - }, 854 - "treefmt-nix_2": { 855 - "inputs": { 856 - "nixpkgs": [ 857 - "mystia", 858 - "nixpkgs" 859 - ] 860 - }, 861 - "locked": { 862 - "lastModified": 1762938485, 863 - "narHash": "sha256-AlEObg0syDl+Spi4LsZIBrjw+snSVU4T8MOeuZJUJjM=", 864 - "owner": "numtide", 865 - "repo": "treefmt-nix", 866 - "rev": "5b4ee75aeefd1e2d5a1cc43cf6ba65eba75e83e4", 867 - "type": "github" 868 - }, 869 - "original": { 870 - "owner": "numtide", 871 - "repo": "treefmt-nix", 872 - "type": "github" 873 - } 874 - }, 875 - "treefmt-nix_3": { 876 - "inputs": { 877 - "nixpkgs": [ 878 - "nixpkgs" 879 - ] 880 - }, 881 - "locked": { 882 - "lastModified": 1767738726, 883 - "narHash": "sha256-bHATlMr42JABTJgi4Wc8SJCK8Cv9AnR6HCl3k8eTwEs=", 884 - "owner": "numtide", 885 - "repo": "treefmt-nix", 886 - "rev": "4db0238d79254c6d14f251808dc5264b8fc81b73", 887 - "type": "github" 888 - }, 889 - "original": { 890 - "owner": "numtide", 891 - "repo": "treefmt-nix", 892 - "type": "github" 893 - } 894 - }, 895 - "whitelisted-web": { 896 - "inputs": { 897 - "nixpkgs": [ 898 - "nixpkgs" 899 - ] 900 - }, 901 - "locked": { 902 - "lastModified": 1759215222, 903 - "narHash": "sha256-JPKdjfRTpUBxgeaaMiacnCfgDacSixkPWb73dz6C/UA=", 904 - "rev": "c512eeddce32060f8f576918b555af98cac845ad", 905 - "type": "tarball", 906 - "url": "https://patchy.soopy.moe/api/v1/repos/soopyc/whitelisted-web/archive/c512eeddce32060f8f576918b555af98cac845ad.tar.gz" 907 - }, 908 - "original": { 909 - "type": "tarball", 910 - "url": "https://patchy.soopy.moe/soopyc/whitelisted-web/archive/main.tar.gz" 911 - } 912 - }, 913 - "zig": { 914 - "inputs": { 915 - "flake-compat": [ 916 - "ghostty", 917 - "flake-compat" 918 - ], 919 - "flake-utils": [ 920 - "ghostty", 921 - "flake-utils" 922 - ], 923 - "nixpkgs": [ 924 - "ghostty", 925 - "nixpkgs" 926 - ] 927 - }, 928 - "locked": { 929 - "lastModified": 1763295135, 930 - "narHash": "sha256-sGv/NHCmEnJivguGwB5w8LRmVqr1P72OjS+NzcJsssE=", 931 - "owner": "mitchellh", 932 - "repo": "zig-overlay", 933 - "rev": "64f8b42cfc615b2cf99144adf2b7728c7847c72a", 934 - "type": "github" 935 - }, 936 - "original": { 937 - "owner": "mitchellh", 938 - "repo": "zig-overlay", 939 - "type": "github" 940 - } 941 - }, 942 - "zon2nix": { 943 - "inputs": { 944 - "nixpkgs": [ 945 - "ghostty", 946 - "nixpkgs" 947 - ] 948 - }, 949 - "locked": { 950 - "lastModified": 1758405547, 951 - "narHash": "sha256-WgaDgvIZMPvlZcZrpPMjkaalTBnGF2lTG+62znXctWM=", 952 - "owner": "jcollie", 953 - "repo": "zon2nix", 954 - "rev": "bf983aa90ff169372b9fa8c02e57ea75e0b42245", 955 - "type": "github" 956 - }, 957 - "original": { 958 - "owner": "jcollie", 959 - "repo": "zon2nix", 960 - "rev": "bf983aa90ff169372b9fa8c02e57ea75e0b42245", 961 "type": "github" 962 } 963 }
··· 1 { 2 "nodes": { 3 + "attic": { 4 "inputs": { 5 + "crane": "crane", 6 + "flake-compat": "flake-compat", 7 + "flake-utils": "flake-utils", 8 "nixpkgs": [ 9 "nixpkgs" 10 + ], 11 + "nixpkgs-stable": "nixpkgs-stable" 12 }, 13 "locked": { 14 + "lastModified": 1692225040, 15 + "narHash": "sha256-jbQNvkgWGioiC6S39dZVyn6us8p/DlEvm5hQKEYkzDU=", 16 + "owner": "zhaofengli", 17 + "repo": "attic", 18 + "rev": "b43d12082e34bceb26038bdad0438fd68804cfcd", 19 "type": "github" 20 }, 21 "original": { 22 + "owner": "zhaofengli", 23 + "repo": "attic", 24 "type": "github" 25 } 26 }, 27 + "crane": { 28 "inputs": { 29 + "flake-compat": [ 30 + "attic", 31 + "flake-compat" 32 + ], 33 + "flake-utils": [ 34 + "attic", 35 + "flake-utils" 36 + ], 37 + "nixpkgs": [ 38 + "attic", 39 + "nixpkgs" 40 + ], 41 + "rust-overlay": "rust-overlay" 42 }, 43 "locked": { 44 + "lastModified": 1677892403, 45 + "narHash": "sha256-/Wi0L1spSWLFj+UQxN3j0mPYMoc7ZoAujpUF/juFVII=", 46 + "owner": "ipetkov", 47 + "repo": "crane", 48 + "rev": "105e27adb70a9890986b6d543a67761cbc1964a2", 49 "type": "github" 50 }, 51 "original": { 52 + "owner": "ipetkov", 53 + "repo": "crane", 54 "type": "github" 55 } 56 }, 57 + "crane_2": { 58 + "inputs": { 59 + "flake-compat": [ 60 + "lanzaboote", 61 + "flake-compat" 62 + ], 63 + "flake-utils": [ 64 + "lanzaboote", 65 + "flake-utils" 66 + ], 67 + "nixpkgs": [ 68 + "lanzaboote", 69 + "nixpkgs" 70 + ], 71 + "rust-overlay": [ 72 + "lanzaboote", 73 + "rust-overlay" 74 + ] 75 + }, 76 "locked": { 77 + "lastModified": 1681177078, 78 + "narHash": "sha256-ZNIjBDou2GOabcpctiQykEQVkI8BDwk7TyvlWlI4myE=", 79 "owner": "ipetkov", 80 "repo": "crane", 81 + "rev": "0c9f468ff00576577d83f5019a66c557ede5acf6", 82 "type": "github" 83 }, 84 "original": { ··· 90 "flake-compat": { 91 "flake": false, 92 "locked": { 93 + "lastModified": 1673956053, 94 + "narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=", 95 "owner": "edolstra", 96 "repo": "flake-compat", 97 + "rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9", 98 "type": "github" 99 }, 100 "original": { ··· 106 "flake-compat_2": { 107 "flake": false, 108 "locked": { 109 + "lastModified": 1673956053, 110 + "narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=", 111 "owner": "edolstra", 112 "repo": "flake-compat", 113 + "rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9", 114 "type": "github" 115 }, 116 "original": { ··· 122 "flake-compat_3": { 123 "flake": false, 124 "locked": { 125 + "lastModified": 1673956053, 126 + "narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=", 127 "owner": "edolstra", 128 "repo": "flake-compat", 129 + "rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9", 130 "type": "github" 131 }, 132 "original": { ··· 135 "type": "github" 136 } 137 }, 138 "flake-parts": { 139 "inputs": { 140 "nixpkgs-lib": [ 141 + "lanzaboote", 142 "nixpkgs" 143 ] 144 }, 145 "locked": { 146 + "lastModified": 1680392223, 147 + "narHash": "sha256-n3g7QFr85lDODKt250rkZj2IFS3i4/8HBU2yKHO3tqw=", 148 "owner": "hercules-ci", 149 "repo": "flake-parts", 150 + "rev": "dcc36e45d054d7bb554c9cdab69093debd91a0b5", 151 "type": "github" 152 }, 153 "original": { ··· 157 } 158 }, 159 "flake-utils": { 160 "locked": { 161 + "lastModified": 1667395993, 162 + "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", 163 "owner": "numtide", 164 "repo": "flake-utils", 165 + "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", 166 "type": "github" 167 }, 168 "original": { ··· 173 }, 174 "flake-utils_2": { 175 "inputs": { 176 + "systems": "systems" 177 }, 178 "locked": { 179 + "lastModified": 1681202837, 180 + "narHash": "sha256-H+Rh19JDwRtpVPAWp64F+rlEtxUWBAQW28eAi3SRSzg=", 181 "owner": "numtide", 182 "repo": "flake-utils", 183 + "rev": "cfacdce06f30d2b68473a46042957675eebb3401", 184 "type": "github" 185 }, 186 "original": { ··· 189 "type": "github" 190 } 191 }, 192 "gitignore": { 193 "inputs": { 194 "nixpkgs": [ 195 "lanzaboote", 196 + "pre-commit-hooks-nix", 197 "nixpkgs" 198 ] 199 }, 200 "locked": { 201 + "lastModified": 1660459072, 202 + "narHash": "sha256-8DFJjXG8zqoONA1vXtgeKXy68KdJL5UaXR8NtVMUbx8=", 203 "owner": "hercules-ci", 204 "repo": "gitignore.nix", 205 + "rev": "a20de23b925fd8264fd7fad6454652e142fd7f73", 206 "type": "github" 207 }, 208 "original": { ··· 211 "type": "github" 212 } 213 }, 214 "home-manager": { 215 "inputs": { 216 "nixpkgs": [ 217 "nixpkgs" 218 ] 219 }, 220 "locked": { 221 + "lastModified": 1693208669, 222 + "narHash": "sha256-hHFaaUsZ860wvppPeiu7nJn/nXZjJfnqAQEu9SPFE9I=", 223 "owner": "nix-community", 224 "repo": "home-manager", 225 + "rev": "5bac4a1c06cd77cf8fc35a658ccb035a6c50cd2c", 226 "type": "github" 227 }, 228 "original": { 229 "owner": "nix-community", 230 + "ref": "release-23.05", 231 "repo": "home-manager", 232 "type": "github" 233 } 234 }, 235 "lanzaboote": { 236 "inputs": { 237 + "crane": "crane_2", 238 + "flake-compat": "flake-compat_2", 239 + "flake-parts": "flake-parts", 240 + "flake-utils": "flake-utils_2", 241 "nixpkgs": [ 242 "nixpkgs" 243 ], 244 + "pre-commit-hooks-nix": "pre-commit-hooks-nix", 245 + "rust-overlay": "rust-overlay_2" 246 }, 247 "locked": { 248 + "lastModified": 1682802423, 249 + "narHash": "sha256-Fb5TeRTdvUlo/5Yi2d+FC8a6KoRLk2h1VE0/peMhWPs=", 250 "owner": "nix-community", 251 "repo": "lanzaboote", 252 + "rev": "64b903ca87d18cef2752c19c098af275c6e51d63", 253 "type": "github" 254 }, 255 "original": { 256 "owner": "nix-community", 257 + "ref": "v0.3.0", 258 "repo": "lanzaboote", 259 "type": "github" 260 } 261 }, 262 "mystia": { 263 "inputs": { 264 "flake-compat": "flake-compat_3", 265 + "nixpkgs": [ 266 + "nixpkgs" 267 + ] 268 }, 269 "locked": { 270 + "lastModified": 1694357290, 271 + "narHash": "sha256-Mai5saiiuBWlQzTreLtIeUJQJN9zMH/UBIKJPOqnasM=", 272 "owner": "soopyc", 273 "repo": "mystia", 274 + "rev": "cfe783698ccd18cb27fb2e422917f14b82f7afc4", 275 "type": "github" 276 }, 277 "original": { ··· 280 "type": "github" 281 } 282 }, 283 + "nixpkgs": { 284 "locked": { 285 + "lastModified": 1694237756, 286 + "narHash": "sha256-8T29BDnqRexwVy3jhEzIH9r7ROiF9I6ESVD0QLC6VXk=", 287 "owner": "NixOS", 288 + "repo": "nixpkgs", 289 + "rev": "1a5bda2b28ea75a96dda2c349fe6d5e7864950ee", 290 "type": "github" 291 }, 292 "original": { 293 + "id": "nixpkgs", 294 + "ref": "master", 295 + "type": "indirect" 296 } 297 }, 298 + "nixpkgs-stable": { 299 "locked": { 300 + "lastModified": 1685004253, 301 + "narHash": "sha256-AbVL1nN/TDicUQ5wXZ8xdLERxz/eJr7+o8lqkIOVuaE=", 302 "owner": "NixOS", 303 "repo": "nixpkgs", 304 + "rev": "3e01645c40b92d29f3ae76344a6d654986a91a91", 305 "type": "github" 306 }, 307 "original": { 308 "owner": "NixOS", 309 + "ref": "nixos-23.05", 310 "repo": "nixpkgs", 311 "type": "github" 312 } 313 }, 314 + "nixpkgs-stable_2": { 315 "locked": { 316 + "lastModified": 1678872516, 317 + "narHash": "sha256-/E1YwtMtFAu2KUQKV/1+KFuReYPANM2Rzehk84VxVoc=", 318 "owner": "NixOS", 319 "repo": "nixpkgs", 320 + "rev": "9b8e5abb18324c7fe9f07cb100c3cd4a29cda8b8", 321 "type": "github" 322 }, 323 "original": { 324 "owner": "NixOS", 325 + "ref": "nixos-22.11", 326 "repo": "nixpkgs", 327 "type": "github" 328 } 329 }, 330 + "nixpkgs-stable_3": { 331 "locked": { 332 + "lastModified": 1693675694, 333 + "narHash": "sha256-2pIOyQwGyy2FtFAUIb8YeKVmOCcPOTVphbAvmshudLE=", 334 "owner": "NixOS", 335 "repo": "nixpkgs", 336 + "rev": "5601118d39ca9105f8e7b39d4c221d3388c0419d", 337 "type": "github" 338 }, 339 "original": { 340 + "owner": "NixOS", 341 + "ref": "release-23.05", 342 + "repo": "nixpkgs", 343 + "type": "github" 344 } 345 }, 346 + "pre-commit-hooks-nix": { 347 "inputs": { 348 + "flake-compat": [ 349 + "lanzaboote", 350 + "flake-compat" 351 + ], 352 + "flake-utils": [ 353 + "lanzaboote", 354 + "flake-utils" 355 + ], 356 "gitignore": "gitignore", 357 "nixpkgs": [ 358 "lanzaboote", 359 "nixpkgs" 360 + ], 361 + "nixpkgs-stable": "nixpkgs-stable_2" 362 }, 363 "locked": { 364 + "lastModified": 1681413034, 365 + "narHash": "sha256-/t7OjNQcNkeWeSq/CFLYVBfm+IEnkjoSm9iKvArnUUI=", 366 "owner": "cachix", 367 "repo": "pre-commit-hooks.nix", 368 + "rev": "d3de8f69ca88fb6f8b09e5b598be5ac98d28ede5", 369 "type": "github" 370 }, 371 "original": { ··· 376 }, 377 "root": { 378 "inputs": { 379 + "attic": "attic", 380 + "home-manager": "home-manager", 381 "lanzaboote": "lanzaboote", 382 "mystia": "mystia", 383 + "nixpkgs": "nixpkgs", 384 + "sops-nix": "sops-nix" 385 } 386 }, 387 "rust-overlay": { 388 "inputs": { 389 + "flake-utils": [ 390 + "attic", 391 + "crane", 392 + "flake-utils" 393 + ], 394 "nixpkgs": [ 395 + "attic", 396 + "crane", 397 "nixpkgs" 398 ] 399 }, 400 "locked": { 401 + "lastModified": 1675391458, 402 + "narHash": "sha256-ukDKZw922BnK5ohL9LhwtaDAdCsJL7L6ScNEyF1lO9w=", 403 "owner": "oxalica", 404 "repo": "rust-overlay", 405 + "rev": "383a4acfd11d778d5c2efcf28376cbd845eeaedf", 406 "type": "github" 407 }, 408 "original": { ··· 411 "type": "github" 412 } 413 }, 414 + "rust-overlay_2": { 415 "inputs": { 416 + "flake-utils": [ 417 + "lanzaboote", 418 + "flake-utils" 419 + ], 420 "nixpkgs": [ 421 + "lanzaboote", 422 "nixpkgs" 423 ] 424 }, 425 "locked": { 426 + "lastModified": 1682129965, 427 + "narHash": "sha256-1KRPIorEL6pLpJR04FwAqqnt4Tzcm4MqD84yhlD+XSk=", 428 + "owner": "oxalica", 429 + "repo": "rust-overlay", 430 + "rev": "2c417c0460b788328220120c698630947547ee83", 431 "type": "github" 432 }, 433 "original": { 434 + "owner": "oxalica", 435 + "repo": "rust-overlay", 436 "type": "github" 437 } 438 }, 439 + "sops-nix": { 440 + "inputs": { 441 + "nixpkgs": [ 442 + "nixpkgs" 443 + ], 444 + "nixpkgs-stable": "nixpkgs-stable_3" 445 }, 446 "locked": { 447 + "lastModified": 1693898833, 448 + "narHash": "sha256-OIrMAGNYNeLs6IvBynxcXub7aSW3GEUvWNsb7zx6zuU=", 449 + "owner": "Mic92", 450 + "repo": "sops-nix", 451 + "rev": "faf21ac162173c2deb54e5fdeed002a9bd6e8623", 452 "type": "github" 453 }, 454 "original": { 455 + "owner": "Mic92", 456 + "repo": "sops-nix", 457 "type": "github" 458 } 459 }, 460 + "systems": { 461 "locked": { 462 "lastModified": 1681028828, 463 "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", ··· 469 "original": { 470 "owner": "nix-systems", 471 "repo": "default", 472 "type": "github" 473 } 474 }
+39 -93
flake.nix
··· 3 4 nixConfig = { 5 extra-substituters = [ 6 - "https://cache.soopy.moe" 7 ]; 8 9 extra-trusted-public-keys = [ 10 - "cache.soopy.moe-1:0RZVsQeR+GOh0VQI9rvnHz55nVXkFardDqfm4+afjPo=" 11 ]; 12 fallback = true; 13 }; 14 15 inputs = { 16 - mystia.url = "github:soopyc/mystia"; 17 - # nixpkgs.follows = "mystia/nixpkgs"; 18 - nixpkgs.url = "https://nixpkgs.dev/channel/nixos-25.11"; 19 - 20 - nixos-hardware.url = "github:soopyc/nixos-hardware/apple-t2-updates"; 21 - catppuccin.url = "github:catppuccin/nix/release-25.05"; # TODO 22 - hydra.url = "github:NixOS/hydra"; 23 - ghostty.url = "github:ghostty-org/ghostty"; 24 - 25 - nix-index-database = { 26 - url = "github:nix-community/nix-index-database"; 27 - inputs.nixpkgs.follows = "nixpkgs"; 28 - }; 29 30 home-manager = { 31 - # sync with nixpkgs! 32 - url = "github:nix-community/home-manager/release-25.11"; 33 inputs.nixpkgs.follows = "nixpkgs"; 34 }; 35 36 - whitelisted-web = { 37 - url = "https://patchy.soopy.moe/soopyc/whitelisted-web/archive/main.tar.gz"; 38 inputs.nixpkgs.follows = "nixpkgs"; 39 }; 40 41 - lanzaboote = { 42 - url = "github:nix-community/lanzaboote/v1.0.0"; 43 inputs.nixpkgs.follows = "nixpkgs"; 44 }; 45 ··· 48 inputs.nixpkgs.follows = "nixpkgs"; 49 }; 50 51 - arion = { 52 - url = "github:hercules-ci/arion"; 53 inputs.nixpkgs.follows = "nixpkgs"; 54 }; 55 56 - tangled-core = { 57 - url = "git+https://tangled.org/tangled.sh/core"; 58 - inputs.nixpkgs.follows = "nixpkgs"; 59 - }; 60 61 - knotserver-module = { 62 - url = "git+https://tangled.org/soopy.moe/knotserver-module/?ref=knot-fix"; 63 - inputs.nixpkgs.follows = "nixpkgs"; 64 - inputs.tangledCore.follows = "tangled-core"; 65 - }; 66 - 67 - treefmt-nix = { 68 - url = "github:numtide/treefmt-nix"; 69 - inputs.nixpkgs.follows = "nixpkgs"; 70 }; 71 - }; 72 73 - outputs = 74 - { 75 - self, 76 - nixpkgs, 77 - treefmt-nix, 78 - ... 79 - }@inputs: 80 - let 81 - lib = nixpkgs.lib; 82 - 83 - systems = [ 84 - "x86_64-linux" 85 - "aarch64-linux" 86 - "x86_64-darwin" 87 - "aarch64-darwin" 88 - ]; 89 - forAllSystems = fn: lib.genAttrs systems (system: fn nixpkgs.legacyPackages.${system}); 90 - treefmt = forAllSystems (pkgs: treefmt-nix.lib.evalModule pkgs ./nix/treefmt.nix); 91 - in 92 - { 93 - lib.x86_64-linux = import ./global/utils.nix { 94 - inherit inputs; 95 - system = "x86_64-linux"; 96 }; 97 - 98 - packages.x86_64-linux = 99 - let 100 - system = "x86_64-linux"; 101 - in 102 - { 103 - brcmfmac = 104 - let 105 - pkgs = import nixpkgs { 106 - inherit system; 107 - config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [ "brcm-mac-firmware" ]; 108 - }; 109 - in 110 - pkgs.callPackage ./vendor/brcmfmac { }; 111 - }; 112 113 - nixosConfigurations = import systems/default.nix { inherit inputs lib; }; 114 - 115 - devShells = forAllSystems (pkgs: import ./nix/devshell.nix { inherit pkgs inputs; }); 116 - 117 - checks = forAllSystems ( 118 - pkgs: 119 - (import ./nix/checks.nix { inherit pkgs inputs; }) 120 - // { 121 - formatting = treefmt.${pkgs.system}.config.build.check self; 122 - } 123 - ); 124 - 125 - formatter = forAllSystems (pkgs: treefmt.${pkgs.system}.config.build.wrapper); 126 - 127 - _debug = { 128 - inherit inputs; 129 - }; 130 - }; 131 }
··· 3 4 nixConfig = { 5 extra-substituters = [ 6 + "https://nonbunary.soopy.moe/gensokyo-global" 7 + "https://nonbunary.soopy.moe/gensokyo-systems" 8 ]; 9 10 extra-trusted-public-keys = [ 11 + "gensokyo-global:XiCN0D2XeSxF4urFYTprR+1Nr/5hWyydcETwZtPG6Ec=" 12 + "gensokyo-systems:r/Wx649dPuQrCN9Pgh3Jic526zQNk3oWMqYJHnob/Ok=" 13 ]; 14 + 15 fallback = true; 16 }; 17 18 inputs = { 19 + nixpkgs.url = "nixpkgs/master"; 20 21 home-manager = { 22 + url = "github:nix-community/home-manager/release-23.05"; 23 inputs.nixpkgs.follows = "nixpkgs"; 24 }; 25 26 + lanzaboote = { 27 + url = "github:nix-community/lanzaboote/v0.3.0"; 28 inputs.nixpkgs.follows = "nixpkgs"; 29 }; 30 31 + attic = { 32 + url = "github:zhaofengli/attic"; 33 inputs.nixpkgs.follows = "nixpkgs"; 34 }; 35 ··· 38 inputs.nixpkgs.follows = "nixpkgs"; 39 }; 40 41 + mystia = { 42 + url = "github:soopyc/mystia"; 43 inputs.nixpkgs.follows = "nixpkgs"; 44 }; 45 + }; 46 47 + outputs = { 48 + nixpkgs, 49 + home-manager, 50 + ... 51 + } @ inputs: let 52 + utils = import ./global/utils.nix; 53 + lib = nixpkgs.lib; 54 55 + systems = [ 56 + "x86_64-linux" 57 + "aarch64-linux" 58 + "x86_64-darwin" 59 + "aarch64-darwin" 60 + ]; 61 + forAllSystems = fn: lib.genAttrs systems (s: fn nixpkgs.legacyPackages.${s}); 62 + in { 63 + nixosConfigurations = { 64 + koumakan = import ./systems/koumakan {inherit utils lib inputs;}; 65 }; 66 67 + devShells = forAllSystems (pkgs: { 68 + default = pkgs.mkShell { 69 + packages = [ 70 + (pkgs.python311.withPackages (p: [p.requests])) 71 + ]; 72 }; 73 + }); 74 75 + formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.alejandra; 76 + }; 77 }
-8
garnix.yaml
··· 1 - # json because yaml sucks 2 - { 3 - "builds": { 4 - "exclude": [ 5 - "*.brcmfmac" 6 - ] 7 - } 8 - }
···
+2 -24
global/core.nix
··· 1 - { 2 - pkgs, 3 - inputs, 4 - ... 5 - }: 6 - { 7 imports = [ 8 ./upgrade-diff.nix 9 ]; 10 - 11 # Set default i18n configuration 12 i18n.defaultLocale = "en_US.UTF-8"; 13 console = { 14 font = "Lat2-Terminus16"; 15 keyMap = "us"; 16 }; 17 - 18 - # We do not like overlays but sometimes they have to be done 19 - nixpkgs.overlays = import ./overlays inputs; 20 - 21 - system.rebuild.enableNg = true; 22 - 23 - system.configurationRevision = inputs.self.rev or inputs.self.dirtyRev or "unknown"; 24 - 25 - hardware.enableRedistributableFirmware = true; 26 - services.fwupd.enable = true; 27 - 28 - boot.tmp = { 29 - useTmpfs = false; # this causes oom on kernel builds 30 - cleanOnBoot = true; 31 - }; 32 - 33 - boot.crashDump.enable = true; 34 35 time.timeZone = "Asia/Hong_Kong"; 36
··· 1 + {pkgs, ...}: { 2 imports = [ 3 ./upgrade-diff.nix 4 + ./system 5 ]; 6 # Set default i18n configuration 7 i18n.defaultLocale = "en_US.UTF-8"; 8 console = { 9 font = "Lat2-Terminus16"; 10 keyMap = "us"; 11 }; 12 13 time.timeZone = "Asia/Hong_Kong"; 14
-23
global/default.nix
··· 1 - # This is a NixOS module, you cannot use this as a standalone file. 2 - # Other files may be though, but things that starts with {...}: most definitely aren't. 3 - { inputs, ... }: 4 - { 5 - imports = [ 6 - ./core.nix 7 - ./gensokyo 8 - ./programs 9 - ./sops.nix 10 - 11 - ./home.nix 12 - ../users 13 - 14 - ./gui 15 - 16 - inputs.arion.nixosModules.arion 17 - inputs.sops-nix.nixosModules.sops 18 - inputs.catppuccin.nixosModules.catppuccin 19 - inputs.lanzaboote.nixosModules.lanzaboote 20 - inputs.home-manager.nixosModules.home-manager 21 - inputs.nix-index-database.nixosModules.nix-index 22 - ]; 23 - }
···
-7
global/gensokyo/default.nix
··· 1 - { ... }: 2 - { 3 - imports = [ 4 - ./traits.nix 5 - ./presets 6 - ]; 7 - }
···
-37
global/gensokyo/presets/certificates.nix
··· 1 - { 2 - _utils, 3 - config, 4 - lib, 5 - ... 6 - }: 7 - let 8 - secrets = _utils.setupSecrets config { 9 - namespace = "lego"; 10 - secrets = [ "cf_token" ]; 11 - }; 12 - in 13 - { 14 - config = lib.mkIf config.gensokyo.presets.certificates ( 15 - lib.mkMerge [ 16 - { 17 - security.acme = { 18 - acceptTerms = true; 19 - 20 - defaults = { 21 - # == lego Configuration == 22 - # In an ideal world we would have an ed/cv25519 algo here but oh well 23 - keyType = "ec256"; # Ensure we use ec keys 24 - credentialFiles.CLOUDFLARE_DNS_API_TOKEN_FILE = secrets.get "cf_token"; 25 - dnsProvider = "cloudflare"; 26 - 27 - # == LE Configuration == 28 - email = "me@soopy.moe"; 29 - # server = "https://acme-staging-v02.api.letsencrypt.org/directory"; 30 - server = "https://acme-v02.api.letsencrypt.org/directory"; 31 - }; 32 - }; 33 - } 34 - secrets.generate 35 - ] 36 - ); 37 - }
···
-16
global/gensokyo/presets/default.nix
··· 1 - { lib, ... }: 2 - { 3 - imports = [ 4 - ./vmetrics.nix 5 - ./nginx.nix 6 - ./certificates.nix 7 - ./secureboot.nix 8 - ]; 9 - 10 - options.gensokyo.presets = { 11 - vmetrics = lib.mkEnableOption "vmetrics presets"; 12 - nginx = lib.mkEnableOption "nginx presets"; 13 - certificates = lib.mkEnableOption "boilerplate certificate issuing presets"; 14 - secureboot = lib.mkEnableOption "configuration of secureboot related options"; 15 - }; 16 - }
···
-66
global/gensokyo/presets/nginx.nix
··· 1 - { 2 - lib, 3 - config, 4 - ... 5 - }: 6 - let 7 - presetConf = config.gensokyo.presets; 8 - in 9 - lib.mkIf presetConf.nginx ( 10 - lib.mkMerge [ 11 - { 12 - services.nginx = { 13 - enable = lib.mkDefault true; 14 - enableReload = lib.mkDefault true; 15 - 16 - statusPage = true; 17 - 18 - clientMaxBodySize = lib.mkDefault "5m"; 19 - recommendedTlsSettings = lib.mkDefault true; 20 - recommendedProxySettings = lib.mkDefault true; 21 - 22 - logError = "/var/log/nginx/error.log crit"; # override so we don't log to stderr. 23 - commonHttpConfig = '' 24 - # we already set this, hide that from proxied servers that set the header. 25 - proxy_hide_header strict-transport-security; 26 - 27 - log_format anonymized_combined '0.0.0.0 - - [$time_local] "$request" ' 28 - '$status $body_bytes_sent "-" ' 29 - '"$http_user_agent" "host=$host;timing=$request_time"'; 30 - access_log /var/log/nginx/access.log anonymized_combined; 31 - ''; 32 - 33 - # prevent people from just being able to take the server down immediately 34 - eventsConfig = '' 35 - worker_connections 1024; 36 - ''; 37 - appendConfig = '' 38 - worker_processes auto; 39 - ''; 40 - }; 41 - 42 - networking.firewall.allowedTCPPorts = [ 43 - 80 44 - 443 45 - ]; 46 - } 47 - 48 - (lib.mkIf presetConf.vmetrics { 49 - services.prometheus.exporters.nginx.enable = true; 50 - services.vmagent.prometheusConfig.scrape_configs = [ 51 - { 52 - job_name = "nginx"; 53 - static_configs = [ 54 - { targets = [ "localhost:${builtins.toString config.services.prometheus.exporters.nginx.port}" ]; } 55 - ]; 56 - relabel_configs = [ 57 - { 58 - target_label = "instance"; 59 - replacement = "${config.networking.fqdnOrHostName}"; 60 - } 61 - ]; 62 - } 63 - ]; 64 - }) 65 - ] 66 - )
···
-20
global/gensokyo/presets/secureboot.nix
··· 1 - { 2 - pkgs, 3 - config, 4 - lib, 5 - ... 6 - }: 7 - # see https://github.com/nix-community/lanzaboote/blob/master/docs/QUICK_START.md 8 - let 9 - cfg = config.gensokyo.presets; 10 - in 11 - lib.mkIf cfg.secureboot { 12 - environment.systemPackages = [ pkgs.sbctl ]; 13 - 14 - # lanzaboote currently replaces systemd-boot, so disable that here. 15 - boot.loader.systemd-boot.enable = lib.mkForce false; 16 - boot.lanzaboote = { 17 - enable = true; 18 - pkiBundle = "/var/lib/sbctl"; 19 - }; 20 - }
···
-50
global/gensokyo/presets/vmetrics.nix
··· 1 - { 2 - hostname, 3 - lib, 4 - config, 5 - _utils, 6 - ... 7 - }: 8 - let 9 - secrets = _utils.setupSecrets config { 10 - namespace = "vmetrics"; 11 - secrets = [ "auth" ]; 12 - }; 13 - in 14 - { 15 - # inb4 this causes conflicts 16 - config = lib.mkIf config.gensokyo.presets.vmetrics ( 17 - lib.mkMerge [ 18 - { 19 - services.prometheus.exporters.node.enable = true; 20 - services.vmagent.enable = true; 21 - services.vmagent.remoteWrite.url = "https://panopticon.soopy.moe/api/v1/write"; 22 - services.vmagent.extraArgs = [ "-remoteWrite.bearerTokenFile=%d/auth_token" ]; 23 - services.vmagent.prometheusConfig = { 24 - global.scrape_interval = "30s"; 25 - 26 - scrape_configs = [ 27 - { 28 - job_name = "node"; 29 - static_configs = [ 30 - { targets = [ "localhost:${builtins.toString config.services.prometheus.exporters.node.port}" ]; } 31 - ]; 32 - relabel_configs = [ 33 - { 34 - target_label = "instance"; 35 - replacement = "${hostname}.d.soopy.moe"; 36 - } 37 - ]; 38 - } 39 - ]; 40 - }; 41 - 42 - systemd.services.vmagent.serviceConfig.LoadCredential = [ 43 - "auth_token:${secrets.get "auth"}" 44 - ]; 45 - } 46 - 47 - secrets.generate 48 - ] 49 - ); 50 - }
···
-14
global/gensokyo/traits.nix
··· 1 - { lib, ... }: 2 - { 3 - options.gensokyo.traits = { 4 - sensitive = lib.mkEnableOption "or selectively disable options specific to security-sensitive systems"; 5 - gui = lib.mkEnableOption "graphical programs, related packages and modules"; 6 - games = lib.mkEnableOption "games and etc"; 7 - hidpi = lib.mkEnableOption "options tailored for hidpi devices"; 8 - portable = lib.mkEnableOption '' 9 - modules commonly found with portable devices. 10 - 11 - This includes stuff like Wifi modules and etc 12 - ''; 13 - }; 14 - }
···
-34
global/gui/audio.nix
··· 1 - { 2 - pkgs, 3 - lib, 4 - config, 5 - ... 6 - }: 7 - lib.mkIf config.gensokyo.traits.gui { 8 - services = { 9 - pipewire = { 10 - enable = true; 11 - 12 - audio.enable = true; 13 - jack.enable = true; 14 - pulse.enable = true; 15 - alsa = { 16 - enable = true; 17 - support32Bit = true; 18 - }; 19 - 20 - wireplumber.configPackages = [ 21 - # why aren't these consistent 22 - (pkgs.writeTextDir "share/wireplumber/wireplumber.conf.d/50-disable-alsa-suspend.conf" '' 23 - monitor.alsa.rules = [{ 24 - matches = [{node.name = "~alsa_output.*"}] 25 - actions = { 26 - update-props = {session.suspend-timeout-seconds = 0} 27 - } 28 - }] 29 - '') 30 - ]; 31 - }; 32 - }; 33 - security.rtkit.enable = true; 34 - }
···
-11
global/gui/browser.nix
··· 1 - { 2 - lib, 3 - config, 4 - ... 5 - }: 6 - lib.mkIf config.gensokyo.traits.gui { 7 - programs.firefox = { 8 - enable = true; 9 - # package = pkgs.firefox-devedition; 10 - }; 11 - }
···
-24
global/gui/default.nix
··· 1 - { ... }: 2 - { 3 - imports = [ 4 - ./power.nix 5 - ./hardware.nix 6 - ./input.nix 7 - ./audio.nix 8 - 9 - ./wine.nix 10 - ./locale.nix 11 - 12 - ./dm.nix 13 - ./wayland.nix 14 - ./niri.nix 15 - ./kde.nix 16 - ./fonts.nix 17 - 18 - ./browser.nix 19 - ./development.nix 20 - 21 - ./degeneracy.nix 22 - ./packages.nix 23 - ]; 24 - }
···
-21
global/gui/degeneracy.nix
··· 1 - { 2 - pkgs, 3 - lib, 4 - config, 5 - ... 6 - }: 7 - lib.mkIf config.gensokyo.traits.gui { 8 - environment.systemPackages = [ 9 - pkgs.dosage-tracker 10 - pkgs.signal-desktop 11 - (pkgs.discord.override { 12 - withOpenASAR = true; 13 - }) 14 - ]; 15 - 16 - # some things work better with flatpaks 17 - services.flatpak.enable = true; 18 - 19 - # this is in degeneracy because no one likes printers 20 - services.printing.enable = true; 21 - }
···
-16
global/gui/development.nix
··· 1 - { 2 - pkgs, 3 - lib, 4 - config, 5 - ... 6 - }: 7 - lib.mkIf config.gensokyo.traits.gui { 8 - environment.systemPackages = [ 9 - pkgs.sshfs 10 - pkgs.vscodium 11 - 12 - # school requirement 13 - pkgs.eclipses.eclipse-java 14 - pkgs.mars-mips 15 - ]; 16 - }
···
-20
global/gui/dm.nix
··· 1 - { 2 - config, 3 - lib, 4 - # pkgs, 5 - ... 6 - }: 7 - lib.mkIf config.gensokyo.traits.gui { 8 - services.displayManager.sddm = { 9 - enable = true; 10 - autoNumlock = true; 11 - wayland.enable = true; 12 - # theme = "catppuccin-frappe"; 13 - }; 14 - 15 - # environment.systemPackages = [ 16 - # (pkgs.catppuccin-sddm.override { 17 - # flavor = "frappe"; 18 - # }) 19 - # ]; 20 - }
···
-46
global/gui/fonts.nix
··· 1 - { 2 - pkgs, 3 - lib, 4 - config, 5 - # inputs, 6 - ... 7 - }: 8 - lib.mkIf config.gensokyo.traits.gui { 9 - fonts.packages = with pkgs; [ 10 - nerd-fonts.hurmit 11 - nerd-fonts.fira-mono 12 - 13 - cozette 14 - fira-code 15 - noto-fonts 16 - noto-fonts-cjk-sans 17 - noto-fonts-emoji-blob-bin 18 - 19 - last-resort 20 - # inputs.mystia.packages.${pkgs.system}.nishiki-teki 21 - ]; 22 - 23 - fonts.fontconfig = { 24 - localConf = '' 25 - <?xml version="1.0"?> 26 - <!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd"> 27 - <fontconfig> 28 - <!-- XML is stupid --> 29 - 30 - <alias binding="same"> 31 - <family>Nishiki-Teki</family> 32 - <prefer> 33 - <family>Noto Sans CJK JP</family> 34 - </prefer> 35 - <default><family>sans-serif</family></default> 36 - </alias> 37 - 38 - <selectfont> 39 - <rejectfont> 40 - <pattern><patelt name="family"><string>FreeMono</string></patelt></pattern> 41 - </rejectfont> 42 - </selectfont> 43 - </fontconfig> 44 - ''; 45 - }; 46 - }
···
-16
global/gui/hardware.nix
··· 1 - { 2 - pkgs, 3 - lib, 4 - config, 5 - ... 6 - }: 7 - lib.mkIf config.gensokyo.traits.gui { 8 - # other devices support modules 9 - 10 - hardware.keyboard.qmk.enable = true; 11 - environment.systemPackages = [ 12 - pkgs.via 13 - ]; 14 - 15 - programs.kdeconnect.enable = true; 16 - }
···
-24
global/gui/input.nix
··· 1 - { 2 - pkgs, 3 - lib, 4 - config, 5 - ... 6 - }: 7 - lib.mkIf config.gensokyo.traits.gui { 8 - i18n.inputMethod = { 9 - enable = true; 10 - type = "fcitx5"; 11 - 12 - fcitx5 = { 13 - waylandFrontend = true; 14 - addons = with pkgs; [ 15 - fcitx5-mozc 16 - fcitx5-rime 17 - ]; 18 - }; 19 - }; 20 - 21 - environment.systemPackages = [ 22 - pkgs.showmethekey 23 - ]; 24 - }
···
-17
global/gui/kde.nix
··· 1 - { 2 - lib, 3 - config, 4 - pkgs, 5 - ... 6 - }: 7 - lib.mkIf config.gensokyo.traits.gui { 8 - services.desktopManager.plasma6.enable = true; 9 - 10 - environment.systemPackages = with pkgs.kdePackages; [ 11 - qtmultimedia # this fixes something but i forgot what 12 - 13 - kalk 14 - kdf 15 - kmime 16 - ]; 17 - }
···
-8
global/gui/locale.nix
··· 1 - { 2 - config, 3 - lib, 4 - ... 5 - }: 6 - lib.mkIf config.gensokyo.traits.gui { 7 - i18n.supportedLocales = [ "all" ]; 8 - }
···
-4
global/gui/niri.nix
··· 1 - { lib, config, ... }: 2 - lib.mkIf config.gensokyo.traits.gui { 3 - programs.niri.enable = true; 4 - }
···
-17
global/gui/packages.nix
··· 1 - { 2 - pkgs, 3 - lib, 4 - config, 5 - inputs, 6 - ... 7 - }: 8 - lib.mkIf config.gensokyo.traits.gui { 9 - environment.systemPackages = with pkgs; [ 10 - vlc 11 - flameshot 12 - libnotify 13 - thunderbird 14 - 15 - inputs.ghostty.packages.${pkgs.system}.default 16 - ]; 17 - }
···
-29
global/gui/power.nix
··· 1 - { 2 - lib, 3 - config, 4 - ... 5 - }: 6 - lib.mkIf config.gensokyo.traits.gui { 7 - services.logind = { 8 - # settings.Login = { 9 - # KillUserProcesses = false; 10 - # HandleSuspendKey = "lock"; 11 - # HandleHibernateKey = "lock"; 12 - # HandleLidSwitch = "lock"; 13 - # IdleAction = "lock"; 14 - # }; 15 - }; 16 - 17 - # hopefully eradicate buggy shid 18 - systemd.targets = 19 - lib.genAttrs 20 - [ 21 - # "sleep" 22 - # "suspend" 23 - "hibernate" 24 - "hybrid-sleep" 25 - ] 26 - (_: { 27 - enable = false; 28 - }); 29 - }
···
-12
global/gui/wayland.nix
··· 1 - { 2 - lib, 3 - config, 4 - ... 5 - }: 6 - lib.mkIf config.gensokyo.traits.gui { 7 - environment.sessionVariables = { 8 - # wayland crap 9 - NIXOS_OZONE_WL = "1"; 10 - MOZ_ENABLE_WAYLAND = "1"; 11 - }; 12 - }
···
-18
global/gui/wine.nix
··· 1 - { 2 - config, 3 - lib, 4 - pkgs, 5 - ... 6 - }: 7 - lib.mkIf config.gensokyo.traits.gui { 8 - environment.systemPackages = [ 9 - pkgs.wineWowPackages.full 10 - pkgs.winetricks 11 - 12 - pkgs.umu-launcher 13 - 14 - (pkgs.bottles.override { 15 - removeWarningPopup = true; 16 - }) 17 - ]; 18 - }
···
-20
global/home.nix
··· 1 - { 2 - config, 3 - inputs, 4 - ... 5 - }: 6 - { 7 - home-manager = { 8 - useGlobalPkgs = true; 9 - useUserPackages = true; 10 - verbose = true; 11 - 12 - sharedModules = [ 13 - inputs.catppuccin.homeModules.catppuccin 14 - ]; 15 - 16 - extraSpecialArgs = { 17 - inherit (config.gensokyo) traits; 18 - }; 19 - }; 20 - }
···
+5 -5
global/overlays/default.nix
··· 1 - _: [ ] 2 - # inputs: [ 3 - # # we can probably live without an overlay? 4 - # # inputs.mystia.overlays.default 5 - # ]
··· 1 + inputs: 2 + with inputs; [ 3 + mystia.overlays.default 4 + attic.overlays.default 5 + ]
-4
global/programs/compat.nix
··· 1 - { ... }: 2 - { 3 - programs.nix-ld.enable = true; 4 - }
···
+9
global/programs/compilers.nix
···
··· 1 + {pkgs, ...}: { 2 + environment.systemPackages = with pkgs; [ 3 + luajit 4 + binutils 5 + libclang 6 + libgccjit 7 + gnumake 8 + ]; 9 + }
+4 -8
global/programs/default.nix
··· 1 - { ... }: 2 - { 3 imports = [ 4 - ./nix 5 - 6 ./editors.nix 7 ./shells.nix 8 ./multiplexers.nix 9 10 - ./compat.nix 11 12 - ./networking.nix 13 ./ssh.nix 14 ./scm.nix 15 16 - ./security 17 18 - ./system-manager 19 ./misc.nix 20 ]; 21 }
··· 1 + {...}: { 2 imports = [ 3 + ./nix.nix 4 ./editors.nix 5 ./shells.nix 6 ./multiplexers.nix 7 8 + ./compilers.nix 9 10 ./ssh.nix 11 ./scm.nix 12 13 + ./gpg.nix 14 15 ./misc.nix 16 ]; 17 }
+2 -8
global/programs/editors.nix
··· 1 - { pkgs, ... }: 2 - { 3 programs.neovim = { 4 enable = true; 5 - defaultEditor = false; 6 viAlias = true; 7 vimAlias = true; 8 }; 9 - 10 - environment.systemPackages = with pkgs; [ 11 - helix 12 - ]; 13 - environment.variables.EDITOR = "hx"; 14 }
··· 1 + {...}: { 2 programs.neovim = { 3 enable = true; 4 + defaultEditor = true; 5 viAlias = true; 6 vimAlias = true; 7 }; 8 }
+7
global/programs/gpg.nix
···
··· 1 + {pkgs, ...}: { 2 + environment.systemPackages = with pkgs; [gnupg pinentry]; 3 + 4 + programs.gnupg.agent.enable = true; 5 + # ideally this should be set automatically but in case that doesn't work 6 + #programs.gnupg.agent.pinentryFlavor = "curses"; # we don't have a gui. 7 + }
+7 -35
global/programs/misc.nix
··· 1 - { pkgs, ... }: 2 - { 3 # Miscellaneous packages that do not have an option. 4 # It is recommended to use packages.<package>.enable when possible. 5 6 environment.systemPackages = with pkgs; [ 7 - # junk 8 wget 9 curl 10 - xh 11 - gh 12 - nil 13 - nvd 14 - nix-output-monitor 15 - python3 16 - ffmpeg-full 17 - ghostty.terminfo 18 19 - # irc 20 - catgirl 21 - pounce 22 - 23 - # basic sysadmin utils 24 - jq 25 file 26 ripgrep 27 ack 28 - dust 29 - parallel 30 - cryptsetup 31 - borgbackup 32 - doggo 33 - libarchive 34 - unar 35 - man-pages 36 - htop-vim 37 38 - # security 39 - openssl 40 - yubikey-manager 41 - sops 42 - opensc 43 - 44 - # deno 45 deno 46 47 - # command runners and utilities 48 just 49 - inotify-tools 50 ]; 51 52 programs.mtr.enable = true;
··· 1 + {pkgs, ...}: { 2 # Miscellaneous packages that do not have an option. 3 # It is recommended to use packages.<package>.enable when possible. 4 5 + # To search for a specific package, run this command. 6 + # $ nix search wget 7 environment.systemPackages = with pkgs; [ 8 wget 9 curl 10 11 file 12 ripgrep 13 ack 14 15 deno 16 17 + nvd 18 just 19 + 20 + attic 21 + git-crypt 22 ]; 23 24 programs.mtr.enable = true;
+1 -4
global/programs/multiplexers.nix
··· 1 - { pkgs, ... }: 2 - { 3 programs.tmux = { 4 enable = true; 5 newSession = true; 6 keyMode = "vi"; 7 - escapeTime = 0; # why 8 - terminal = "tmux-direct"; 9 historyLimit = 10000; 10 11 # Rationale: being able to keep sessions open is more important than
··· 1 + {pkgs, ...}: { 2 programs.tmux = { 3 enable = true; 4 newSession = true; 5 keyMode = "vi"; 6 historyLimit = 10000; 7 8 # Rationale: being able to keep sessions open is more important than
-55
global/programs/networking.nix
··· 1 - { 2 - lib, 3 - config, 4 - pkgs, 5 - ... 6 - }: 7 - lib.mkMerge [ 8 - { 9 - networking.networkmanager.enable = true; 10 - networking.domain = "d.soopy.moe"; 11 - 12 - services.avahi = { 13 - enable = true; 14 - nssmdns4 = true; 15 - }; 16 - 17 - services.tailscale.enable = true; 18 - services.tailscale.useRoutingFeatures = "both"; 19 - 20 - # disable broken services 21 - systemd.services.NetworkManager-wait-online.enable = false; 22 - 23 - # reduce spam 24 - networking.firewall.logRefusedConnections = lib.mkDefault false; 25 - 26 - # use tcp bbr for increased throughput 27 - boot.kernel.sysctl = { 28 - "net.core.default_qdisc" = "fq"; 29 - "net.ipv4.tcp_congestion_control" = "bbr"; 30 - }; 31 - } 32 - 33 - (lib.mkIf config.gensokyo.traits.portable { 34 - networking.networkmanager.wifi.backend = "wpa_supplicant"; 35 - }) 36 - 37 - # TODO: maybe we should move these to /global/gui? 38 - (lib.mkIf config.gensokyo.traits.gui { 39 - networking.networkmanager.plugins = with pkgs; [ 40 - networkmanager-openconnect 41 - ]; 42 - }) 43 - 44 - (lib.mkIf (!config.gensokyo.traits.sensitive) { 45 - services.avahi = { 46 - publish.enable = true; 47 - }; 48 - }) 49 - 50 - { 51 - networking.hosts = { 52 - "217.197.84.140" = [ "codeberg.org" ]; 53 - }; 54 - } 55 - ]
···
-71
global/programs/nix/config.nix
··· 1 - { 2 - inputs, 3 - config, 4 - pkgs, 5 - lib, 6 - ... 7 - }: 8 - # some items are sourced from https://jackson.dev/post/nix-reasonable-defaults/ 9 - lib.mkMerge [ 10 - { 11 - nix.package = pkgs.nixVersions.latest; 12 - 13 - nix.settings = { 14 - experimental-features = [ 15 - "nix-command" 16 - "flakes" 17 - "ca-derivations" 18 - ]; 19 - 20 - allowed-uris = [ 21 - "github:" 22 - "git+https://patchy.soopy.moe/" 23 - "git+https://github.com/" 24 - "git+ssh://github.com/" 25 - ]; 26 - 27 - substituters = [ 28 - "https://cache.soopy.moe" 29 - ]; 30 - 31 - trusted-substituters = [ 32 - "https://cache.soopy.moe" 33 - ]; 34 - 35 - trusted-public-keys = [ 36 - "cache.soopy.moe-1:0RZVsQeR+GOh0VQI9rvnHz55nVXkFardDqfm4+afjPo=" 37 - ]; 38 - 39 - fallback = true; 40 - connect-timeout = 30; 41 - max-jobs = "auto"; 42 - auto-optimise-store = true; 43 - download-buffer-size = 268435456; # 256 MiB 44 - 45 - trace-import-from-derivation = true; 46 - }; 47 - 48 - nix.gc = { 49 - automatic = true; 50 - dates = "weekly"; 51 - }; 52 - 53 - nix.registry = { 54 - n.flake = inputs.nixpkgs; 55 - } 56 - // (builtins.mapAttrs (_: flake: { inherit flake; }) ( 57 - lib.filterAttrs (n: _: n != "nixpkgs") inputs 58 - )); 59 - 60 - # nix-index[-database] 61 - programs.nix-index.enable = true; 62 - programs.nix-index-database.comma.enable = true; 63 - } 64 - 65 - (lib.mkIf (!config.gensokyo.traits.sensitive) { 66 - nix.settings.trusted-users = [ 67 - "@wheel" 68 - "builder" 69 - ]; 70 - }) 71 - ]
···
-7
global/programs/nix/default.nix
··· 1 - { ... }: 2 - { 3 - imports = [ 4 - ./config.nix 5 - ./dist-builds.nix 6 - ]; 7 - }
···
-70
global/programs/nix/dist-builds.nix
··· 1 - # Like distcc but not really 2 - { 3 - lib, 4 - inputs, 5 - config, 6 - hostname, 7 - ... 8 - }: 9 - let 10 - baselineFeatures = [ 11 - "big-parallel" 12 - "ca-derivations" 13 - ]; 14 - 15 - mkBuildMachines = 16 - attr: 17 - let 18 - cleanAttr = builtins.removeAttrs attr [ hostname ]; 19 - in 20 - lib.mapAttrsToList ( 21 - name: value: 22 - { 23 - hostName = name + ".mist-nessie.ts.net"; 24 - 25 - protocol = "ssh"; # nevermind we need hydra 26 - sshUser = "builder"; 27 - sshKey = config.sops.secrets.builder_key.path; 28 - 29 - speedFactor = 1; 30 - maxJobs = 2; 31 - supportedFeatures = baselineFeatures; 32 - 33 - systems = [ 34 - "i686-linux" 35 - "x86_64-linux" 36 - ]; 37 - } 38 - // value 39 - ) cleanAttr; 40 - in 41 - { 42 - sops.secrets.builder_key = { 43 - sopsFile = inputs.self + "/creds/sops/global/id_builder"; 44 - format = "binary"; 45 - }; 46 - 47 - nix.distributedBuilds = true; 48 - nix.settings.builders-use-substitutes = true; 49 - nix.buildMachines = mkBuildMachines { 50 - renko = { 51 - supportedFeatures = baselineFeatures ++ [ 52 - "kvm" 53 - "nixos-test" 54 - ]; 55 - speedFactor = 5; 56 - publicHostKey = "c3NoLWVkMjU1MTkgQUFBQUMzTnphQzFsWkRJMU5URTVBQUFBSUoreGNleXA4YnRVNnd0dThpRUFKMkZ4cm5rZlBsS1M3TWFJL2xLT0ZuUDEgcm9vdEByZW5rbwo="; 57 - }; 58 - nijika = { 59 - systems = [ "aarch64-linux" ]; 60 - publicHostKey = "c3NoLWVkMjU1MTkgQUFBQUMzTnphQzFsWkRJMU5URTVBQUFBSVBsWGZ5MnMxejRIQ05oem92Rk55UzBhcCtyMEF2ZzAzNDlKeFFjMW0xaFEK"; 61 - }; 62 - }; 63 - 64 - services.openssh.extraConfig = lib.mkAfter '' 65 - Match User builder 66 - Banner none 67 - PasswordAuthentication no 68 - KbdInteractiveAuthentication no 69 - ''; 70 - }
···
+33
global/programs/nix.nix
···
··· 1 + {pkgs, ...}: 2 + # some items are sourced from https://jackson.dev/post/nix-reasonable-defaults/ 3 + { 4 + nix.settings = { 5 + experimental-features = [ 6 + "nix-command" 7 + "flakes" 8 + "repl-flake" 9 + ]; 10 + 11 + substituters = [ 12 + "https://nonbunary.soopy.moe/gensokyo-systems/" 13 + "https://nonbunary.soopy.moe/gensokyo-global/" 14 + ]; 15 + 16 + trusted-substituters = [ 17 + "https://nonbunary.soopy.moe/gensokyo-systems/" 18 + "https://nonbunary.soopy.moe/gensokyo-global/" 19 + ]; 20 + 21 + trusted-public-keys = [ 22 + "gensokyo-systems:r/Wx649dPuQrCN9Pgh3Jic526zQNk3oWMqYJHnob/Ok=" 23 + "gensokyo-global:XiCN0D2XeSxF4urFYTprR+1Nr/5hWyydcETwZtPG6Ec=" 24 + ]; 25 + 26 + fallback = true; 27 + connect-timeout = 30; 28 + max-jobs = "auto"; 29 + auto-optimise-store = true; 30 + }; 31 + 32 + nix.package = pkgs.nixFlakes; 33 + }
+1 -8
global/programs/scm.nix
··· 1 - { pkgs, ... }: 2 - { 3 programs.git = { 4 enable = true; 5 config = { 6 init.defaultBranch = "main"; 7 push.autoSetupRemote = true; 8 - gpg.ssh.allowedSignersFile = pkgs.writeText "soopyc.allowedsigners" '' 9 - me@soopy.moe namespaces="git" ${builtins.readFile ../../creds/ssh/auth} 10 - git@soopy.moe namespaces="git" ${builtins.readFile ../../creds/ssh/auth} 11 - ''; 12 - 13 - rebase.autoStash = true; 14 }; 15 }; 16 }
··· 1 + {...}: { 2 programs.git = { 3 enable = true; 4 config = { 5 init.defaultBranch = "main"; 6 push.autoSetupRemote = true; 7 }; 8 }; 9 }
-19
global/programs/security/crypto.nix
··· 1 - # crypto stands for cryptography, not cryptocurrency 2 - { pkgs, ... }: 3 - { 4 - environment.systemPackages = with pkgs; [ 5 - gnupg 6 - pinentry-curses 7 - pinentry-qt 8 - opensc 9 - 10 - rage 11 - age-plugin-yubikey 12 - ]; 13 - 14 - programs.gnupg.agent.enable = true; 15 - # ideally this should be set automatically but in case that doesn't work 16 - #programs.gnupg.agent.pinentryFlavor = "curses"; # we don't have a gui. 17 - 18 - services.pcscd.enable = true; 19 - }
···
-9
global/programs/security/default.nix
··· 1 - { 2 - imports = [ 3 - ./crypto.nix 4 - ./firewall.nix 5 - ./kanidm.nix 6 - ./pam.nix 7 - ./sudo.nix 8 - ]; 9 - }
···
-17
global/programs/security/firewall.nix
··· 1 - { ... }: 2 - { 3 - imports = [ 4 - ./ip-bans.nix 5 - ]; 6 - 7 - networking.firewall = { 8 - enable = true; 9 - 10 - # this was never needed because ts has been bypassing the firewall anyways. (by being higher on the list.) 11 - # trustedInterfaces = [ 12 - # "tailscale0" 13 - # ]; 14 - }; 15 - 16 - # services.openssh.openFirewall = false; 17 - }
···
-32
global/programs/security/ip-bans.nix
··· 1 - { lib, ... }: 2 - let 3 - banned = { 4 - ip = [ 5 - "156.229.232.142" # added 2025-04-10: minecraft server scanner with 30m intervals 6 - "156.146.63.199" # added 2025-04-11: minecraft server scanner, found no contact methods 7 - "167.86.121.64" # added 2025-04-24: minecraft server pinger, does not properly disconnect, no contacts 8 - ]; 9 - ip6 = [ ]; 10 - }; 11 - in 12 - { 13 - networking.firewall.extraCommands = builtins.concatStringsSep "\n" ( 14 - [ 15 - # i'd be damned if they rename the helper, but i also cba writing it *again*, for the same util to show up 16 - # 3 times in the final script. 17 - "ip46tables -N gensokyo-blackhole" 18 - "ip46tables -I INPUT -j gensokyo-blackhole" 19 - ] 20 - ++ lib.flatten ( 21 - lib.mapAttrsToList ( 22 - family: ips: builtins.map (ip: "${family}tables -w -I gensokyo-blackhole -s ${ip} -j DROP") ips 23 - ) banned 24 - ) 25 - ); 26 - 27 - networking.firewall.extraStopCommands = '' 28 - ip46tables -D INPUT -j gensokyo-blackhole || true 29 - ip46tables -F gensokyo-blackhole || true 30 - ip46tables -X gensokyo-blackhole || true 31 - ''; 32 - }
···
-10
global/programs/security/kanidm.nix
··· 1 - { pkgs, ... }: 2 - { 3 - services.kanidm = { 4 - enableClient = true; 5 - package = pkgs.kanidm_1_8; 6 - clientSettings = { 7 - uri = "https://serenity.mist-nessie.ts.net"; 8 - }; 9 - }; 10 - }
···
-18
global/programs/security/pam.nix
··· 1 - { 2 - lib, 3 - config, 4 - ... 5 - }: 6 - lib.mkMerge [ 7 - (lib.mkIf (!config.gensokyo.traits.sensitive) { 8 - security.pam = { 9 - rssh = { 10 - enable = true; 11 - # not released yet :moai: 12 - # settings.cue = true; 13 - }; 14 - 15 - services.sudo.rssh = true; 16 - }; 17 - }) 18 - ]
···
-7
global/programs/security/sudo.nix
··· 1 - { pkgs, ... }: 2 - { 3 - security.sudo.extraConfig = '' 4 - Defaults insults 5 - ''; 6 - security.sudo.package = pkgs.sudo.override { withInsults = true; }; 7 - }
···
+1 -16
global/programs/shells.nix
··· 1 - { pkgs, lib, ... }: 2 - { 3 users.defaultUserShell = pkgs.zsh; 4 programs.zsh = { 5 enable = true; ··· 23 enable = true; 24 settings = builtins.fromTOML (builtins.readFile ./starship.toml); 25 }; 26 - 27 - programs.direnv = { 28 - enable = true; 29 - nix-direnv.enable = true; 30 - }; 31 - 32 - programs.pay-respects = { 33 - enable = true; 34 - alias = "fuck"; 35 - aiIntegration = lib.mkForce false; 36 - }; 37 - 38 - # conflicts with comma 39 - programs.command-not-found.enable = false; 40 }
··· 1 + {pkgs, ...}: { 2 users.defaultUserShell = pkgs.zsh; 3 programs.zsh = { 4 enable = true; ··· 22 enable = true; 23 settings = builtins.fromTOML (builtins.readFile ./starship.toml); 24 }; 25 }
+1 -39
global/programs/ssh.nix
··· 1 - { config, ... }: 2 - let 3 - nixos = config.system.nixos; 4 - in 5 - { 6 # Enable the OpenSSH daemon. 7 services.openssh = { 8 enable = true; 9 settings = { 10 PermitRootLogin = "no"; 11 PasswordAuthentication = false; 12 - PubkeyAcceptedAlgorithms = "sk-ssh-ed25519@openssh.com,ssh-ed25519"; 13 }; 14 - 15 - banner = '' 16 - -----BEGIN BANNER----- 17 - # Welcome to ${config.system.name} 18 - # ${nixos.distroName} ${nixos.codeName} (${nixos.label}) 19 - i Trans rights are human rights 20 - 21 - ! You are currently accessing an internal resource. Your connection 22 - ! information, including but not limited to your authenticating IP address, 23 - ! username and the user you're attempting to log into are recorded. 24 - ! Disconnect IMMEDIATELY if you are not part of the authorized personnel. 25 - 26 - i Contact: 27 - i [Matrix] @sophie:nue.soopy.moe 28 - i [Email] me@soopy.moe 29 - ------END BANNER------ 30 - ''; 31 }; 32 - 33 - programs.ssh = { 34 - startAgent = true; 35 - pubkeyAcceptedKeyTypes = [ 36 - "ssh-ed25519" 37 - "sk-ssh-ed25519@openssh.com" 38 - ]; 39 - # enableAskPassword = true; 40 - 41 - extraConfig = '' 42 - ConnectTimeout 5 43 - ''; # if things exceed 5 seconds to connect something has gone wrong. Fail fast to not wait. 44 - }; 45 - 46 - # i did not consent to having this automatically enabled 47 - services.gnome.gcr-ssh-agent.enable = false; 48 }
··· 1 + {...}: { 2 # Enable the OpenSSH daemon. 3 services.openssh = { 4 enable = true; 5 settings = { 6 PermitRootLogin = "no"; 7 PasswordAuthentication = false; 8 }; 9 }; 10 }
+15 -50
global/programs/starship.toml
··· 3 4 # Inserts a blank line between shell prompts 5 add_newline = true 6 - right_format = """$os $shell $direnv""" 7 8 # Replace the 'โฏ' symbol in the prompt with 'โžœ' 9 [character] # The name of the module we are configuring is 'character' 10 success_symbol = '[โžœ](bold green)' # The 'success_symbol' segment is being set to 'โžœ' with the color 'bold green' 11 error_symbol = '[โžœ](bold red)' 12 13 - [os] 14 - disabled = false 15 - style = "bold blue" 16 - format = "on [$symbol($name)]($style)" 17 - 18 - [[battery.display]] 19 - threshold = 30 20 - style = "bold red" 21 - 22 - [[battery.display]] 23 - threshold = 60 24 - style = "bold yellow" 25 - 26 - [[battery.display]] 27 - threshold = 80 28 - style = "bold green" 29 - 30 [username] 31 show_always = true 32 ··· 37 map_symbol = true 38 pipestatus = true 39 40 - sigint_symbol = '๎€‰' 41 - not_executable_symbol = "๏ž" 42 - not_found_symbol = '๏„จ' 43 - signal_symbol = '๏ƒง' 44 45 - [shell] 46 - disabled = false 47 - format = 'with [๓ฐ† $indicator]($style)' 48 - style = 'bold green' 49 - 50 - [nix_shell] 51 - symbol = "๏Œ“ " 52 - format = 'via [$symbol$name$state]($style) ' 53 - impure_msg = '' 54 - pure_msg = '(pure)' 55 - unknown_msg = '(?)' 56 - heuristic = true 57 - 58 - [hostname] 59 - ssh_symbol = "๓ฐ’ " 60 - ssh_only = false 61 62 [time] 63 disabled = false 64 65 [cmd_duration] 66 min_time = 0 67 - show_milliseconds = true 68 - 69 - [direnv] 70 - disabled = false 71 - style = "bold orange" 72 - format = "with [$symbol$allowed]($style)" 73 - allowed_msg = "๏€Œ" # loaded and accepted by user 74 - not_allowed_msg = "๏„จ" # loaded, user never allowed/denied 75 - denied_msg = "๏ž" # loaded, user explicitly denied 76 77 [aws] 78 symbol = "๎Œฝ " ··· 121 122 [hg_branch] 123 symbol = "๏˜ " 124 [java] 125 symbol = "๎‰– " 126 ··· 138 139 [nim] 140 symbol = "๓ฐ†ฅ " 141 142 [nodejs] 143 symbol = "๎œ˜ " ··· 186 [package] 187 symbol = "๓ฐ— " 188 189 - [pijul_channel] # ???? 190 symbol = "๐Ÿชบ " 191 192 [python] ··· 206 207 [spack] 208 symbol = "๐Ÿ…ข " 209 - 210 - # vim:foldmethod=marker
··· 3 4 # Inserts a blank line between shell prompts 5 add_newline = true 6 7 # Replace the 'โฏ' symbol in the prompt with 'โžœ' 8 [character] # The name of the module we are configuring is 'character' 9 success_symbol = '[โžœ](bold green)' # The 'success_symbol' segment is being set to 'โžœ' with the color 'bold green' 10 error_symbol = '[โžœ](bold red)' 11 12 [username] 13 show_always = true 14 ··· 19 map_symbol = true 20 pipestatus = true 21 22 + sigint_symbol = '^C' 23 + not_found_symbol = '?' 24 + signal_symbol = 'SIG' 25 26 + [[battery.display]] 27 + threshold = 100 28 + style = "bold green" 29 30 [time] 31 disabled = false 32 33 [cmd_duration] 34 min_time = 0 35 36 [aws] 37 symbol = "๎Œฝ " ··· 80 81 [hg_branch] 82 symbol = "๏˜ " 83 + 84 + [hostname] 85 + ssh_symbol = "๎ฌ " 86 + ssh_only = false 87 + 88 [java] 89 symbol = "๎‰– " 90 ··· 102 103 [nim] 104 symbol = "๓ฐ†ฅ " 105 + 106 + [nix_shell] 107 + symbol = "๏Œ“ " 108 109 [nodejs] 110 symbol = "๎œ˜ " ··· 153 [package] 154 symbol = "๓ฐ— " 155 156 + [pijul_channel] 157 symbol = "๐Ÿชบ " 158 159 [python] ··· 173 174 [spack] 175 symbol = "๐Ÿ…ข "
-25
global/programs/system-manager/default.nix
··· 1 - { 2 - pkgs, 3 - config, 4 - lib, 5 - ... 6 - }: 7 - let 8 - types = lib.types; 9 - cfg = config.gensokyo.system-manager; 10 - in 11 - { 12 - options.gensokyo.system-manager = { 13 - enable = lib.mkEnableOption "a shortcut to manage the system no matter where you are (in the system)"; 14 - flakeLocation = lib.mkOption { 15 - type = types.path; 16 - description = "The location of your system flake to manage."; 17 - }; 18 - }; 19 - 20 - config = lib.mkIf cfg.enable { 21 - environment.systemPackages = [ 22 - (pkgs.callPackage ./package.nix { inherit (cfg) flakeLocation; }) 23 - ]; 24 - }; 25 - }
···
-25
global/programs/system-manager/package.nix
··· 1 - { 2 - lib, 3 - writeShellApplication, 4 - flakeLocation, 5 - }: 6 - writeShellApplication { 7 - name = "system"; 8 - meta = { 9 - description = "A shortcut to run `just` in the local system flake directory."; 10 - license = lib.licenses.cc0; 11 - maintainers = with lib.maintainers; [ soopyc ]; 12 - }; 13 - 14 - # we could make this more robust by not using `just` and (hardcode?) commands in, but this is by far the easiest 15 - # and the most versatile method. if it works, it works and i'm not going to overcomplicate this 16 - text = '' 17 - if [ ! -e ${flakeLocation} ]; then 18 - echo "Could not find flake at ${flakeLocation}. Please reconfigure your system." 19 - exit 1 20 - fi 21 - 22 - cd ${flakeLocation} 23 - just "''${@:--l}" 24 - ''; 25 - }
···
-9
global/sops.nix
··· 1 - { 2 - hostname, 3 - inputs, 4 - ... 5 - }: 6 - { 7 - sops.age.sshKeyPaths = [ "/etc/ssh/ssh_host_ed25519_key" ]; 8 - sops.defaultSopsFile = "${inputs.self}/creds/sops/${hostname}/default.yaml"; 9 - }
···
+5
global/system/default.nix
···
··· 1 + {...}: { 2 + imports = [ 3 + ./firmware.nix 4 + ]; 5 + }
+4
global/system/firmware.nix
···
··· 1 + {...}: { 2 + hardware.enableRedistributableFirmware = true; 3 + services.fwupd.enable = true; 4 + }
+2 -11
global/upgrade-diff.nix
··· 1 # Thank you https://github.com/luishfonseca/dotfiles/blob/ab7625ec406b48493eda701911ad1cd017ce5bc1/modules/upgrade-diff.nix 2 - { 3 - lib, 4 - pkgs, 5 - ... 6 - }: 7 - { 8 system.activationScripts.diff = { 9 supportsDryActivation = true; 10 text = '' 11 - if [[ -e /run/current-system ]]; then 12 - ${lib.getExe pkgs.nvd} --color always --nix-bin-dir=${pkgs.nix}/bin diff /run/current-system "$systemConfig" 13 - else 14 - echo "Couldn't find /run/current-system. Are we booting? Exiting gracefully." 15 - fi 16 ''; 17 }; 18 }
··· 1 # Thank you https://github.com/luishfonseca/dotfiles/blob/ab7625ec406b48493eda701911ad1cd017ce5bc1/modules/upgrade-diff.nix 2 + {pkgs, ...}: { 3 system.activationScripts.diff = { 4 supportsDryActivation = true; 5 text = '' 6 + ${pkgs.nvd}/bin/nvd --nix-bin-dir=${pkgs.nix}/bin diff /run/current-system "$systemConfig" 7 ''; 8 }; 9 }
+23 -133
global/utils.nix
··· 1 - # Copyright (c) 2023 soopyc 2 - # Permission is given to copy and use under the terms of Apache 2.0. 3 - # 4 - # you may copy-paste this entire file to anywhere else. just keep the comments. 5 - # see /docs/src/utils/ for a usage guide 6 { 7 inputs, 8 system, 9 ... 10 - }: 11 - let 12 - pkgs = inputs.nixpkgs.legacyPackages.${system}; 13 - lib = pkgs.lib; 14 - in 15 - rec { 16 - mkVhost = 17 - opts: 18 lib.mkMerge [ 19 { 20 forceSSL = lib.mkDefault true; 21 useACMEHost = lib.mkDefault "global.c.soopy.moe"; 22 kTLS = lib.mkDefault true; 23 - quic = lib.mkDefault true; 24 25 locations."/_cgi/error/" = { 26 alias = "${inputs.mystia.packages.${system}.staticly}/nginx_error_pages/"; 27 }; 28 - 29 - # To override, mkForce {} 30 - locations."= /robots.txt" = mkNginxFile { 31 - filename = "robots.txt"; 32 - content = '' 33 - # Please stop hammering and/or scraping our services. 34 - User-Agent: * 35 - Disallow: / 36 - ''; 37 - }; 38 - 39 extraConfig = '' 40 error_page 503 /_cgi/error/503.html; 41 error_page 502 /_cgi/error/502.html; 42 error_page 404 /_cgi/error/404.html; 43 - add_header strict-transport-security "max-age=63072000; includeSubDomains; preload" always; 44 - add_header alt-svc 'h3=":443";ma=86400' always; 45 ''; 46 } 47 opts 48 ]; 49 50 - mkSimpleProxy = 51 - { 52 - protocol ? "http", 53 - host ? "localhost", 54 - port ? null, 55 - socketPath ? null, 56 - location ? "/", 57 - websockets ? false, 58 - extraConfig ? { }, 59 - }: 60 - assert lib.assertMsg ( 61 - port != null || socketPath != null 62 - ) "one of port or socketPath must be specified"; 63 - # i dislike logic gates 64 - assert lib.assertMsg ( 65 - !(port != null && socketPath != null) 66 - ) "only one of port or socketPath may be specified at the same time"; 67 - assert lib.assertMsg ( 68 - socketPath != null -> host == "localhost" 69 - ) "setting host has no effect when socketPath is set"; 70 - assert lib.assertMsg (port != null -> builtins.isInt port) "port must be an integer if specified"; 71 - mkVhost ( 72 - lib.mkMerge [ 73 - extraConfig 74 - { 75 - locations."${location}" = { 76 - proxyPass = 77 - "${protocol}://" 78 - + (if (socketPath == null) then "${host}:${builtins.toString port}" else "unix:${socketPath}"); 79 - proxyWebsockets = websockets; 80 - }; 81 - } 82 - ] 83 - ); 84 - 85 - setupSecrets = 86 - _config: 87 - { 88 - namespace ? ( 89 - lib.warn "secret namespace left as default, which is empty. it is encouraged to set a namespace for easier secret management. to override, explicitly set this to an empty value." "" 90 - ), 91 - secrets, 92 - config ? { }, 93 - }: 94 - let 95 - _r_ns = namespace + lib.optionalString (lib.stringLength namespace != 0) "/"; 96 - check = 97 - path: 98 - assert lib.assertMsg (lib.elem path secrets) 99 - "secret path `${path}` is not defined in namespace `${namespace}`. (resolved to: ${_r_ns}${path})"; 100 - path; 101 - getRealPath = path: _r_ns + check path; 102 - in 103 - builtins.addErrorContext "while setting up secrets with namespace ${namespace}" { 104 - generate = { 105 - sops.secrets = genSecrets namespace secrets config; 106 - }; # i love trolling 107 - get = path: _config.sops.secrets.${getRealPath path}.path; 108 - 109 - placeholder = path: _config.sops.placeholder.${getRealPath path}; 110 - getTemplate = file: _config.sops.templates.${file}.path; 111 - mkTemplate = 112 - file: content: 113 - builtins.addErrorContext "while generating sops template ${file}" { 114 - sops.templates.${file} = { 115 - inherit content; 116 - } 117 - // (builtins.removeAttrs config [ "content" ]); 118 - # // (lib.optionalAttrs (builtins.hasAttr "owner" config) {inherit (config) owner;}) 119 - # // (lib.optionalAttrs (builtins.hasAttr "group" config) {inherit (config) group;}); 120 - }; 121 - }; 122 - 123 - genSecrets = 124 - namespace: files: value: 125 - lib.genAttrs (map ( 126 - x: namespace + lib.optionalString (lib.stringLength namespace != 0) "/" + x 127 - ) files) (_: value); 128 - 129 - mkNginxFile = 130 - { 131 - filename ? "index.html", 132 - content, 133 - }: 134 - builtins.addErrorContext "while creating a static nginx file ${filename}" ( 135 - let 136 - contentDir = 137 - assert lib.assertMsg ( 138 - builtins.typeOf content == "string" 139 - ) "content must be a string, got `${builtins.typeOf content}`"; 140 - builtins.toString (pkgs.writeTextDir filename content) + "/"; 141 - in 142 { 143 - alias = contentDir; 144 - tryFiles = "${filename} =500"; # if it can't find the file something has gone wrong. 145 } 146 - ); 147 148 - mkNginxJSON = 149 - filename: attrset: 150 - builtins.addErrorContext "while creating a static nginx JSON file ${filename}" ( 151 - assert lib.assertMsg ( 152 - builtins.typeOf attrset == "set" 153 - ) "expected argument type `set`, got `${builtins.typeOf attrset}` instead."; 154 - mkNginxFile { 155 - inherit filename; 156 - content = builtins.toJSON attrset; 157 - } 158 - ); 159 }
··· 1 + # see /docs/utils.md for a usage guide 2 { 3 inputs, 4 system, 5 ... 6 + }: let 7 + lib = inputs.nixpkgs.lib; 8 + in rec { 9 + mkVhost = opts: 10 lib.mkMerge [ 11 { 12 forceSSL = lib.mkDefault true; 13 useACMEHost = lib.mkDefault "global.c.soopy.moe"; 14 kTLS = lib.mkDefault true; 15 16 locations."/_cgi/error/" = { 17 alias = "${inputs.mystia.packages.${system}.staticly}/nginx_error_pages/"; 18 }; 19 extraConfig = '' 20 error_page 503 /_cgi/error/503.html; 21 error_page 502 /_cgi/error/502.html; 22 error_page 404 /_cgi/error/404.html; 23 ''; 24 } 25 opts 26 ]; 27 28 + mkSimpleProxy = { 29 + port, 30 + protocol ? "http", 31 + location ? "/", 32 + websockets ? false, 33 + extraConfig ? {}, 34 + }: 35 + mkVhost (lib.mkMerge [ 36 + extraConfig 37 { 38 + locations."${location}" = { 39 + proxyPass = "${protocol}://localhost:${toString port}"; 40 + proxyWebsockets = websockets; 41 + }; 42 } 43 + ]); 44 45 + genSecrets = namespace: files: value: 46 + lib.genAttrs ( 47 + map (x: namespace + lib.optionalString (lib.stringLength namespace != 0) "/" + x) files 48 + ) (_: value); 49 }
+13 -79
justfile
··· 1 # friendship ended with Makefile 2 # I LOVE justFILE!!!!!! 3 4 - # modules are unstable atm 5 - # mod utils 6 - 7 - true := "true" 8 - 9 # build the current configuration 10 - build system="" +extra_args="": 11 - nixos-rebuild -v -L --keep-going --accept-flake-config --log-format internal-json --flake .#{{system}} build \ 12 - {{extra_args}} |& nom --json 13 - {{ if system == "" {"nvd diff /run/current-system result"} else {""} }} 14 - 15 - # evaluate the configuration for a system 16 - eval system: 17 - nix eval .#nixosConfigurations.{{system}}.config.system.build.toplevel 18 19 # build and test the configuration, but don't switch 20 - test system="": 21 - nixos-rebuild -v -L test --flake .#{{system}} --accept-flake-config 22 - 23 - deploy system: 24 - nixos-rebuild switch --flake .#{{system}} --target-host {{system}} --use-remote-sudo -v -L --use-substitutes 25 - 26 - dry-deploy system: 27 - nixos-rebuild build --flake .#{{system}} --target-host {{system}} --use-remote-sudo -v -L --use-substitutes 28 29 # switch to the current configuration 30 - switch system="": sudo_cache 31 - sudo nixos-rebuild -v -L switch --flake .#{{system}} --accept-flake-config --keep-going 32 - 33 - sw: switch 34 - 35 - # literally nixos-rebuild boot with a different name 36 - defer system="": sudo_cache 37 - sudo nixos-rebuild -v -L boot --flake .#{{system}} --accept-flake-config 38 - 39 - build-all: (for-all-systems 'build' 'true') 40 - deploy-all: (for-all-systems 'deploy' '!system.config.gensokyo.traits.sensitive && (system.config.nixpkgs.hostPlatform.system == builtins.currentSystem)' true) 41 - eval-all: (for-all-systems 'eval' 'true') 42 - 43 - # check the flake 44 - check: 45 - nix flake check 46 - 47 - # delete old nixos generations and GCs the store. 48 - gc older_than="3d": sudo_cache 49 - sudo nix profile wipe-history --profile /nix/var/nix/profiles/system --older-than {{older_than}} 50 - sudo nix store gc -vL 51 52 # run utility programs 53 - utils recipe="list" +extras="": 54 - @echo "Running utils/{{recipe}}" 55 - @just -d utils -f utils/justfile {{recipe}} {{extras}} 56 - 57 - # commit ephemeral/auto-generated files 58 - ephemeral: 59 - git commit --gpg-sign -m "chore: update ephemeral files" users/cassie/ephemeral/ 60 61 # update an input in the flake lockfile 62 update-input input: 63 - nix flake lock --update-input {{input}} 64 - 65 - # update everything in flake.lock and commit that 66 - flake-update: 67 - nix flake update --commit-lock-file 68 - 69 - # list changes in the current config vs the system config 70 - diff: 71 - nvd diff /run/current-system result 72 - 73 - # build a vm for a system 74 - vm system run="true" bootloader="false": 75 - nixos-rebuild -v -L build-vm{{if bootloader == "true" {"-with-bootloader"} else {""} }} --flake .#{{system}} 76 - {{if run == true {"./result/bin/run-"+system+"-vm"} else {""} }} 77 - 78 - [private] 79 - sudo_cache: 80 - @sudo -v 81 82 - [private] 83 - for-all-systems recipe filter ignore_failure="false": 84 - #!/usr/bin/env bash 85 - set -euxo pipefail 86 - for system in $(nix eval --impure --apply 'configs: builtins.map (system: system.config.networking.hostName) (builtins.filter (system: {{filter}}) (builtins.attrValues configs))' .#nixosConfigurations --json | jq '.[]' | xargs); do 87 - set +e 88 - just {{recipe}} ${system} 89 - if [ {{ if ignore_failure == true {""} else {"$? -ne 0 -o"} }} $? -eq 130 ]; then 90 - exit 1; 91 - fi 92 - set -e 93 - done
··· 1 # friendship ended with Makefile 2 # I LOVE justFILE!!!!!! 3 4 # build the current configuration 5 + build: 6 + nixos-rebuild build --flake .# 7 8 # build and test the configuration, but don't switch 9 + test: 10 + nixos-rebuild test --flake .# 11 12 # switch to the current configuration 13 + switch: 14 + nixos-rebuild switch --flake .# 15 16 # run utility programs 17 + utils recipe="list": 18 + @echo "Running utils/{{recipe}}" 19 + @cd utils && just {{recipe}} 20 21 # update an input in the flake lockfile 22 update-input input: 23 + nix flake lock --update-input {{input}} 24 25 + # build the flake on a non-nixos platform 26 + ebuild system: 27 + nix build -j8 .#nixosConfigurations."{{system}}".config.system.build.toplevel
modules/.gitkeep

This is a binary file and will not be displayed.

-22
nix/checks.nix
··· 1 - { 2 - inputs, 3 - pkgs, 4 - }: 5 - { 6 - deadcode = pkgs.stdenvNoCC.mkDerivation { 7 - name = "deadcode_check"; 8 - src = inputs.self; 9 - dontPatch = true; 10 - dontConfigure = true; 11 - 12 - buildInputs = with pkgs; [ deadnix ]; 13 - buildPhase = '' 14 - set -euo pipefail 15 - 16 - deadnix -f . 17 - echo "All done!" 18 - ''; 19 - 20 - installPhase = "touch $out"; 21 - }; 22 - }
···
-17
nix/devshell.nix
··· 1 - { pkgs, ... }: 2 - { 3 - default = pkgs.mkShellNoCC { 4 - packages = [ 5 - pkgs.nixos-rebuild 6 - pkgs.nvd 7 - ]; 8 - }; 9 - 10 - docs = pkgs.mkShellNoCC { 11 - packages = with pkgs; [ 12 - mdbook 13 - mdbook-admonish 14 - mdbook-pagetoc 15 - ]; 16 - }; 17 - }
···
-5
nix/treefmt.nix
··· 1 - { ... }: 2 - { 3 - projectRootFile = "flake.nix"; 4 - programs.nixfmt.enable = true; 5 - }
···
+2 -5
nix.code-workspace
··· 8 } 9 ], 10 "settings": { 11 - "deno.enable": true, 12 "deno.lint": true, 13 - "deno.unstable": false, 14 - "files.exclude": { 15 - "result": true 16 - } 17 } 18 }
··· 8 } 9 ], 10 "settings": { 11 + "deno.enable": true, 12 "deno.lint": true, 13 + "deno.unstable": false 14 } 15 }
-41
systems/default.nix
··· 1 - { 2 - lib, 3 - inputs, 4 - ... 5 - }: 6 - let 7 - utils = import ../global/utils.nix; 8 - 9 - mkSystem = 10 - hostname: system: 11 - lib.nixosSystem { 12 - specialArgs = { 13 - inherit inputs; 14 - 15 - hostname = hostname; 16 - _utils = utils { inherit inputs system; }; 17 - }; 18 - 19 - modules = [ 20 - ../global 21 - ./${hostname}/configuration.nix 22 - ./${hostname}/hardware-configuration.nix 23 - 24 - { 25 - home-manager.extraSpecialArgs = { inherit inputs; }; 26 - networking.hostName = hostname; 27 - nixpkgs.hostPlatform = lib.mkDefault system; # ensure we detect conflicts 28 - } 29 - ]; 30 - }; 31 - in 32 - { 33 - koumakan = mkSystem "koumakan" "x86_64-linux"; 34 - satori = mkSystem "satori" "x86_64-linux"; 35 - renko = mkSystem "renko" "x86_64-linux"; 36 - 37 - # cloud servers 38 - kita = mkSystem "kita" "x86_64-linux"; 39 - ryo = mkSystem "ryo" "x86_64-linux"; 40 - # nijika = mkSystem "nijika" "aarch64-linux"; 41 - }
···
-7
systems/kita/certificates/default.nix
··· 1 - { ... }: 2 - { 3 - imports = [ 4 - ./mail.nix 5 - ./web.nix 6 - ]; 7 - }
···
-14
systems/kita/certificates/mail.nix
··· 1 - { config, ... }: 2 - { 3 - security.acme.certs."kita.c.soopy.moe" = { 4 - group = config.services.maddy.group; 5 - extraLegoRenewFlags = [ 6 - "--reuse-key" 7 - ]; 8 - extraDomainNames = [ 9 - "mx2.soopy.moe" 10 - "imap.soopy.moe" 11 - "smtp.soopy.moe" 12 - ]; 13 - }; 14 - }
···
-14
systems/kita/certificates/web.nix
··· 1 - { ... }: 2 - { 3 - security.acme.certs."kita-web.c.soopy.moe" = { 4 - group = "nginx"; 5 - extraDomainNames = [ 6 - "kita.soopy.moe" 7 - "webmail.soopy.moe" 8 - "mta-sts.soopy.moe" 9 - "dav.soopy.moe" 10 - "miku.soopy.moe" 11 - "status.soopy.moe" 12 - ]; 13 - }; 14 - }
···
-17
systems/kita/configuration.nix
··· 1 - { ... }: 2 - { 3 - imports = [ 4 - ./certificates 5 - ./services 6 - 7 - ./networking.nix 8 - ]; 9 - 10 - zramSwap.enable = true; 11 - gensokyo.presets = { 12 - nginx = true; 13 - vmetrics = true; 14 - certificates = true; 15 - }; 16 - system.stateVersion = "24.05"; 17 - }
···
-16
systems/kita/hardware-configuration.nix
··· 1 - { modulesPath, ... }: 2 - { 3 - imports = [ (modulesPath + "/profiles/qemu-guest.nix") ]; 4 - boot.loader.grub.device = "/dev/sda"; 5 - boot.initrd.availableKernelModules = [ 6 - "ata_piix" 7 - "uhci_hcd" 8 - "xen_blkfront" 9 - "vmw_pvscsi" 10 - ]; 11 - boot.initrd.kernelModules = [ "nvme" ]; 12 - fileSystems."/" = { 13 - device = "/dev/sda1"; 14 - fsType = "ext4"; 15 - }; 16 - }
···
-52
systems/kita/networking.nix
··· 1 - { lib, ... }: 2 - { 3 - # This file was populated at runtime with the networking 4 - # details gathered from the active system. 5 - networking = { 6 - nameservers = [ 7 - "8.8.8.8" 8 - ]; 9 - defaultGateway = "172.31.1.1"; 10 - defaultGateway6 = { 11 - address = "fe80::1"; 12 - interface = "eth0"; 13 - }; 14 - dhcpcd.enable = false; 15 - usePredictableInterfaceNames = lib.mkForce false; 16 - interfaces = { 17 - eth0 = { 18 - ipv4.addresses = [ 19 - { 20 - address = "188.245.74.198"; 21 - prefixLength = 32; 22 - } 23 - ]; 24 - ipv6.addresses = [ 25 - { 26 - address = "2a01:4f8:1c1c:cc9d::cafe"; 27 - prefixLength = 64; 28 - } 29 - { 30 - address = "fe80::9400:3ff:fe8b:9312"; 31 - prefixLength = 64; 32 - } 33 - ]; 34 - ipv4.routes = [ 35 - { 36 - address = "172.31.1.1"; 37 - prefixLength = 32; 38 - } 39 - ]; 40 - ipv6.routes = [ 41 - { 42 - address = "fe80::1"; 43 - prefixLength = 128; 44 - } 45 - ]; 46 - }; 47 - }; 48 - }; 49 - services.udev.extraRules = '' 50 - ATTR{address}=="96:00:03:8b:93:12", NAME="eth0" 51 - ''; 52 - }
···
-12
systems/kita/services/default.nix
··· 1 - { ... }: 2 - { 3 - imports = [ 4 - ./fallback_page 5 - ./mail 6 - 7 - ./dns.nix 8 - ./postgresql.nix 9 - ./radicale.nix 10 - ./gatus.nix 11 - ]; 12 - }
···
-21
systems/kita/services/dns.nix
··· 1 - { ... }: 2 - { 3 - services.pdns-recursor = { 4 - enable = true; 5 - 6 - dns = { 7 - allowFrom = [ 8 - "127.0.0.0/8" 9 - "10.0.0.0/8" 10 - "100.64.0.0/10" 11 - "169.254.0.0/16" 12 - "192.168.0.0/16" 13 - "172.16.0.0/12" 14 - "::1/128" 15 - "fc00::/7" 16 - "fe80::/10" 17 - "100.64.0.0/10" # tailscale 18 - ]; 19 - }; 20 - }; 21 - }
···
-16
systems/kita/services/fallback_page/default.nix
··· 1 - { 2 - pkgs, 3 - _utils, 4 - ... 5 - }: 6 - { 7 - services.nginx.virtualHosts."_" = _utils.mkVhost { 8 - useACMEHost = "kita-web.c.soopy.moe"; 9 - default = true; 10 - 11 - locations."/" = { 12 - root = pkgs.callPackage ./package.nix { }; 13 - tryFiles = "$uri $uri/index.html $uri.html =404"; 14 - }; 15 - }; 16 - }
···
systems/kita/services/fallback_page/image.png

This is a binary file and will not be displayed.

-14
systems/kita/services/fallback_page/index.html
··· 1 - <!doctype html> 2 - <html lang="en"> 3 - <head> 4 - <title>bokitar</title> 5 - <meta name="description" content="gay women" /> 6 - <style> 7 - img {width: 100%; height: 100%; object-fit: contain;} 8 - </style> 9 - </head> 10 - 11 - <body> 12 - <a href="https://www.pixiv.net/en/artworks/115773010"><img src="image.png" alt="Bocchi and Kita from the anime Bocchi the Rock sitting on some bench of a train." /></a> 13 - </body> 14 - </html>
···
-10
systems/kita/services/fallback_page/package.nix
··· 1 - { stdenvNoCC }: 2 - stdenvNoCC.mkDerivation (final: { 3 - name = "kita-landing"; 4 - src = ./.; 5 - 6 - installPhase = '' 7 - mkdir $out 8 - cp ${final.src}/* $out/ 9 - ''; 10 - })
···
-76
systems/kita/services/gatus.nix
··· 1 - { 2 - _utils, 3 - config, 4 - ... 5 - }: 6 - let 7 - mkHttpEndpoint = name: group: url: { 8 - inherit name url group; 9 - enabled = true; 10 - method = "GET"; 11 - conditions = [ 12 - "[STATUS] < 300" 13 - "[CONNECTED] == true" 14 - ]; 15 - }; 16 - in 17 - { 18 - services.gatus = { 19 - enable = true; 20 - settings = { 21 - storage.type = "sqlite"; 22 - storage.path = "/var/lib/gatus/data.db"; 23 - web.port = 33234; 24 - ui = { 25 - title = "Vitals | Gensokyo"; 26 - description = "Health checking of Gensokyo services, powered by Gatus."; 27 - header = "Vitals"; 28 - buttons = [ 29 - { 30 - name = "Incident Reports"; 31 - link = "https://status.soopy.moe"; 32 - } 33 - ]; 34 - }; 35 - 36 - endpoints = [ 37 - (mkHttpEndpoint "Main Site" "core" "https://soopy.moe") 38 - 39 - (mkHttpEndpoint "Gateway (Kanidm)" "koumakan" "https://gateway.soopy.moe" // { enabled = false; }) # TODO 40 - (mkHttpEndpoint "Patchy (Forgejo)" "koumakan" "https://patchy.soopy.moe") 41 - (mkHttpEndpoint "Suika (Grafana)" "koumakan" "https://suika.soopy.moe/login") 42 - (mkHttpEndpoint "Nue (Synapse)" "koumakan" "https://nue.soopy.moe/health") 43 - (mkHttpEndpoint "Miniflux" "koumakan" "https://flux.soopy.moe") 44 - (mkHttpEndpoint "Bluesky PDS" "koumakan" "https://bsky.soopy.moe/xrpc/_health") 45 - (mkHttpEndpoint "Blog (Writefreely)" "koumakan" "https://words.soopy.moe") 46 - (mkHttpEndpoint "Vaultwarden" "koumakan" "https://v.soopy.moe") 47 - (mkHttpEndpoint "BreezeWiki" "koumakan" "https://bw.soopy.moe") 48 - 49 - (mkHttpEndpoint "Webmail" "kita" "https://webmail.soopy.moe") 50 - (mkHttpEndpoint "Radicale" "kita" "https://dav.soopy.moe/.web/") 51 - { 52 - enabled = true; 53 - name = "Maddy"; 54 - group = "kita"; 55 - url = "starttls://mx2.soopy.moe:587"; 56 - interval = "5m"; 57 - conditions = [ 58 - "[CONNECTED] == true" 59 - "[CERTIFICATE_EXPIRATION] > 10d" 60 - ]; 61 - } 62 - 63 - (mkHttpEndpoint "Hydra" "bocchi" "https://hydra.soopy.moe") 64 - 65 - (mkHttpEndpoint "noVNC" "ryo" "https://ryo.soopy.moe/vnc_lite.html") 66 - ]; 67 - }; 68 - }; 69 - 70 - services.nginx.virtualHosts."miku.soopy.moe" = _utils.mkSimpleProxy { 71 - port = config.services.gatus.settings.web.port; 72 - extraConfig = { 73 - useACMEHost = "kita-web.c.soopy.moe"; 74 - }; 75 - }; 76 - }
···
-10
systems/kita/services/mail/default.nix
··· 1 - { ... }: 2 - { 3 - imports = [ 4 - ./roundcube.nix 5 - 6 - ./maddy.nix 7 - ./rspamd.nix 8 - ./mta-sts.nix 9 - ]; 10 - }
···
-188
systems/kita/services/mail/maddy.nix
··· 1 - { config, ... }: 2 - { 3 - services.maddy = { 4 - enable = true; 5 - hostname = "mx2.soopy.moe"; 6 - primaryDomain = "soopy.moe"; 7 - localDomains = [ 8 - "$(primary_domain)" 9 - "services.soopy.moe" 10 - ]; 11 - 12 - tls = { 13 - loader = "file"; 14 - certificates = [ 15 - { 16 - certPath = config.security.acme.certs."kita.c.soopy.moe".directory + "/fullchain.pem"; 17 - keyPath = config.security.acme.certs."kita.c.soopy.moe".directory + "/key.pem"; 18 - } 19 - ]; 20 - }; 21 - 22 - config = '' 23 - auth.pass_table local_authdb { 24 - table sql_table { 25 - driver sqlite3 26 - dsn credentials.db 27 - table_name passwords 28 - } 29 - } 30 - 31 - storage.imapsql local_mailboxes { 32 - driver sqlite3 33 - dsn imapsql.db 34 - } 35 - 36 - table.chain local_rewrites { 37 - optional_step regexp "(.+)\+(.+)@(.+)" "$1@$3" 38 - optional_step static { 39 - entry postmaster postmaster@$(primary_domain) 40 - } 41 - optional_step file /etc/maddy/aliases 42 - } 43 - 44 - # catchall routing - thanks: 45 - # https://github.com/foxcpp/maddy/issues/243#issuecomment-1406567636 46 - msgpipeline local_routing { 47 - # mailing list lmtp here 48 - 49 - check { 50 - rspamd 51 - } 52 - 53 - # do the rewrite so + addressing and stuff are correctly handled 54 - modify { 55 - replace_rcpt &local_rewrites 56 - } 57 - 58 - # destination_in block takes priority over destinations 59 - destination_in &local_mailboxes { 60 - deliver_to &local_mailboxes 61 - } 62 - 63 - # deliver to final address if we handle the domain 64 - destination $(local_domains) { 65 - modify { 66 - replace_rcpt regexp ".*" "cassie@soopy.moe" 67 - } 68 - deliver_to &local_mailboxes 69 - } 70 - 71 - default_destination { 72 - reject 550 5.1.1 "User doesn't exist" 73 - } 74 - } 75 - 76 - smtp tcp://0.0.0.0:25 { 77 - limits { 78 - # Up to 20 msgs/sec across max. 10 SMTP connections 79 - all rate 20 1s 80 - all concurrency 10 81 - } 82 - 83 - # checks 84 - dmarc yes 85 - check { 86 - require_mx_record 87 - dkim 88 - spf 89 - } 90 - 91 - source $(local_domains) { 92 - reject 501 5.1.8 "Use internal submission port for outgoing SMTP" 93 - } 94 - default_source { 95 - destination postmaster $(local_domains) { 96 - deliver_to &local_routing 97 - } 98 - default_destination { 99 - reject 550 5.1.1 "User doesn't exist" 100 - } 101 - } 102 - } 103 - 104 - # enable port 465 implicit tls and 587 submission 105 - submission tls://0.0.0.0:465 tcp://0.0.0.0:587 { 106 - limits { 107 - all rate 50 1s 108 - } 109 - auth &local_authdb 110 - source $(local_domains) { 111 - check { 112 - authorize_sender { 113 - prepare_email &local_rewrites 114 - user_to_email identity 115 - } 116 - } 117 - destination postmaster $(local_domains) { 118 - deliver_to &local_routing 119 - } 120 - default_destination { 121 - # https://maddy.email/reference/modifiers/dkim/ 122 - modify { 123 - modify.dkim { 124 - domains $(primary_domain) $(local_domains) 125 - selector 240821-rsa 126 - newkey_algo rsa2048 127 - } 128 - modify.dkim { 129 - domains $(primary_domain) $(local_domains) 130 - selector 240821-ed 131 - newkey_algo ed25519 132 - } 133 - } 134 - 135 - deliver_to &remote_queue 136 - } 137 - } 138 - default_source { 139 - reject 501 5.1.8 "Non-local sender domain" 140 - } 141 - } 142 - 143 - target.remote outbound_delivery { 144 - limits { 145 - destination rate 20 1s 146 - destination concurrency 10 147 - } 148 - mx_auth { 149 - dane 150 - mtasts { 151 - cache fs 152 - fs_dir mtasts_cache/ 153 - } 154 - local_policy { 155 - min_tls_level encrypted 156 - min_mx_level none 157 - } 158 - } 159 - } 160 - 161 - target.queue remote_queue { 162 - target &outbound_delivery 163 - autogenerated_msg_domain $(primary_domain) 164 - bounce { 165 - destination postmaster $(local_domains) { 166 - deliver_to &local_routing 167 - } 168 - default_destination { 169 - reject 550 5.0.0 "Refusing to send DSNs to non-local addresses" 170 - } 171 - } 172 - } 173 - 174 - # implicit tls port 993 imap 175 - imap tls://0.0.0.0:993 { 176 - auth &local_authdb 177 - storage &local_mailboxes 178 - } 179 - ''; 180 - }; 181 - 182 - networking.firewall.allowedTCPPorts = [ 183 - 25 # smtp 184 - 465 # submissions 185 - 587 # submission (starttls) 186 - 993 # imaps 187 - ]; 188 - }
···
-17
systems/kita/services/mail/mta-sts.nix
··· 1 - # mail-transfer-agent strict transport security policy 2 - { _utils, ... }: 3 - { 4 - services.nginx.virtualHosts."mta-sts.soopy.moe" = _utils.mkVhost { 5 - useACMEHost = "kita-web.c.soopy.moe"; 6 - 7 - locations."/.well-known/" = _utils.mkNginxFile { 8 - content = '' 9 - version: STSv1 10 - mode: enforce 11 - max_age: 604800 12 - mx: mx2.soopy.moe 13 - ''; 14 - filename = "mta-sts.txt"; 15 - }; 16 - }; 17 - }
···
-45
systems/kita/services/mail/roundcube.nix
··· 1 - { 2 - pkgs, 3 - _utils, 4 - ... 5 - }: 6 - { 7 - services.roundcube = { 8 - enable = true; 9 - package = pkgs.roundcube.withPlugins ( 10 - plugins: with plugins; [ 11 - carddav 12 - contextmenu 13 - ] 14 - ); 15 - dicts = with pkgs.aspellDicts; [ en ]; 16 - hostName = "webmail.soopy.moe"; 17 - 18 - extraConfig = '' 19 - // ssl means implicit tls, NOT ssl. see roundcube docs for details. 20 - $config['imap_host'] = [ 21 - 'ssl://mx2.soopy.moe:993' => 'Gensokyo Mail Exchange', 22 - ]; 23 - // TODO: setup smtp and add related stuff here 24 - $config['product_name'] = 'GensoNet Webmail'; 25 - $config['support_url'] = 'https://soopy.moe'; 26 - $config['prefer_html'] = false; 27 - $config['plugins'] = [ 28 - 'archive', 29 - 'emoticons', 30 - 'filesystem_attachments', 31 - 'hide_blockquote', 32 - 'identicon', 33 - 'newmail_notifier', 34 - 'reconnect', 35 - 'carddav', 36 - 'managesieve', 37 - ]; 38 - ''; 39 - }; 40 - 41 - services.nginx.virtualHosts."webmail.soopy.moe" = _utils.mkVhost { 42 - enableACME = false; 43 - useACMEHost = "kita-web.c.soopy.moe"; 44 - }; 45 - }
···
-54
systems/kita/services/mail/rspamd.nix
··· 1 - { 2 - config, 3 - _utils, 4 - ... 5 - }: 6 - let 7 - secrets = _utils.setupSecrets config { 8 - namespace = "rspamd"; 9 - secrets = [ "controller_passwd" ]; 10 - config.owner = config.users.users.rspamd.name; 11 - }; 12 - in 13 - { 14 - imports = [ 15 - secrets.generate 16 - (secrets.mkTemplate "rspamd-controller-pwd.inc" '' 17 - password = "${secrets.placeholder "controller_passwd"}"; 18 - '') 19 - ]; 20 - services.rspamd = { 21 - enable = true; 22 - locals = { 23 - "redis.conf".text = '' 24 - servers = "${config.services.redis.servers.rspamd.unixSocket}"; 25 - ''; 26 - 27 - "milter_headers.conf".text = '' 28 - use = ["x-spamd-result", "x-spamd-bar", "x-spam-status"]; 29 - ''; 30 - 31 - # global options, which is different from sections 32 - "options.inc".text = '' 33 - dns { 34 - nameserver = "127.0.0.1:53"; 35 - } 36 - ''; 37 - }; 38 - workers."controller".extraConfig = '' 39 - .include(try=false; priority=10) "${secrets.getTemplate "rspamd-controller-pwd.inc"}" 40 - ''; 41 - 42 - workers."normal".bindSockets = [ "127.0.0.1:11333" ]; 43 - }; 44 - 45 - services.redis.servers.rspamd.enable = true; 46 - users.groups.redis-rspamd.members = [ 47 - config.users.users.rspamd.name 48 - ]; 49 - 50 - services.nginx.virtualHosts."_".locations."/rspamd" = { 51 - proxyPass = "http://localhost:11334"; # maybe expose this to tailnet instead 52 - extraConfig = "rewrite /rspamd/(.*) /$1 break;"; 53 - }; 54 - }
···
-14
systems/kita/services/postgresql.nix
··· 1 - { pkgs, ... }: 2 - { 3 - services.postgresql = { 4 - enable = true; 5 - package = pkgs.postgresql_16; # we like to specify a package so we know what we're using. 6 - ensureUsers = [ 7 - { 8 - name = "maildb"; 9 - ensureDBOwnership = true; 10 - } 11 - ]; 12 - ensureDatabases = [ "maildb" ]; 13 - }; 14 - }
···
-27
systems/kita/services/radicale.nix
··· 1 - { _utils, ... }: 2 - { 3 - services.radicale = { 4 - enable = true; 5 - settings = { 6 - auth = { 7 - type = "htpasswd"; 8 - htpasswd_filename = "/etc/radicale/users"; 9 - htpasswd_encryption = "bcrypt"; 10 - }; 11 - storage = { 12 - filesystem_folder = "/var/lib/radicale/collections"; # match StateDirectory 13 - }; 14 - rights.type = "owner_only"; # make this explicit 15 - }; 16 - }; 17 - 18 - systemd.tmpfiles.rules = [ 19 - "d /etc/radicale 0700 radicale" # rest parameters can be ignored/omitted as it's the same as setting a - value. 20 - # will need to manually create a htpasswd file there but it should be fine. best case scenario is to use sops but i'm tired of dealing with it. 21 - ]; 22 - 23 - services.nginx.virtualHosts."dav.soopy.moe" = _utils.mkSimpleProxy { 24 - port = 5232; 25 - extraConfig.useACMEHost = "kita-web.c.soopy.moe"; 26 - }; 27 - }
···
-6
systems/koumakan/administration/default.nix
··· 1 - { ... }: 2 - { 3 - imports = [ 4 - ./telemetry.nix 5 - ]; 6 - }
···
-19
systems/koumakan/administration/telemetry.nix
··· 1 - { ... }: 2 - { 3 - services.prometheus.exporters = { 4 - node = { 5 - enable = true; 6 - listenAddress = "127.0.0.1"; 7 - port = 20091; 8 - enabledCollectors = [ 9 - "systemd" 10 - ]; 11 - }; 12 - 13 - nginx = { 14 - enable = true; 15 - listenAddress = "127.0.0.1"; 16 - port = 20101; 17 - }; 18 - }; 19 - }
···
-11
systems/koumakan/certificates/breezewiki.nix
··· 1 - { ... }: 2 - { 3 - # Certificate for breezewiki 4 - security.acme.certs."bw.c.soopy.moe" = { 5 - group = "nginx"; 6 - extraDomainNames = [ 7 - "bw.soopy.moe" 8 - "*.bw.soopy.moe" 9 - ]; 10 - }; 11 - }
···
-11
systems/koumakan/certificates/bsky-pds.nix
··· 1 - { ... }: 2 - { 3 - # Certificate for fedi services 4 - security.acme.certs."bsky.c.soopy.moe" = { 5 - group = "nginx"; 6 - extraDomainNames = [ 7 - "bsky.soopy.moe" 8 - "*.bsky.soopy.moe" 9 - ]; 10 - }; 11 - }
···
+21 -5
systems/koumakan/certificates/default.nix
··· 1 - { 2 imports = [ 3 ./global.nix 4 - # ./postgresql.nix 5 ./fediverse.nix 6 - ./bsky-pds.nix 7 - ./breezewiki.nix 8 - ./garage-s3.nix 9 ]; 10 }
··· 1 + {...}: { 2 imports = [ 3 ./global.nix 4 + ./postgresql.nix 5 ./fediverse.nix 6 ]; 7 + 8 + security.acme = { 9 + defaults = { 10 + # == lego Configuration == 11 + credentialsFile = "/etc/lego/desec"; 12 + dnsProvider = "desec"; 13 + # In a more ideal world we would have an eddsa algo here but oh well 14 + keyType = "ec256"; # Ensure we use ec keys 15 + 16 + dnsResolver = "8.8.8.8:53"; 17 + 18 + # == LE Configuration == 19 + email = "me@soopy.moe"; 20 + # server = "https://acme-staging-v02.api.letsencrypt.org/directory"; 21 + server = "https://acme-v02.api.letsencrypt.org/directory"; 22 + }; 23 + 24 + acceptTerms = true; 25 + }; 26 }
+4 -3
systems/koumakan/certificates/fediverse.nix
··· 1 - { ... }: 2 - { 3 # Certificate for fedi services 4 security.acme.certs."fedi.c.soopy.moe" = { 5 group = "nginx"; 6 extraDomainNames = [ 7 - "words.soopy.moe" 8 ]; 9 }; 10 }
··· 1 + {...}: { 2 # Certificate for fedi services 3 security.acme.certs."fedi.c.soopy.moe" = { 4 group = "nginx"; 5 extraDomainNames = [ 6 + "a.soopy.moe" 7 + "m.soopy.moe" 8 + "pixie.soopy.moe" 9 ]; 10 }; 11 }
-10
systems/koumakan/certificates/garage-s3.nix
··· 1 - { 2 - # Certificate for garage domains 3 - security.acme.certs."s3.soopy.moe" = { 4 - group = "nginx"; 5 - extraDomainNames = [ 6 - "*.s3.soopy.moe" 7 - "*.s3web.soopy.moe" 8 - ]; 9 - }; 10 - }
···
+1 -2
systems/koumakan/certificates/global.nix
··· 1 - { ... }: 2 - { 3 # Global certificate 4 security.acme.certs."global.c.soopy.moe" = { 5 group = "nginx";
··· 1 + {...}: { 2 # Global certificate 3 security.acme.certs."global.c.soopy.moe" = { 4 group = "nginx";
+8 -13
systems/koumakan/certificates/postgresql.nix
··· 1 - # WARN: unused. see default.nix 2 - 3 - { config, ... }: 4 - { 5 # PostgreSQL only certificate 6 security.acme.certs."phant.soopy.moe" = { 7 group = "postgres"; ··· 12 13 # https://nixos.org/manual/nixos/stable/#module-security-acme-root-owned 14 systemd.services.postgresql = { 15 - requires = [ "acme-finished-phant.soopy.moe.target" ]; 16 - serviceConfig.LoadCredential = 17 - let 18 - certDir = config.security.acme.certs."phant.soopy.moe".directory; 19 - in 20 - [ 21 - "cert.pem:${certDir}/cert.pem" 22 - "key.pem:${certDir}/key.pem" 23 - ]; 24 }; 25 }
··· 1 + {config, ...}: { 2 # PostgreSQL only certificate 3 security.acme.certs."phant.soopy.moe" = { 4 group = "postgres"; ··· 9 10 # https://nixos.org/manual/nixos/stable/#module-security-acme-root-owned 11 systemd.services.postgresql = { 12 + requires = ["acme-finished-phant.soopy.moe.target"]; 13 + serviceConfig.LoadCredential = let 14 + certDir = config.security.acme.certs."phant.soopy.moe".directory; 15 + in [ 16 + "cert.pem:${certDir}/cert.pem" 17 + "key.pem:${certDir}/key.pem" 18 + ]; 19 }; 20 }
+21 -18
systems/koumakan/configuration.nix
··· 1 - { inputs, ... }: 2 - { 3 imports = [ 4 - inputs.mystia.nixosModules.fixups 5 - inputs.mystia.nixosModules.vmauth 6 - inputs.mystia.nixosModules.bsky-pds 7 - inputs.hydra.nixosModules.hydra 8 - inputs.whitelisted-web.nixosModules.default 9 - inputs.knotserver-module.nixosModules.default 10 - 11 ./hardware-configuration.nix 12 13 ./networking 14 ./certificates 15 ./security 16 ./services 17 - 18 - ./administration 19 ]; 20 21 - gensokyo.traits = { 22 - sensitive = true; 23 - }; 24 - gensokyo.presets.secureboot = true; 25 - gensokyo.presets.certificates = true; 26 27 boot.loader = { 28 efi = { 29 canTouchEfiVariables = true; 30 - efiSysMountPoint = "/boot"; 31 }; 32 systemd-boot = { 33 enable = true; 34 graceful = true; 35 - # netbootxyz.enable = true; 36 }; 37 grub.enable = false; 38 }; 39 40 # Just don't change this :p 41 system.stateVersion = "23.05"; # Did you read the comment?
··· 1 + {inputs, ...}: { 2 imports = [ 3 + # Include the results of the hardware scan. 4 ./hardware-configuration.nix 5 + 6 + ../../global/core.nix 7 + ../../global/programs 8 9 ./networking 10 ./certificates 11 ./security 12 ./services 13 ]; 14 15 + nixpkgs.overlays = import ../../global/overlays inputs; 16 17 boot.loader = { 18 efi = { 19 canTouchEfiVariables = true; 20 + efiSysMountPoint = "/boot/efi"; 21 }; 22 systemd-boot = { 23 enable = true; 24 graceful = true; 25 + netbootxyz.enable = true; 26 }; 27 grub.enable = false; 28 }; 29 + 30 + # Define a user account. Don't forget to set a password with โ€˜passwdโ€™. 31 + users.users.cassie = { 32 + isNormalUser = true; 33 + extraGroups = ["wheel"]; 34 + openssh = { 35 + authorizedKeys.keyFiles = [../../creds/ssh/cassie]; 36 + }; 37 + # packages = with pkgs; []; 38 + }; 39 + 40 + sops.age.sshKeyPaths = ["/etc/ssh/ssh_host_ed25519_key"]; 41 + sops.defaultSopsFile = ../../creds/sops/koumakan.yaml; 42 43 # Just don't change this :p 44 system.stateVersion = "23.05"; # Did you read the comment?
+27
systems/koumakan/default.nix
···
··· 1 + { 2 + lib, 3 + utils, 4 + inputs, 5 + ... 6 + }: 7 + lib.nixosSystem { 8 + system = "x86_64-linux"; 9 + 10 + # see docs/tips_n_tricks.md#extra_opts for syntax 11 + # see docs/utils.md for functions 12 + specialArgs = { 13 + inherit inputs; 14 + _utils = utils { 15 + inherit inputs; 16 + system = "x86_64-linux"; 17 + }; 18 + }; 19 + 20 + modules = [ 21 + inputs.lanzaboote.nixosModules.lanzaboote 22 + inputs.attic.nixosModules.atticd 23 + inputs.sops-nix.nixosModules.sops 24 + 25 + ./configuration.nix 26 + ]; 27 + }
+39 -24
systems/koumakan/hardware-configuration.nix
··· 4 { 5 config, 6 lib, 7 modulesPath, 8 ... 9 - }: 10 - { 11 imports = [ 12 (modulesPath + "/installer/scan/not-detected.nix") 13 ]; 14 15 - boot.initrd.availableKernelModules = [ 16 - "xhci_pci" 17 - "ehci_pci" 18 - "ahci" 19 - "usbhid" 20 - "usb_storage" 21 - "sd_mod" 22 - "sr_mod" 23 - ]; 24 - boot.initrd.kernelModules = [ ]; 25 - boot.kernelModules = [ "kvm-intel" ]; 26 - boot.extraModulePackages = [ ]; 27 28 fileSystems."/" = { 29 - device = "/dev/disk/by-uuid/738969fe-b2a0-4fa1-9ac5-69f2a25536e7"; 30 fsType = "btrfs"; 31 }; 32 33 fileSystems."/boot" = { 34 - device = "/dev/disk/by-uuid/62FD-C60A"; 35 fsType = "vfat"; 36 - options = [ 37 - "fmask=0022" 38 - "dmask=0022" 39 - ]; 40 }; 41 42 - fileSystems."/var/lib/garage/data" = { 43 - device = "/dev/disk/by-uuid/99607c97-0dc6-403e-b09a-7b40735f9176"; 44 - fsType = "xfs"; 45 }; 46 47 swapDevices = [ 48 - { device = "/dev/disk/by-uuid/902b902d-3486-49de-9a58-7a079c9a090d"; } 49 ]; 50 51 # Enables DHCP on each ethernet and wireless interface. In case of scripted networking ··· 53 # still possible to use this option, but it's recommended to use it in conjunction 54 # with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`. 55 networking.useDHCP = lib.mkDefault true; 56 # networking.interfaces.eno1.useDHCP = lib.mkDefault true; 57 58 nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; 59 hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; 60 }
··· 4 { 5 config, 6 lib, 7 + pkgs, 8 modulesPath, 9 ... 10 + }: { 11 imports = [ 12 (modulesPath + "/installer/scan/not-detected.nix") 13 ]; 14 15 + boot.initrd.availableKernelModules = ["xhci_pci" "ahci" "usbhid" "sr_mod"]; 16 + boot.initrd.kernelModules = ["dm-snapshot"]; 17 + boot.kernelModules = ["kvm-intel"]; 18 + boot.extraModulePackages = []; 19 20 fileSystems."/" = { 21 + device = "/dev/disk/by-uuid/0b38be0c-5365-4f02-85b8-72f37bb2ddf8"; 22 + fsType = "btrfs"; 23 + }; 24 + 25 + fileSystems."/var/log" = { 26 + device = "/dev/disk/by-uuid/e6ff7c96-3bef-4a17-9114-64ef1460fc00"; 27 + fsType = "btrfs"; 28 + }; 29 + 30 + fileSystems."/var/log/audit" = { 31 + device = "/dev/disk/by-uuid/a20e2995-7297-4f69-af89-b58ff314e029"; 32 + fsType = "btrfs"; 33 + }; 34 + 35 + fileSystems."/srv/osm-data" = { 36 + device = "/dev/disk/by-uuid/3c1a8b58-fbe6-4522-8e27-72419b3c2d6f"; 37 fsType = "btrfs"; 38 }; 39 40 fileSystems."/boot" = { 41 + device = "/dev/disk/by-uuid/9E0F-3FDE"; 42 fsType = "vfat"; 43 + }; 44 + 45 + fileSystems."/boot/efi" = { 46 + device = "/dev/disk/by-uuid/9EB1-FA5A"; 47 + fsType = "vfat"; 48 + }; 49 + 50 + fileSystems."/srv/www/keine" = { 51 + device = "/dev/disk/by-uuid/0a0e102a-b1ac-44a2-947b-2ec505b532ad"; 52 + fsType = "btrfs"; 53 }; 54 55 + fileSystems."/home" = { 56 + device = "/dev/disk/by-uuid/50165105-6b82-4228-9640-2d32ce45f76e"; 57 + fsType = "btrfs"; 58 }; 59 60 swapDevices = [ 61 + {device = "/dev/disk/by-uuid/efd68464-2e0c-4aaf-8264-519dd7d05ddf";} 62 ]; 63 64 # Enables DHCP on each ethernet and wireless interface. In case of scripted networking ··· 66 # still possible to use this option, but it's recommended to use it in conjunction 67 # with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`. 68 networking.useDHCP = lib.mkDefault true; 69 + # networking.interfaces.br0.useDHCP = lib.mkDefault true; 70 # networking.interfaces.eno1.useDHCP = lib.mkDefault true; 71 72 nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; 73 + powerManagement.cpuFreqGovernor = lib.mkDefault "ondemand"; 74 hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; 75 }
+4 -2
systems/koumakan/networking/default.nix
··· 1 - { ... }: 2 - { 3 imports = [ 4 ./firewall.nix 5 ./interface.nix 6 ]; 7 }
··· 1 + {...}: { 2 imports = [ 3 ./firewall.nix 4 ./interface.nix 5 ]; 6 + 7 + networking.hostName = "koumakan"; 8 + networking.networkmanager.enable = true; 9 }
+2 -39
systems/koumakan/networking/firewall.nix
··· 1 - { lib, ... }: 2 - { 3 networking.firewall = { 4 enable = true; 5 allowedTCPPorts = [ 6 80 7 443 # http[s] 8 - 9 - # sftpgo 10 - 21 # ftp 11 - ]; 12 - 13 - allowedTCPPortRanges = [ 14 - # ftp passive mode 15 - { 16 - from = 50000; 17 - to = 50100; 18 - } 19 - 20 - # minecraft 21 - { 22 - from = 25560; 23 - to = 25599; 24 - } 25 - ]; 26 - allowedUDPPorts = [ 27 - 443 # https over quic (http3) 28 - ]; 29 - 30 - allowedUDPPortRanges = [ 31 - # more minecraft 32 - { 33 - from = 25560; 34 - to = 25599; 35 - } 36 - 37 - # plasmo voice 38 - { 39 - from = 55111; 40 - to = 55199; 41 - } 42 ]; 43 }; 44 - 45 - # allow openssh 46 - services.openssh.openFirewall = lib.mkForce true; 47 }
··· 1 + {...}: { 2 networking.firewall = { 3 enable = true; 4 allowedTCPPorts = [ 5 + 22 # ssh 6 80 7 443 # http[s] 8 ]; 9 }; 10 }
+1 -2
systems/koumakan/networking/interface.nix
··· 1 - { ... }: 2 - { 3 networking.networkmanager.ethernet.macAddress = "stable"; 4 }
··· 1 + {...}: { 2 networking.networkmanager.ethernet.macAddress = "stable"; 3 }
+3 -2
systems/koumakan/security/default.nix
··· 1 - { ... }: 2 - { 3 imports = [ 4 ./pam.nix 5 ]; 6 }
··· 1 + {...}: { 2 imports = [ 3 ./pam.nix 4 + ./sudo.nix 5 + ./secureboot.nix 6 ]; 7 }
+1 -2
systems/koumakan/security/pam.nix
··· 1 - { ... }: 2 - { 3 security.pam.yubico = { 4 enable = true; 5 id = "91582";
··· 1 + {...}: { 2 security.pam.yubico = { 3 enable = true; 4 id = "91582";
+17
systems/koumakan/security/secureboot.nix
···
··· 1 + { 2 + pkgs, 3 + lib, 4 + ... 5 + }: { 6 + environment.systemPackages = with pkgs; [ 7 + cryptsetup 8 + sbctl 9 + ]; 10 + 11 + # lanzaboote currently replaces systemd-boot, so disable that here. 12 + boot.loader.systemd-boot.enable = lib.mkForce false; 13 + boot.lanzaboote = { 14 + enable = true; 15 + pkiBundle = "/etc/secureboot"; 16 + }; 17 + }
+6
systems/koumakan/security/sudo.nix
···
··· 1 + {pkgs, ...}: { 2 + security.sudo.extraConfig = '' 3 + Defaults insults 4 + ''; 5 + security.sudo.package = pkgs.sudo.override {withInsults = true;}; 6 + }
-38
systems/koumakan/services/anubis.nix
··· 1 - { 2 - lib, 3 - config, 4 - ... 5 - }: 6 - { 7 - assertions = lib.mapAttrsToList (k: v: { 8 - # assertion = v.settings.METRICS_BIND_NETWORK == "tcp" -> !builtins.isNull (builtins.match "127.0.0.1:.*" v.settings.METRICS_BIND); 9 - assertion = 10 - !builtins.isNull (builtins.match "^127.0.0.1:17[[:digit:]]\{3\}$" v.settings.METRICS_BIND); # stricter 11 - message = "koumakan-internal(anubis `${k}`): settings.METRICS_BIND must be in the form `127.0.0.1:17xxx`"; 12 - }) config.services.anubis.instances; 13 - 14 - # neither VM nor Prom supports scraping unix domain sockets and i currently cba writing a custom scraper for it 15 - # prom: https://github.com/prometheus/prometheus/issues/12024 16 - # TODO: do that 17 - services.anubis.defaultOptions.settings = { 18 - METRICS_BIND_NETWORK = "tcp"; 19 - DIFFICULTY = 4; 20 - }; 21 - 22 - services.vmagent.prometheusConfig.scrape_configs = lib.mapAttrsToList (k: v: { 23 - job_name = "anubis"; 24 - static_configs = lib.singleton { 25 - targets = lib.singleton v.settings.METRICS_BIND; 26 - }; 27 - relabel_configs = [ 28 - { 29 - target_label = "instance"; 30 - replacement = "koumakan"; 31 - } 32 - { 33 - target_label = "anubis_instance"; 34 - replacement = k; 35 - } 36 - ]; 37 - }) (lib.filterAttrs (_: v: v.enable) config.services.anubis.instances); 38 - }
···
-24
systems/koumakan/services/arion/breezewiki.nix
··· 1 - { _utils, ... }: 2 - { 3 - virtualisation.arion.projects.breezewiki.settings = { 4 - services.breezewiki = { 5 - service = { 6 - image = "quay.io/pussthecatorg/breezewiki"; 7 - ports = [ "127.0.0.1:35612:10416" ]; 8 - environment = { 9 - bw_canonical_origin = "https://bw.soopy.moe"; 10 - bw_log_outgoing = "false"; 11 - bw_strict_proxy = "true"; 12 - bw_feature_search_suggestions = "true"; 13 - }; 14 - }; 15 - }; 16 - }; 17 - 18 - services.nginx.virtualHosts.".bw.soopy.moe" = _utils.mkSimpleProxy { 19 - port = 35612; 20 - extraConfig = { 21 - useACMEHost = "bw.c.soopy.moe"; 22 - }; 23 - }; 24 - }
···
-13
systems/koumakan/services/arion/default.nix
··· 1 - { 2 - imports = [ 3 - ./breezewiki.nix 4 - ./pixivfe.nix 5 - ]; 6 - 7 - virtualisation.arion.backend = "podman-socket"; 8 - virtualisation.podman = { 9 - enable = true; 10 - dockerSocket.enable = true; 11 - defaultNetwork.settings.dns_enabled = true; 12 - }; 13 - }
···
-80
systems/koumakan/services/arion/pixivfe.nix
··· 1 - { 2 - _utils, 3 - config, 4 - lib, 5 - ... 6 - }: 7 - let 8 - secrets = _utils.setupSecrets config { 9 - namespace = "pixivfe"; 10 - secrets = [ "token" ]; 11 - }; 12 - in 13 - { 14 - imports = [ 15 - secrets.generate 16 - (secrets.mkTemplate "pixivfe.env" '' 17 - PIXIVFE_TOKEN=${secrets.placeholder "token"} 18 - '') 19 - ]; 20 - 21 - virtualisation.arion.projects.pixivfe.settings = { 22 - services.pixivfe.service = { 23 - image = "vnpower/pixivfe:latest"; 24 - ports = [ 25 - "127.0.0.1:35284:8282" 26 - ]; 27 - capabilities = { 28 - ALL = false; # drop all capabilities 29 - }; 30 - environment = { 31 - PIXIVFE_PORT = 8282; 32 - PIXIVFE_HOST = "0.0.0.0"; 33 - PIXIVFE_IMAGEPROXY = "https://pximg.soopy.moe"; 34 - PIXIVFE_CACHE_ENABLED = "true"; 35 - }; 36 - env_file = lib.singleton (secrets.getTemplate "pixivfe.env"); 37 - }; 38 - }; 39 - 40 - services.nginx = { 41 - # cash money 42 - proxyCachePath."pximg" = { 43 - enable = true; 44 - maxSize = "10g"; 45 - inactive = "30d"; 46 - keysZoneName = "pximg"; 47 - }; 48 - 49 - virtualHosts."pximg.soopy.moe" = _utils.mkVhost { 50 - locations."/" = { 51 - recommendedProxySettings = false; 52 - proxyPass = "https://i.pximg.net"; 53 - extraConfig = '' 54 - # bypass 55 - proxy_set_header Host i.pximg.net; 56 - proxy_set_header Referer "https://www.pixiv.net/"; 57 - proxy_set_header User-Agent "Mozilla/5.0 (Windows NT 10.0; rv:133.0) Gecko/20100101 Firefox/133.0"; 58 - add_header x-cache-status $upstream_cache_status; 59 - 60 - # cache config 61 - proxy_cache pximg; 62 - proxy_cache_lock on; 63 - proxy_cache_valid 200 30d; 64 - proxy_cache_valid 404 5m; 65 - proxy_cache_revalidate on; 66 - proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504; 67 - ''; 68 - }; 69 - locations."= /" = _utils.mkNginxFile { 70 - content = '' 71 - nope (i mean yes sure but nop) 72 - ''; 73 - }; 74 - }; 75 - 76 - virtualHosts."pxv.soopy.moe" = _utils.mkSimpleProxy { 77 - port = 35284; 78 - }; 79 - }; 80 - }
···
+53
systems/koumakan/services/attic.nix
···
··· 1 + { 2 + _utils, 3 + pkgs, 4 + ... 5 + }: let 6 + # where tf are the docs for pkgs.formats?? 7 + toml = pkgs.formats.toml {}; 8 + in { 9 + services.atticd = { 10 + enable = true; 11 + credentialsFile = "/etc/atticd.env"; 12 + 13 + # Per https://github.com/zhaofengli/attic/blob/b43d12082e34bceb26038bdad0438fd68804cfcd/server/src/config.rs#L252 14 + # we can use the env var ATTIC_SERVER_DATABASE_URL to set the database connection url, 15 + # ONLY IF database.url in config is unset. 16 + # Since we cannot reasonably "unset" database with the default settings block, this will have to do. 17 + # Please reach out if you know a better way! 18 + configFile = toml.generate "server.toml" { 19 + database = {}; 20 + storage = { 21 + type = "local"; 22 + path = "/var/lib/atticd/storage"; 23 + }; 24 + 25 + listen = "127.0.0.1:38191"; 26 + allowed-hosts = [ 27 + "nonbunary.soopy.moe" 28 + ]; 29 + chunking = { 30 + # The minimum NAR size to trigger chunking 31 + nar-size-threshold = 64 * 1024; # 64 KiB 32 + # The preferred minimum size of a chunk, in bytes 33 + min-size = 16 * 1024; # 16 KiB 34 + # The preferred average size of a chunk, in bytes 35 + avg-size = 64 * 1024; # 64 KiB 36 + # The preferred maximum size of a chunk, in bytes 37 + max-size = 256 * 1024; # 256 KiB 38 + }; 39 + }; 40 + }; 41 + 42 + services.nginx.virtualHosts."nonbunary.soopy.moe" = _utils.mkSimpleProxy { 43 + port = 38191; 44 + extraConfig = { 45 + extraConfig = '' 46 + client_max_body_size 1G; 47 + proxy_read_timeout 3h; 48 + proxy_connect_timeout 3h; 49 + proxy_send_timeout 3h; 50 + ''; 51 + }; 52 + }; 53 + }
-6
systems/koumakan/services/ci/default.nix
··· 1 - { ... }: 2 - { 3 - imports = [ 4 - ./hydra 5 - ]; 6 - }
···
-101
systems/koumakan/services/ci/hydra/default.nix
··· 1 - { 2 - inputs, 3 - pkgs, 4 - _utils, 5 - config, 6 - lib, 7 - ... 8 - }: 9 - let 10 - secrets = _utils.setupSecrets config { 11 - namespace = "hydra"; 12 - secrets = [ 13 - "s3/key_id" 14 - "s3/key_secret" 15 - "signing_key/v1" 16 - ]; 17 - config = { 18 - owner = config.users.users.hydra-www.name; 19 - group = config.users.users.hydra-www.group; 20 - mode = "0440"; 21 - }; 22 - }; 23 - 24 - webhookScript = pkgs.writeShellApplication { 25 - name = "hydra-webhook"; 26 - runtimeInputs = with pkgs; [ xh ]; 27 - text = '' 28 - xh :8000 @"$1" 29 - ''; 30 - }; 31 - in 32 - { 33 - imports = [ 34 - secrets.generate 35 - (secrets.mkTemplate "hydra-s3-creds" '' 36 - [default] 37 - aws_access_key_id = ${secrets.placeholder "s3/key_id"} 38 - aws_secret_access_key = ${secrets.placeholder "s3/key_secret"} 39 - '') 40 - ]; 41 - 42 - sops.templates."hydra-s3-creds" = { 43 - owner = lib.mkForce config.users.users.hydra-queue-runner.name; 44 - path = config.users.users.hydra-queue-runner.home + "/.aws/credentials"; 45 - }; 46 - sops.secrets.builder_key.owner = config.users.users.hydra-queue-runner.name; 47 - 48 - services.hydra-dev = { 49 - enable = true; 50 - package = inputs.hydra.packages.${pkgs.system}.hydra; 51 - 52 - listenHost = "127.0.0.1"; 53 - hydraURL = "https://hydra.soopy.moe"; 54 - 55 - useSubstitutes = true; 56 - notificationSender = "hydra+noreply@services.soopy.moe"; 57 - 58 - logo = ./hydra.png; 59 - # wow so tracker 60 - tracker = '' 61 - <link rel="icon" type="image/png" href="/logo" /> 62 - <style> 63 - .logo { 64 - margin-top: unset !important; 65 - } 66 - </style> 67 - ''; 68 - 69 - extraConfig = '' 70 - # conflicts with upload_logs_to_binary_cache 71 - # compress_build_logs 1 72 - 73 - max_output_size = 5368709120 # 5 << 30 (5 GiB) 74 - upload_logs_to_binary_cache = true 75 - store_uri = s3://cache.soopy.moe?scheme=https&endpoint=s3.soopy.moe&compression=zstd&parallel-compression=true&write-nar-listing=true&ls-compression=br&log-compression=br&region=ap-east-1&secret-key=${secrets.get "signing_key/v1"} 76 - 77 - binary_cache_public_uri = https://cache.soopy.moe 78 - log_prefix = https://cache.soopy.moe/ 79 - 80 - <git-input> 81 - timeout = 1800 82 - </git-input> 83 - 84 - # ad hoc webhook 85 - <runcommand> 86 - job = *:*:* 87 - #command = ${webhookScript} $HYDRA_JSON 88 - command = cat $HYDRA_JSON >> /tmp/hydra-notify-runcommand.json 89 - </runcommand> 90 - ''; 91 - }; 92 - 93 - services.nginx.virtualHosts."hydra.soopy.moe" = _utils.mkSimpleProxy { 94 - port = 3000; 95 - extraConfig = { 96 - locations."/metrics" = { 97 - return = "444"; 98 - }; 99 - }; 100 - }; 101 - }
···
systems/koumakan/services/ci/hydra/hydra.png

This is a binary file and will not be displayed.

+1 -2
systems/koumakan/services/databases/default.nix
··· 1 - { ... }: 2 - { 3 imports = [ 4 ./postgresql.nix 5 ./redis.nix
··· 1 + {...}: { 2 imports = [ 3 ./postgresql.nix 4 ./redis.nix
+12 -16
systems/koumakan/services/databases/postgresql.nix
··· 1 - { 2 - pkgs, 3 - lib, 4 - ... 5 - }: 6 - { 7 services.postgresql = { 8 enable = true; 9 10 package = pkgs.postgresql_15; 11 dataDir = "/var/lib/postgresql/15"; 12 13 - authentication = lib.mkForce '' 14 # unix socket connection 15 - local hydra all ident map=hydra-users 16 local all all peer 17 # local ipv4/6 tcp connection 18 host all all 127.0.0.1/32 scram-sha-256 19 host all all ::1/128 scram-sha-256 20 ''; 21 22 - settings = { 23 listen_addresses = pkgs.lib.mkForce "*"; 24 max_connections = 200; 25 password_encryption = "scram-sha-256"; 26 27 - log_line_prefix = "%m [%p] %h "; 28 - # ssl = "on"; 29 - # ssl_cert_file = "${credsDir}/cert.pem"; 30 - # ssl_key_file = "${credsDir}/key.pem"; 31 32 log_hostname = true; 33 datestyle = "iso, dmy"; 34 log_timezone = "Asia/Hong_Kong"; 35 timezone = "Asia/Hong_Kong"; 36 - default_text_search_config = "pg_catalog.english"; 37 38 max_wal_size = "2GB"; 39 min_wal_size = "80MB"; 40 }; 41 }; 42 - 43 - users.users.postgres.useDefaultShell = lib.mkForce false; 44 }
··· 1 + {pkgs, ...}: { 2 services.postgresql = { 3 enable = true; 4 5 package = pkgs.postgresql_15; 6 dataDir = "/var/lib/postgresql/15"; 7 + logLinePrefix = "%m [%p] %h "; 8 9 + authentication = '' 10 # unix socket connection 11 local all all peer 12 # local ipv4/6 tcp connection 13 host all all 127.0.0.1/32 scram-sha-256 14 host all all ::1/128 scram-sha-256 15 + # world (encrypted) tcp traffic 16 + hostssl all all all scram-sha-256 17 ''; 18 19 + settings = let 20 + credsDir = "/run/credentials/postgresql.service"; 21 + in { 22 listen_addresses = pkgs.lib.mkForce "*"; 23 max_connections = 200; 24 password_encryption = "scram-sha-256"; 25 26 + ssl = "on"; 27 + ssl_cert_file = "${credsDir}/cert.pem"; 28 + ssl_key_file = "${credsDir}/key.pem"; 29 30 log_hostname = true; 31 datestyle = "iso, dmy"; 32 log_timezone = "Asia/Hong_Kong"; 33 timezone = "Asia/Hong_Kong"; 34 + default_text_search_config = "pc_catalog.english"; 35 36 max_wal_size = "2GB"; 37 min_wal_size = "80MB"; 38 }; 39 }; 40 }
+1 -2
systems/koumakan/services/databases/redis.nix
··· 1 - { ... }: 2 - { 3 services.redis.servers."" = { 4 enable = true; 5 };
··· 1 + {...}: { 2 services.redis.servers."" = { 3 enable = true; 4 };
+3 -17
systems/koumakan/services/default.nix
··· 1 - { ... }: 2 - { 3 imports = [ 4 ./nginx.nix 5 - ./anubis.nix 6 7 - # "containers" in a burning text gif 8 - ./arion 9 10 - # Gensokyo local stuff 11 - ./ftp.nix 12 13 # fediverse 14 ./matrix 15 ./fediverse 16 - ./feeds 17 18 - ./ci 19 - ./databases 20 - ./games 21 - ./mirror 22 - # ./notifications 23 ./proxies 24 - ./scm 25 - ./security 26 ./static-sites 27 - ./storage 28 - ./telemetry 29 ]; 30 }
··· 1 + {...}: { 2 imports = [ 3 ./nginx.nix 4 5 + ./databases 6 7 + ./attic.nix 8 9 # fediverse 10 ./matrix 11 ./fediverse 12 13 ./proxies 14 ./static-sites 15 ]; 16 }
+150
systems/koumakan/services/fediverse/akkoma.nix
···
··· 1 + { 2 + _utils, 3 + pkgs, 4 + config, 5 + lib, 6 + ... 7 + }: let 8 + mkRaw = (pkgs.formats.elixirConf {}).lib.mkRaw; 9 + # I don't know what i did but i made this abomination 10 + mkSecret = file: 11 + if !lib.elem file secrets 12 + then throw "Provided secret file ${file} is not in the list of defined secrets." 13 + else {_secret = "/run/secrets/akkoma/${file}";}; 14 + secrets = [ 15 + "joken_default_signer" # can't think of any better name spacing 16 + "dist/cookie" 17 + "search/meili/host_unencrypted" 18 + "search/meili/key" 19 + "endpoint/secret_base" 20 + "endpoint/salt" 21 + "endpoint/live_view/salt" 22 + "vapid/pub" 23 + "vapid/key" 24 + "postgres/hostname" 25 + "postgres/database_unencrypted" 26 + "postgres/username" 27 + "postgres/password" 28 + "smtp/username" 29 + "smtp/password" 30 + "smtp/relay" 31 + ]; 32 + in { 33 + # secrets definition 34 + sops.secrets = _utils.genSecrets "akkoma" secrets {}; 35 + 36 + services.akkoma = { 37 + enable = true; 38 + initSecrets = false; 39 + initDb.enable = false; 40 + # TODO: figure out how to add swagger ui 41 + # frontends = { 42 + # swagger 43 + # }; 44 + 45 + # TODO: Issue #5 46 + dist.cookie = mkSecret "dist/cookie"; 47 + config = { 48 + ":joken".":default_signer" = mkSecret "joken_default_signer"; 49 + 50 + ":pleroma" = { 51 + ":http_security" = { 52 + sts = true; 53 + }; 54 + 55 + ":configurable_from_database" = true; 56 + ":instance" = { 57 + name = "CassieAkko"; 58 + description = "You should not see this here..."; 59 + email = "me@soopy.moe"; 60 + notify_email = "noreply@a.soopy.moe"; 61 + limit = 5000; 62 + registrations_open = true; 63 + }; 64 + 65 + # TODO: add proper proxy support 66 + # also refer to https://meta.akkoma.dev/t/another-vector-for-the-injection-vulnerability-found/483 67 + ":media_proxy" = { 68 + enabled = true; 69 + redirect_on_failure = true; 70 + }; 71 + 72 + "Pleroma.Repo" = { 73 + adapter = mkRaw "Ecto.Adapters.Postgres"; 74 + database = mkSecret "postgres/database_unencrypted"; 75 + hostname = mkSecret "postgres/hostname"; 76 + username = mkSecret "postgres/username"; 77 + password = mkSecret "postgres/password"; 78 + }; 79 + 80 + "Pleroma.Upload" = { 81 + filters = [ 82 + (mkRaw "Pleroma.Upload.Filter.Exiftool") 83 + (mkRaw "Pleroma.Upload.Filter.Dedupe") 84 + ]; 85 + }; 86 + 87 + "Pleroma.Web.Endpoint" = { 88 + # We don't need to specify http ip/ports here because we use unix sockets 89 + # ok we do because it's broken 90 + http = { 91 + ip = "127.0.0.1"; 92 + port = 35378; 93 + }; 94 + url = { 95 + host = "a.soopy.moe"; 96 + scheme = "https"; 97 + port = 443; 98 + }; 99 + secure_cookie_flag = true; 100 + 101 + secret_key_base = mkSecret "endpoint/secret_base"; 102 + signing_salt = mkSecret "endpoint/salt"; 103 + live_view = { 104 + signing_salt = mkSecret "endpoint/live_view/salt"; 105 + }; 106 + }; 107 + 108 + "Pleroma.Emails.Mailer" = { 109 + adapter = mkRaw "Swoosh.Adapters.SMTP"; 110 + relay = mkSecret "smtp/relay"; 111 + username = mkSecret "smtp/username"; 112 + password = mkSecret "smtp/password"; 113 + }; 114 + 115 + "Pleroma.Search.Meilisearch" = { 116 + url = mkSecret "search/meili/host_unencrypted"; 117 + private_key = mkSecret "search/meili/key"; 118 + initial_indexing_chunk_size = 100000; 119 + }; 120 + }; 121 + 122 + ":web_push_encryption".":vapid_details" = { 123 + subject = "mailto:me@soopy.moe"; 124 + public_key = mkSecret "vapid/pub"; 125 + private_key = mkSecret "vapid/key"; 126 + }; 127 + }; 128 + 129 + nginx = _utils.mkVhost { 130 + useACMEHost = "fedi.c.soopy.moe"; 131 + extraConfig = '' 132 + client_max_body_size 100M; 133 + ''; 134 + }; 135 + 136 + extraStatic = { 137 + "static/terms-of-service.html" = pkgs.writeText "terms-of-service.html" '' 138 + <h1>Terms of Service</h1><p>Please refer to this ToS: 139 + <a href="https://m.soopy.moe/@admin/pages/tos" rel="noopener noreferrer nofollow"> 140 + https://m.soopy.moe/@admin/pages/tos</a></p> 141 + ''; 142 + # refer to https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/servers/akkoma/emoji/blobs_gg.nix#L29 143 + # "emoji/Cat_girls_Emoji" = ... 144 + }; 145 + }; 146 + 147 + systemd.services.akkoma-config = { 148 + serviceConfig.SupplementaryGroups = [config.users.groups.keys.name]; 149 + }; 150 + }
-42
systems/koumakan/services/fediverse/bsky-pds.nix
··· 1 - { 2 - inputs, 3 - pkgs, 4 - config, 5 - _utils, 6 - ... 7 - }: 8 - let 9 - secrets = _utils.setupSecrets config { 10 - namespace = "pds"; 11 - secrets = [ 12 - "email/address" 13 - "email/url" 14 - ]; 15 - config.owner = config.services.bsky-pds.user; 16 - }; 17 - in 18 - { 19 - imports = [ secrets.generate ]; 20 - services.bsky-pds = { 21 - enable = true; 22 - package = inputs.mystia.packages.${pkgs.system}.bsky-pds; 23 - 24 - # because sensible settings are already defined in the module, we can keep this simple :) 25 - settings = { 26 - PDS_HOSTNAME = "bsky.soopy.moe"; 27 - PDS_CONTACT_EMAIL_ADDRESS = "me@soopy.moe"; 28 - }; 29 - credentials = { 30 - PDS_EMAIL_SMTP_URL = secrets.get "email/url"; 31 - PDS_EMAIL_FROM_ADDRESS = secrets.get "email/address"; 32 - }; 33 - }; 34 - 35 - services.nginx.virtualHosts.".bsky.soopy.moe" = _utils.mkSimpleProxy { 36 - port = 2583; 37 - websockets = true; 38 - extraConfig = { 39 - useACMEHost = "bsky.c.soopy.moe"; 40 - }; 41 - }; 42 - }
···
+2 -4
systems/koumakan/services/fediverse/default.nix
··· 1 - { ... }: 2 - { 3 imports = [ 4 - ./writefreely.nix 5 - ./bsky-pds.nix 6 ]; 7 }
··· 1 + {...}: { 2 imports = [ 3 + ./akkoma.nix 4 ]; 5 }
-40
systems/koumakan/services/fediverse/writefreely.nix
··· 1 - { 2 - config, 3 - _utils, 4 - lib, 5 - # inputs, 6 - # pkgs, 7 - ... 8 - }: 9 - { 10 - services.writefreely = { 11 - enable = true; 12 - # package = inputs.nixpkgs-wf.legacyPackages.${pkgs.system}.writefreely; 13 - host = "words.soopy.moe"; 14 - settings = { 15 - server.port = 31294; 16 - app = { 17 - host = "https://${config.services.writefreely.host}"; # annoying 18 - site_name = "Kourindou"; 19 - site_description = "Words of Gensokyo, sprinkled with a little bit of technology"; 20 - 21 - max_blogs = 0; 22 - open_registration = false; 23 - user_invites = "user"; 24 - default_visibility = "public"; 25 - 26 - federation = false; 27 - public_stats = true; 28 - min_username_len = 5; 29 - local_timeline = true; 30 - }; 31 - }; 32 - nginx.enable = true; 33 - admin.name = "soopyc"; 34 - }; 35 - 36 - services.nginx.virtualHosts.${config.services.writefreely.host} = _utils.mkVhost { 37 - forceSSL = lib.mkForce true; 38 - useACMEHost = "fedi.c.soopy.moe"; 39 - }; 40 - }
···
-6
systems/koumakan/services/feeds/default.nix
··· 1 - { ... }: 2 - { 3 - imports = [ 4 - ./miniflux.nix 5 - ]; 6 - }
···
-16
systems/koumakan/services/feeds/miniflux.nix
··· 1 - { _utils, ... }: 2 - { 3 - services.miniflux = { 4 - enable = true; 5 - config = { 6 - LISTEN_ADDR = "127.0.0.1:34723"; 7 - BASE_URL = "https://flux.soopy.moe/"; 8 - WEBAUTHN = 1; 9 - CREATE_ADMIN = 0; 10 - }; 11 - }; 12 - 13 - services.nginx.virtualHosts."flux.soopy.moe" = _utils.mkSimpleProxy { 14 - port = 34723; 15 - }; 16 - }
···
-73
systems/koumakan/services/ftp.nix
··· 1 - # {inputs, config, hostname, ...}: { 2 - { 3 - config, 4 - inputs, 5 - ... 6 - }: 7 - { 8 - sops.secrets = { 9 - "vsftpdUsers.db" = { 10 - sopsFile = inputs.self + "/creds/sops/koumakan/vsftpdUsers.db"; 11 - owner = config.users.users.vsftpd.name; 12 - format = "binary"; 13 - }; 14 - 15 - "webdav.scan.htpasswd" = { 16 - sopsFile = inputs.self + "/creds/sops/koumakan/webdav.scan.htpasswd"; 17 - owner = config.users.users.vsftpd.name; 18 - format = "binary"; 19 - }; 20 - }; 21 - 22 - users = { 23 - users.vsftpd = { 24 - uid = 3000; 25 - home = "/var/www/ftp"; 26 - }; 27 - groups.vsftpd.gid = 3000; 28 - }; 29 - 30 - services.vsftpd = { 31 - enable = true; 32 - enableVirtualUsers = true; 33 - localRoot = "/var/www/ftp"; 34 - localUsers = true; 35 - virtualUseLocalPrivs = true; 36 - writeEnable = true; 37 - 38 - userDbPath = "/run/secrets/vsftpdUsers"; 39 - userlistEnable = true; 40 - userlist = [ 41 - "brother_scan" 42 - ]; 43 - 44 - extraConfig = '' 45 - pasv_min_port=50000 46 - pasv_max_port=50100 47 - ''; 48 - }; 49 - 50 - services.webdav-server-rs = { 51 - user = "vsftpd"; 52 - group = "vsftpd"; 53 - enable = true; 54 - settings = { 55 - server.listen = [ "100.100.16.16:38563" ]; 56 - accounts.auth-type = "htpasswd.default"; 57 - 58 - htpasswd.default.htpasswd = config.sops.secrets."webdav.scan.htpasswd".path; 59 - unix.min-uid = 1000; 60 - 61 - location = [ 62 - { 63 - route = [ "/*path" ]; 64 - auth = "true"; 65 - handler = "filesystem"; 66 - methods = [ "webdav-rw" ]; 67 - 68 - directory = "/var/www/ftp"; 69 - } 70 - ]; 71 - }; 72 - }; 73 - }
···
-3
systems/koumakan/services/games/default.nix
··· 1 - { 2 - imports = [ ./whitelisted-web.nix ]; 3 - }
···
-68
systems/koumakan/services/games/whitelisted-assets/tos/en.md
··· 1 - # server code of conduct 2 - 3 - this server code of conduct (this document) lays out what you can and cannot do, among other things, while playing on the server `mc.soopy.moe`. 4 - by proceeding, you accept and agree to follow this document in full. 5 - 6 - if you do not agree, you must not click the button below to gain access. 7 - 8 - we don't like legalese either, so we will try to keep this as short as possible. 9 - please note that while this is **not** a legally binding document, you are still subject to punishments for violating this code of conduct. 10 - 11 - ## explicitly allowed actions 12 - 13 - we are hosting this minecraft server out of goodwill, so we also expect players to act in good faith. most things that are socially acceptable are also acceptable on this server. in addition, these things are explicitly permitted on the server. 14 - 15 - - not indemnifying this server, server owners and server staff 16 - - this means you can talk shit about the admins. 17 - - defaming human rights violators (including but not limited to trump, j.k. rowling and unnamed middle-east genocidic president) in an acceptable frequency and amount (so as to not affect other players) 18 - - share derogatory memes **only about** shit world leaders and shit corporations 19 - - be brilliant to each other 20 - 21 - if the thing you plan to do doesn't make the life of other players difficult (regardless of it being in-game or not), you are likely permitted to do said thing. 22 - 23 - ## disallowed actions 24 - 25 - you are not allowed to do anything in the following list, unless explicitly permitted by server admins in a gpg or ssh-signed message. 26 - 27 - 1. entice hate or violence against anyone regardless of their identity, status, anything. 28 - 2. partake in any form of bullying 29 - 3. vandalize, destroy or cause any form of damage against structures built by players without their permission 30 - - we don't mind if you bomb your own buildings or machines, but if even just one player does not want a specific thing to be destroyed, then you will not destroy said thing. 31 - 4. perform denial of service against the server by any means, including but not limited to in-game actions (e.g. redstone, tnt, etc.) or external actions (e.g. ping spam, SYN flooding, etc.) 32 - - actions that cause a denial of service is defined as anything that reduces the server TPS below 15 for more than 30 minutes, or outright crashing the server. 33 - - we have a system tracking lag spikes. please do not think you can get away with making a lag machine. 34 - 5. failing to cease any action after being asked to stop. 35 - - including but not limited to: (repeatedly) killing players, sending insufferable messages, etc. 36 - 37 - note that this list may (or may not!) be modified with additional items from time to time depending on how poorly (or decently) players act. 38 - 39 - ## moderative actions 40 - 41 - violating any of the rules set forth above may result in the following actions. 42 - 43 - - **temporary** removal from the server (tempban; ranging from 1 hour to 30 days) 44 - - **permanent** removal from the server **for this season** (permban for one season) 45 - - **permanent** removal from the server **forever** (permban) 46 - 47 - note that this list is not exhaustive, but we hope we never have to do anything not listed here. 48 - 49 - there is **<span style="font-size: 2em">no</span>** appeal process. you really have to be a prick to get banned. 50 - 51 - ## reserved rights 52 - 53 - admins and moderators reserves the right to the following: 54 - 55 - - modifying any section of this code of conduct at anytime 56 - - taking [moderative] actions against any user in their own discretion 57 - 58 - ## contact 59 - 60 - for any matter regarding the server, please contact the owner with any of the following methods (in order of preference) 61 - 62 - - signal: @soopyc.64 63 - - email: [mc+season2025@soopy.moe](mailto:mc+season2025@soopy.moe) 64 - - discord: [2a01.4f8.1c1c.cc9d.0.0.0.cafe](https://discord.com/users/397273885701177347) 65 - 66 - _last modified: `Mon, 22 Sep 2025 12:50:23 +0800`_ 67 - 68 - [moderative]: https://en.wiktionary.org/wiki/moderative#English
···
-52
systems/koumakan/services/games/whitelisted-web.nix
··· 1 - { _utils, config, ... }: 2 - let 3 - secrets = _utils.setupSecrets config { 4 - namespace = "whitelisted-web"; 5 - secrets = [ 6 - "entra_secret" 7 - "turnstile_key" 8 - "ipc_token" 9 - ]; 10 - }; 11 - in 12 - { 13 - imports = [ 14 - secrets.generate 15 - (secrets.mkTemplate "whitelisted-web.env" '' 16 - ENTRA_CLIENT_SECRET="${secrets.placeholder "entra_secret"}" 17 - TURNSTILE_SECRET_KEY="${secrets.placeholder "turnstile_key"}" 18 - SHARED_IPC_TOKEN="${secrets.placeholder "ipc_token"}" 19 - '') 20 - ]; 21 - 22 - gensokyo.services.whitelisted-web = { 23 - enable = true; 24 - 25 - buildConfig = { 26 - PUBLIC_STATIC_CONTACT_INFO = ''{"Email": "mailto:Sophie Cheung <me@soopy.moe>"}''; 27 - }; 28 - 29 - extraAssets = ./whitelisted-assets; 30 - 31 - settings = { 32 - PORT = "30274"; 33 - PUBLIC_URL = "https://mc.soopy.moe"; 34 - PUBLIC_TOS_URI_TEMPLATE = "/tos/{LANG}.md"; 35 - PUBLIC_SERVER_IP = "mc.soopy.moe"; # the public minecraft server IP 36 - PUBLIC_TURNSTILE_SITEID = "0x4AAAAAABifUhFToAkxeZDM"; 37 - PUBLIC_ENTRA_CLIENT_ID = "807b9c9e-69c9-4b9f-b020-01dbf256623b"; 38 - }; 39 - 40 - environmentFile = secrets.getTemplate "whitelisted-web.env"; 41 - }; 42 - 43 - services.nginx.virtualHosts."mc.soopy.moe" = _utils.mkVhost { 44 - locations."/" = { 45 - proxyPass = "http://127.0.0.1:30274"; 46 - }; 47 - 48 - locations."/map/" = { 49 - proxyPass = "http://renko.mist-nessie.ts.net:8100/"; 50 - }; 51 - }; 52 - }
···
+1 -2
systems/koumakan/services/matrix/default.nix
··· 1 - { ... }: 2 - { 3 imports = [ 4 ./synapse.nix 5 ];
··· 1 + {...}: { 2 imports = [ 3 ./synapse.nix 4 ];
+20 -58
systems/koumakan/services/matrix/synapse.nix
··· 1 { 2 _utils, 3 pkgs, 4 - lib, 5 config, 6 - inputs, 7 ... 8 - }: 9 - let 10 - getSocket = file: "/run/matrix-synapse/${file}.sock"; 11 - staticly = inputs.mystia.packages.${pkgs.system}.staticly; 12 - in 13 - { 14 sops.secrets."synapse.yaml" = { 15 mode = "0400"; 16 owner = config.users.users.matrix-synapse.name; ··· 21 owner = config.users.users.matrix-synapse.name; 22 }; 23 24 - users.users.matrix-synapse.shell = lib.mkForce pkgs.shadow; 25 26 services.matrix-synapse = { 27 enable = true; 28 - enableRegistrationScript = false; 29 - configureRedisLocally = true; # workers support 30 - 31 withJemalloc = true; 32 extras = [ 33 "jwt" ··· 38 "/run/secrets/synapse.yaml" 39 ]; 40 41 - workers = { 42 - federation-sender-0 = { }; 43 - pusher-0 = { }; 44 - }; 45 - 46 settings = { 47 server_name = "nue.soopy.moe"; 48 serve_server_wellknown = true; 49 allow_public_rooms_over_federation = true; 50 federation_client_minimum_tls_version = 1.2; 51 - 52 - listeners = [ 53 - { 54 - path = getSocket "mistress"; 55 - resources = [ 56 - { 57 - names = [ 58 - "client" # implies ["media" "static"] 59 - "federation" 60 - "keys" 61 - "openid" 62 - "replication" 63 - ]; 64 - } 65 - ]; 66 - } 67 - ]; 68 - 69 - # workers 70 - instance_map.main.path = getSocket "mistress"; 71 - federation_sender_instances = [ 72 - "federation-sender-0" 73 - ]; 74 - pusher_instances = [ 75 - "pusher-0" 76 - ]; 77 - 78 # TODO: Setup TURN servers 79 # TODO: Setup OIDC providers 80 # TODO: Configure email 81 url_preview_enabled = true; 82 enable_registration = false; 83 session_lifetime = "99y"; ··· 90 system_mxid_display_name = "Server Notices"; 91 room_name = "Server Notices"; 92 }; 93 - 94 - allow_device_name_lookup_over_federation = true; 95 96 trusted_key_servers = [ 97 { ··· 115 }; 116 117 services.postgresql = { 118 - ensureDatabases = [ "synapse" ]; 119 ensureUsers = [ 120 { 121 name = "synapse"; 122 - ensureDBOwnership = true; 123 } 124 ]; 125 }; 126 127 - users.users.nginx.extraGroups = [ "matrix-synapse" ]; 128 services.nginx.virtualHosts."nue.soopy.moe" = _utils.mkVhost { 129 - extraConfig = '' 130 - access_log off; 131 - ''; 132 133 - locations."= /.well-known/matrix/server" = _utils.mkNginxJSON "server" { 134 - "m.server" = "nue.soopy.moe:443"; 135 }; 136 137 - locations."~ ^(/_matrix|/_synapse/client|/health)" = { 138 - proxyPass = "http://unix:${getSocket "mistress"}"; 139 extraConfig = '' 140 client_max_body_size 100M; 141 ''; 142 }; 143 144 locations."= /.well-known/matrix/client" = { 145 - alias = "${staticly}/configs/matrix/"; 146 tryFiles = "stable.json =404"; 147 }; 148 149 locations."/" = { 150 - root = "${staticly}/pages/matrix/landing/"; 151 tryFiles = "$uri $uri/index.html $uri.html =404"; 152 }; 153 };
··· 1 { 2 _utils, 3 pkgs, 4 config, 5 ... 6 + }: { 7 sops.secrets."synapse.yaml" = { 8 mode = "0400"; 9 owner = config.users.users.matrix-synapse.name; ··· 14 owner = config.users.users.matrix-synapse.name; 15 }; 16 17 + users.users.matrix-synapse.extraGroups = [config.users.groups.keys.name]; 18 19 services.matrix-synapse = { 20 enable = true; 21 withJemalloc = true; 22 extras = [ 23 "jwt" ··· 28 "/run/secrets/synapse.yaml" 29 ]; 30 31 settings = { 32 server_name = "nue.soopy.moe"; 33 serve_server_wellknown = true; 34 allow_public_rooms_over_federation = true; 35 federation_client_minimum_tls_version = 1.2; 36 # TODO: Setup TURN servers 37 # TODO: Setup OIDC providers 38 # TODO: Configure email 39 + # TODO: Setup opentracing 40 url_preview_enabled = true; 41 enable_registration = false; 42 session_lifetime = "99y"; ··· 49 system_mxid_display_name = "Server Notices"; 50 room_name = "Server Notices"; 51 }; 52 53 trusted_key_servers = [ 54 { ··· 72 }; 73 74 services.postgresql = { 75 + ensureDatabases = ["synapse"]; 76 ensureUsers = [ 77 { 78 name = "synapse"; 79 + ensurePermissions = { 80 + "database \"synapse\"" = "all privileges"; 81 + }; 82 } 83 ]; 84 }; 85 86 services.nginx.virtualHosts."nue.soopy.moe" = _utils.mkVhost { 87 + locations."= /config.json" = { 88 + alias = "${pkgs.staticly}/configs/"; 89 + tryFiles = "cinny.json =404"; 90 + extraConfig = '' 91 + add_header access_control_allow_origin "*"; 92 + ''; 93 + }; 94 95 + locations."= /.well-known/matrix/server" = { 96 + return = "200 '{\"m.server\": \"nue.soopy.moe:443\"}'"; 97 }; 98 99 + locations."~ ^(/_matrix|/_synapse/client)" = { 100 + proxyPass = "http://localhost:8008"; 101 extraConfig = '' 102 client_max_body_size 100M; 103 ''; 104 }; 105 106 locations."= /.well-known/matrix/client" = { 107 + alias = "${pkgs.staticly}/configs/matrix/"; 108 tryFiles = "stable.json =404"; 109 }; 110 111 locations."/" = { 112 + root = "${pkgs.staticly}/pages/matrix/landing/"; 113 tryFiles = "$uri $uri/index.html $uri.html =404"; 114 }; 115 };
-36
systems/koumakan/services/mirror/archt2.nix
··· 1 - { pkgs, ... }: 2 - { 3 - systemd = { 4 - # TODO: make this a gensokyo module 5 - timers."mirror-sync-t2" = { 6 - after = [ "network-online.target" ]; 7 - wants = [ "network-online.target" ]; 8 - wantedBy = [ "multi-user.target" ]; 9 - timerConfig = { 10 - OnCalendar = "*:30"; 11 - RandomizedDelaySec = "600s"; 12 - DeferReactivation = true; 13 - Persistent = true; 14 - }; 15 - }; 16 - 17 - services."mirror-sync-t2" = { 18 - path = [ pkgs.rsync ]; 19 - script = '' 20 - mkdir -p \ 21 - /var/lib/mirrors/arch-mact2 \ 22 - /var/lib/mirrors/endeavouros-t2 23 - 24 - rsync -rlptHvh --progress --safe-links --delete-delay --delay-updates \ 25 - rsync://mirror.funami.tech/arch-mact2 /var/lib/mirrors/arch-mact2 26 - 27 - rsync -rlptHvh --progress --safe-links --delete-delay --delay-updates \ 28 - rsync://mirror.funami.tech/endeavouros-t2 /var/lib/mirrors/endeavouros-t2 29 - ''; 30 - 31 - serviceConfig = { 32 - User = "mirror-worker"; 33 - }; 34 - }; 35 - }; 36 - }
···
-29
systems/koumakan/services/mirror/default.nix
··· 1 - { _utils, config, ... }: 2 - { 3 - imports = [ 4 - ./archt2.nix 5 - ]; 6 - 7 - users.groups."mirror-worker" = { }; 8 - users.users."mirror-worker" = { 9 - isSystemUser = true; 10 - group = "mirror-worker"; 11 - }; 12 - 13 - services.nginx.virtualHosts."mirror.soopy.moe" = _utils.mkVhost { 14 - locations."/" = { 15 - root = "/var/lib/mirrors"; 16 - extraConfig = "autoindex on;"; 17 - }; 18 - }; 19 - 20 - services.nginx.virtualHosts."keine.soopy.moe".globalRedirect = "mirror.soopy.moe"; 21 - 22 - # provision a directory for mirrors 23 - systemd.tmpfiles.settings."10-mirrors" = { 24 - "/var/lib/mirrors".d = { 25 - mode = "0755"; 26 - user = config.users.users.mirror-worker.name; 27 - }; 28 - }; 29 - }
···
+8 -8
systems/koumakan/services/nginx.nix
··· 1 - { pkgs, ... }: 2 - { 3 - gensokyo.presets.nginx = true; 4 - 5 - users.users.nginx.extraGroups = [ "anubis" ]; 6 services.nginx = { 7 enable = true; 8 clientMaxBodySize = "50m"; 9 10 additionalModules = with pkgs.nginxModules; [ 11 fancyindex 12 brotli 13 ]; 14 }; 15 - 16 - # necessary for stuff like backup-public.nix and user.nix 17 - systemd.services.nginx.serviceConfig.ProtectHome = "tmpfs"; 18 }
··· 1 + {pkgs, ...}: { 2 services.nginx = { 3 enable = true; 4 + enableReload = true; 5 + package = pkgs.nginxMainline; 6 + 7 clientMaxBodySize = "50m"; 8 9 + statusPage = true; 10 + 11 + recommendedTlsSettings = true; 12 + recommendedProxySettings = true; 13 additionalModules = with pkgs.nginxModules; [ 14 fancyindex 15 brotli 16 ]; 17 }; 18 }
+1 -4
systems/koumakan/services/proxies/default.nix
··· 1 - { 2 imports = [ 3 ./nitter.nix 4 - ./searxng.nix 5 - ./minio.nix 6 - ./nginx-stream.nix 7 ]; 8 }
··· 1 + {...}: { 2 imports = [ 3 ./nitter.nix 4 ]; 5 }
-58
systems/koumakan/services/proxies/minio.nix
··· 1 - { 2 - _utils, 3 - lib, 4 - config, 5 - ... 6 - }: 7 - let 8 - secrets = _utils.setupSecrets config { 9 - namespace = "minio"; 10 - secrets = [ 11 - "root_user" 12 - "root_pass" 13 - "vmetrics_token" 14 - ]; 15 - }; 16 - in 17 - { 18 - imports = [ 19 - secrets.generate 20 - (secrets.mkTemplate "minio.env" '' 21 - MINIO_ROOT_USER=${secrets.placeholder "root_user"} 22 - MINIO_ROOT_PASSWORD=${secrets.placeholder "root_pass"} 23 - '') 24 - ]; 25 - 26 - services.minio = { 27 - enable = true; 28 - region = "ap-east-1"; 29 - listenAddress = "127.0.0.1:26531"; 30 - rootCredentialsFile = secrets.getTemplate "minio.env"; 31 - }; 32 - 33 - # stupid module design 34 - systemd.services.minio.environment = { 35 - MINIO_BROWSER_REDIRECT_URL = "https://s3.soopy.moe/_static"; 36 - MINIO_BROWSER_LOGIN_ANIMATION = "false"; 37 - }; 38 - 39 - systemd.services.vmagent.serviceConfig.LoadCredential = [ 40 - "minio_token:${secrets.get "vmetrics_token"}" 41 - ]; 42 - 43 - services.vmagent.prometheusConfig.scrape_configs = lib.singleton { 44 - job_name = "minio-job"; 45 - metrics_path = "/minio/v2/metrics/cluster"; 46 - scheme = "http"; 47 - static_configs = lib.singleton { targets = lib.singleton "localhost:26531"; }; 48 - relabel_configs = lib.singleton { 49 - target_label = "instance"; 50 - replacement = config.networking.fqdnOrHostName; 51 - }; 52 - 53 - # https://github.com/NixOS/nixpkgs/issues/367447 54 - # https://docs.victoriametrics.com/sd_configs/#scrape_configs 55 - # hard coding because we can't use %{ENV_VAR} syntax (yet) when checking. 56 - bearer_token_file = "/run/credentials/vmagent.service/minio_token"; 57 - }; 58 - }
···
-44
systems/koumakan/services/proxies/nginx-stream.nix
··· 1 - { 2 - systemd.tmpfiles.settings."nginx-stream-log"."/var/log/nginx/stream"."d" = { 3 - user = "nginx"; 4 - group = "nginx"; 5 - mode = "0750"; 6 - }; 7 - # NOTE: this doesn't work properly atm, we cba setting up routing stuff right now. 8 - # systemd.services.nginx.serviceConfig = { 9 - # # needed for transparent proxying 10 - # CapabilityBoundingSet = ["CAP_NET_RAW"]; 11 - # AmbientCapabilities = ["CAP_NET_RAW"]; 12 - # }; 13 - 14 - services.nginx.streamConfig = '' 15 - resolver 100.100.100.100; 16 - # proxy_bind $remote_addr transparent; 17 - proxy_connect_timeout 1s; 18 - proxy_timeout 30s; 19 - 20 - log_format basic_stream '$remote_addr [$time_local] ' 21 - '$protocol $status $bytes_sent $bytes_received ' 22 - '$session_time'; 23 - 24 - error_log /var/log/nginx/stream/error.log; 25 - access_log /var/log/nginx/stream/access.log basic_stream; 26 - 27 - # data 28 - server { 29 - listen 25565-25599 reuseport; 30 - proxy_pass renko.mist-nessie.ts.net:$server_port; 31 - } 32 - 33 - # query sockets 34 - server { 35 - listen 25565-25599 udp reuseport; 36 - proxy_pass renko.mist-nessie.ts.net:$server_port; 37 - } 38 - # voice 39 - server { 40 - listen 55111-55199 udp reuseport; 41 - proxy_pass renko.mist-nessie.ts.net:$server_port; 42 - } 43 - ''; 44 - }
···
+28 -3
systems/koumakan/services/proxies/nitter.nix
··· 1 - { _utils, ... }: 2 { 3 - services.nginx.virtualHosts."nitter.soopy.moe" = _utils.mkVhost { 4 - locations."/".return = "301 https://twiiit.com$request_uri"; 5 }; 6 }
··· 1 { 2 + _utils, 3 + pkgs, 4 + ... 5 + }: { 6 + services.nitter = { 7 + enable = true; 8 + redisCreateLocally = false; # why is the default of this `true`?? 9 + server = { 10 + title = "NSM"; 11 + port = 36325; 12 + https = true; 13 + hostname = "nitter.soopy.moe"; 14 + address = "127.0.0.1"; 15 + }; 16 + package = pkgs.nitterExperimental; 17 + }; 18 + 19 + systemd.services.nitter = { 20 + environment = { 21 + NITTER_ACCOUNTS_FILE = "/run/credentials/nitter.service/guest_accounts.json"; 22 + }; 23 + serviceConfig.LoadCredential = [ 24 + "guest_accounts.json:/etc/nitter/guest_accounts.json" 25 + ]; 26 + }; 27 + 28 + services.nginx.virtualHosts."nitter.soopy.moe" = _utils.mkSimpleProxy { 29 + port = 36325; 30 }; 31 }
-121
systems/koumakan/services/proxies/searxng.nix
··· 1 - { 2 - _utils, 3 - config, 4 - lib, 5 - ... 6 - }: 7 - let 8 - secrets = _utils.setupSecrets config { 9 - namespace = "searxng"; 10 - secrets = [ "secret" ]; 11 - }; 12 - in 13 - { 14 - imports = [ 15 - secrets.generate 16 - (secrets.mkTemplate "searxng.env" '' 17 - SEARXNG_SECRET=${secrets.placeholder "secret"} 18 - '') 19 - ]; 20 - 21 - users.users.nginx.extraGroups = [ config.users.groups.searx.name ]; 22 - 23 - services.searx = { 24 - enable = true; 25 - environmentFile = secrets.getTemplate "searxng.env"; 26 - redisCreateLocally = true; 27 - 28 - configureUwsgi = true; 29 - uwsgiConfig = { 30 - http = "/run/searx/searxng.sock"; 31 - chmod-socket = "660"; 32 - disable-logging = true; 33 - }; 34 - 35 - # FIXME: this doesn't work atm because it's not read i think? add a symlink from /run/searx/limiter.toml pointing to /etc/searx/limiter.toml 36 - limiterSettings = { 37 - real_ip = { 38 - x_for = 1; 39 - ipv4_prefix = 32; 40 - ipv6_prefix = 48; 41 - }; 42 - botdetection.ip_limit.link_token = true; 43 - botdetection.ip_lists.pass_searxng_org = true; 44 - }; 45 - 46 - settings = { 47 - use_default_settings = true; 48 - general.contact_Url = "mailto:cassie@soopy.moe"; 49 - 50 - preferences.lock = lib.singleton "infinite_scroll"; 51 - ui.infinite_scroll = false; 52 - ui.search_on_category_select = false; 53 - 54 - server = { 55 - secret_key = "@SEARXNG_SECRET@"; 56 - public_instance = true; 57 - base_url = "https://s.soopy.moe"; 58 - image_proxy = true; 59 - limiter = true; 60 - http_protocol_version = "1.1"; 61 - }; 62 - 63 - search = { 64 - autocomplete = "duckduckgo"; 65 - favicon_resolver = "duckduckgo"; 66 - }; 67 - 68 - engines = [ 69 - { 70 - name = "annas archive"; 71 - disabled = false; 72 - } 73 - { 74 - name = "nixos wiki"; 75 - disabled = false; 76 - } 77 - { 78 - name = "cppreference"; 79 - disabled = false; 80 - } 81 - { 82 - name = "ddg definitions"; 83 - disabled = false; 84 - } 85 - { 86 - name = "fdroid"; 87 - disabled = false; 88 - } 89 - { 90 - name = "lobste.rs"; 91 - disabled = false; 92 - } 93 - { 94 - name = "nyaa"; 95 - disabled = false; 96 - } 97 - { 98 - name = "pub.dev"; 99 - disabled = false; 100 - } 101 - { 102 - name = "nixos discourse"; 103 - engine = "discourse"; 104 - shortcut = "dno"; 105 - base_url = "https://discourse.nixos.org"; 106 - categories = [ 107 - "it" 108 - "q&a" 109 - ]; 110 - } 111 - ]; 112 - }; 113 - }; 114 - 115 - services.nginx.virtualHosts."s.soopy.moe" = _utils.mkSimpleProxy { 116 - socketPath = "/run/searx/searxng.sock"; 117 - extraConfig.extraConfig = '' 118 - access_log off; 119 - ''; 120 - }; 121 - }
···
-7
systems/koumakan/services/scm/default.nix
··· 1 - { ... }: 2 - { 3 - imports = [ 4 - ./forgejo.nix 5 - ./tangled-knot.nix 6 - ]; 7 - }
···
-243
systems/koumakan/services/scm/forgejo.nix
··· 1 - { 2 - _utils, 3 - lib, 4 - config, 5 - pkgs, 6 - ... 7 - }: 8 - let 9 - secrets = [ 10 - "database/pass" 11 - "turnstile/secret" 12 - "turnstile/sitekey" 13 - "mailing/host" 14 - "mailing/protocol" 15 - "mailing/from" 16 - "mailing/user" 17 - "mailing/pass" 18 - ]; 19 - ns = "forgejo"; 20 - mkSecret = file: config.sops.secrets."${ns}/${file}".path; 21 - 22 - runConfig = config.services.forgejo.customDir + "/conf/app.ini"; 23 - in 24 - { 25 - sops.secrets = _utils.genSecrets ns secrets { 26 - owner = config.services.forgejo.user; 27 - }; 28 - services.forgejo = { 29 - enable = true; 30 - package = pkgs.forgejo; 31 - 32 - repositoryRoot = "${config.services.forgejo.stateDir}/data/repositories"; 33 - 34 - secrets = { 35 - service = { 36 - CF_TURNSTILE_SECRET = mkSecret "turnstile/secret"; 37 - CF_TURNSTILE_SITEKEY = mkSecret "turnstile/sitekey"; 38 - }; 39 - 40 - mailer = { 41 - PROTOCOL = mkSecret "mailing/protocol"; 42 - SMTP_ADDR = mkSecret "mailing/host"; 43 - FROM = mkSecret "mailing/from"; 44 - USER = mkSecret "mailing/user"; 45 - PASSWD = mkSecret "mailing/pass"; 46 - }; 47 - }; 48 - 49 - settings = { 50 - DEFAULT.APP_NAME = "Patchy"; 51 - server = { 52 - # Basic settings {{{ 53 - PROTOCOL = "http+unix"; 54 - DOMAIN = "patchy.soopy.moe"; 55 - ROOT_URL = "https://patchy.soopy.moe"; 56 - OFFLINE_MODE = false; 57 - # HTTP_ADDR is defined automatically. 58 - # }}} 59 - 60 - # SSH {{{ 61 - DISABLE_SSH = false; # don't disable ssh access 62 - START_SSH_SERVER = false; # do disable the built-in ssh server. 63 - SSH_DOMAIN = "patchy.soopy.moe"; 64 - SSH_PORT = 22; 65 - SSH_CREATE_AUTHORIZED_KEY_FILE = false; 66 - SSH_CREATE_AUTHORIZED_PRINCIPALS_FILE = false; 67 - # }}} 68 - }; 69 - 70 - # Indexer {{{ 71 - indexer = { 72 - REPO_INDEXER_ENABLED = true; # good bye hdd health 73 - REPO_INDEXER_REPO_TYPES = "sources,forks,templates"; 74 - }; 75 - # }}} 76 - 77 - # Service {{{ 78 - service = { 79 - ENABLE_NOTIFY_MAIL = true; 80 - REGISTER_EMAIL_CONFIRM = true; 81 - 82 - DISABLE_REGISTRATION = false; # need to be false to enable any sort of reg. 83 - ENABLE_INTERNAL_SIGNIN = true; # we have gatekeeper setup now and working, this can be turned off. 84 - ALLOW_ONLY_EXTERNAL_REGISTRATION = true; 85 - 86 - ENABLE_CAPTCHA = true; 87 - CAPTCHA_TYPE = "cfturnstile"; 88 - }; 89 - # }}} 90 - 91 - # Mailing {{{ 92 - mailer = { 93 - ENABLED = true; 94 - SEND_AS_PLAIN_TEXT = true; 95 - }; 96 - # }}} 97 - 98 - # Repository related {{{ 99 - repository = { 100 - DEFAULT_PUSH_CREATE_PRIVATE = false; 101 - ENABLE_PUSH_CREATE_USER = true; 102 - ENABLE_PUSH_CREATE_ORG = true; 103 - }; 104 - "repository.upload" = { 105 - ENABLED = true; 106 - FILE_MAX_SIZE = 10; 107 - MAX_FILES = 10; 108 - }; 109 - "repository.signing" = { 110 - DEFAULT_TRUST_MODEL = "committer"; 111 - }; 112 - "repository.pull-request" = { 113 - WORK_IN_PROGRESS_PREFIXES = "WIP:,[WIP],draft:"; 114 - DEFAULT_MERGE_STYLE = "rebase-merge"; 115 - }; 116 - # }}} 117 - 118 - # Web UI {{{ 119 - "ui.meta" = { 120 - AUTHOR = "Patchy"; 121 - DESCRIPTION = "Patchouli Knowledge, holder of code repos"; 122 - }; 123 - "ui.svg" = { 124 - ENABLE_RENDER = true; 125 - }; 126 - # }}} 127 - 128 - # Security {{{ 129 - security = { 130 - # Other relavant settings are defined automatically. 131 - PASSWORD_HASH_ALGO = "argon2"; 132 - COOKIE_USERNAME = "I_LOVE_FORGEJO"; 133 - COOKIE_REMEMBER = "I_HATE_GITHUB"; 134 - REVERSE_PROXY_TRUSTED_PROXIES = "127.0.0.1/8,::1/128"; 135 - MIN_PASSWORD_LENGTH = 8; 136 - PASSWORD_COMPLEXITY = "lower,digit"; 137 - PASSWORD_CHECK_PWN = true; 138 - }; 139 - # }}} 140 - 141 - # OAuth 2.0 and OpenID {{{ 142 - oauth2 = { 143 - # JWT_SECRET defined automatically, but we don't use it lol 144 - ENABLED = true; 145 - JWT_SIGNING_ALGORITHM = "EdDSA"; 146 - JWT_SIGNING_PRIVATE_KEY_FILE = "jwt/oauth.pem"; 147 - # to generate, we're using: nix run n#openssl -- genpkey -algorithm ed25519 -out /var/lib/forgejo/data/jwt/oauth.pem 148 - }; 149 - 150 - oauth2_client = { 151 - REGISTER_EMAIL_CONFIRM = false; 152 - }; 153 - 154 - openid = { 155 - ENABLE_OPENID_SIGNIN = false; 156 - ENABLE_OPENID_SIGNUP = false; 157 - }; 158 - # }}} 159 - 160 - # TODO: setup go-camo 161 - 162 - # Logging {{{ 163 - log = { 164 - ROOT_PATH = "/var/log/forgejo/"; 165 - LOGGER_ROUTER_MODE = ""; 166 - }; 167 - # }}} 168 - 169 - # Federation {{{ 170 - federation = { 171 - ENABLED = true; 172 - MAX_SIZE = 10; 173 - }; 174 - # }}} 175 - 176 - # Session {{{ 177 - session = { 178 - PROVIDER = "db"; # reuse existing db config 179 - COOKIE_SECURE = true; 180 - COOKIE_NAME = "girls_kissing"; 181 - SESSION_LIFE_TIME = 604800; 182 - }; 183 - # }}} 184 - 185 - # Picture and Avatars {{{ 186 - picture = { 187 - DISABLE_GRAVATAR = false; 188 - ENABLE_FEDERATED_AVATAR = true; 189 - AVATAR_MAX_FILE_SIZE = 5242880; 190 - }; 191 - # }}} 192 - }; 193 - 194 - # Database {{{ 195 - database = { 196 - type = "postgres"; 197 - host = "127.0.0.1"; 198 - name = "gitea"; 199 - user = "gitea"; 200 - passwordFile = mkSecret "database/pass"; 201 - # just be smarter 4head 202 - # TODO: setup ensure db in postgres config 203 - createDatabase = false; 204 - }; 205 - #}}} 206 - 207 - lfs.enable = true; 208 - }; 209 - 210 - # nginx vhost and anubis definition {{{ 211 - services.anubis.instances."forgejo".settings = { 212 - TARGET = "unix://${config.services.forgejo.settings.server.HTTP_ADDR}"; 213 - METRICS_BIND = "127.0.0.1:17001"; # FIXME: hopefully we can eradicate tcp sockets when vm supports that. 214 - }; 215 - services.nginx.virtualHosts."patchy.soopy.moe" = _utils.mkSimpleProxy { 216 - socketPath = config.services.anubis.instances."forgejo".settings.BIND; 217 - extraConfig.extraConfig = '' 218 - client_max_body_size 0; # managed by forgejo already, might be useful to quickly fail a request 219 - ''; 220 - }; 221 - # }}} 222 - 223 - # SSH daemon config {{{ 224 - services.openssh.extraConfig = lib.mkAfter '' 225 - # forgejo specific settings 226 - Match User ${config.services.forgejo.user},git 227 - Banner none 228 - PasswordAuthentication no 229 - KbdInteractiveAuthentication no 230 - AuthorizedKeysCommand ${config.security.wrapperDir}/forgejo-keys keys -e forgejo -u %u -t %t -k %k -c ${runConfig} 231 - AuthorizedKeysCommandUser ${config.services.forgejo.user} 232 - ''; 233 - 234 - # get around openssh restrictions 235 - security.wrappers.forgejo-keys = { 236 - owner = "root"; 237 - group = config.users.groups.forgejo.name; 238 - permissions = "u+rx,g+x,o-rwx"; 239 - source = lib.getExe config.services.forgejo.package; 240 - }; 241 - # }}} 242 - } 243 - # vim:foldmethod=marker
···
-35
systems/koumakan/services/scm/tangled-knot.nix
··· 1 - { 2 - _utils, 3 - ... 4 - }: 5 - { 6 - services.tangled-knotserver = { 7 - enable = true; 8 - user = "knot"; 9 - 10 - repo.mainBranch = "meow"; 11 - server = { 12 - hostname = "enanan.staging.soopy.moe"; 13 - listenAddr = "127.0.0.1:34195"; 14 - internalListenAddr = "127.0.0.1:34196"; 15 - }; 16 - 17 - extraConfig = { 18 - KNOT_SERVER_OWNER = "did:plc:jmr637khkdb2fdxxvoyj672m"; 19 - }; 20 - 21 - extraSshdConfig = '' 22 - Banner none 23 - PasswordAuthentication no 24 - KbdInteractiveAuthentication no 25 - ''; 26 - }; 27 - 28 - services.nginx.virtualHosts."enanan.staging.soopy.moe" = _utils.mkSimpleProxy { 29 - port = 34195; 30 - extraConfig = { 31 - useACMEHost = null; 32 - enableACME = true; 33 - }; 34 - }; 35 - }
···
-7
systems/koumakan/services/security/default.nix
··· 1 - { ... }: 2 - { 3 - imports = [ 4 - ./pocket-id.nix 5 - ./vaultwarden.nix 6 - ]; 7 - }
···
-57
systems/koumakan/services/security/pocket-id.nix
··· 1 - { 2 - _utils, 3 - config, 4 - ... 5 - }: 6 - let 7 - secrets = _utils.setupSecrets config { 8 - namespace = "pocket-id"; 9 - secrets = [ 10 - "encryption_key" 11 - "maxmind_key" 12 - ]; 13 - config = { 14 - owner = config.users.users.pocket-id.name; 15 - }; 16 - }; 17 - in 18 - { 19 - imports = [ secrets.generate ]; 20 - 21 - services.pocket-id = { 22 - enable = true; 23 - 24 - settings = { 25 - APP_URL = "https://gatekeeper.soopy.moe"; 26 - HOST = "127.0.0.1"; 27 - TRUST_PROXY = true; 28 - PORT = "31411"; 29 - KEYS_STORAGE = "database"; 30 - 31 - ENCRYPTION_KEY_FILE = secrets.get "encryption_key"; 32 - MAXMIND_LICENSE_KEY_FILE = secrets.get "maxmind_key"; 33 - }; 34 - }; 35 - 36 - services.nginx.virtualHosts."gatekeeper.soopy.moe" = _utils.mkSimpleProxy { 37 - port = 31411; 38 - 39 - extraConfig.locations."= /humans.txt" = _utils.mkNginxFile { 40 - filename = "humans.txt"; 41 - content = '' 42 - /* Credits */ 43 - Login Background: https://www.pixiv.net/artworks/122054405 44 - You: for using our services 45 - 46 - /* People */ 47 - Administrator: soopyc 48 - Contact: https://soopy.moe/about 49 - 50 - /* Service */ 51 - Software: Pocket ID 52 - Deployed-With: NixOS 53 - Security: https://soopy.moe/.well-known/security.txt 54 - ''; 55 - }; 56 - }; 57 - }
···
-122
systems/koumakan/services/security/vaultwarden.nix
··· 1 - { 2 - _utils, 3 - config, 4 - # lib, 5 - ... 6 - }: 7 - let 8 - # mkSecrets = file: 9 - # if !lib.elem file secrets 10 - # then throw "Provided secret file ${file} is not in the list of defined secrets." 11 - # else "/run/secrets/vaultwarden/${file}"; 12 - secrets = [ 13 - # TODO: figure out converting { smtp = ["username_encrypted"]; } to paths 14 - "admin_token" 15 - "smtp/username" 16 - "smtp/password" 17 - "smtp/host" 18 - "smtp/security" 19 - "smtp/port" 20 - "database/username" 21 - "database/password" 22 - "yubico/id" 23 - "yubico/secret" 24 - "push/installation_id" 25 - "push/installation_key" 26 - ]; 27 - in 28 - { 29 - sops.secrets = _utils.genSecrets "vaultwarden" secrets { }; 30 - sops.templates."vaultwarden.env".content = 31 - let 32 - ph = p: config.sops.placeholder."vaultwarden/${p}"; 33 - in 34 - '' 35 - DATABASE_URL=postgresql://${ph "database/username"}:${ph "database/password"}@localhost/vaultwarden 36 - ADMIN_TOKEN=${ph "admin_token"} 37 - YUBICO_CLIENT_ID=${ph "yubico/id"} 38 - YUBICO_SECRET_KEY=${ph "yubico/secret"} 39 - SMTP_USERNAME=${ph "smtp/username"} 40 - SMTP_FROM=${ph "smtp/username"} 41 - SMTP_PASSWORD=${ph "smtp/password"} 42 - SMTP_HOST=${ph "smtp/host"} 43 - SMTP_SECURITY=${ph "smtp/security"} 44 - SMTP_PORT=${ph "smtp/port"} 45 - PUSH_INSTALLATION_ID=${ph "push/installation_id"} 46 - PUSH_INSTALLATION_KEY=${ph "push/installation_key"} 47 - ''; 48 - 49 - services.vaultwarden = { 50 - enable = true; 51 - config = { 52 - ROCKET_ADDRESS = "::1"; 53 - ROCKET_PORT = 38480; 54 - LOG_LEVEL = "warn"; 55 - DOMAIN = "https://v.soopy.moe"; 56 - IP_HEADER = "X-Real-IP"; 57 - RELOAD_TEMPLATES = false; 58 - PUSH_ENABLED = true; 59 - 60 - SIGNUPS_ALLOWED = true; 61 - SIGNUPS_VERIFY = true; 62 - SIGNUPS_VERIFY_RESEND_TIME = 3600; 63 - SIGNUPS_VERIFY_RESEND_LIMIT = 6; 64 - INVITATIONS_ALLOWED = true; 65 - 66 - ICON_CACHE_TTL = 2592000; 67 - ICON_CACHE_NEGTTL = 7200; 68 - ICON_DOWNLOAD_TIMEOUT = 10; 69 - ICON_BLACKLIST_NON_GLOBAL_IPS = true; 70 - INVITATION_ORG_NAME = "TransGensokyobians"; 71 - USER_ATTACHMENT_LIMIT = 100000; 72 - ORG_ATTACHMENT_LIMIT = 100000; 73 - 74 - DISABLE_2FA_REMEMBER = false; 75 - REQUIRE_DEVICE_EMAIL = true; 76 - PASSWORD_ITERATIONS = 1000000; 77 - PASSWORD_HINTS_ALLOWED = true; 78 - SHOW_PASSWORD_HINT = false; 79 - DISABLE_ADMIN_TOKEN = false; 80 - EMERGENCY_ACCESS_ALLOWED = true; 81 - EMAIL_TOKEN_SIZE = 12; 82 - LOGIN_RATELIMIT_SECONDS = 10; 83 - AUTHENTICATOR_DISABLE_TIME_DRIFT = false; 84 - 85 - SMTP_EMBED_IMAGES = true; 86 - SMTP_FROM_NAME = "Okuu (from vault at soopy.moe)"; 87 - SMTP_TIMEOUT = 15; 88 - SMTP_ACCEPT_INVALID_CERTS = false; 89 - SMTP_ACCEPT_INVALID_HOSTNAMES = false; 90 - }; 91 - dbBackend = "postgresql"; 92 - environmentFile = config.sops.templates."vaultwarden.env".path; 93 - }; 94 - 95 - services.nginx = { 96 - virtualHosts."v.soopy.moe" = _utils.mkVhost { 97 - extraConfig = '' 98 - client_max_body_size 100M; 99 - proxy_read_timeout 3h; 100 - proxy_connect_timeout 3h; 101 - proxy_send_timeout 3h; 102 - ''; 103 - 104 - locations."/" = { 105 - proxyPass = "http://vault-default"; 106 - proxyWebsockets = true; # in vw 1.30.0, the WS server is integrated into the same port. 107 - }; 108 - }; 109 - 110 - upstreams = { 111 - vault-default = { 112 - servers = { 113 - "[::1]:38480" = { }; 114 - }; 115 - extraConfig = '' 116 - zone vaultwarden 128k; # XXX: are there any security implications if we reuse the same zone for both webvault and the ws server? 117 - keepalive 2; # FIXME: should we use a higher keepalive? 118 - ''; 119 - }; 120 - }; 121 - }; 122 - }
···
-20
systems/koumakan/services/static-sites/assets.nix
··· 1 - { _utils, ... }: 2 - { 3 - services.nginx.virtualHosts."assets.soopy.moe" = _utils.mkVhost { 4 - root = "/opt/public-assets"; 5 - locations = { 6 - "/".extraConfig = '' 7 - expires max; 8 - etag on; 9 - autoindex on; 10 - add_header Cache-Control "public"; 11 - ''; 12 - 13 - "= /empty.gif".extraConfig = "empty_gif;"; 14 - 15 - "~* /\\.(?!well-known)".extraConfig = '' 16 - deny all; 17 - ''; 18 - }; 19 - }; 20 - }
···
-20
systems/koumakan/services/static-sites/backup-public.nix
··· 1 - { 2 - _utils, 3 - lib, 4 - config, 5 - ... 6 - }: 7 - { 8 - services.nginx.virtualHosts."backups.soopy.moe" = _utils.mkVhost { 9 - locations."/" = { 10 - root = "/home/backup/public/"; 11 - extraConfig = '' 12 - autoindex on; 13 - autoindex_exact_size off; 14 - ''; 15 - }; 16 - }; 17 - 18 - systemd.services.nginx.serviceConfig.BindReadOnlyPaths = lib.singleton "/home/backup/public"; 19 - users.users.nginx.extraGroups = lib.singleton config.users.users.backup.name; 20 - }
···
+9 -8
systems/koumakan/services/static-sites/default.nix
··· 1 - { 2 imports = [ 3 - ./assets.nix 4 - ./backup-public.nix 5 - ./nonbunary.nix 6 - ./user.nix 7 - ./verification.nix 8 ]; 9 10 - # Fallback site 11 services.nginx.virtualHosts."_" = { 12 default = true; 13 useACMEHost = "global.c.soopy.moe"; 14 forceSSL = true; 15 16 locations = { 17 - "/".root = "/srv/www/fallback"; 18 }; 19 }; 20 }
··· 1 + {...}: { 2 imports = [ 3 + ./keine.nix 4 ]; 5 6 services.nginx.virtualHosts."_" = { 7 default = true; 8 useACMEHost = "global.c.soopy.moe"; 9 forceSSL = true; 10 + # locations."/".return = "301 https://gensokyo.soopy.moe"; 11 12 + # TODO: remove after bringing back up all the services. 13 locations = { 14 + "/".return = "503"; 15 + "~ ^/(index.html|splash.png)".root = "/srv/www/maintenance"; 16 }; 17 + extraConfig = '' 18 + error_page 503 /index.html; 19 + ''; 20 }; 21 }
+25
systems/koumakan/services/static-sites/keine.nix
···
··· 1 + {_utils, ...}: { 2 + services.nginx.virtualHosts."keine.soopy.moe" = _utils.mkVhost { 3 + forceSSL = false; 4 + addSSL = true; # Don't force SSL on a mirror (implications TBD) 5 + 6 + root = "/srv/www/keine"; 7 + locations = { 8 + "/".extraConfig = '' 9 + fancyindex_header "/theme/index_header.html"; 10 + ''; 11 + "/theme/".alias = "/srv/www/misc/keine/theme/"; 12 + "/static/".alias = "/srv/www/misc/keine/theme/static/"; 13 + }; 14 + 15 + extraConfig = '' 16 + fancyindex on; 17 + fancyindex_header "/theme/header.html"; 18 + fancyindex_footer "/theme/footer.html"; 19 + fancyindex_show_path off; 20 + fancyindex_name_length 255; 21 + fancyindex_exact_size off; 22 + fancyindex_localtime on; 23 + ''; 24 + }; 25 + }
-21
systems/koumakan/services/static-sites/nonbunary.nix
··· 1 - { _utils, ... }: 2 - { 3 - services.nginx.virtualHosts."nonbunary.soopy.moe" = _utils.mkVhost { 4 - locations."/".return = "404"; 5 - locations."= /" = _utils.mkNginxFile { 6 - content = '' 7 - <!doctype html> 8 - <html lang="en"> 9 - <body> 10 - <svg xmlns="http://www.w3.org/2000/svg" width="300" height="200"> 11 - <path fill="#2D2D2D" d="m0,0h300v200H0"/> 12 - <path fill="#9B59D0" d="m0,0h300v150H0"/> 13 - <path fill="#FFFFFF" d="m0,0h300v100H0"/> 14 - <path fill="#FFF433" d="m0,0h300v50H0"/> 15 - </svg> 16 - </body> 17 - </html> 18 - ''; 19 - }; 20 - }; 21 - }
···
-65
systems/koumakan/services/static-sites/photography.nix
··· 1 - { 2 - config, 3 - pkgs, 4 - lib, 5 - _utils, 6 - ... 7 - }: 8 - { 9 - # TODO: we can make this better by just automating everything needed to make a h5ai site. 10 - services.phpfpm.pools."photography" = { 11 - user = "photography"; 12 - settings = { 13 - "listen.owner" = config.services.nginx.user; 14 - "pm" = "ondemand"; 15 - "pm.process_idle_timeout" = "3s"; 16 - "pm.max_children" = 32; 17 - "pm.max_requests" = 500; 18 - "pm.start_servers" = 1; 19 - "pm.min_spare_servers" = 1; 20 - "pm.max_spare_servers" = 3; 21 - 22 - "php_admin_value[error_log]" = "stderr"; 23 - "php_admin_flag[log_errors]" = true; 24 - "catch_workers_output" = true; 25 - }; 26 - phpEnv."PATH" = lib.makeBinPath ( 27 - with pkgs; 28 - [ 29 - zip 30 - ] 31 - ); 32 - }; 33 - 34 - services.nginx.virtualHosts."photography.soopy.moe" = _utils.mkVhost { 35 - root = "/opt/photography"; 36 - extraConfig = '' 37 - index index.html index.php /_h5ai/public/index.php; 38 - ''; 39 - 40 - locations."~ \.php$" = { 41 - tryFiles = "$fastcgi_script_name =404"; 42 - # what's the purpose of $.fastcgiParams when it's barely even usable 43 - # fastcgiParams = { 44 - # DOCUMENT_ROOT = "$realpath_root"; 45 - # SCRIPT_FILENAME = "$realpath_root$fastcgi_script_name"; 46 - # }; 47 - 48 - extraConfig = '' 49 - error_log /var/log/nginx/photography.error.log warn; 50 - fastcgi_pass unix:${config.services.phpfpm.pools.photography.socket}; 51 - include ${config.services.nginx.package}/conf/fastcgi.conf; 52 - ''; 53 - }; 54 - }; 55 - 56 - users.users.photography = { 57 - isSystemUser = true; 58 - group = "photography"; 59 - createHome = false; 60 - }; 61 - users.groups.photography = { }; 62 - 63 - users.users.nginx.extraGroups = [ "photography" ]; 64 - users.users.cassie.extraGroups = [ "photography" ]; 65 - }
···
-32
systems/koumakan/services/static-sites/user.nix
··· 1 - { _utils, lib, ... }: 2 - { 3 - services.nginx.virtualHosts."users.soopy.moe" = _utils.mkVhost { 4 - locations."/" = _utils.mkNginxFile { 5 - content = '' 6 - <!doctype html> 7 - <html lang="en"> 8 - <head> 9 - <meta charset="utf-8" /> 10 - <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 11 - <style>:root {font-family: monospace;}</style> 12 - <title>~</title> 13 - </head> 14 - 15 - <body> 16 - <h1>You are at ~</h1> 17 - <ul> 18 - <li><a href="/~soopyc" title="web hosting for soopyc">~soopyc</a></li> 19 - </ul> 20 - </body> 21 - </html> 22 - ''; 23 - }; 24 - 25 - locations."/~soopyc" = { 26 - root = "/home/cassie/Web"; 27 - tryFiles = "$uri $uri/index.html $uri.html =404"; 28 - extraConfig = "autoindex on;"; 29 - }; 30 - }; 31 - systemd.services.nginx.serviceConfig.BindReadOnlyPaths = lib.singleton "/home/cassie/Web"; 32 - }
···
-7
systems/koumakan/services/static-sites/verification-data/.well-known/microsoft-identity-association.json
··· 1 - { 2 - "associatedApplications": [ 3 - { 4 - "applicationId": "807b9c9e-69c9-4b9f-b020-01dbf256623b" 5 - } 6 - ] 7 - }
···
-20
systems/koumakan/services/static-sites/verification-data/index.html
··· 1 - <!doctype html> 2 - <html lang="en"> 3 - <head> 4 - <meta charset="utf-8" /> 5 - <meta name="viewport" content="width=device-width, initial-scale=1" /> 6 - <title>publisher verification | soopy.moe</title> 7 - <style> 8 - :root { 9 - font-family: monospace; 10 - } 11 - </style> 12 - </head> 13 - 14 - <body> 15 - <h1>pub.soopy.moe</h1> 16 - <p>welcome to <b>pub.soopy.moe</b>.</p> 17 - <p>this is a verification domain for projects created and maintained by <a href="//soopy.moe">soopyc</a>.</p> 18 - <p>you might have gotten here from an oauth application. if you have any questions about data handling, please contact soopyc via the link above.</p> 19 - </body> 20 - </html>
···
-8
systems/koumakan/services/static-sites/verification.nix
··· 1 - { _utils, ... }: 2 - { 3 - services.nginx.virtualHosts = { 4 - "pub.soopy.moe" = _utils.mkVhost { 5 - locations."/".root = ./verification-data; 6 - }; 7 - }; 8 - }
···
-13
systems/koumakan/services/storage/atuin.nix
··· 1 - { _utils, ... }: 2 - { 3 - services.atuin = { 4 - enable = true; 5 - database.createLocally = true; 6 - port = 34892; 7 - openRegistration = true; 8 - }; 9 - 10 - services.nginx.virtualHosts."atuin.soopy.moe" = _utils.mkSimpleProxy { 11 - port = 34892; 12 - }; 13 - }
···
-71
systems/koumakan/services/storage/backup.nix
··· 1 - { 2 - lib, 3 - pkgs, 4 - inputs, 5 - ... 6 - }: 7 - { 8 - users = { 9 - users.backup = { 10 - isNormalUser = true; 11 - group = "backup"; 12 - shell = pkgs.bashInteractive; 13 - packages = with pkgs; [ rsync ]; 14 - openssh.authorizedKeys.keyFiles = lib.singleton (inputs.self + "/creds/ssh/users/backup"); 15 - createHome = false; 16 - }; 17 - 18 - groups.backup = { }; 19 - }; 20 - 21 - system.activationScripts.initBackupHome = { 22 - deps = [ "users" ]; 23 - supportsDryActivation = false; 24 - text = 25 - let 26 - btrfs = lib.getExe pkgs.btrfs-progs; 27 - in 28 - '' 29 - ensureSubvolume() { 30 - mode=$1; shift 31 - dir=$1; shift 32 - 33 - if test ! -e $dir; then 34 - ${btrfs} subvolume create $dir 35 - fi 36 - chown backup:backup $dir 37 - chmod $mode $dir 38 - } 39 - 40 - ensureSubvolume 550 /home/backup 41 - ensureSubvolume 700 /home/backup/private 42 - ensureSubvolume 700 /home/backup/private/snapshots 43 - ensureSubvolume 755 /home/backup/public 44 - ensureSubvolume 755 /home/backup/public/snapshots 45 - ''; 46 - }; 47 - 48 - systemd = { 49 - services."snapshot-backup" = { 50 - path = [ pkgs.btrfs-progs ]; 51 - script = '' 52 - NOW=$(date -u +%Y%m%d.%H%M%S) 53 - DATA_PATH=/home/backup/public 54 - 55 - mkdir -p ''${DATA_PATH}/snapshots 56 - btrfs subvolume snapshot -r $DATA_PATH ''${DATA_PATH}/snapshots/''${NOW} 57 - ''; 58 - serviceConfig.User = "backup"; 59 - }; 60 - 61 - timers."snapshot-backup" = { 62 - wantedBy = lib.singleton "multi-user.target"; 63 - timerConfig = { 64 - OnCalendar = "*:0"; 65 - RandomizedDelaySec = "60s"; 66 - AccuracySec = "1us"; 67 - }; 68 - unitConfig.RequiresMountsFor = "/home"; 69 - }; 70 - }; 71 - }
···
-9
systems/koumakan/services/storage/default.nix
··· 1 - { 2 - imports = [ 3 - ./atuin.nix 4 - ./wastebin.nix 5 - ./backup.nix 6 - ./garage.nix 7 - ./zipline.nix 8 - ]; 9 - }
···
-143
systems/koumakan/services/storage/garage.nix
··· 1 - { 2 - _utils, 3 - config, 4 - lib, 5 - pkgs, 6 - ... 7 - }: 8 - let 9 - secrets = _utils.setupSecrets config { 10 - namespace = "garage"; 11 - secrets = [ 12 - "rpc_secret" 13 - "admin_token" 14 - "metrics_token" 15 - ]; 16 - config.owner = "garage"; 17 - }; 18 - in 19 - { 20 - imports = [ secrets.generate ]; 21 - 22 - users = { 23 - users.garage = { 24 - isSystemUser = true; 25 - group = "garage"; 26 - }; 27 - groups.garage = { }; 28 - }; 29 - 30 - services.garage = { 31 - enable = true; 32 - package = pkgs.garage_2; 33 - 34 - settings = { 35 - metadata_dir = "/var/lib/garage/meta"; 36 - metadata_snapshots_dir = "/var/lib/garage/snapshots"; 37 - data_dir = "/var/lib/garage/data"; 38 - db_engine = "sqlite"; 39 - metadata_auto_snapshot_interval = "6h"; 40 - 41 - replication_factor = 1; # we only have the resources for a single node atm. 42 - compression_level = 4; 43 - 44 - s3_api = { 45 - s3_region = "ap-east-1"; 46 - api_bind_addr = "[::1]:39930"; 47 - root_domain = ".s3.soopy.moe"; 48 - }; 49 - 50 - # this is needed because garage apparently still doesn't support anon access via path based api, so this is more like a hack than anything atm. 51 - s3_web = { 52 - bind_addr = "[::1]:39939"; 53 - root_domain = ".s3web.soopy.moe"; 54 - }; 55 - 56 - rpc_bind_addr = "100.100.16.16:39931"; 57 - rpc_public_addr = "koumakan.mist-nessie.ts.net:39931"; 58 - rpc_secret_file = secrets.get "rpc_secret"; 59 - 60 - admin = { 61 - api_bind_addr = "100.100.16.16:39932"; 62 - admin_token_file = secrets.get "admin_token"; 63 - metrics_token_file = secrets.get "metrics_token"; 64 - }; 65 - }; 66 - }; 67 - 68 - systemd.tmpfiles.settings."50-garage-init"."/var/lib/garage"."d" = { 69 - user = "garage"; 70 - group = "garage"; 71 - mode = "0700"; 72 - }; 73 - 74 - systemd.services.garage.serviceConfig = { 75 - DynamicUser = false; # we need to use a mounted filesystem and systemd explodes when i already have a mountpoint at /var/lib/garage/data. 76 - User = config.users.users.garage.name; 77 - Group = config.users.groups.garage.name; 78 - Restart = "on-failure"; 79 - StateDirectory = lib.mkForce null; # this somehow breaks mounting dirs into /var/lib; systemd complains about id-mapped mount: device or resource busy 80 - }; 81 - 82 - services.nginx.virtualHosts.".s3.soopy.moe" = _utils.mkSimpleProxy { 83 - port = 39930; 84 - extraConfig = { 85 - useACMEHost = "s3.soopy.moe"; 86 - extraConfig = '' 87 - client_max_body_size 32G; 88 - proxy_max_temp_file_size 0; 89 - ''; 90 - 91 - locations."= /_static" = _utils.mkNginxFile { 92 - content = '' 93 - <!doctype html> 94 - <html lang="en"> 95 - <head> 96 - <title>horrors of gensokyo</title> 97 - <style> 98 - :root {font-family: "monospace";} 99 - </style> 100 - </head> 101 - <body> 102 - <h1>gensokyo filedump - public buckets</h1> 103 - <ul> 104 - <li><a href="//cache.soopy.moe">nix-cache</a></li> 105 - <li>lwjgl-nix</li> 106 - </ul> 107 - </body> 108 - </html> 109 - ''; 110 - }; 111 - }; 112 - }; 113 - 114 - services.nginx.virtualHosts."*.s3web.soopy.moe" = _utils.mkSimpleProxy { 115 - port = 39939; 116 - extraConfig.useACMEHost = "s3.soopy.moe"; 117 - }; 118 - 119 - systemd.services.vmagent.serviceConfig.LoadCredential = [ 120 - "garage_token:${secrets.get "metrics_token"}" 121 - ]; 122 - 123 - services.vmagent.prometheusConfig.scrape_configs = lib.singleton { 124 - job_name = "garage-job"; 125 - scheme = "http"; 126 - static_configs = lib.singleton { targets = lib.singleton "localhost:39932"; }; 127 - relabel_configs = lib.singleton { 128 - target_label = "instance"; 129 - replacement = config.networking.fqdnOrHostName; 130 - }; 131 - 132 - # https://github.com/NixOS/nixpkgs/issues/367447 133 - # https://docs.victoriametrics.com/sd_configs/#scrape_configs 134 - # hard coding because we can't use %{ENV_VAR} syntax (yet) when checking. 135 - bearer_token_file = "/run/credentials/vmagent.service/garage_token"; 136 - }; 137 - 138 - ##################### NAMED BUCKETS WITH WEB HOSTING ########################### 139 - 140 - services.nginx.virtualHosts."cache.soopy.moe" = _utils.mkSimpleProxy { 141 - port = 39939; 142 - }; 143 - }
···
-33
systems/koumakan/services/storage/wastebin.nix
··· 1 - { 2 - _utils, 3 - config, 4 - ... 5 - }: 6 - let 7 - secrets = _utils.setupSecrets config { 8 - namespace = "wastebasket"; 9 - secrets = [ "key" ]; 10 - }; 11 - in 12 - { 13 - # figure out a way to disable encryption, i don't trust the impl. 14 - imports = [ 15 - secrets.generate 16 - (secrets.mkTemplate "wastebin.env" '' 17 - WASTEBIN_SIGNING_KEY=${secrets.placeholder "key"} 18 - '') 19 - ]; 20 - services.wastebin = { 21 - enable = true; 22 - settings = { 23 - WASTEBIN_ADDRESS_PORT = "127.0.0.1:34682"; 24 - WASTEBIN_BASE_URL = "https://akyuu.soopy.moe"; 25 - WASTEBIN_MAX_BODY_SIZE = 10240; 26 - }; 27 - secretFile = secrets.getTemplate "wastebin.env"; 28 - }; 29 - 30 - services.nginx.virtualHosts."akyuu.soopy.moe" = _utils.mkSimpleProxy { 31 - port = 34682; 32 - }; 33 - }
···
-54
systems/koumakan/services/storage/zipline.nix
··· 1 - { 2 - _utils, 3 - lib, 4 - config, 5 - ... 6 - }: 7 - let 8 - secrets = _utils.setupSecrets config { 9 - namespace = "zipline"; 10 - secrets = [ 11 - "core/secret" 12 - "s3/access_key" 13 - "s3/access_secret" 14 - ]; 15 - }; 16 - in 17 - { 18 - imports = [ 19 - secrets.generate 20 - (secrets.mkTemplate "zipline.env" '' 21 - CORE_SECRET=${secrets.placeholder "core/secret"} 22 - DATASOURCE_S3_ACCESS_KEY_ID=${secrets.placeholder "s3/access_key"} 23 - DATASOURCE_S3_SECRET_ACCESS_KEY=${secrets.placeholder "s3/access_secret"} 24 - '') 25 - ]; 26 - 27 - services.zipline = { 28 - enable = true; 29 - environmentFiles = lib.singleton (secrets.getTemplate "zipline.env"); 30 - 31 - settings = { 32 - CORE_PORT = 34638; 33 - DATASOURCE_TYPE = "s3"; 34 - DATASOURCE_S3_BUCKET = "zipline-01"; 35 - DATASOURCE_S3_REGION = "ap-east-1"; 36 - DATASOURCE_S3_ENDPOINT = "https://s3.soopy.moe"; 37 - DATASOURCE_S3_FORCE_PATH_STYLE = "true"; 38 - 39 - FEATURES_OAUTH_REGISTRATION = "true"; 40 - }; 41 - }; 42 - 43 - services.nginx.virtualHosts."dumpster.soopy.moe" = _utils.mkSimpleProxy { 44 - port = 34638; 45 - extraConfig.extraConfig = '' 46 - client_max_body_size 100M; 47 - ''; 48 - }; 49 - 50 - systemd.services.zipline.serviceConfig = { 51 - Restart = "on-failure"; 52 - RestartSec = "10s"; 53 - }; 54 - }
···
-7
systems/koumakan/services/telemetry/default.nix
··· 1 - { ... }: 2 - { 3 - imports = [ 4 - ./victoriametrics.nix 5 - ./grafana 6 - ]; 7 - }
···
-16
systems/koumakan/services/telemetry/grafana/dashboards/README.md
··· 1 - # Grafana Dashboards 2 - 3 - Reproducible definitions of grafana dashboards. Most of these are obtained are obtained from Grafana's site directly. 4 - Please see our `utils/justfile` for more details. 5 - 6 - ## Obtaining a new dashboard 7 - Run the following just recipe. 8 - 9 - ```console 10 - # just utils add-grafana-dashboard <id> <name> [title] 11 - # dashboard id ^ ^ ^ (visible) dashboard title 12 - # dashboard json name (invisible) 13 - 14 - $ just utils add-grafana-dashboard 1860 node "Node Metrics" 15 - xh https://grafana.com/api/dashboards/1860 | jq '.json | .uid="node" | .title="Node Metrics"' -c > ../systems/koumakan/services/telemetry/grafana/dashboards/node.json 16 - ```
···
-1
systems/koumakan/services/telemetry/grafana/dashboards/garage.json
··· 1 - {"__inputs":[{"name":"DS_DS_PROMETHEUS","label":"DS_PROMETHEUS","description":"","type":"datasource","pluginId":"prometheus","pluginName":"Prometheus"}],"__elements":{},"__requires":[{"type":"grafana","id":"grafana","name":"Grafana","version":"9.2.0"},{"type":"datasource","id":"prometheus","name":"Prometheus","version":"1.0.0"},{"type":"panel","id":"timeseries","name":"Time series","version":""}],"annotations":{"list":[{"builtIn":1,"datasource":{"type":"datasource","uid":"grafana"},"enable":true,"hide":true,"iconColor":"rgba(0, 211, 255, 1)","name":"Annotations & Alerts","target":{"limit":100,"matchAny":false,"tags":[],"type":"dashboard"},"type":"dashboard"}]},"editable":true,"fiscalYearStartMonth":0,"graphTooltip":0,"id":null,"links":[],"liveNow":false,"panels":[{"datasource":{"type":"prometheus","uid":"${DS_DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":24,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"auto","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"Bps"},"overrides":[]},"gridPos":{"h":9,"w":8,"x":0,"y":0},"id":10,"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom","showLegend":true},"tooltip":{"mode":"single","sort":"none"}},"targets":[{"datasource":{"type":"prometheus","uid":"${DS_DS_PROMETHEUS}"},"exemplar":true,"expr":"sum(rate(block_bytes_read{job=\"garage\"}[$__rate_interval]) )","hide":false,"interval":"","legendFormat":"Disk bytes read","refId":"A"},{"datasource":{"type":"prometheus","uid":"${DS_DS_PROMETHEUS}"},"exemplar":true,"expr":"-sum(rate(block_bytes_written{job=\"garage\"}[$__rate_interval]) )","hide":false,"interval":"","legendFormat":"Disk bytes written","refId":"B"}],"title":"Disk I/O","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${DS_DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"auto","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"reqps"},"overrides":[]},"gridPos":{"h":9,"w":8,"x":8,"y":0},"id":3,"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom","showLegend":true},"tooltip":{"mode":"single","sort":"none"}},"targets":[{"datasource":{"type":"prometheus","uid":"${DS_DS_PROMETHEUS}"},"editorMode":"code","exemplar":true,"expr":"sum by (api_endpoint) (rate(api_s3_request_counter {job=\"garage\"}[$__rate_interval]))","hide":false,"interval":"","legendFormat":"{{api_endpoint}}","range":true,"refId":"A"}],"title":"API requests","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${DS_DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"auto","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"reqps"},"overrides":[]},"gridPos":{"h":9,"w":8,"x":16,"y":0},"id":9,"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom","showLegend":true},"tooltip":{"mode":"single","sort":"none"}},"targets":[{"datasource":{"type":"prometheus","uid":"${DS_DS_PROMETHEUS}"},"exemplar":true,"expr":"sum(rate(web_request_counter {job=\"garage\"}[$__rate_interval]))","hide":false,"interval":"","legendFormat":"Web request rate","refId":"A"}],"title":"Web requests","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${DS_DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"auto","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"reqps"},"overrides":[]},"gridPos":{"h":8,"w":8,"x":0,"y":9},"id":2,"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom","showLegend":true},"tooltip":{"mode":"single","sort":"none"}},"targets":[{"datasource":{"type":"prometheus","uid":"${DS_DS_PROMETHEUS}"},"exemplar":true,"expr":"sum by (rpc_endpoint) (rate(rpc_request_counter {job=\"garage\"}[$__rate_interval]))","hide":false,"interval":"","legendFormat":"{{rpc_endpoint}}","refId":"A"}],"title":"RPC requests","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${DS_DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"auto","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"reqps"},"overrides":[]},"gridPos":{"h":8,"w":8,"x":8,"y":9},"id":4,"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom","showLegend":true},"tooltip":{"mode":"single","sort":"none"}},"targets":[{"datasource":{"type":"prometheus","uid":"${DS_DS_PROMETHEUS}"},"editorMode":"code","exemplar":true,"expr":"sum by (api_endpoint, status_code) (rate(api_s3_error_counter {job=\"garage\"}[$__rate_interval]))","hide":false,"interval":"","legendFormat":"{{api_endpoint}} {{status_code}}","range":true,"refId":"A"}],"title":"API errors","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${DS_DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"auto","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"reqps"},"overrides":[]},"gridPos":{"h":8,"w":8,"x":16,"y":9},"id":11,"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom","showLegend":true},"tooltip":{"mode":"single","sort":"none"}},"targets":[{"datasource":{"type":"prometheus","uid":"${DS_DS_PROMETHEUS}"},"exemplar":true,"expr":"sum by(status_code) (rate(web_error_counter {job=\"garage\"}[$__rate_interval]))","hide":false,"interval":"","legendFormat":"{{status_code}}","refId":"A"}],"title":"Web errors","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${DS_DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"auto","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]}},"overrides":[{"__systemRef":"hideSeriesFrom","matcher":{"id":"byNames","options":{"mode":"exclude","names":["10.83.2.3:3903"],"prefix":"All except:","readOnly":true}},"properties":[{"id":"custom.hideFrom","value":{"legend":false,"tooltip":false,"viz":true}}]}]},"gridPos":{"h":8,"w":8,"x":0,"y":17},"id":6,"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom","showLegend":true},"tooltip":{"mode":"single","sort":"none"}},"targets":[{"datasource":{"type":"prometheus","uid":"${DS_DS_PROMETHEUS}"},"exemplar":true,"expr":"block_resync_queue_length{job=\"garage\"}","interval":"","legendFormat":"{{instance}}","refId":"A"}],"title":"Resync queue length","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${DS_DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"auto","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]}},"overrides":[]},"gridPos":{"h":8,"w":8,"x":8,"y":17},"id":7,"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom","showLegend":true},"tooltip":{"mode":"single","sort":"none"}},"targets":[{"datasource":{"type":"prometheus","uid":"${DS_DS_PROMETHEUS}"},"exemplar":true,"expr":"sum by(table_name) (table_gc_todo_queue_length{job=\"garage\"})","interval":"","legendFormat":"{{ table_name}}","refId":"A"}],"title":"Table GC queue length","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${DS_DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"auto","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]}},"overrides":[]},"gridPos":{"h":8,"w":8,"x":16,"y":17},"id":8,"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom","showLegend":true},"tooltip":{"mode":"single","sort":"none"}},"targets":[{"datasource":{"type":"prometheus","uid":"${DS_DS_PROMETHEUS}"},"exemplar":true,"expr":"sum by(table_name) (table_merkle_updater_todo_queue_length{job=\"garage\"})","interval":"","legendFormat":"{{ table_name}}","refId":"A"}],"title":"Table Merkle updater queue length","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${DS_DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"auto","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]}},"overrides":[]},"gridPos":{"h":8,"w":8,"x":0,"y":25},"id":12,"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom","showLegend":true},"tooltip":{"mode":"single","sort":"none"}},"targets":[{"datasource":{"type":"prometheus","uid":"${DS_DS_PROMETHEUS}"},"exemplar":true,"expr":"block_resync_errored_blocks{job=\"garage\"}","interval":"","legendFormat":"{{instance}}","refId":"A"}],"title":"Resync errored blocks","type":"timeseries"}],"refresh":"30s","schemaVersion":37,"style":"dark","tags":[],"templating":{"list":[]},"time":{"from":"now-6h","to":"now"},"timepicker":{},"timezone":"","title":"Garage","uid":"ys3pnpZ4k","version":26,"weekStart":""}
···
-1
systems/koumakan/services/telemetry/grafana/dashboards/minio-cluster.json
··· 1 - {"__inputs":[{"name":"DS_PROMETHEUS","label":"Prometheus","description":"","type":"datasource","pluginId":"prometheus","pluginName":"Prometheus"}],"__elements":{},"__requires":[{"type":"panel","id":"bargauge","name":"Bar gauge","version":""},{"type":"panel","id":"gauge","name":"Gauge","version":""},{"type":"grafana","id":"grafana","name":"Grafana","version":"10.3.1"},{"type":"panel","id":"graph","name":"Graph (old)","version":""},{"type":"panel","id":"piechart","name":"Pie chart","version":""},{"type":"datasource","id":"prometheus","name":"Prometheus","version":"1.0.0"},{"type":"panel","id":"stat","name":"Stat","version":""},{"type":"panel","id":"timeseries","name":"Time series","version":""}],"annotations":{"list":[{"builtIn":1,"datasource":{"type":"datasource","uid":"grafana"},"enable":true,"hide":true,"iconColor":"rgba(0, 211, 255, 1)","name":"Annotations & Alerts","target":{"limit":100,"matchAny":false,"tags":[],"type":"dashboard"},"type":"dashboard"}]},"description":"MinIO Grafana Dashboard - https://min.io/","editable":true,"fiscalYearStartMonth":0,"gnetId":13502,"graphTooltip":0,"id":null,"links":[{"icon":"external link","includeVars":true,"keepTime":true,"tags":["minio"],"type":"dashboards"}],"liveNow":false,"panels":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"","fieldConfig":{"defaults":{"mappings":[{"options":{"match":"null","result":{"text":"N/A"}},"type":"special"}],"thresholds":{"mode":"percentage","steps":[{"color":"green","value":null}]},"unit":"dtdurations","unitScale":true},"overrides":[]},"gridPos":{"h":6,"w":3,"x":0,"y":0},"id":1,"links":[],"maxDataPoints":100,"options":{"colorMode":"value","graphMode":"none","justifyMode":"auto","orientation":"auto","reduceOptions":{"calcs":["mean"],"fields":"","values":false},"showPercentChange":false,"text":{},"textMode":"auto","wideLayout":true},"pluginVersion":"10.3.1","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"time() - max(minio_node_process_starttime_seconds{job=~\"$scrape_jobs\"})","format":"time_series","instant":true,"interval":"","intervalFactor":1,"legendFormat":"{{instance}}","metric":"process_start_time_seconds","refId":"A","step":60}],"title":"Uptime","type":"stat"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"","fieldConfig":{"defaults":{"mappings":[{"options":{"match":"null","result":{"text":"N/A"}},"type":"special"}],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null}]},"unit":"bytes","unitScale":true},"overrides":[]},"gridPos":{"h":3,"w":3,"x":3,"y":0},"id":65,"links":[],"maxDataPoints":100,"options":{"colorMode":"value","graphMode":"area","justifyMode":"auto","orientation":"auto","reduceOptions":{"calcs":["last"],"fields":"","values":false},"showPercentChange":false,"text":{},"textMode":"auto","wideLayout":true},"pluginVersion":"10.3.1","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"sum by (instance) (minio_s3_traffic_received_bytes{job=~\"$scrape_jobs\"})","format":"table","hide":false,"instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{instance}}","metric":"process_start_time_seconds","refId":"A","step":60}],"title":"Total S3 Ingress","type":"stat"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"hideFrom":{"legend":false,"tooltip":false,"viz":false}},"mappings":[{"options":{"match":"null","result":{"text":"N/A"}},"type":"special"}],"unit":"bytes","unitScale":true},"overrides":[{"matcher":{"id":"byName","options":"Free"},"properties":[{"id":"color","value":{"fixedColor":"green","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Used"},"properties":[{"id":"color","value":{"fixedColor":"orange","mode":"fixed"}}]}]},"gridPos":{"h":6,"w":4,"x":6,"y":0},"id":50,"interval":"1m","links":[],"maxDataPoints":100,"options":{"displayLabels":[],"legend":{"displayMode":"table","placement":"bottom","showLegend":true,"values":["percent"]},"pieType":"donut","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"tooltip":{"mode":"single","sort":"none"}},"pluginVersion":"8.2.1","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"topk(1, sum(minio_cluster_capacity_usable_total_bytes{job=~\"$scrape_jobs\"}) by (instance)) - topk(1, sum(minio_cluster_capacity_usable_free_bytes{job=~\"$scrape_jobs\"}) by (instance))","format":"time_series","instant":false,"interval":"1m","intervalFactor":1,"legendFormat":"Used","refId":"A","step":300},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"topk(1, sum(minio_cluster_capacity_usable_free_bytes{job=~\"$scrape_jobs\"}) by (instance)) ","hide":false,"interval":"1m","legendFormat":"Free","refId":"B"}],"title":"Capacity","type":"piechart"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":10,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":true,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"bytes","unitScale":true},"overrides":[{"matcher":{"id":"byName","options":"Objects"},"properties":[{"id":"color","value":{"fixedColor":"blue","mode":"fixed"}}]},{"__systemRef":"hideSeriesFrom","matcher":{"id":"byNames","options":{"mode":"exclude","names":["Usage"],"prefix":"All except:","readOnly":true}},"properties":[{"id":"custom.hideFrom","value":{"legend":false,"tooltip":false,"viz":true}}]}]},"gridPos":{"h":6,"w":6,"x":10,"y":0},"id":68,"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom","showLegend":false},"tooltip":{"mode":"single","sort":"none"}},"pluginVersion":"8.2.1","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"code","exemplar":true,"expr":"max(minio_cluster_usage_total_bytes{job=~\"$scrape_jobs\"})","interval":"","legendFormat":"Usage","range":true,"refId":"A"}],"title":"Data Usage Growth","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"continuous-GrYlRd"},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null}]},"unitScale":true},"overrides":[]},"gridPos":{"h":6,"w":5,"x":16,"y":0},"id":52,"links":[],"options":{"displayMode":"lcd","maxVizHeight":300,"minVizHeight":16,"minVizWidth":8,"namePlacement":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"showUnfilled":true,"sizing":"auto","valueMode":"color"},"pluginVersion":"10.3.1","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"disableTextWrap":false,"editorMode":"code","exemplar":true,"expr":"minio_cluster_objects_size_distribution{job=~\"$scrape_jobs\"}","format":"time_series","fullMetaSearch":false,"includeNullMetadata":true,"instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{range}}","refId":"A","step":300,"useBackend":false}],"title":"Object Size Distribution","type":"bargauge"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":25,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"auto","spanNulls":false,"stacking":{"group":"A","mode":"normal"},"thresholdsStyle":{"mode":"off"}},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unitScale":true},"overrides":[]},"gridPos":{"h":3,"w":3,"x":21,"y":0},"id":61,"links":[],"maxDataPoints":100,"options":{"legend":{"calcs":[],"displayMode":"hidden","placement":"right","showLegend":false},"tooltip":{"mode":"single","sort":"none"}},"pluginVersion":"10.3.1","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"code","exemplar":true,"expr":"minio_node_file_descriptor_open_total{job=~\"$scrape_jobs\"}","format":"time_series","hide":false,"instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{server}}","metric":"process_start_time_seconds","refId":"A","step":60}],"title":"Open FDs ","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"","fieldConfig":{"defaults":{"mappings":[{"options":{"match":"null","result":{"text":"N/A"}},"type":"special"}],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null}]},"unit":"bytes","unitScale":true},"overrides":[]},"gridPos":{"h":3,"w":3,"x":3,"y":3},"id":64,"links":[],"maxDataPoints":100,"options":{"colorMode":"value","graphMode":"area","justifyMode":"auto","orientation":"auto","reduceOptions":{"calcs":["last"],"fields":"","values":false},"showPercentChange":false,"text":{},"textMode":"auto","wideLayout":true},"pluginVersion":"10.3.1","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"sum by (instance) (minio_s3_traffic_sent_bytes{job=~\"$scrape_jobs\"})","format":"table","hide":false,"instant":false,"interval":"","intervalFactor":1,"legendFormat":"","metric":"process_start_time_seconds","refId":"A","step":60}],"title":"Total S3 Egress","type":"stat"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":25,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"auto","spanNulls":false,"stacking":{"group":"A","mode":"normal"},"thresholdsStyle":{"mode":"off"}},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unitScale":true},"overrides":[]},"gridPos":{"h":3,"w":3,"x":21,"y":3},"id":62,"links":[],"maxDataPoints":100,"options":{"legend":{"calcs":[],"displayMode":"hidden","placement":"right","showLegend":false},"tooltip":{"mode":"single","sort":"none"}},"pluginVersion":"10.3.1","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"code","exemplar":true,"expr":"minio_node_go_routine_total{job=~\"$scrape_jobs\"}","format":"time_series","hide":false,"instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{server}}","metric":"process_start_time_seconds","refId":"A","step":60}],"title":"Goroutines","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null}]},"unit":"bool_on_off","unitScale":true},"overrides":[]},"gridPos":{"h":2,"w":3,"x":0,"y":6},"id":94,"options":{"colorMode":"value","graphMode":"area","justifyMode":"auto","orientation":"auto","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"showPercentChange":false,"textMode":"auto","wideLayout":true},"pluginVersion":"10.3.1","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"disableTextWrap":false,"editorMode":"code","exemplar":true,"expr":"minio_cluster_health_status{job=~\"$scrape_jobs\"}","fullMetaSearch":false,"includeNullMetadata":true,"interval":"","legendFormat":"Pool: {{pool}} Set: {{set}}","range":true,"refId":"A","useBackend":false}],"title":"Cluster Health Status","transformations":[],"type":"stat"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"","fieldConfig":{"defaults":{"mappings":[],"thresholds":{"mode":"percentage","steps":[{"color":"green","value":null}]},"unitScale":true},"overrides":[]},"gridPos":{"h":4,"w":3,"x":3,"y":6},"id":78,"links":[],"maxDataPoints":100,"options":{"minVizHeight":75,"minVizWidth":75,"orientation":"auto","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"showThresholdLabels":false,"showThresholdMarkers":true,"sizing":"auto"},"pluginVersion":"10.3.1","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"code","exemplar":false,"expr":"max(minio_cluster_drive_online_total{job=~\"$scrape_jobs\"})","format":"time_series","hide":false,"instant":true,"interval":"","intervalFactor":1,"legendFormat":".","metric":"process_start_time_seconds","range":false,"refId":"A","step":60},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"code","exemplar":false,"expr":"max(minio_cluster_drive_offline_total{job=~\"$scrape_jobs\"})","format":"time_series","hide":false,"instant":true,"legendFormat":".","range":false,"refId":"B"}],"title":"Total Online/Offline Drives","type":"gauge"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"mappings":[{"options":{"match":"null","result":{"text":"N/A"}},"type":"special"}],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"dark-yellow","value":75000000},{"color":"dark-red","value":100000000}]},"unit":"short","unitScale":true},"overrides":[]},"gridPos":{"h":3,"w":3,"x":6,"y":6},"id":66,"links":[],"maxDataPoints":100,"options":{"colorMode":"value","graphMode":"area","justifyMode":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"showPercentChange":false,"text":{},"textMode":"auto","wideLayout":true},"pluginVersion":"10.3.1","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"code","exemplar":true,"expr":"max(minio_cluster_bucket_total{job=~\"$scrape_jobs\"})","format":"time_series","instant":false,"interval":"1m","intervalFactor":1,"legendFormat":"","refId":"A"}],"title":"Number of Buckets","type":"stat"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":25,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"auto","spanNulls":false,"stacking":{"group":"A","mode":"normal"},"thresholdsStyle":{"mode":"off"}},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"binBps","unitScale":true},"overrides":[]},"gridPos":{"h":6,"w":7,"x":9,"y":6},"id":63,"options":{"legend":{"calcs":[],"displayMode":"hidden","placement":"right","showLegend":false},"tooltip":{"mode":"single","sort":"none"}},"pluginVersion":"10.3.1","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"sum by (server) (rate(minio_s3_traffic_received_bytes{job=~\"$scrape_jobs\"}[$__rate_interval]))","interval":"1m","intervalFactor":2,"legendFormat":"Data Received [{{server}}]","refId":"A"}],"title":"S3 API Ingress Rate ","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":25,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"auto","spanNulls":false,"stacking":{"group":"A","mode":"normal"},"thresholdsStyle":{"mode":"off"}},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"binBps","unitScale":true},"overrides":[]},"gridPos":{"h":6,"w":8,"x":16,"y":6},"id":70,"options":{"legend":{"calcs":[],"displayMode":"hidden","placement":"right","showLegend":false},"tooltip":{"mode":"single","sort":"none"}},"pluginVersion":"10.3.1","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"sum by (server) (rate(minio_s3_traffic_sent_bytes{job=~\"$scrape_jobs\"}[$__rate_interval]))","interval":"1m","intervalFactor":2,"legendFormat":"Data Sent [{{server}}]","refId":"A"}],"title":"S3 API Egress Rate ","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"","fieldConfig":{"defaults":{"mappings":[{"options":{"match":"null","result":{"text":"N/A"}},"type":"special"}],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"short","unitScale":true},"overrides":[]},"gridPos":{"h":2,"w":3,"x":0,"y":8},"id":53,"links":[],"maxDataPoints":100,"options":{"colorMode":"value","graphMode":"area","justifyMode":"auto","orientation":"auto","reduceOptions":{"calcs":["mean"],"fields":"","values":false},"showPercentChange":false,"text":{},"textMode":"auto","wideLayout":true},"pluginVersion":"10.3.1","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"max(minio_cluster_nodes_online_total{job=~\"$scrape_jobs\"})","format":"table","hide":false,"instant":true,"interval":"","intervalFactor":1,"legendFormat":"","metric":"process_start_time_seconds","refId":"A","step":60}],"title":"Total Online Servers","type":"stat"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"mappings":[{"options":{"match":"null","result":{"text":"N/A"}},"type":"special"}],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"dark-yellow","value":75000000},{"color":"dark-red","value":100000000}]},"unit":"short","unitScale":true},"overrides":[]},"gridPos":{"h":3,"w":3,"x":6,"y":9},"id":44,"links":[],"maxDataPoints":100,"options":{"colorMode":"value","graphMode":"area","justifyMode":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"showPercentChange":false,"text":{},"textMode":"auto","wideLayout":true},"pluginVersion":"10.3.1","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"code","exemplar":true,"expr":"max(minio_cluster_usage_object_total{job=~\"$scrape_jobs\"})","format":"time_series","instant":false,"interval":"1m","intervalFactor":1,"legendFormat":"","refId":"A"}],"title":"Number of Objects","type":"stat"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null}]},"unit":"ns","unitScale":true},"overrides":[]},"gridPos":{"h":2,"w":3,"x":0,"y":10},"id":80,"links":[],"maxDataPoints":100,"options":{"colorMode":"value","graphMode":"none","justifyMode":"auto","orientation":"auto","reduceOptions":{"calcs":["last"],"fields":"","values":false},"showPercentChange":false,"text":{},"textMode":"auto","wideLayout":true},"pluginVersion":"10.3.1","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"max(minio_heal_time_last_activity_nano_seconds{job=~\"$scrape_jobs\"})","format":"time_series","instant":true,"interval":"","intervalFactor":1,"legendFormat":"","metric":"process_start_time_seconds","refId":"A","step":60}],"title":"Time Since Last Heal","type":"stat"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null}]},"unit":"ns","unitScale":true},"overrides":[]},"gridPos":{"h":2,"w":3,"x":3,"y":10},"id":81,"links":[],"maxDataPoints":100,"options":{"colorMode":"value","graphMode":"none","justifyMode":"auto","orientation":"auto","reduceOptions":{"calcs":["last"],"fields":"","values":false},"showPercentChange":false,"text":{},"textMode":"auto","wideLayout":true},"pluginVersion":"10.3.1","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"max(minio_usage_last_activity_nano_seconds{job=~\"$scrape_jobs\"})","format":"time_series","instant":true,"interval":"","intervalFactor":1,"legendFormat":"","metric":"process_start_time_seconds","refId":"A","step":60}],"title":"Time Since Last Scan","type":"stat"},{"aliasColors":{"S3 Errors":"light-red","S3 Requests":"light-green"},"bars":false,"dashLength":10,"dashes":false,"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"unitScale":true},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":6,"w":9,"x":0,"y":12},"hiddenSeries":false,"id":60,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"nullPointMode":"null","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"10.3.1","pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"sum by (server,api) (increase(minio_s3_requests_total{job=~\"$scrape_jobs\"}[$__rate_interval]))","interval":"1m","intervalFactor":2,"legendFormat":"{{server,api}}","refId":"A"}],"thresholds":[],"timeRegions":[],"title":"S3 API Request Rate","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"mode":"time","show":true,"values":[]},"yaxes":[{"$$hashKey":"object:331","format":"none","logBase":1,"show":true},{"$$hashKey":"object:332","format":"short","logBase":1,"show":false}],"yaxis":{"align":false}},{"aliasColors":{"S3 Errors":"light-red","S3 Requests":"light-green"},"bars":false,"dashLength":10,"dashes":false,"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"unitScale":true},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":6,"w":7,"x":9,"y":12},"hiddenSeries":false,"id":88,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"nullPointMode":"null","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"10.3.1","pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"sum by (server,api) (increase(minio_s3_requests_4xx_errors_total{job=~\"$scrape_jobs\"}[$__rate_interval]))","interval":"1m","intervalFactor":2,"legendFormat":"{{server,api}}","refId":"A"}],"thresholds":[],"timeRegions":[],"title":"S3 API Request Error Rate (4xx)","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"mode":"time","show":true,"values":[]},"yaxes":[{"$$hashKey":"object:331","format":"none","logBase":1,"show":true},{"$$hashKey":"object:332","format":"short","logBase":1,"show":false}],"yaxis":{"align":false}},{"aliasColors":{"S3 Errors":"light-red","S3 Requests":"light-green"},"bars":false,"dashLength":10,"dashes":false,"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"unitScale":true},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":6,"w":8,"x":16,"y":12},"hiddenSeries":false,"id":86,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"nullPointMode":"null","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"10.3.1","pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"sum by (server,api) (increase(minio_s3_requests_5xx_errors_total{job=~\"$scrape_jobs\"}[$__rate_interval]))","interval":"1m","intervalFactor":2,"legendFormat":"{{server,api}}","refId":"A"}],"thresholds":[],"timeRegions":[],"title":"S3 API Request Error Rate (5xx)","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"mode":"time","show":true,"values":[]},"yaxes":[{"$$hashKey":"object:331","format":"none","logBase":1,"show":true},{"$$hashKey":"object:332","format":"short","logBase":1,"show":false}],"yaxis":{"align":false}},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"fixed"},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null}]},"unitScale":true},"overrides":[]},"gridPos":{"h":8,"w":12,"x":0,"y":18},"id":99,"options":{"displayMode":"lcd","maxVizHeight":300,"minVizHeight":16,"minVizWidth":8,"namePlacement":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"showUnfilled":true,"sizing":"auto","valueMode":"color"},"pluginVersion":"10.3.1","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"disableTextWrap":false,"editorMode":"builder","expr":"minio_cluster_health_erasure_set_online_drives{job=~\"$scrape_jobs\"}","fullMetaSearch":false,"hide":false,"includeNullMetadata":true,"instant":false,"legendFormat":"Pool {{pool}} / Set {{set}} - Online Drives","range":true,"refId":"A","useBackend":false},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"disableTextWrap":false,"editorMode":"builder","expr":"minio_cluster_health_erasure_set_read_quorum{job=~\"$scrape_jobs\"}","fullMetaSearch":false,"hide":false,"includeNullMetadata":true,"instant":false,"legendFormat":"Pool {{pool}} / Set {{set}} - Read Quorum","range":true,"refId":"B","useBackend":false},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"disableTextWrap":false,"editorMode":"builder","expr":"minio_cluster_health_erasure_set_write_quorum{job=~\"$scrape_jobs\"}","fullMetaSearch":false,"hide":false,"includeNullMetadata":true,"instant":false,"legendFormat":"Pool {{pool}} / Set {{set}} - Write Quorum","range":true,"refId":"C","useBackend":false},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"disableTextWrap":false,"editorMode":"builder","expr":"minio_cluster_health_erasure_set_healing_drives{job=~\"$scrape_jobs\"}","fullMetaSearch":false,"hide":false,"includeNullMetadata":true,"instant":false,"legendFormat":"Pool {{pool}} / Set {{set}} - Healing Drives","range":true,"refId":"D","useBackend":false},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"disableTextWrap":false,"editorMode":"builder","expr":"minio_cluster_health_erasure_set_status{job=~\"$scrape_jobs\"}","fullMetaSearch":false,"hide":false,"includeNullMetadata":true,"instant":false,"legendFormat":"Pool {{pool}} / Set {{set}} - Status","range":true,"refId":"E","useBackend":false}],"title":"Health Breakdown","type":"bargauge"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"continuous-GrYlRd"},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"bytes","unitScale":true},"overrides":[]},"gridPos":{"h":8,"w":12,"x":12,"y":18},"id":76,"options":{"displayMode":"lcd","maxVizHeight":300,"minVizHeight":16,"minVizWidth":8,"namePlacement":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"showUnfilled":true,"sizing":"auto","valueMode":"color"},"pluginVersion":"10.3.1","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"code","exemplar":false,"expr":"minio_node_process_resident_memory_bytes{job=~\"$scrape_jobs\"}","format":"time_series","instant":false,"interval":"","legendFormat":"{{server}}","range":true,"refId":"A"}],"title":"Memory Usage ","type":"bargauge"},{"aliasColors":{},"bars":true,"dashLength":10,"dashes":false,"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"unitScale":true},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":12,"x":0,"y":26},"hiddenSeries":false,"id":73,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"nullPointMode":"null","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"10.3.1","pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"rate(minio_node_io_rchar_bytes{job=~\"$scrape_jobs\"}[$__rate_interval])","format":"time_series","instant":false,"interval":"","legendFormat":"Node RChar [{{server}}]","refId":"A"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"rate(minio_node_io_wchar_bytes{job=~\"$scrape_jobs\"}[$__rate_interval])","interval":"","legendFormat":"Node WChar [{{server}}]","refId":"B"}],"thresholds":[],"timeRegions":[],"title":"Read, Write I/O","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"mode":"time","show":true,"values":[]},"yaxes":[{"$$hashKey":"object:381","format":"bytes","logBase":1,"show":true},{"$$hashKey":"object:382","format":"short","logBase":1,"show":true}],"yaxis":{"align":false}},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"mappings":[],"thresholds":{"mode":"percentage","steps":[{"color":"green"},{"color":"orange","value":70},{"color":"red","value":85}]},"unit":"s","unitScale":true},"overrides":[]},"gridPos":{"h":7,"w":12,"x":12,"y":26},"id":77,"options":{"minVizHeight":75,"minVizWidth":75,"orientation":"auto","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"showThresholdLabels":false,"showThresholdMarkers":true,"sizing":"auto"},"pluginVersion":"10.3.1","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"code","exemplar":true,"expr":"rate(minio_node_process_cpu_total_seconds{job=~\"$scrape_jobs\"}[$__rate_interval])","interval":"","legendFormat":"{{server}}","range":true,"refId":"A"}],"title":"CPU Usage","type":"gauge"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"Total number of bytes received and sent on MinIO cluster","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":25,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"auto","spanNulls":false,"stacking":{"group":"A","mode":"normal"},"thresholdsStyle":{"mode":"off"}},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"bytes","unitScale":true},"overrides":[]},"gridPos":{"h":7,"w":12,"x":0,"y":33},"id":17,"links":[],"options":{"legend":{"calcs":[],"displayMode":"hidden","placement":"right","showLegend":false},"tooltip":{"mode":"single","sort":"none"}},"pluginVersion":"10.3.1","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"code","exemplar":true,"expr":"rate(minio_inter_node_traffic_sent_bytes{job=~\"$scrape_jobs\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":2,"legendFormat":"Internode Bytes Received [{{server}}]","metric":"minio_http_requests_duration_seconds_count","range":true,"refId":"A","step":4},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"rate(minio_inter_node_traffic_received_bytes{job=~\"$scrape_jobs\"}[$__rate_interval])","interval":"","legendFormat":"Internode Bytes Sent [{{server}}]","refId":"B"}],"title":"Internode Traffic","type":"timeseries"},{"aliasColors":{"available 10.13.1.25:9000":"green","used 10.13.1.25:9000":"blue"},"bars":false,"dashLength":10,"dashes":false,"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"","fieldConfig":{"defaults":{"links":[],"unit":"bytes","unitScale":true},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":12,"x":12,"y":33},"hiddenSeries":false,"id":8,"legend":{"avg":false,"current":false,"max":false,"min":false,"rightSide":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"10.3.1","pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"minio_node_file_descriptor_open_total{job=~\"$scrape_jobs\"}","interval":"","legendFormat":"Open FDs [{{server}}]","refId":"B"}],"thresholds":[],"timeRegions":[],"title":"File Descriptors","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"mode":"time","show":true,"values":[]},"yaxes":[{"$$hashKey":"object:212","format":"bytes","logBase":1,"min":"0","show":true},{"$$hashKey":"object:213","format":"none","logBase":1,"min":"0","show":true}],"yaxis":{"align":false}},{"aliasColors":{"Offline 10.13.1.25:9000":"dark-red","Total 10.13.1.25:9000":"blue"},"bars":true,"dashLength":10,"dashes":false,"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"Number of online drives per MinIO Server","fieldConfig":{"defaults":{"links":[],"unitScale":true},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":12,"x":0,"y":40},"hiddenSeries":false,"id":11,"legend":{"avg":false,"current":false,"max":false,"min":false,"rightSide":false,"show":true,"total":false,"values":false},"lines":false,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"10.3.1","pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"rate(minio_node_syscall_read_total{job=~\"$scrape_jobs\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":2,"legendFormat":"Read Syscalls [{{server}}]","metric":"process_start_time_seconds","refId":"A","step":60},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"rate(minio_node_syscall_write_total{job=~\"$scrape_jobs\"}[$__rate_interval])","interval":"","legendFormat":"Write Syscalls [{{server}}]","refId":"B"}],"thresholds":[],"timeRegions":[],"title":"Syscalls","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"mode":"time","show":true,"values":[]},"yaxes":[{"$$hashKey":"object:185","decimals":0,"format":"short","logBase":1,"min":"0","show":true},{"$$hashKey":"object:186","format":"short","logBase":1,"show":true}],"yaxis":{"align":false}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"unitScale":true},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":12,"x":12,"y":40},"hiddenSeries":false,"id":95,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"nullPointMode":"null","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"10.3.1","pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"rate(minio_node_scanner_objects_scanned{job=~\"$scrape_jobs\"}[$__rate_interval])","interval":"1m","legendFormat":"[{{server}}]","refId":"A"}],"thresholds":[],"timeRegions":[],"title":"Scanned Objects","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"mode":"time","show":true,"values":[]},"yaxes":[{"$$hashKey":"object:212","format":"none","logBase":1,"min":"0","show":true},{"$$hashKey":"object:213","format":"none","logBase":1,"min":"0","show":true}],"yaxis":{"align":false}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"unitScale":true},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":12,"x":0,"y":47},"hiddenSeries":false,"id":75,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"nullPointMode":"null","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"10.3.1","pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"rate(minio_node_scanner_versions_scanned{job=~\"$scrape_jobs\"}[$__rate_interval])","interval":"1m","legendFormat":"[{{server}}]","refId":"A"}],"thresholds":[],"timeRegions":[],"title":"Scanned Versions","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"mode":"time","show":true,"values":[]},"yaxes":[{"$$hashKey":"object:212","format":"none","logBase":1,"min":"0","show":true},{"$$hashKey":"object:213","format":"none","logBase":1,"min":"0","show":true}],"yaxis":{"align":false}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"unitScale":true},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":12,"x":12,"y":47},"hiddenSeries":false,"id":96,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"nullPointMode":"null","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"10.3.1","pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"rate(minio_node_scanner_directories_scanned{job=~\"$scrape_jobs\"}[$__rate_interval])","interval":"1m","legendFormat":"[{{server}}]","refId":"A"}],"thresholds":[],"timeRegions":[],"title":"Scanned Directories","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"mode":"time","show":true,"values":[]},"yaxes":[{"$$hashKey":"object:212","format":"none","logBase":1,"min":"0","show":true},{"$$hashKey":"object:213","format":"none","logBase":1,"min":"0","show":true}],"yaxis":{"align":false}},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"","fieldConfig":{"defaults":{"mappings":[{"options":{"match":"null","result":{"text":"N/A"}},"type":"special"}],"thresholds":{"mode":"percentage","steps":[{"color":"green"}]},"unit":"dtdurations","unitScale":true},"overrides":[]},"gridPos":{"h":4,"w":4,"x":0,"y":54},"id":89,"links":[],"maxDataPoints":100,"options":{"colorMode":"value","graphMode":"none","justifyMode":"auto","orientation":"auto","reduceOptions":{"calcs":["mean"],"fields":"","values":false},"showPercentChange":false,"text":{},"textMode":"auto","wideLayout":true},"pluginVersion":"10.3.1","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"minio_cluster_kms_uptime{job=~\"$scrape_jobs\"}","format":"time_series","instant":true,"interval":"","intervalFactor":1,"legendFormat":"{{instance}}","metric":"minio_cluster_kms_uptime","refId":"A","step":60}],"title":"KMS Uptime","type":"stat"},{"aliasColors":{"S3 Errors":"light-red","S3 Requests":"light-green"},"bars":false,"dashLength":10,"dashes":false,"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"unitScale":true},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":4,"w":4,"x":4,"y":54},"hiddenSeries":false,"id":91,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"nullPointMode":"null","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"10.3.1","pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"sum by (server) (increase(minio_cluster_kms_request_error{job=~\"$scrape_jobs\"}[$__rate_interval]))","interval":"1m","intervalFactor":2,"legendFormat":"{{server}}","refId":"A"}],"thresholds":[],"timeRegions":[],"title":"KMS Request 4xx Error Rate","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"mode":"time","show":true,"values":[]},"yaxes":[{"$$hashKey":"object:331","format":"none","logBase":1,"show":true},{"$$hashKey":"object:332","format":"short","logBase":1,"show":false}],"yaxis":{"align":false}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"unit":"bool_on_off","unitScale":true},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":4,"w":4,"x":8,"y":54},"hiddenSeries":false,"id":90,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"nullPointMode":"null","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"10.3.1","pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"sum by (server) (minio_cluster_kms_online{job=~\"$scrape_jobs\"})","interval":"1m","legendFormat":"{{server}}","refId":"A"}],"thresholds":[],"timeRegions":[],"title":"KMS Online(1)/Offline(0)","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"mode":"time","show":true,"values":[]},"yaxes":[{"$$hashKey":"object:212","format":"bool_on_off","logBase":1,"min":"0","show":true},{"$$hashKey":"object:213","format":"none","logBase":1,"min":"0","show":true}],"yaxis":{"align":false}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"unitScale":true},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":12,"x":12,"y":54},"hiddenSeries":false,"id":98,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"nullPointMode":"null","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"10.3.1","pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"rate(minio_node_scanner_bucket_scans_finished{job=~\"$scrape_jobs\"}[$__rate_interval])","interval":"1m","legendFormat":"[{{server}}]","refId":"A"}],"thresholds":[],"timeRegions":[],"title":"Bucket Scans Finished","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"mode":"time","show":true,"values":[]},"yaxes":[{"$$hashKey":"object:212","format":"none","logBase":1,"min":"0","show":true},{"$$hashKey":"object:213","format":"none","logBase":1,"min":"0","show":true}],"yaxis":{"align":false}},{"aliasColors":{"S3 Errors":"light-red","S3 Requests":"light-green"},"bars":false,"dashLength":10,"dashes":false,"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"unitScale":true},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":5,"w":6,"x":0,"y":58},"hiddenSeries":false,"id":92,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"nullPointMode":"null","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"10.3.1","pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"sum by (server) (increase(minio_cluster_kms_request_failure{job=~\"$scrape_jobs\"}[$__rate_interval]))","interval":"1m","intervalFactor":2,"legendFormat":"{{server}}","refId":"A"}],"thresholds":[],"timeRegions":[],"title":"KMS Request 5xx Error Rate","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"mode":"time","show":true,"values":[]},"yaxes":[{"$$hashKey":"object:331","format":"none","logBase":1,"show":true},{"$$hashKey":"object:332","format":"short","logBase":1,"show":false}],"yaxis":{"align":false}},{"aliasColors":{"S3 Errors":"light-red","S3 Requests":"light-green"},"bars":false,"dashLength":10,"dashes":false,"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"unitScale":true},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":5,"w":6,"x":6,"y":58},"hiddenSeries":false,"id":93,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"nullPointMode":"null","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"10.3.1","pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"sum by (server) (rate(minio_cluster_kms_request_success{job=~\"$scrape_jobs\"}[$__rate_interval]))","interval":"1m","intervalFactor":2,"legendFormat":"KMS Request Success [{{server}}]","refId":"A"}],"thresholds":[],"timeRegions":[],"title":"KMS Request Success Rate ","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"mode":"time","show":true,"values":[]},"yaxes":[{"$$hashKey":"object:331","format":"none","logBase":1,"show":true},{"$$hashKey":"object:332","format":"short","logBase":1,"show":false}],"yaxis":{"align":false}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"unitScale":true},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":9,"w":12,"x":12,"y":61},"hiddenSeries":false,"id":97,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"nullPointMode":"null","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"10.3.1","pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"rate(minio_node_scanner_bucket_scans_started{job=~\"$scrape_jobs\"}[$__rate_interval])","interval":"1m","legendFormat":"[{{server}}]","refId":"A"}],"thresholds":[],"timeRegions":[],"title":"Bucket Scans Started","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"mode":"time","show":true,"values":[]},"yaxes":[{"$$hashKey":"object:212","format":"none","logBase":1,"min":"0","show":true},{"$$hashKey":"object:213","format":"none","logBase":1,"min":"0","show":true}],"yaxis":{"align":false}}],"refresh":"","schemaVersion":39,"tags":["minio"],"templating":{"list":[{"current":{"selected":false,"tags":[],"text":"default","value":"default"},"hide":0,"includeAll":false,"label":"datasource","multi":false,"name":"DS_PROMETHEUS","options":[],"query":"prometheus","refresh":1,"regex":"","skipUrlSync":false,"type":"datasource"},{"current":{},"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"definition":"","hide":0,"includeAll":false,"label":"Job","multi":false,"name":"scrape_jobs","options":[],"query":{"query":"label_values(minio_cluster_health_status, job)","refId":"minio-scrape_job-Variable-Query"},"refresh":1,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":"","tagsQuery":"","type":"query","useTags":false}]},"time":{"from":"now-6h","to":"now"},"timepicker":{"refresh_intervals":["10s","30s","1m","5m","15m","30m","1h","2h","1d"],"time_options":["5m","15m","1h","6h","12h","24h","2d","7d","30d"]},"timezone":"","title":"MinIO Dashboard","uid":"minio-cluster","version":54,"weekStart":""}
···
-1
systems/koumakan/services/telemetry/grafana/dashboards/nginx.json
··· 1 - {"__inputs":[{"description":"","label":"Prometheus","name":"DS_PROMETHEUS","pluginId":"prometheus","pluginName":"Prometheus","type":"datasource"}],"__requires":[{"id":"grafana","name":"Grafana","type":"grafana","version":"5.0.0"},{"id":"graph","name":"Graph","type":"panel","version":""},{"id":"prometheus","name":"Prometheus","type":"datasource","version":"1.0.0"},{"id":"singlestat","name":"Singlestat","type":"panel","version":""}],"annotations":{"list":[{"builtIn":1,"datasource":"-- Grafana --","enable":true,"hide":true,"iconColor":"rgba(0, 211, 255, 1)","name":"Annotations & Alerts","type":"dashboard"}]},"description":"Official dashboard for NGINX Prometheus exporter","editable":true,"gnetId":null,"graphTooltip":0,"id":null,"iteration":1562682051068,"links":[],"panels":[{"collapsed":false,"datasource":"${DS_PROMETHEUS}","gridPos":{"h":1,"w":24,"x":0,"y":0},"id":4,"panels":[],"title":"Status","type":"row"},{"cacheTimeout":null,"colorBackground":true,"colorPostfix":false,"colorPrefix":false,"colorValue":false,"colors":["#E02F44","#FF9830","#299c46"],"datasource":"${DS_PROMETHEUS}","decimals":null,"description":"","format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":3,"w":12,"x":0,"y":1},"id":8,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"repeat":"instance","repeatDirection":"h","sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"nginx_up{instance=~\"$instance\"}","format":"time_series","instant":false,"intervalFactor":1,"refId":"A"}],"thresholds":"1,1","timeFrom":null,"timeShift":null,"title":"NGINX Status for $instance","type":"singlestat","valueFontSize":"100%","valueMaps":[{"op":"=","text":"Down","value":"0"},{"op":"=","text":"Up","value":"1"}],"valueName":"current"},{"collapsed":false,"datasource":"${DS_PROMETHEUS}","gridPos":{"h":1,"w":24,"x":0,"y":4},"id":6,"panels":[],"title":"Metrics","type":"row"},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","decimals":null,"description":"","fill":1,"gridPos":{"h":10,"w":12,"x":0,"y":5},"id":10,"legend":{"alignAsTable":false,"avg":false,"current":false,"hideEmpty":false,"max":false,"min":false,"rightSide":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"irate(nginx_connections_accepted{instance=~\"$instance\"}[5m])","format":"time_series","instant":false,"intervalFactor":1,"legendFormat":"{{instance}} accepted","refId":"A"},{"expr":"irate(nginx_connections_handled{instance=~\"$instance\"}[5m])","format":"time_series","instant":false,"intervalFactor":1,"legendFormat":"{{instance}} handled","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Processed connections","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":1,"format":"short","label":"Connections (rate)","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":"","logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","decimals":0,"fill":1,"gridPos":{"h":10,"w":12,"x":12,"y":5},"id":12,"legend":{"alignAsTable":false,"avg":false,"current":false,"max":false,"min":false,"rightSide":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"nginx_connections_active{instance=~\"$instance\"}","format":"time_series","intervalFactor":1,"legendFormat":"{{instance}} active","refId":"A"},{"expr":"nginx_connections_reading{instance=~\"$instance\"}","format":"time_series","intervalFactor":1,"legendFormat":"{{instance}} reading","refId":"B"},{"expr":"nginx_connections_waiting{instance=~\"$instance\"}","format":"time_series","intervalFactor":1,"legendFormat":"{{instance}} waiting","refId":"C"},{"expr":"nginx_connections_writing{instance=~\"$instance\"}","format":"time_series","intervalFactor":1,"legendFormat":"{{instance}} writing","refId":"D"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Active Connections","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":"Connections","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","fill":1,"gridPos":{"h":8,"w":24,"x":0,"y":15},"id":15,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"irate(nginx_http_requests_total{instance=~\"$instance\"}[5m])","format":"time_series","intervalFactor":1,"legendFormat":"{{instance}} total requests","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Total requests","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}}],"refresh":"5s","schemaVersion":18,"style":"dark","tags":["nginx","prometheus","nginx prometheus exporter"],"templating":{"list":[{"current":{"selected":false,"tags":[],"text":"default","value":"default"},"hide":0,"includeAll":false,"label":"datasource","multi":false,"name":"DS_PROMETHEUS","options":[],"query":"prometheus","refresh":1,"regex":"","skipUrlSync":false,"type":"datasource"},{"allValue":null,"current":{},"datasource":"${DS_PROMETHEUS}","definition":"label_values(nginx_up, instance)","hide":0,"includeAll":true,"label":"","multi":true,"name":"instance","options":[],"query":"label_values(nginx_up, instance)","refresh":1,"regex":"","skipUrlSync":false,"sort":0,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false}]},"time":{"from":"now-15m","to":"now"},"timepicker":{"refresh_intervals":["5s","10s","30s","1m","5m","15m","30m","1h","2h","1d"],"time_options":["5m","15m","1h","6h","12h","24h","2d","7d","30d"]},"timezone":"","title":"NGINX","uid":"MsjffzSZz","version":1}
···
-1
systems/koumakan/services/telemetry/grafana/dashboards/node.json
··· 1 - {"__inputs":[{"name":"DS_PROMETHEUS","label":"Prometheus","description":"","type":"datasource","pluginId":"prometheus","pluginName":"Prometheus"}],"__elements":{},"__requires":[{"type":"panel","id":"bargauge","name":"Bar gauge","version":""},{"type":"panel","id":"gauge","name":"Gauge","version":""},{"type":"grafana","id":"grafana","name":"Grafana","version":"9.4.3"},{"type":"datasource","id":"prometheus","name":"Prometheus","version":"1.0.0"},{"type":"panel","id":"stat","name":"Stat","version":""},{"type":"panel","id":"timeseries","name":"Time series","version":""}],"annotations":{"list":[{"$$hashKey":"object:1058","builtIn":1,"datasource":{"type":"datasource","uid":"grafana"},"enable":true,"hide":true,"iconColor":"rgba(0, 211, 255, 1)","name":"Annotations & Alerts","target":{"limit":100,"matchAny":false,"tags":[],"type":"dashboard"},"type":"dashboard"}]},"editable":true,"fiscalYearStartMonth":0,"gnetId":1860,"graphTooltip":1,"id":null,"links":[{"icon":"external link","tags":[],"targetBlank":true,"title":"GitHub","type":"link","url":"https://github.com/rfmoz/grafana-dashboards"},{"icon":"external link","tags":[],"targetBlank":true,"title":"Grafana","type":"link","url":"https://grafana.com/grafana/dashboards/1860"}],"liveNow":false,"panels":[{"collapsed":false,"datasource":{"type":"prometheus","uid":"000000001"},"gridPos":{"h":1,"w":24,"x":0,"y":0},"id":261,"panels":[],"targets":[{"datasource":{"type":"prometheus","uid":"000000001"},"refId":"A"}],"title":"Quick CPU / Mem / Disk","type":"row"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"Resource pressure via PSI","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"decimals":1,"links":[],"mappings":[],"max":1,"min":0,"thresholds":{"mode":"percentage","steps":[{"color":"green","value":null},{"color":"dark-yellow","value":70},{"color":"dark-red","value":90}]},"unit":"percentunit"},"overrides":[]},"gridPos":{"h":4,"w":3,"x":0,"y":1},"id":323,"links":[],"options":{"displayMode":"basic","minVizHeight":10,"minVizWidth":0,"orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"showUnfilled":true,"text":{}},"pluginVersion":"9.4.3","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","exemplar":false,"expr":"irate(node_pressure_cpu_waiting_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","instant":true,"intervalFactor":1,"legendFormat":"CPU","range":false,"refId":"CPU some","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","exemplar":false,"expr":"irate(node_pressure_memory_waiting_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","hide":false,"instant":true,"intervalFactor":1,"legendFormat":"Mem","range":false,"refId":"Memory some","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","exemplar":false,"expr":"irate(node_pressure_io_waiting_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","hide":false,"instant":true,"intervalFactor":1,"legendFormat":"I/O","range":false,"refId":"I/O some","step":240}],"title":"Pressure","type":"bargauge"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"Busy state of all CPU cores together","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"decimals":1,"mappings":[{"options":{"match":"null","result":{"text":"N/A"}},"type":"special"}],"max":100,"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"rgba(50, 172, 45, 0.97)","value":null},{"color":"rgba(237, 129, 40, 0.89)","value":85},{"color":"rgba(245, 54, 54, 0.9)","value":95}]},"unit":"percent"},"overrides":[]},"gridPos":{"h":4,"w":3,"x":3,"y":1},"id":20,"links":[],"options":{"orientation":"auto","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"showThresholdLabels":false,"showThresholdMarkers":true},"pluginVersion":"9.4.3","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","exemplar":false,"expr":"100 * (1 - avg(rate(node_cpu_seconds_total{mode=\"idle\", instance=\"$node\"}[$__rate_interval])))","hide":false,"instant":true,"intervalFactor":1,"legendFormat":"","range":false,"refId":"A","step":240}],"title":"CPU Busy","type":"gauge"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"System load over all CPU cores together","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"decimals":1,"mappings":[{"options":{"match":"null","result":{"text":"N/A"}},"type":"special"}],"max":100,"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"rgba(50, 172, 45, 0.97)","value":null},{"color":"rgba(237, 129, 40, 0.89)","value":85},{"color":"rgba(245, 54, 54, 0.9)","value":95}]},"unit":"percent"},"overrides":[]},"gridPos":{"h":4,"w":3,"x":6,"y":1},"id":155,"links":[],"options":{"orientation":"auto","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"showThresholdLabels":false,"showThresholdMarkers":true},"pluginVersion":"9.4.3","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","exemplar":false,"expr":"scalar(node_load1{instance=\"$node\",job=\"$job\"}) * 100 / count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu))","format":"time_series","hide":false,"instant":true,"intervalFactor":1,"range":false,"refId":"A","step":240}],"title":"Sys Load","type":"gauge"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"Non available RAM memory","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"decimals":1,"mappings":[],"max":100,"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"rgba(50, 172, 45, 0.97)","value":null},{"color":"rgba(237, 129, 40, 0.89)","value":80},{"color":"rgba(245, 54, 54, 0.9)","value":90}]},"unit":"percent"},"overrides":[]},"gridPos":{"h":4,"w":3,"x":9,"y":1},"hideTimeOverride":false,"id":16,"links":[],"options":{"orientation":"auto","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"showThresholdLabels":false,"showThresholdMarkers":true},"pluginVersion":"9.4.3","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","exemplar":false,"expr":"((node_memory_MemTotal_bytes{instance=\"$node\", job=\"$job\"} - node_memory_MemFree_bytes{instance=\"$node\", job=\"$job\"}) / node_memory_MemTotal_bytes{instance=\"$node\", job=\"$job\"}) * 100","format":"time_series","hide":true,"instant":true,"intervalFactor":1,"range":false,"refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","exemplar":false,"expr":"(1 - (node_memory_MemAvailable_bytes{instance=\"$node\", job=\"$job\"} / node_memory_MemTotal_bytes{instance=\"$node\", job=\"$job\"})) * 100","format":"time_series","hide":false,"instant":true,"intervalFactor":1,"range":false,"refId":"B","step":240}],"title":"RAM Used","type":"gauge"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"Used Swap","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"decimals":1,"mappings":[{"options":{"match":"null","result":{"text":"N/A"}},"type":"special"}],"max":100,"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"rgba(50, 172, 45, 0.97)","value":null},{"color":"rgba(237, 129, 40, 0.89)","value":10},{"color":"rgba(245, 54, 54, 0.9)","value":25}]},"unit":"percent"},"overrides":[]},"gridPos":{"h":4,"w":3,"x":12,"y":1},"id":21,"links":[],"options":{"orientation":"auto","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"showThresholdLabels":false,"showThresholdMarkers":true},"pluginVersion":"9.4.3","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","exemplar":false,"expr":"((node_memory_SwapTotal_bytes{instance=\"$node\",job=\"$job\"} - node_memory_SwapFree_bytes{instance=\"$node\",job=\"$job\"}) / (node_memory_SwapTotal_bytes{instance=\"$node\",job=\"$job\"})) * 100","instant":true,"intervalFactor":1,"range":false,"refId":"A","step":240}],"title":"SWAP Used","type":"gauge"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"Used Root FS","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"decimals":1,"mappings":[{"options":{"match":"null","result":{"text":"N/A"}},"type":"special"}],"max":100,"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"rgba(50, 172, 45, 0.97)","value":null},{"color":"rgba(237, 129, 40, 0.89)","value":80},{"color":"rgba(245, 54, 54, 0.9)","value":90}]},"unit":"percent"},"overrides":[]},"gridPos":{"h":4,"w":3,"x":15,"y":1},"id":154,"links":[],"options":{"orientation":"auto","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"showThresholdLabels":false,"showThresholdMarkers":true},"pluginVersion":"9.4.3","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","exemplar":false,"expr":"100 - ((node_filesystem_avail_bytes{instance=\"$node\",job=\"$job\",mountpoint=\"/\",fstype!=\"rootfs\"} * 100) / node_filesystem_size_bytes{instance=\"$node\",job=\"$job\",mountpoint=\"/\",fstype!=\"rootfs\"})","format":"time_series","instant":true,"intervalFactor":1,"range":false,"refId":"A","step":240}],"title":"Root FS Used","type":"gauge"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"Total number of CPU cores","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[{"options":{"match":"null","result":{"text":"N/A"}},"type":"special"}],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":2,"w":2,"x":18,"y":1},"id":14,"links":[],"maxDataPoints":100,"options":{"colorMode":"none","graphMode":"none","justifyMode":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"textMode":"auto"},"pluginVersion":"9.4.3","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","exemplar":false,"expr":"count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu))","instant":true,"legendFormat":"__auto","range":false,"refId":"A"}],"title":"CPU Cores","type":"stat"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"System uptime","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"decimals":1,"mappings":[{"options":{"match":"null","result":{"text":"N/A"}},"type":"special"}],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"s"},"overrides":[]},"gridPos":{"h":2,"w":4,"x":20,"y":1},"hideTimeOverride":true,"id":15,"links":[],"maxDataPoints":100,"options":{"colorMode":"none","graphMode":"none","justifyMode":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"textMode":"auto"},"pluginVersion":"9.4.3","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","exemplar":false,"expr":"node_time_seconds{instance=\"$node\",job=\"$job\"} - node_boot_time_seconds{instance=\"$node\",job=\"$job\"}","instant":true,"intervalFactor":1,"range":false,"refId":"A","step":240}],"title":"Uptime","type":"stat"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"Total RootFS","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"decimals":0,"mappings":[{"options":{"match":"null","result":{"text":"N/A"}},"type":"special"}],"thresholds":{"mode":"absolute","steps":[{"color":"rgba(50, 172, 45, 0.97)","value":null},{"color":"rgba(237, 129, 40, 0.89)","value":70},{"color":"rgba(245, 54, 54, 0.9)","value":90}]},"unit":"bytes"},"overrides":[]},"gridPos":{"h":2,"w":2,"x":18,"y":3},"id":23,"links":[],"maxDataPoints":100,"options":{"colorMode":"none","graphMode":"none","justifyMode":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"textMode":"auto"},"pluginVersion":"9.4.3","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","exemplar":false,"expr":"node_filesystem_size_bytes{instance=\"$node\",job=\"$job\",mountpoint=\"/\",fstype!=\"rootfs\"}","format":"time_series","hide":false,"instant":true,"intervalFactor":1,"range":false,"refId":"A","step":240}],"title":"RootFS Total","type":"stat"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"Total RAM","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"decimals":0,"mappings":[{"options":{"match":"null","result":{"text":"N/A"}},"type":"special"}],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"bytes"},"overrides":[]},"gridPos":{"h":2,"w":2,"x":20,"y":3},"id":75,"links":[],"maxDataPoints":100,"options":{"colorMode":"none","graphMode":"none","justifyMode":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"textMode":"auto"},"pluginVersion":"9.4.3","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","exemplar":false,"expr":"node_memory_MemTotal_bytes{instance=\"$node\",job=\"$job\"}","instant":true,"intervalFactor":1,"range":false,"refId":"A","step":240}],"title":"RAM Total","type":"stat"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"Total SWAP","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"decimals":0,"mappings":[{"options":{"match":"null","result":{"text":"N/A"}},"type":"special"}],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"bytes"},"overrides":[]},"gridPos":{"h":2,"w":2,"x":22,"y":3},"id":18,"links":[],"maxDataPoints":100,"options":{"colorMode":"none","graphMode":"none","justifyMode":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"textMode":"auto"},"pluginVersion":"9.4.3","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","exemplar":false,"expr":"node_memory_SwapTotal_bytes{instance=\"$node\",job=\"$job\"}","instant":true,"intervalFactor":1,"range":false,"refId":"A","step":240}],"title":"SWAP Total","type":"stat"},{"collapsed":false,"datasource":{"type":"prometheus","uid":"000000001"},"gridPos":{"h":1,"w":24,"x":0,"y":5},"id":263,"panels":[],"targets":[{"datasource":{"type":"prometheus","uid":"000000001"},"refId":"A"}],"title":"Basic CPU / Mem / Net / Disk","type":"row"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"Basic CPU info","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":40,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"smooth","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"percent"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"percentunit"},"overrides":[{"matcher":{"id":"byName","options":"Busy Iowait"},"properties":[{"id":"color","value":{"fixedColor":"#890F02","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Idle"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Busy Iowait"},"properties":[{"id":"color","value":{"fixedColor":"#890F02","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Idle"},"properties":[{"id":"color","value":{"fixedColor":"#7EB26D","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Busy System"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Busy User"},"properties":[{"id":"color","value":{"fixedColor":"#0A437C","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Busy Other"},"properties":[{"id":"color","value":{"fixedColor":"#6D1F62","mode":"fixed"}}]}]},"gridPos":{"h":7,"w":12,"x":0,"y":6},"id":77,"links":[],"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom","showLegend":true,"width":250},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","exemplar":false,"expr":"sum(irate(node_cpu_seconds_total{instance=\"$node\",job=\"$job\", mode=\"system\"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu)))","format":"time_series","hide":false,"instant":false,"intervalFactor":1,"legendFormat":"Busy System","range":true,"refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"sum(irate(node_cpu_seconds_total{instance=\"$node\",job=\"$job\", mode=\"user\"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu)))","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"Busy User","range":true,"refId":"B","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"sum(irate(node_cpu_seconds_total{instance=\"$node\",job=\"$job\", mode=\"iowait\"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu)))","format":"time_series","intervalFactor":1,"legendFormat":"Busy Iowait","range":true,"refId":"C","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"sum(irate(node_cpu_seconds_total{instance=\"$node\",job=\"$job\", mode=~\".*irq\"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu)))","format":"time_series","intervalFactor":1,"legendFormat":"Busy IRQs","range":true,"refId":"D","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"sum(irate(node_cpu_seconds_total{instance=\"$node\",job=\"$job\", mode!='idle',mode!='user',mode!='system',mode!='iowait',mode!='irq',mode!='softirq'}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu)))","format":"time_series","intervalFactor":1,"legendFormat":"Busy Other","range":true,"refId":"E","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"sum(irate(node_cpu_seconds_total{instance=\"$node\",job=\"$job\", mode=\"idle\"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu)))","format":"time_series","intervalFactor":1,"legendFormat":"Idle","range":true,"refId":"F","step":240}],"title":"CPU Basic","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"Basic memory usage","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":40,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"normal"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"bytes"},"overrides":[{"matcher":{"id":"byName","options":"Apps"},"properties":[{"id":"color","value":{"fixedColor":"#629E51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Buffers"},"properties":[{"id":"color","value":{"fixedColor":"#614D93","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cache"},"properties":[{"id":"color","value":{"fixedColor":"#6D1F62","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cached"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Committed"},"properties":[{"id":"color","value":{"fixedColor":"#508642","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Free"},"properties":[{"id":"color","value":{"fixedColor":"#0A437C","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working"},"properties":[{"id":"color","value":{"fixedColor":"#CFFAFF","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Inactive"},"properties":[{"id":"color","value":{"fixedColor":"#584477","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"PageTables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Page_Tables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"RAM_Free"},"properties":[{"id":"color","value":{"fixedColor":"#E0F9D7","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"SWAP Used"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab"},"properties":[{"id":"color","value":{"fixedColor":"#806EB7","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#E0752D","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap Used"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#C15C17","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Free"},"properties":[{"id":"color","value":{"fixedColor":"#2F575E","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Unused"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"RAM Total"},"properties":[{"id":"color","value":{"fixedColor":"#E0F9D7","mode":"fixed"}},{"id":"custom.fillOpacity","value":0},{"id":"custom.stacking","value":{"group":false,"mode":"normal"}}]},{"matcher":{"id":"byName","options":"RAM Cache + Buffer"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"RAM Free"},"properties":[{"id":"color","value":{"fixedColor":"#7EB26D","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Available"},"properties":[{"id":"color","value":{"fixedColor":"#DEDAF7","mode":"fixed"}},{"id":"custom.fillOpacity","value":0},{"id":"custom.stacking","value":{"group":false,"mode":"normal"}}]}]},"gridPos":{"h":7,"w":12,"x":12,"y":6},"id":78,"links":[],"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom","showLegend":true,"width":350},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_MemTotal_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"RAM Total","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_MemTotal_bytes{instance=\"$node\",job=\"$job\"} - node_memory_MemFree_bytes{instance=\"$node\",job=\"$job\"} - (node_memory_Cached_bytes{instance=\"$node\",job=\"$job\"} + node_memory_Buffers_bytes{instance=\"$node\",job=\"$job\"} + node_memory_SReclaimable_bytes{instance=\"$node\",job=\"$job\"})","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"RAM Used","refId":"B","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_Cached_bytes{instance=\"$node\",job=\"$job\"} + node_memory_Buffers_bytes{instance=\"$node\",job=\"$job\"} + node_memory_SReclaimable_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"RAM Cache + Buffer","refId":"C","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_MemFree_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"RAM Free","refId":"D","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(node_memory_SwapTotal_bytes{instance=\"$node\",job=\"$job\"} - node_memory_SwapFree_bytes{instance=\"$node\",job=\"$job\"})","format":"time_series","intervalFactor":1,"legendFormat":"SWAP Used","refId":"E","step":240}],"title":"Memory Basic","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"Basic network info per interface","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":40,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"bps"},"overrides":[{"matcher":{"id":"byName","options":"Recv_bytes_eth2"},"properties":[{"id":"color","value":{"fixedColor":"#7EB26D","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Recv_bytes_lo"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Recv_drop_eth2"},"properties":[{"id":"color","value":{"fixedColor":"#6ED0E0","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Recv_drop_lo"},"properties":[{"id":"color","value":{"fixedColor":"#E0F9D7","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Recv_errs_eth2"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Recv_errs_lo"},"properties":[{"id":"color","value":{"fixedColor":"#CCA300","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Trans_bytes_eth2"},"properties":[{"id":"color","value":{"fixedColor":"#7EB26D","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Trans_bytes_lo"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Trans_drop_eth2"},"properties":[{"id":"color","value":{"fixedColor":"#6ED0E0","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Trans_drop_lo"},"properties":[{"id":"color","value":{"fixedColor":"#E0F9D7","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Trans_errs_eth2"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Trans_errs_lo"},"properties":[{"id":"color","value":{"fixedColor":"#CCA300","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"recv_bytes_lo"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"recv_drop_eth0"},"properties":[{"id":"color","value":{"fixedColor":"#99440A","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"recv_drop_lo"},"properties":[{"id":"color","value":{"fixedColor":"#967302","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"recv_errs_eth0"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"recv_errs_lo"},"properties":[{"id":"color","value":{"fixedColor":"#890F02","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"trans_bytes_eth0"},"properties":[{"id":"color","value":{"fixedColor":"#7EB26D","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"trans_bytes_lo"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"trans_drop_eth0"},"properties":[{"id":"color","value":{"fixedColor":"#99440A","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"trans_drop_lo"},"properties":[{"id":"color","value":{"fixedColor":"#967302","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"trans_errs_eth0"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"trans_errs_lo"},"properties":[{"id":"color","value":{"fixedColor":"#890F02","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*trans.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":7,"w":12,"x":0,"y":13},"id":74,"links":[],"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_network_receive_bytes_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])*8","format":"time_series","intervalFactor":1,"legendFormat":"recv {{device}}","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_network_transmit_bytes_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])*8","format":"time_series","intervalFactor":1,"legendFormat":"trans {{device}} ","refId":"B","step":240}],"title":"Network Traffic Basic","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"Disk space used of all filesystems mounted","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":40,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"max":100,"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"percent"},"overrides":[]},"gridPos":{"h":7,"w":12,"x":12,"y":13},"id":152,"links":[],"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"100 - ((node_filesystem_avail_bytes{instance=\"$node\",job=\"$job\",device!~'rootfs'} * 100) / node_filesystem_size_bytes{instance=\"$node\",job=\"$job\",device!~'rootfs'})","format":"time_series","intervalFactor":1,"legendFormat":"{{mountpoint}}","refId":"A","step":240}],"title":"Disk Space Used Basic","type":"timeseries"},{"collapsed":true,"datasource":{"type":"prometheus","uid":"000000001"},"gridPos":{"h":1,"w":24,"x":0,"y":20},"id":265,"panels":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"percentage","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":70,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"smooth","lineWidth":2,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"percent"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"percentunit"},"overrides":[{"matcher":{"id":"byName","options":"Idle - Waiting for something to happen"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Iowait - Waiting for I/O to complete"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Irq - Servicing interrupts"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Nice - Niced processes executing in user mode"},"properties":[{"id":"color","value":{"fixedColor":"#C15C17","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Softirq - Servicing softirqs"},"properties":[{"id":"color","value":{"fixedColor":"#E24D42","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Steal - Time spent in other operating systems when running in a virtualized environment"},"properties":[{"id":"color","value":{"fixedColor":"#FCE2DE","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"System - Processes executing in kernel mode"},"properties":[{"id":"color","value":{"fixedColor":"#508642","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"User - Normal processes executing in user mode"},"properties":[{"id":"color","value":{"fixedColor":"#5195CE","mode":"fixed"}}]}]},"gridPos":{"h":12,"w":12,"x":0,"y":21},"id":3,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":250},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"sum(irate(node_cpu_seconds_total{instance=\"$node\",job=\"$job\", mode=\"system\"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu)))","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"System - Processes executing in kernel mode","range":true,"refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"sum(irate(node_cpu_seconds_total{instance=\"$node\",job=\"$job\", mode=\"user\"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu)))","format":"time_series","intervalFactor":1,"legendFormat":"User - Normal processes executing in user mode","range":true,"refId":"B","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"sum(irate(node_cpu_seconds_total{instance=\"$node\",job=\"$job\", mode=\"nice\"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu)))","format":"time_series","intervalFactor":1,"legendFormat":"Nice - Niced processes executing in user mode","range":true,"refId":"C","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"sum by(instance) (irate(node_cpu_seconds_total{instance=\"$node\",job=\"$job\", mode=\"iowait\"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu)))","format":"time_series","intervalFactor":1,"legendFormat":"Iowait - Waiting for I/O to complete","range":true,"refId":"E","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"sum(irate(node_cpu_seconds_total{instance=\"$node\",job=\"$job\", mode=\"irq\"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu)))","format":"time_series","intervalFactor":1,"legendFormat":"Irq - Servicing interrupts","range":true,"refId":"F","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"sum(irate(node_cpu_seconds_total{instance=\"$node\",job=\"$job\", mode=\"softirq\"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu)))","format":"time_series","intervalFactor":1,"legendFormat":"Softirq - Servicing softirqs","range":true,"refId":"G","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"sum(irate(node_cpu_seconds_total{instance=\"$node\",job=\"$job\", mode=\"steal\"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu)))","format":"time_series","intervalFactor":1,"legendFormat":"Steal - Time spent in other operating systems when running in a virtualized environment","range":true,"refId":"H","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"sum(irate(node_cpu_seconds_total{instance=\"$node\",job=\"$job\", mode=\"idle\"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu)))","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"Idle - Waiting for something to happen","range":true,"refId":"J","step":240}],"title":"CPU","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"bytes","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":40,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"normal"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"bytes"},"overrides":[{"matcher":{"id":"byName","options":"Apps"},"properties":[{"id":"color","value":{"fixedColor":"#629E51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Buffers"},"properties":[{"id":"color","value":{"fixedColor":"#614D93","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cache"},"properties":[{"id":"color","value":{"fixedColor":"#6D1F62","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cached"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Committed"},"properties":[{"id":"color","value":{"fixedColor":"#508642","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Free"},"properties":[{"id":"color","value":{"fixedColor":"#0A437C","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working"},"properties":[{"id":"color","value":{"fixedColor":"#CFFAFF","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Inactive"},"properties":[{"id":"color","value":{"fixedColor":"#584477","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"PageTables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Page_Tables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"RAM_Free"},"properties":[{"id":"color","value":{"fixedColor":"#E0F9D7","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab"},"properties":[{"id":"color","value":{"fixedColor":"#806EB7","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#E0752D","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap - Swap memory usage"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#C15C17","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Free"},"properties":[{"id":"color","value":{"fixedColor":"#2F575E","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Unused"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Unused - Free memory unassigned"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*Hardware Corrupted - *./"},"properties":[{"id":"custom.stacking","value":{"group":false,"mode":"normal"}}]}]},"gridPos":{"h":12,"w":12,"x":12,"y":21},"id":24,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":350},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_MemTotal_bytes{instance=\"$node\",job=\"$job\"} - node_memory_MemFree_bytes{instance=\"$node\",job=\"$job\"} - node_memory_Buffers_bytes{instance=\"$node\",job=\"$job\"} - node_memory_Cached_bytes{instance=\"$node\",job=\"$job\"} - node_memory_Slab_bytes{instance=\"$node\",job=\"$job\"} - node_memory_PageTables_bytes{instance=\"$node\",job=\"$job\"} - node_memory_SwapCached_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"Apps - Memory used by user-space applications","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_PageTables_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"PageTables - Memory used to map between virtual and physical memory addresses","refId":"B","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_SwapCached_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"SwapCache - Memory that keeps track of pages that have been fetched from swap but not yet been modified","refId":"C","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_Slab_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"Slab - Memory used by the kernel to cache data structures for its own use (caches like inode, dentry, etc)","refId":"D","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_Cached_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"Cache - Parked file data (file content) cache","refId":"E","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_Buffers_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"Buffers - Block device (e.g. harddisk) cache","refId":"F","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_MemFree_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"Unused - Free memory unassigned","refId":"G","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(node_memory_SwapTotal_bytes{instance=\"$node\",job=\"$job\"} - node_memory_SwapFree_bytes{instance=\"$node\",job=\"$job\"})","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"Swap - Swap space used","refId":"H","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_HardwareCorrupted_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working","refId":"I","step":240}],"title":"Memory Stack","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"bits out (-) / in (+)","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":40,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"bps"},"overrides":[{"matcher":{"id":"byName","options":"receive_packets_eth0"},"properties":[{"id":"color","value":{"fixedColor":"#7EB26D","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"receive_packets_lo"},"properties":[{"id":"color","value":{"fixedColor":"#E24D42","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"transmit_packets_eth0"},"properties":[{"id":"color","value":{"fixedColor":"#7EB26D","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"transmit_packets_lo"},"properties":[{"id":"color","value":{"fixedColor":"#E24D42","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*Trans.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":12,"w":12,"x":0,"y":33},"id":84,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_network_receive_bytes_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])*8","format":"time_series","intervalFactor":1,"legendFormat":"{{device}} - Receive","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_network_transmit_bytes_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])*8","format":"time_series","intervalFactor":1,"legendFormat":"{{device}} - Transmit","refId":"B","step":240}],"title":"Network Traffic","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"bytes","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":40,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"bytes"},"overrides":[]},"gridPos":{"h":12,"w":12,"x":12,"y":33},"id":156,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_filesystem_size_bytes{instance=\"$node\",job=\"$job\",device!~'rootfs'} - node_filesystem_avail_bytes{instance=\"$node\",job=\"$job\",device!~'rootfs'}","format":"time_series","intervalFactor":1,"legendFormat":"{{mountpoint}}","refId":"A","step":240}],"title":"Disk Space Used","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"IO read (-) / write (+)","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"iops"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*Read.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]},{"matcher":{"id":"byRegexp","options":"/.*sda_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#7EB26D","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#6ED0E0","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EF843C","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E24D42","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#584477","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda2_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#BA43A9","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda3_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F4D598","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E0752D","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#962D82","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#614D93","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#9AC48A","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#65C5DB","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F9934E","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E0F9D7","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#FCEACA","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F9E2D2","mode":"fixed"}}]}]},"gridPos":{"h":12,"w":12,"x":0,"y":45},"id":229,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"single","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_disk_reads_completed_total{instance=\"$node\",job=\"$job\",device=~\"$diskdevices\"}[$__rate_interval])","intervalFactor":4,"legendFormat":"{{device}} - Reads completed","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_disk_writes_completed_total{instance=\"$node\",job=\"$job\",device=~\"$diskdevices\"}[$__rate_interval])","intervalFactor":1,"legendFormat":"{{device}} - Writes completed","refId":"B","step":240}],"title":"Disk IOps","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"bytes read (-) / write (+)","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":40,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"Bps"},"overrides":[{"matcher":{"id":"byName","options":"io time"},"properties":[{"id":"color","value":{"fixedColor":"#890F02","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*read*./"},"properties":[{"id":"custom.transform","value":"negative-Y"}]},{"matcher":{"id":"byRegexp","options":"/.*sda.*/"},"properties":[{"id":"color","value":{"fixedColor":"#7EB26D","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc.*/"},"properties":[{"id":"color","value":{"fixedColor":"#6ED0E0","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EF843C","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E24D42","mode":"fixed"}}]},{"matcher":{"id":"byType","options":"time"},"properties":[{"id":"custom.axisPlacement","value":"hidden"}]}]},"gridPos":{"h":12,"w":12,"x":12,"y":45},"id":42,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_disk_read_bytes_total{instance=\"$node\",job=\"$job\",device=~\"$diskdevices\"}[$__rate_interval])","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"{{device}} - Successfully read bytes","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_disk_written_bytes_total{instance=\"$node\",job=\"$job\",device=~\"$diskdevices\"}[$__rate_interval])","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"{{device}} - Successfully written bytes","refId":"B","step":240}],"title":"I/O Usage Read / Write","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"%util","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":40,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"percentunit"},"overrides":[{"matcher":{"id":"byName","options":"io time"},"properties":[{"id":"color","value":{"fixedColor":"#890F02","mode":"fixed"}}]},{"matcher":{"id":"byType","options":"time"},"properties":[{"id":"custom.axisPlacement","value":"hidden"}]}]},"gridPos":{"h":12,"w":12,"x":0,"y":57},"id":127,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_disk_io_time_seconds_total{instance=\"$node\",job=\"$job\",device=~\"$diskdevices\"} [$__rate_interval])","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"{{device}}","refId":"A","step":240}],"title":"I/O Utilization","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"percentage","axisPlacement":"auto","barAlignment":0,"drawStyle":"bars","fillOpacity":70,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"smooth","lineWidth":2,"pointSize":3,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"mappings":[],"max":1,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"percentunit"},"overrides":[{"matcher":{"id":"byRegexp","options":"/^Guest - /"},"properties":[{"id":"color","value":{"fixedColor":"#5195ce","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/^GuestNice - /"},"properties":[{"id":"color","value":{"fixedColor":"#c15c17","mode":"fixed"}}]}]},"gridPos":{"h":12,"w":12,"x":12,"y":57},"id":319,"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"desc"}},"targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"sum by(instance) (irate(node_cpu_guest_seconds_total{instance=\"$node\",job=\"$job\", mode=\"user\"}[1m])) / on(instance) group_left sum by (instance)((irate(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}[1m])))","hide":false,"legendFormat":"Guest - Time spent running a virtual CPU for a guest operating system","range":true,"refId":"A"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"sum by(instance) (irate(node_cpu_guest_seconds_total{instance=\"$node\",job=\"$job\", mode=\"nice\"}[1m])) / on(instance) group_left sum by (instance)((irate(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}[1m])))","hide":false,"legendFormat":"GuestNice - Time spent running a niced guest (virtual CPU for guest operating system)","range":true,"refId":"B"}],"title":"CPU spent seconds in guests (VMs)","type":"timeseries"}],"targets":[{"datasource":{"type":"prometheus","uid":"000000001"},"refId":"A"}],"title":"CPU / Memory / Net / Disk","type":"row"},{"collapsed":true,"datasource":{"type":"prometheus","uid":"000000001"},"gridPos":{"h":1,"w":24,"x":0,"y":21},"id":266,"panels":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"bytes","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"normal"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"bytes"},"overrides":[{"matcher":{"id":"byName","options":"Apps"},"properties":[{"id":"color","value":{"fixedColor":"#629E51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Buffers"},"properties":[{"id":"color","value":{"fixedColor":"#614D93","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cache"},"properties":[{"id":"color","value":{"fixedColor":"#6D1F62","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cached"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Committed"},"properties":[{"id":"color","value":{"fixedColor":"#508642","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Free"},"properties":[{"id":"color","value":{"fixedColor":"#0A437C","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working"},"properties":[{"id":"color","value":{"fixedColor":"#CFFAFF","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Inactive"},"properties":[{"id":"color","value":{"fixedColor":"#584477","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"PageTables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Page_Tables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"RAM_Free"},"properties":[{"id":"color","value":{"fixedColor":"#E0F9D7","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab"},"properties":[{"id":"color","value":{"fixedColor":"#806EB7","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#E0752D","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#C15C17","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Free"},"properties":[{"id":"color","value":{"fixedColor":"#2F575E","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Unused"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":54},"id":136,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":350},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_Inactive_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"Inactive - Memory which has been less recently used. It is more eligible to be reclaimed for other purposes","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_Active_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"Active - Memory that has been used more recently and usually not reclaimed unless absolutely necessary","refId":"B","step":240}],"title":"Memory Active / Inactive","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"bytes","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"bytes"},"overrides":[{"matcher":{"id":"byName","options":"Apps"},"properties":[{"id":"color","value":{"fixedColor":"#629E51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Buffers"},"properties":[{"id":"color","value":{"fixedColor":"#614D93","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cache"},"properties":[{"id":"color","value":{"fixedColor":"#6D1F62","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cached"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Committed"},"properties":[{"id":"color","value":{"fixedColor":"#508642","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Free"},"properties":[{"id":"color","value":{"fixedColor":"#0A437C","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working"},"properties":[{"id":"color","value":{"fixedColor":"#CFFAFF","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Inactive"},"properties":[{"id":"color","value":{"fixedColor":"#584477","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"PageTables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Page_Tables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"RAM_Free"},"properties":[{"id":"color","value":{"fixedColor":"#E0F9D7","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab"},"properties":[{"id":"color","value":{"fixedColor":"#806EB7","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#E0752D","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#C15C17","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Free"},"properties":[{"id":"color","value":{"fixedColor":"#2F575E","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Unused"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*CommitLimit - *./"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}},{"id":"custom.fillOpacity","value":0}]}]},"gridPos":{"h":10,"w":12,"x":12,"y":54},"id":135,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":350},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_Committed_AS_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"Committed_AS - Amount of memory presently allocated on the system","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_CommitLimit_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"CommitLimit - Amount of memory currently available to be allocated on the system","refId":"B","step":240}],"title":"Memory Committed","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"bytes","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"normal"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"bytes"},"overrides":[{"matcher":{"id":"byName","options":"Apps"},"properties":[{"id":"color","value":{"fixedColor":"#629E51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Buffers"},"properties":[{"id":"color","value":{"fixedColor":"#614D93","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cache"},"properties":[{"id":"color","value":{"fixedColor":"#6D1F62","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cached"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Committed"},"properties":[{"id":"color","value":{"fixedColor":"#508642","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Free"},"properties":[{"id":"color","value":{"fixedColor":"#0A437C","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working"},"properties":[{"id":"color","value":{"fixedColor":"#CFFAFF","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Inactive"},"properties":[{"id":"color","value":{"fixedColor":"#584477","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"PageTables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Page_Tables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"RAM_Free"},"properties":[{"id":"color","value":{"fixedColor":"#E0F9D7","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab"},"properties":[{"id":"color","value":{"fixedColor":"#806EB7","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#E0752D","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#C15C17","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Free"},"properties":[{"id":"color","value":{"fixedColor":"#2F575E","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Unused"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":64},"id":191,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":350},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_Inactive_file_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"Inactive_file - File-backed memory on inactive LRU list","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_Inactive_anon_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"Inactive_anon - Anonymous and swap cache on inactive LRU list, including tmpfs (shmem)","refId":"B","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_Active_file_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"Active_file - File-backed memory on active LRU list","refId":"C","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_Active_anon_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"Active_anon - Anonymous and swap cache on active least-recently-used (LRU) list, including tmpfs","refId":"D","step":240}],"title":"Memory Active / Inactive Detail","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"bytes","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"bytes"},"overrides":[{"matcher":{"id":"byName","options":"Active"},"properties":[{"id":"color","value":{"fixedColor":"#99440A","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Buffers"},"properties":[{"id":"color","value":{"fixedColor":"#58140C","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cache"},"properties":[{"id":"color","value":{"fixedColor":"#6D1F62","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cached"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Committed"},"properties":[{"id":"color","value":{"fixedColor":"#508642","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Dirty"},"properties":[{"id":"color","value":{"fixedColor":"#6ED0E0","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Free"},"properties":[{"id":"color","value":{"fixedColor":"#B7DBAB","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Inactive"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Mapped"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"PageTables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Page_Tables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#C15C17","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total RAM"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total RAM + Swap"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total Swap"},"properties":[{"id":"color","value":{"fixedColor":"#614D93","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"VmallocUsed"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]}]},"gridPos":{"h":10,"w":12,"x":12,"y":64},"id":130,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_Writeback_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"Writeback - Memory which is actively being written back to disk","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_WritebackTmp_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"WritebackTmp - Memory used by FUSE for temporary writeback buffers","refId":"B","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_Dirty_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"Dirty - Memory which is waiting to get written back to the disk","refId":"C","step":240}],"title":"Memory Writeback and Dirty","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"bytes","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"bytes"},"overrides":[{"matcher":{"id":"byName","options":"Apps"},"properties":[{"id":"color","value":{"fixedColor":"#629E51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Buffers"},"properties":[{"id":"color","value":{"fixedColor":"#614D93","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cache"},"properties":[{"id":"color","value":{"fixedColor":"#6D1F62","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cached"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Committed"},"properties":[{"id":"color","value":{"fixedColor":"#508642","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Free"},"properties":[{"id":"color","value":{"fixedColor":"#0A437C","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working"},"properties":[{"id":"color","value":{"fixedColor":"#CFFAFF","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Inactive"},"properties":[{"id":"color","value":{"fixedColor":"#584477","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"PageTables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Page_Tables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"RAM_Free"},"properties":[{"id":"color","value":{"fixedColor":"#E0F9D7","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab"},"properties":[{"id":"color","value":{"fixedColor":"#806EB7","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#E0752D","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#C15C17","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Free"},"properties":[{"id":"color","value":{"fixedColor":"#2F575E","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Unused"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"ShmemHugePages - Memory used by shared memory (shmem) and tmpfs allocated with huge pages"},"properties":[{"id":"custom.fillOpacity","value":0}]},{"matcher":{"id":"byName","options":"ShmemHugePages - Memory used by shared memory (shmem) and tmpfs allocated with huge pages"},"properties":[{"id":"custom.fillOpacity","value":0}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":74},"id":138,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":350},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_Mapped_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"Mapped - Used memory in mapped pages files which have been mapped, such as libraries","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_Shmem_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"Shmem - Used shared memory (shared between several processes, thus including RAM disks)","refId":"B","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_ShmemHugePages_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"ShmemHugePages - Memory used by shared memory (shmem) and tmpfs allocated with huge pages","refId":"C","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_ShmemPmdMapped_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"ShmemPmdMapped - Amount of shared (shmem/tmpfs) memory backed by huge pages","refId":"D","step":240}],"title":"Memory Shared and Mapped","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"bytes","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"normal"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"bytes"},"overrides":[{"matcher":{"id":"byName","options":"Active"},"properties":[{"id":"color","value":{"fixedColor":"#99440A","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Buffers"},"properties":[{"id":"color","value":{"fixedColor":"#58140C","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cache"},"properties":[{"id":"color","value":{"fixedColor":"#6D1F62","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cached"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Committed"},"properties":[{"id":"color","value":{"fixedColor":"#508642","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Dirty"},"properties":[{"id":"color","value":{"fixedColor":"#6ED0E0","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Free"},"properties":[{"id":"color","value":{"fixedColor":"#B7DBAB","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Inactive"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Mapped"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"PageTables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Page_Tables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#C15C17","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total RAM"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total RAM + Swap"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total Swap"},"properties":[{"id":"color","value":{"fixedColor":"#614D93","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"VmallocUsed"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]}]},"gridPos":{"h":10,"w":12,"x":12,"y":74},"id":131,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_SUnreclaim_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"SUnreclaim - Part of Slab, that cannot be reclaimed on memory pressure","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_SReclaimable_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"SReclaimable - Part of Slab, that might be reclaimed, such as caches","refId":"B","step":240}],"title":"Memory Slab","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"bytes","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"bytes"},"overrides":[{"matcher":{"id":"byName","options":"Active"},"properties":[{"id":"color","value":{"fixedColor":"#99440A","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Buffers"},"properties":[{"id":"color","value":{"fixedColor":"#58140C","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cache"},"properties":[{"id":"color","value":{"fixedColor":"#6D1F62","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cached"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Committed"},"properties":[{"id":"color","value":{"fixedColor":"#508642","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Dirty"},"properties":[{"id":"color","value":{"fixedColor":"#6ED0E0","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Free"},"properties":[{"id":"color","value":{"fixedColor":"#B7DBAB","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Inactive"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Mapped"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"PageTables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Page_Tables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#C15C17","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total RAM"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total RAM + Swap"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"VmallocUsed"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":84},"id":70,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_VmallocChunk_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"VmallocChunk - Largest contiguous block of vmalloc area which is free","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_VmallocTotal_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"VmallocTotal - Total size of vmalloc memory area","refId":"B","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_VmallocUsed_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"VmallocUsed - Amount of vmalloc area which is used","refId":"C","step":240}],"title":"Memory Vmalloc","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"bytes","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"bytes"},"overrides":[{"matcher":{"id":"byName","options":"Apps"},"properties":[{"id":"color","value":{"fixedColor":"#629E51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Buffers"},"properties":[{"id":"color","value":{"fixedColor":"#614D93","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cache"},"properties":[{"id":"color","value":{"fixedColor":"#6D1F62","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cached"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Committed"},"properties":[{"id":"color","value":{"fixedColor":"#508642","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Free"},"properties":[{"id":"color","value":{"fixedColor":"#0A437C","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working"},"properties":[{"id":"color","value":{"fixedColor":"#CFFAFF","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Inactive"},"properties":[{"id":"color","value":{"fixedColor":"#584477","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"PageTables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Page_Tables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"RAM_Free"},"properties":[{"id":"color","value":{"fixedColor":"#E0F9D7","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab"},"properties":[{"id":"color","value":{"fixedColor":"#806EB7","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#E0752D","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#C15C17","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Free"},"properties":[{"id":"color","value":{"fixedColor":"#2F575E","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Unused"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]}]},"gridPos":{"h":10,"w":12,"x":12,"y":84},"id":159,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":350},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_Bounce_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"Bounce - Memory used for block device bounce buffers","refId":"A","step":240}],"title":"Memory Bounce","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"bytes","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"bytes"},"overrides":[{"matcher":{"id":"byName","options":"Active"},"properties":[{"id":"color","value":{"fixedColor":"#99440A","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Buffers"},"properties":[{"id":"color","value":{"fixedColor":"#58140C","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cache"},"properties":[{"id":"color","value":{"fixedColor":"#6D1F62","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cached"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Committed"},"properties":[{"id":"color","value":{"fixedColor":"#508642","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Dirty"},"properties":[{"id":"color","value":{"fixedColor":"#6ED0E0","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Free"},"properties":[{"id":"color","value":{"fixedColor":"#B7DBAB","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Inactive"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Mapped"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"PageTables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Page_Tables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#C15C17","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total RAM"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total RAM + Swap"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"VmallocUsed"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*Inactive *./"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":94},"id":129,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_AnonHugePages_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"AnonHugePages - Memory in anonymous huge pages","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_AnonPages_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"AnonPages - Memory in user pages not backed by files","refId":"B","step":240}],"title":"Memory Anonymous","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"bytes","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"bytes"},"overrides":[{"matcher":{"id":"byName","options":"Apps"},"properties":[{"id":"color","value":{"fixedColor":"#629E51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Buffers"},"properties":[{"id":"color","value":{"fixedColor":"#614D93","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cache"},"properties":[{"id":"color","value":{"fixedColor":"#6D1F62","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cached"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Committed"},"properties":[{"id":"color","value":{"fixedColor":"#508642","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Free"},"properties":[{"id":"color","value":{"fixedColor":"#0A437C","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working"},"properties":[{"id":"color","value":{"fixedColor":"#CFFAFF","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Inactive"},"properties":[{"id":"color","value":{"fixedColor":"#584477","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"PageTables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Page_Tables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"RAM_Free"},"properties":[{"id":"color","value":{"fixedColor":"#E0F9D7","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab"},"properties":[{"id":"color","value":{"fixedColor":"#806EB7","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#E0752D","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#C15C17","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Free"},"properties":[{"id":"color","value":{"fixedColor":"#2F575E","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Unused"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]}]},"gridPos":{"h":10,"w":12,"x":12,"y":94},"id":160,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":350},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_KernelStack_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"KernelStack - Kernel memory stack. This is not reclaimable","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_Percpu_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"PerCPU - Per CPU memory allocated dynamically by loadable modules","refId":"B","step":240}],"title":"Memory Kernel / CPU","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"pages","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[{"matcher":{"id":"byName","options":"Active"},"properties":[{"id":"color","value":{"fixedColor":"#99440A","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Buffers"},"properties":[{"id":"color","value":{"fixedColor":"#58140C","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cache"},"properties":[{"id":"color","value":{"fixedColor":"#6D1F62","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cached"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Committed"},"properties":[{"id":"color","value":{"fixedColor":"#508642","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Dirty"},"properties":[{"id":"color","value":{"fixedColor":"#6ED0E0","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Free"},"properties":[{"id":"color","value":{"fixedColor":"#B7DBAB","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Inactive"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Mapped"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"PageTables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Page_Tables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#C15C17","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total RAM"},"properties":[{"id":"color","value":{"fixedColor":"#806EB7","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total RAM + Swap"},"properties":[{"id":"color","value":{"fixedColor":"#806EB7","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"VmallocUsed"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":104},"id":140,"links":[],"options":{"legend":{"calcs":["lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_HugePages_Free{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"HugePages_Free - Huge pages in the pool that are not yet allocated","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_HugePages_Rsvd{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"HugePages_Rsvd - Huge pages for which a commitment to allocate from the pool has been made, but no allocation has yet been made","refId":"B","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_HugePages_Surp{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"HugePages_Surp - Huge pages in the pool above the value in /proc/sys/vm/nr_hugepages","refId":"C","step":240}],"title":"Memory HugePages Counter","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"bytes","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"bytes"},"overrides":[{"matcher":{"id":"byName","options":"Active"},"properties":[{"id":"color","value":{"fixedColor":"#99440A","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Buffers"},"properties":[{"id":"color","value":{"fixedColor":"#58140C","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cache"},"properties":[{"id":"color","value":{"fixedColor":"#6D1F62","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cached"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Committed"},"properties":[{"id":"color","value":{"fixedColor":"#508642","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Dirty"},"properties":[{"id":"color","value":{"fixedColor":"#6ED0E0","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Free"},"properties":[{"id":"color","value":{"fixedColor":"#B7DBAB","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Inactive"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Mapped"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"PageTables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Page_Tables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#C15C17","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total RAM"},"properties":[{"id":"color","value":{"fixedColor":"#806EB7","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total RAM + Swap"},"properties":[{"id":"color","value":{"fixedColor":"#806EB7","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"VmallocUsed"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]}]},"gridPos":{"h":10,"w":12,"x":12,"y":104},"id":71,"links":[],"options":{"legend":{"calcs":["lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_HugePages_Total{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"HugePages - Total size of the pool of huge pages","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_Hugepagesize_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"Hugepagesize - Huge Page size","refId":"B","step":240}],"title":"Memory HugePages Size","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"bytes","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"bytes"},"overrides":[{"matcher":{"id":"byName","options":"Active"},"properties":[{"id":"color","value":{"fixedColor":"#99440A","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Buffers"},"properties":[{"id":"color","value":{"fixedColor":"#58140C","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cache"},"properties":[{"id":"color","value":{"fixedColor":"#6D1F62","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cached"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Committed"},"properties":[{"id":"color","value":{"fixedColor":"#508642","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Dirty"},"properties":[{"id":"color","value":{"fixedColor":"#6ED0E0","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Free"},"properties":[{"id":"color","value":{"fixedColor":"#B7DBAB","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Inactive"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Mapped"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"PageTables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Page_Tables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#C15C17","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total RAM"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total RAM + Swap"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"VmallocUsed"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":114},"id":128,"links":[],"options":{"legend":{"calcs":["mean","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_DirectMap1G_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"DirectMap1G - Amount of pages mapped as this size","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_DirectMap2M_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"DirectMap2M - Amount of pages mapped as this size","refId":"B","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_DirectMap4k_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"DirectMap4K - Amount of pages mapped as this size","refId":"C","step":240}],"title":"Memory DirectMap","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"bytes","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"bytes"},"overrides":[{"matcher":{"id":"byName","options":"Apps"},"properties":[{"id":"color","value":{"fixedColor":"#629E51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Buffers"},"properties":[{"id":"color","value":{"fixedColor":"#614D93","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cache"},"properties":[{"id":"color","value":{"fixedColor":"#6D1F62","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cached"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Committed"},"properties":[{"id":"color","value":{"fixedColor":"#508642","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Free"},"properties":[{"id":"color","value":{"fixedColor":"#0A437C","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working"},"properties":[{"id":"color","value":{"fixedColor":"#CFFAFF","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Inactive"},"properties":[{"id":"color","value":{"fixedColor":"#584477","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"PageTables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Page_Tables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"RAM_Free"},"properties":[{"id":"color","value":{"fixedColor":"#E0F9D7","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab"},"properties":[{"id":"color","value":{"fixedColor":"#806EB7","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#E0752D","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#C15C17","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Free"},"properties":[{"id":"color","value":{"fixedColor":"#2F575E","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Unused"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]}]},"gridPos":{"h":10,"w":12,"x":12,"y":114},"id":137,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":350},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_Unevictable_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"Unevictable - Amount of unevictable memory that can't be swapped out for a variety of reasons","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_Mlocked_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"MLocked - Size of pages locked to memory using the mlock() system call","refId":"B","step":240}],"title":"Memory Unevictable and MLocked","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"bytes","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"bytes"},"overrides":[{"matcher":{"id":"byName","options":"Active"},"properties":[{"id":"color","value":{"fixedColor":"#99440A","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Buffers"},"properties":[{"id":"color","value":{"fixedColor":"#58140C","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cache"},"properties":[{"id":"color","value":{"fixedColor":"#6D1F62","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cached"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Committed"},"properties":[{"id":"color","value":{"fixedColor":"#508642","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Dirty"},"properties":[{"id":"color","value":{"fixedColor":"#6ED0E0","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Free"},"properties":[{"id":"color","value":{"fixedColor":"#B7DBAB","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Inactive"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Mapped"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"PageTables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Page_Tables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#C15C17","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total RAM"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total RAM + Swap"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total Swap"},"properties":[{"id":"color","value":{"fixedColor":"#614D93","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"VmallocUsed"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":124},"id":132,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_NFS_Unstable_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"NFS Unstable - Memory in NFS pages sent to the server, but not yet committed to the storage","refId":"A","step":240}],"title":"Memory NFS","type":"timeseries"}],"targets":[{"datasource":{"type":"prometheus","uid":"000000001"},"refId":"A"}],"title":"Memory Meminfo","type":"row"},{"collapsed":true,"datasource":{"type":"prometheus","uid":"000000001"},"gridPos":{"h":1,"w":24,"x":0,"y":22},"id":267,"panels":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"pages out (-) / in (+)","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*out/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":41},"id":176,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_vmstat_pgpgin{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","intervalFactor":1,"legendFormat":"Pagesin - Page in operations","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_vmstat_pgpgout{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","intervalFactor":1,"legendFormat":"Pagesout - Page out operations","refId":"B","step":240}],"title":"Memory Pages In / Out","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"pages out (-) / in (+)","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*out/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":10,"w":12,"x":12,"y":41},"id":22,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_vmstat_pswpin{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","intervalFactor":1,"legendFormat":"Pswpin - Pages swapped in","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_vmstat_pswpout{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","intervalFactor":1,"legendFormat":"Pswpout - Pages swapped out","refId":"B","step":240}],"title":"Memory Pages Swap In / Out","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"faults","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"normal"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[{"matcher":{"id":"byName","options":"Apps"},"properties":[{"id":"color","value":{"fixedColor":"#629E51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Buffers"},"properties":[{"id":"color","value":{"fixedColor":"#614D93","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cache"},"properties":[{"id":"color","value":{"fixedColor":"#6D1F62","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cached"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Committed"},"properties":[{"id":"color","value":{"fixedColor":"#508642","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Free"},"properties":[{"id":"color","value":{"fixedColor":"#0A437C","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working"},"properties":[{"id":"color","value":{"fixedColor":"#CFFAFF","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Inactive"},"properties":[{"id":"color","value":{"fixedColor":"#584477","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"PageTables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Page_Tables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"RAM_Free"},"properties":[{"id":"color","value":{"fixedColor":"#E0F9D7","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab"},"properties":[{"id":"color","value":{"fixedColor":"#806EB7","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#E0752D","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#C15C17","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Free"},"properties":[{"id":"color","value":{"fixedColor":"#2F575E","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Unused"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Pgfault - Page major and minor fault operations"},"properties":[{"id":"custom.fillOpacity","value":0},{"id":"custom.stacking","value":{"group":false,"mode":"normal"}}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":51},"id":175,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":350},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_vmstat_pgfault{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","intervalFactor":1,"legendFormat":"Pgfault - Page major and minor fault operations","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_vmstat_pgmajfault{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","intervalFactor":1,"legendFormat":"Pgmajfault - Major page fault operations","refId":"B","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_vmstat_pgfault{instance=\"$node\",job=\"$job\"}[$__rate_interval]) - irate(node_vmstat_pgmajfault{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","intervalFactor":1,"legendFormat":"Pgminfault - Minor page fault operations","refId":"C","step":240}],"title":"Memory Page Faults","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[{"matcher":{"id":"byName","options":"Active"},"properties":[{"id":"color","value":{"fixedColor":"#99440A","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Buffers"},"properties":[{"id":"color","value":{"fixedColor":"#58140C","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cache"},"properties":[{"id":"color","value":{"fixedColor":"#6D1F62","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cached"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Committed"},"properties":[{"id":"color","value":{"fixedColor":"#508642","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Dirty"},"properties":[{"id":"color","value":{"fixedColor":"#6ED0E0","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Free"},"properties":[{"id":"color","value":{"fixedColor":"#B7DBAB","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Inactive"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Mapped"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"PageTables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Page_Tables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#C15C17","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total RAM"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total RAM + Swap"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total Swap"},"properties":[{"id":"color","value":{"fixedColor":"#614D93","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"VmallocUsed"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]}]},"gridPos":{"h":10,"w":12,"x":12,"y":51},"id":307,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_vmstat_oom_kill{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"oom killer invocations ","refId":"A","step":240}],"title":"OOM Killer","type":"timeseries"}],"targets":[{"datasource":{"type":"prometheus","uid":"000000001"},"refId":"A"}],"title":"Memory Vmstat","type":"row"},{"collapsed":true,"datasource":{"type":"prometheus","uid":"000000001"},"gridPos":{"h":1,"w":24,"x":0,"y":23},"id":293,"panels":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"seconds","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"s"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*Variation*./"},"properties":[{"id":"color","value":{"fixedColor":"#890F02","mode":"fixed"}}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":24},"id":260,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_timex_estimated_error_seconds{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"Estimated error in seconds","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_timex_offset_seconds{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"Time offset in between local system and reference clock","refId":"B","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_timex_maxerror_seconds{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"Maximum error in seconds","refId":"C","step":240}],"title":"Time Synchronized Drift","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":12,"y":24},"id":291,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_timex_loop_time_constant{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"Phase-locked loop time adjust","refId":"A","step":240}],"title":"Time PLL Adjust","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*Variation*./"},"properties":[{"id":"color","value":{"fixedColor":"#890F02","mode":"fixed"}}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":34},"id":168,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_timex_sync_status{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"Is clock synchronized to a reliable server (1 = yes, 0 = no)","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_timex_frequency_adjustment_ratio{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"Local clock frequency adjustment","refId":"B","step":240}],"title":"Time Synchronized Status","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"seconds","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"s"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":12,"y":34},"id":294,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_timex_tick_seconds{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"Seconds between clock ticks","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_timex_tai_offset_seconds{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"International Atomic Time (TAI) offset","refId":"B","step":240}],"title":"Time Misc","type":"timeseries"}],"targets":[{"datasource":{"type":"prometheus","uid":"000000001"},"refId":"A"}],"title":"System Timesync","type":"row"},{"collapsed":true,"datasource":{"type":"prometheus","uid":"000000001"},"gridPos":{"h":1,"w":24,"x":0,"y":24},"id":312,"panels":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":0,"y":73},"id":62,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_procs_blocked{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"Processes blocked waiting for I/O to complete","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_procs_running{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"Processes in runnable state","refId":"B","step":240}],"title":"Processes Status","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"Enable with --collector.processes argument on node-exporter","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"normal"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":12,"y":73},"id":315,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_processes_state{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"{{ state }}","refId":"A","step":240}],"title":"Processes State","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"forks / sec","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":0,"y":83},"id":148,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_forks_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"Processes forks second","refId":"A","step":240}],"title":"Processes Forks","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"bytes","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"decbytes"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*Max.*/"},"properties":[{"id":"custom.fillOpacity","value":0}]}]},"gridPos":{"h":10,"w":12,"x":12,"y":83},"id":149,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(process_virtual_memory_bytes{instance=\"$node\",job=\"$job\"}[$__rate_interval])","hide":false,"interval":"","intervalFactor":1,"legendFormat":"Processes virtual memory size in bytes","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"process_resident_memory_max_bytes{instance=\"$node\",job=\"$job\"}","hide":false,"interval":"","intervalFactor":1,"legendFormat":"Maximum amount of virtual memory available in bytes","refId":"B","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(process_virtual_memory_bytes{instance=\"$node\",job=\"$job\"}[$__rate_interval])","hide":false,"interval":"","intervalFactor":1,"legendFormat":"Processes virtual memory size in bytes","refId":"C","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(process_virtual_memory_max_bytes{instance=\"$node\",job=\"$job\"}[$__rate_interval])","hide":false,"interval":"","intervalFactor":1,"legendFormat":"Maximum amount of virtual memory available in bytes","refId":"D","step":240}],"title":"Processes Memory","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"Enable with --collector.processes argument on node-exporter","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[{"matcher":{"id":"byName","options":"PIDs limit"},"properties":[{"id":"color","value":{"fixedColor":"#F2495C","mode":"fixed"}},{"id":"custom.fillOpacity","value":0}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":93},"id":313,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_processes_pids{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"Number of PIDs","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_processes_max_processes{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"PIDs limit","refId":"B","step":240}],"title":"PIDs Number and Limit","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"seconds","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"s"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*waiting.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":10,"w":12,"x":12,"y":93},"id":305,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_schedstat_running_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"CPU {{ cpu }} - seconds spent running a process","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_schedstat_waiting_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"CPU {{ cpu }} - seconds spent by processing waiting for this CPU","refId":"B","step":240}],"title":"Process schedule stats Running / Waiting","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"Enable with --collector.processes argument on node-exporter","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[{"matcher":{"id":"byName","options":"Threads limit"},"properties":[{"id":"color","value":{"fixedColor":"#F2495C","mode":"fixed"}},{"id":"custom.fillOpacity","value":0}]}]},"gridPos":{"h":10,"w":12,"x":12,"y":103},"id":314,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_processes_threads{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"Allocated threads","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_processes_max_threads{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"Threads limit","refId":"B","step":240}],"title":"Threads Number and Limit","type":"timeseries"}],"targets":[{"datasource":{"type":"prometheus","uid":"000000001"},"refId":"A"}],"title":"System Processes","type":"row"},{"collapsed":true,"datasource":{"type":"prometheus","uid":"000000001"},"gridPos":{"h":1,"w":24,"x":0,"y":25},"id":269,"panels":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":0,"y":26},"id":8,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_context_switches_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","intervalFactor":1,"legendFormat":"Context switches","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_intr_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"Interrupts","refId":"B","step":240}],"title":"Context Switches / Interrupts","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":12,"y":26},"id":7,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_load1{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":4,"legendFormat":"Load 1m","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_load5{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":4,"legendFormat":"Load 5m","refId":"B","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_load15{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":4,"legendFormat":"Load 15m","refId":"C","step":240}],"title":"System Load","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"hertz"},"overrides":[{"matcher":{"id":"byName","options":"Max"},"properties":[{"id":"custom.lineStyle","value":{"dash":[10,10],"fill":"dash"}},{"id":"color","value":{"fixedColor":"blue","mode":"fixed"}},{"id":"custom.fillOpacity","value":10},{"id":"custom.hideFrom","value":{"legend":true,"tooltip":false,"viz":false}},{"id":"custom.fillBelowTo","value":"Min"}]},{"matcher":{"id":"byName","options":"Min"},"properties":[{"id":"custom.lineStyle","value":{"dash":[10,10],"fill":"dash"}},{"id":"color","value":{"fixedColor":"blue","mode":"fixed"}},{"id":"custom.hideFrom","value":{"legend":true,"tooltip":false,"viz":false}}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":36},"id":321,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"node_cpu_scaling_frequency_hertz{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"CPU {{ cpu }}","range":true,"refId":"B","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"avg(node_cpu_scaling_frequency_max_hertz{instance=\"$node\",job=\"$job\"})","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"Max","range":true,"refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"avg(node_cpu_scaling_frequency_min_hertz{instance=\"$node\",job=\"$job\"})","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"Min","range":true,"refId":"C","step":240}],"title":"CPU Frequency Scaling","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"https://docs.kernel.org/accounting/psi.html","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":10,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"percentunit"},"overrides":[{"matcher":{"id":"byName","options":"Memory some"},"properties":[{"id":"color","value":{"fixedColor":"dark-red","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Memory full"},"properties":[{"id":"color","value":{"fixedColor":"light-red","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"I/O some"},"properties":[{"id":"color","value":{"fixedColor":"dark-blue","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"I/O full"},"properties":[{"id":"color","value":{"fixedColor":"light-blue","mode":"fixed"}}]}]},"gridPos":{"h":10,"w":12,"x":12,"y":36},"id":322,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"rate(node_pressure_cpu_waiting_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","intervalFactor":1,"legendFormat":"CPU some","range":true,"refId":"CPU some","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"rate(node_pressure_memory_waiting_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"Memory some","range":true,"refId":"Memory some","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"rate(node_pressure_memory_stalled_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"Memory full","range":true,"refId":"Memory full","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"rate(node_pressure_io_waiting_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"I/O some","range":true,"refId":"I/O some","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"rate(node_pressure_io_stalled_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"I/O full","range":true,"refId":"I/O full","step":240}],"title":"Pressure Stall Information","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"Enable with --collector.interrupts argument on node-exporter","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"short"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*Critical*./"},"properties":[{"id":"color","value":{"fixedColor":"#E24D42","mode":"fixed"}},{"id":"custom.fillOpacity","value":0}]},{"matcher":{"id":"byRegexp","options":"/.*Max*./"},"properties":[{"id":"color","value":{"fixedColor":"#EF843C","mode":"fixed"}},{"id":"custom.fillOpacity","value":0}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":46},"id":259,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_interrupts_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"{{ type }} - {{ info }}","refId":"A","step":240}],"title":"Interrupts Detail","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":12,"y":46},"id":306,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_schedstat_timeslices_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"CPU {{ cpu }}","refId":"A","step":240}],"title":"Schedule timeslices executed by each cpu","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":0,"y":56},"id":151,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_entropy_available_bits{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"Entropy available to random number generators","refId":"A","step":240}],"title":"Entropy","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"seconds","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"s"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":12,"y":56},"id":308,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(process_cpu_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"Time spent","refId":"A","step":240}],"title":"CPU time spent in user and system contexts","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"short"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*Max*./"},"properties":[{"id":"color","value":{"fixedColor":"#890F02","mode":"fixed"}},{"id":"custom.fillOpacity","value":0}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":66},"id":64,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"process_max_fds{instance=\"$node\",job=\"$job\"}","interval":"","intervalFactor":1,"legendFormat":"Maximum open file descriptors","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"process_open_fds{instance=\"$node\",job=\"$job\"}","interval":"","intervalFactor":1,"legendFormat":"Open file descriptors","refId":"B","step":240}],"title":"File Descriptors","type":"timeseries"}],"targets":[{"datasource":{"type":"prometheus","uid":"000000001"},"refId":"A"}],"title":"System Misc","type":"row"},{"collapsed":true,"datasource":{"type":"prometheus","uid":"000000001"},"gridPos":{"h":1,"w":24,"x":0,"y":26},"id":304,"panels":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"temperature","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"celsius"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*Critical*./"},"properties":[{"id":"color","value":{"fixedColor":"#E24D42","mode":"fixed"}},{"id":"custom.fillOpacity","value":0}]},{"matcher":{"id":"byRegexp","options":"/.*Max*./"},"properties":[{"id":"color","value":{"fixedColor":"#EF843C","mode":"fixed"}},{"id":"custom.fillOpacity","value":0}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":59},"id":158,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_hwmon_temp_celsius{instance=\"$node\",job=\"$job\"} * on(chip) group_left(chip_name) node_hwmon_chip_names{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"{{ chip_name }} {{ sensor }} temp","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_hwmon_temp_crit_alarm_celsius{instance=\"$node\",job=\"$job\"} * on(chip) group_left(chip_name) node_hwmon_chip_names{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":true,"interval":"","intervalFactor":1,"legendFormat":"{{ chip_name }} {{ sensor }} Critical Alarm","refId":"B","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_hwmon_temp_crit_celsius{instance=\"$node\",job=\"$job\"} * on(chip) group_left(chip_name) node_hwmon_chip_names{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"{{ chip_name }} {{ sensor }} Critical","refId":"C","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_hwmon_temp_crit_hyst_celsius{instance=\"$node\",job=\"$job\"} * on(chip) group_left(chip_name) node_hwmon_chip_names{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":true,"interval":"","intervalFactor":1,"legendFormat":"{{ chip_name }} {{ sensor }} Critical Historical","refId":"D","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_hwmon_temp_max_celsius{instance=\"$node\",job=\"$job\"} * on(chip) group_left(chip_name) node_hwmon_chip_names{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":true,"interval":"","intervalFactor":1,"legendFormat":"{{ chip_name }} {{ sensor }} Max","refId":"E","step":240}],"title":"Hardware temperature monitor","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*Max*./"},"properties":[{"id":"color","value":{"fixedColor":"#EF843C","mode":"fixed"}},{"id":"custom.fillOpacity","value":0}]}]},"gridPos":{"h":10,"w":12,"x":12,"y":59},"id":300,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_cooling_device_cur_state{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"Current {{ name }} in {{ type }}","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_cooling_device_max_state{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"Max {{ name }} in {{ type }}","refId":"B","step":240}],"title":"Throttle cooling device","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":0,"y":69},"id":302,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_power_supply_online{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"{{ power_supply }} online","refId":"A","step":240}],"title":"Power supply","type":"timeseries"}],"targets":[{"datasource":{"type":"prometheus","uid":"000000001"},"refId":"A"}],"title":"Hardware Misc","type":"row"},{"collapsed":true,"datasource":{"type":"prometheus","uid":"000000001"},"gridPos":{"h":1,"w":24,"x":0,"y":27},"id":296,"panels":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":0,"y":46},"id":297,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_systemd_socket_accepted_connections_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"{{ name }} Connections","refId":"A","step":240}],"title":"Systemd Sockets","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"normal"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[{"matcher":{"id":"byName","options":"Failed"},"properties":[{"id":"color","value":{"fixedColor":"#F2495C","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Inactive"},"properties":[{"id":"color","value":{"fixedColor":"#FF9830","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Active"},"properties":[{"id":"color","value":{"fixedColor":"#73BF69","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Deactivating"},"properties":[{"id":"color","value":{"fixedColor":"#FFCB7D","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Activating"},"properties":[{"id":"color","value":{"fixedColor":"#C8F2C2","mode":"fixed"}}]}]},"gridPos":{"h":10,"w":12,"x":12,"y":46},"id":298,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_systemd_units{instance=\"$node\",job=\"$job\",state=\"activating\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"Activating","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_systemd_units{instance=\"$node\",job=\"$job\",state=\"active\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"Active","refId":"B","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_systemd_units{instance=\"$node\",job=\"$job\",state=\"deactivating\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"Deactivating","refId":"C","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_systemd_units{instance=\"$node\",job=\"$job\",state=\"failed\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"Failed","refId":"D","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_systemd_units{instance=\"$node\",job=\"$job\",state=\"inactive\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"Inactive","refId":"E","step":240}],"title":"Systemd Units State","type":"timeseries"}],"targets":[{"datasource":{"type":"prometheus","uid":"000000001"},"refId":"A"}],"title":"Systemd","type":"row"},{"collapsed":true,"datasource":{"type":"prometheus","uid":"000000001"},"gridPos":{"h":1,"w":24,"x":0,"y":28},"id":270,"panels":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"The number (after merges) of I/O requests completed per second for the device","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"IO read (-) / write (+)","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"iops"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*Read.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]},{"matcher":{"id":"byRegexp","options":"/.*sda_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#7EB26D","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#6ED0E0","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EF843C","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E24D42","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#584477","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda2_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#BA43A9","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda3_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F4D598","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E0752D","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#962D82","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#614D93","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#9AC48A","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#65C5DB","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F9934E","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E0F9D7","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#FCEACA","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F9E2D2","mode":"fixed"}}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":47},"id":9,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"single","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_disk_reads_completed_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","intervalFactor":4,"legendFormat":"{{device}} - Reads completed","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_disk_writes_completed_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","intervalFactor":1,"legendFormat":"{{device}} - Writes completed","refId":"B","step":240}],"title":"Disk IOps Completed","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"The number of bytes read from or written to the device per second","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"bytes read (-) / write (+)","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"Bps"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*Read.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]},{"matcher":{"id":"byRegexp","options":"/.*sda_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#7EB26D","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#6ED0E0","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EF843C","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E24D42","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#584477","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda2_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#BA43A9","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda3_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F4D598","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E0752D","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#962D82","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#614D93","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#9AC48A","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#65C5DB","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F9934E","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E0F9D7","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#FCEACA","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F9E2D2","mode":"fixed"}}]}]},"gridPos":{"h":10,"w":12,"x":12,"y":47},"id":33,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"single","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_disk_read_bytes_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","intervalFactor":4,"legendFormat":"{{device}} - Read bytes","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_disk_written_bytes_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","intervalFactor":1,"legendFormat":"{{device}} - Written bytes","refId":"B","step":240}],"title":"Disk R/W Data","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"The average time for requests issued to the device to be served. This includes the time spent by the requests in queue and the time spent servicing them.","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"time. read (-) / write (+)","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":30,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"s"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*Read.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]},{"matcher":{"id":"byRegexp","options":"/.*sda_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#7EB26D","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#6ED0E0","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EF843C","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E24D42","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#584477","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda2_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#BA43A9","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda3_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F4D598","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E0752D","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#962D82","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#614D93","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#9AC48A","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#65C5DB","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F9934E","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E0F9D7","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#FCEACA","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F9E2D2","mode":"fixed"}}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":57},"id":37,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"single","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_disk_read_time_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval]) / irate(node_disk_reads_completed_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","hide":false,"interval":"","intervalFactor":4,"legendFormat":"{{device}} - Read wait time avg","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_disk_write_time_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval]) / irate(node_disk_writes_completed_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","hide":false,"interval":"","intervalFactor":1,"legendFormat":"{{device}} - Write wait time avg","refId":"B","step":240}],"title":"Disk Average Wait Time","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"The average queue length of the requests that were issued to the device","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"aqu-sz","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"none"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*sda_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#7EB26D","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#6ED0E0","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EF843C","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E24D42","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#584477","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda2_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#BA43A9","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda3_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F4D598","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E0752D","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#962D82","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#614D93","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#9AC48A","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#65C5DB","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F9934E","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E0F9D7","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#FCEACA","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F9E2D2","mode":"fixed"}}]}]},"gridPos":{"h":10,"w":12,"x":12,"y":57},"id":35,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"single","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_disk_io_time_weighted_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","interval":"","intervalFactor":4,"legendFormat":"{{device}}","refId":"A","step":240}],"title":"Average Queue Size","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"The number of read and write requests merged per second that were queued to the device","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"I/Os","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"iops"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*Read.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]},{"matcher":{"id":"byRegexp","options":"/.*sda_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#7EB26D","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#6ED0E0","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EF843C","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E24D42","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#584477","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda2_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#BA43A9","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda3_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F4D598","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E0752D","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#962D82","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#614D93","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#9AC48A","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#65C5DB","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F9934E","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E0F9D7","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#FCEACA","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F9E2D2","mode":"fixed"}}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":67},"id":133,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"single","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_disk_reads_merged_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","intervalFactor":1,"legendFormat":"{{device}} - Read merged","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_disk_writes_merged_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","intervalFactor":1,"legendFormat":"{{device}} - Write merged","refId":"B","step":240}],"title":"Disk R/W Merged","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"Percentage of elapsed time during which I/O requests were issued to the device (bandwidth utilization for the device). Device saturation occurs when this value is close to 100% for devices serving requests serially. But for devices serving requests in parallel, such as RAID arrays and modern SSDs, this number does not reflect their performance limits.","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"%util","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":30,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"percentunit"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*sda_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#7EB26D","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#6ED0E0","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EF843C","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E24D42","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#584477","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda2_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#BA43A9","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda3_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F4D598","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E0752D","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#962D82","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#614D93","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#9AC48A","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#65C5DB","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F9934E","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E0F9D7","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#FCEACA","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F9E2D2","mode":"fixed"}}]}]},"gridPos":{"h":10,"w":12,"x":12,"y":67},"id":36,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"single","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_disk_io_time_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","interval":"","intervalFactor":4,"legendFormat":"{{device}} - IO","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_disk_discard_time_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","interval":"","intervalFactor":4,"legendFormat":"{{device}} - discard","refId":"B","step":240}],"title":"Time Spent Doing I/Os","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"The number of outstanding requests at the instant the sample was taken. Incremented as requests are given to appropriate struct request_queue and decremented as they finish.","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"Outstanding req.","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"none"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*sda_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#7EB26D","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#6ED0E0","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EF843C","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E24D42","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#584477","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda2_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#BA43A9","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda3_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F4D598","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E0752D","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#962D82","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#614D93","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#9AC48A","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#65C5DB","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F9934E","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E0F9D7","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#FCEACA","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F9E2D2","mode":"fixed"}}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":77},"id":34,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"single","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_disk_io_now{instance=\"$node\",job=\"$job\"}","interval":"","intervalFactor":4,"legendFormat":"{{device}} - IO now","refId":"A","step":240}],"title":"Instantaneous Queue Size","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"IOs","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"iops"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*sda_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#7EB26D","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#6ED0E0","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EF843C","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E24D42","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#584477","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda2_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#BA43A9","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda3_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F4D598","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E0752D","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#962D82","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#614D93","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#9AC48A","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#65C5DB","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F9934E","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E0F9D7","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#FCEACA","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F9E2D2","mode":"fixed"}}]}]},"gridPos":{"h":10,"w":12,"x":12,"y":77},"id":301,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"single","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_disk_discards_completed_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","interval":"","intervalFactor":4,"legendFormat":"{{device}} - Discards completed","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_disk_discards_merged_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","interval":"","intervalFactor":1,"legendFormat":"{{device}} - Discards merged","refId":"B","step":240}],"title":"Disk IOps Discards completed / merged","type":"timeseries"}],"targets":[{"datasource":{"type":"prometheus","uid":"000000001"},"refId":"A"}],"title":"Storage Disk","type":"row"},{"collapsed":true,"datasource":{"type":"prometheus","uid":"000000001"},"gridPos":{"h":1,"w":24,"x":0,"y":29},"id":271,"panels":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"bytes","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"bytes"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":0,"y":62},"id":43,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_filesystem_avail_bytes{instance=\"$node\",job=\"$job\",device!~'rootfs'}","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"{{mountpoint}} - Available","metric":"","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_filesystem_free_bytes{instance=\"$node\",job=\"$job\",device!~'rootfs'}","format":"time_series","hide":true,"intervalFactor":1,"legendFormat":"{{mountpoint}} - Free","refId":"B","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_filesystem_size_bytes{instance=\"$node\",job=\"$job\",device!~'rootfs'}","format":"time_series","hide":true,"intervalFactor":1,"legendFormat":"{{mountpoint}} - Size","refId":"C","step":240}],"title":"Filesystem space available","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"file nodes","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":12,"y":62},"id":41,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_filesystem_files_free{instance=\"$node\",job=\"$job\",device!~'rootfs'}","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"{{mountpoint}} - Free file nodes","refId":"A","step":240}],"title":"File Nodes Free","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"files","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":0,"y":72},"id":28,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"single","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_filefd_maximum{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":4,"legendFormat":"Max open files","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_filefd_allocated{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"Open files","refId":"B","step":240}],"title":"File Descriptor","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"file Nodes","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":12,"y":72},"id":219,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_filesystem_files{instance=\"$node\",job=\"$job\",device!~'rootfs'}","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"{{mountpoint}} - File nodes total","refId":"A","step":240}],"title":"File Nodes Size","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"normal"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"max":1,"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[{"matcher":{"id":"byName","options":"/ ReadOnly"},"properties":[{"id":"color","value":{"fixedColor":"#890F02","mode":"fixed"}}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":82},"id":44,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_filesystem_readonly{instance=\"$node\",job=\"$job\",device!~'rootfs'}","format":"time_series","intervalFactor":1,"legendFormat":"{{mountpoint}} - ReadOnly","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_filesystem_device_error{instance=\"$node\",job=\"$job\",device!~'rootfs',fstype!~'tmpfs'}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"{{mountpoint}} - Device error","refId":"B","step":240}],"title":"Filesystem in ReadOnly / Error","type":"timeseries"}],"targets":[{"datasource":{"type":"prometheus","uid":"000000001"},"refId":"A"}],"title":"Storage Filesystem","type":"row"},{"collapsed":true,"datasource":{"type":"prometheus","uid":"000000001"},"gridPos":{"h":1,"w":24,"x":0,"y":30},"id":272,"panels":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"packets out (-) / in (+)","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"pps"},"overrides":[{"matcher":{"id":"byName","options":"receive_packets_eth0"},"properties":[{"id":"color","value":{"fixedColor":"#7EB26D","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"receive_packets_lo"},"properties":[{"id":"color","value":{"fixedColor":"#E24D42","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"transmit_packets_eth0"},"properties":[{"id":"color","value":{"fixedColor":"#7EB26D","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"transmit_packets_lo"},"properties":[{"id":"color","value":{"fixedColor":"#E24D42","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*Trans.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":47},"id":60,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":300},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_network_receive_packets_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"{{device}} - Receive","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_network_transmit_packets_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"{{device}} - Transmit","refId":"B","step":240}],"title":"Network Traffic by Packets","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"packets out (-) / in (+)","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"pps"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*Trans.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":10,"w":12,"x":12,"y":47},"id":142,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":300},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_network_receive_errs_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","intervalFactor":1,"legendFormat":"{{device}} - Receive errors","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_network_transmit_errs_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","intervalFactor":1,"legendFormat":"{{device}} - Transmit errors","refId":"B","step":240}],"title":"Network Traffic Errors","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"packets out (-) / in (+)","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"pps"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*Trans.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":57},"id":143,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":300},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_network_receive_drop_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","intervalFactor":1,"legendFormat":"{{device}} - Receive drop","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_network_transmit_drop_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","intervalFactor":1,"legendFormat":"{{device}} - Transmit drop","refId":"B","step":240}],"title":"Network Traffic Drop","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"packets out (-) / in (+)","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"pps"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*Trans.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":10,"w":12,"x":12,"y":57},"id":141,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":300},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_network_receive_compressed_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","intervalFactor":1,"legendFormat":"{{device}} - Receive compressed","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_network_transmit_compressed_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","intervalFactor":1,"legendFormat":"{{device}} - Transmit compressed","refId":"B","step":240}],"title":"Network Traffic Compressed","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"packets out (-) / in (+)","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"pps"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*Trans.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":67},"id":146,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":300},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_network_receive_multicast_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","intervalFactor":1,"legendFormat":"{{device}} - Receive multicast","refId":"A","step":240}],"title":"Network Traffic Multicast","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"packets out (-) / in (+)","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"pps"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*Trans.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":10,"w":12,"x":12,"y":67},"id":144,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":300},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_network_receive_fifo_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","intervalFactor":1,"legendFormat":"{{device}} - Receive fifo","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_network_transmit_fifo_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","intervalFactor":1,"legendFormat":"{{device}} - Transmit fifo","refId":"B","step":240}],"title":"Network Traffic Fifo","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"packets out (-) / in (+)","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"pps"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*Trans.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":77},"id":145,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":300},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_network_receive_frame_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"{{device}} - Receive frame","refId":"A","step":240}],"title":"Network Traffic Frame","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":12,"y":77},"id":231,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":300},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_network_transmit_carrier_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","intervalFactor":1,"legendFormat":"{{device}} - Statistic transmit_carrier","refId":"A","step":240}],"title":"Network Traffic Carrier","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*Trans.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":87},"id":232,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":300},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_network_transmit_colls_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","intervalFactor":1,"legendFormat":"{{device}} - Transmit colls","refId":"A","step":240}],"title":"Network Traffic Colls","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"entries","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[{"matcher":{"id":"byName","options":"NF conntrack limit"},"properties":[{"id":"color","value":{"fixedColor":"#890F02","mode":"fixed"}},{"id":"custom.fillOpacity","value":0}]}]},"gridPos":{"h":10,"w":12,"x":12,"y":87},"id":61,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_nf_conntrack_entries{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"NF conntrack entries","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_nf_conntrack_entries_limit{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"NF conntrack limit","refId":"B","step":240}],"title":"NF Conntrack","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"Entries","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":0,"y":97},"id":230,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_arp_entries{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"{{ device }} - ARP entries","refId":"A","step":240}],"title":"ARP Entries","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"bytes","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"decimals":0,"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"bytes"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":12,"y":97},"id":288,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_network_mtu_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"{{ device }} - Bytes","refId":"A","step":240}],"title":"MTU","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"bytes","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"decimals":0,"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"bytes"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":0,"y":107},"id":280,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_network_speed_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"{{ device }} - Speed","refId":"A","step":240}],"title":"Speed","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"packets","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"decimals":0,"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"none"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":12,"y":107},"id":289,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_network_transmit_queue_length{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"{{ device }} - Interface transmit queue length","refId":"A","step":240}],"title":"Queue Length","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"packetes drop (-) / process (+)","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*Dropped.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":117},"id":290,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":300},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_softnet_processed_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"CPU {{cpu}} - Processed","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_softnet_dropped_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"CPU {{cpu}} - Dropped","refId":"B","step":240}],"title":"Softnet Packets","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":12,"y":117},"id":310,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":300},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_softnet_times_squeezed_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"CPU {{cpu}} - Squeezed","refId":"A","step":240}],"title":"Softnet Out of Quota","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":0,"y":127},"id":309,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":300},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_network_up{operstate=\"up\",instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"{{interface}} - Operational state UP","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_network_carrier{instance=\"$node\",job=\"$job\"}","format":"time_series","instant":false,"legendFormat":"{{device}} - Physical link state","refId":"B"}],"title":"Network Operational Status","type":"timeseries"}],"targets":[{"datasource":{"type":"prometheus","uid":"000000001"},"refId":"A"}],"title":"Network Traffic","type":"row"},{"collapsed":true,"datasource":{"type":"prometheus","uid":"000000001"},"gridPos":{"h":1,"w":24,"x":0,"y":31},"id":273,"panels":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":0,"y":48},"id":63,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":300},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_sockstat_TCP_alloc{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"TCP_alloc - Allocated sockets","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_sockstat_TCP_inuse{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"TCP_inuse - Tcp sockets currently in use","refId":"B","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_sockstat_TCP_mem{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":true,"interval":"","intervalFactor":1,"legendFormat":"TCP_mem - Used memory for tcp","refId":"C","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_sockstat_TCP_orphan{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"TCP_orphan - Orphan sockets","refId":"D","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_sockstat_TCP_tw{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"TCP_tw - Sockets waiting close","refId":"E","step":240}],"title":"Sockstat TCP","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":12,"y":48},"id":124,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":300},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_sockstat_UDPLITE_inuse{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"UDPLITE_inuse - Udplite sockets currently in use","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_sockstat_UDP_inuse{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"UDP_inuse - Udp sockets currently in use","refId":"B","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_sockstat_UDP_mem{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"UDP_mem - Used memory for udp","refId":"C","step":240}],"title":"Sockstat UDP","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":0,"y":58},"id":125,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":300},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_sockstat_FRAG_inuse{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"FRAG_inuse - Frag sockets currently in use","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_sockstat_RAW_inuse{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"RAW_inuse - Raw sockets currently in use","refId":"C","step":240}],"title":"Sockstat FRAG / RAW","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"bytes","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"bytes"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":12,"y":58},"id":220,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":300},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_sockstat_TCP_mem_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"mem_bytes - TCP sockets in that state","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_sockstat_UDP_mem_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"mem_bytes - UDP sockets in that state","refId":"B","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_sockstat_FRAG_memory{instance=\"$node\",job=\"$job\"}","interval":"","intervalFactor":1,"legendFormat":"FRAG_memory - Used memory for frag","refId":"C"}],"title":"Sockstat Memory Size","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"sockets","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":0,"y":68},"id":126,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":300},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_sockstat_sockets_used{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"Sockets_used - Sockets currently in use","refId":"A","step":240}],"title":"Sockstat Used","type":"timeseries"}],"targets":[{"datasource":{"type":"prometheus","uid":"000000001"},"refId":"A"}],"title":"Network Sockstat","type":"row"},{"collapsed":true,"datasource":{"type":"prometheus","uid":"000000001"},"gridPos":{"h":1,"w":24,"x":0,"y":32},"id":274,"panels":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"octets out (-) / in (+)","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*Out.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":49},"id":221,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":300},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_netstat_IpExt_InOctets{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"InOctets - Received octets","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_netstat_IpExt_OutOctets{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","intervalFactor":1,"legendFormat":"OutOctets - Sent octets","refId":"B","step":240}],"title":"Netstat IP In / Out Octets","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"datagrams","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":12,"y":49},"id":81,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":300},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_netstat_Ip_Forwarding{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"Forwarding - IP forwarding","refId":"A","step":240}],"title":"Netstat IP Forwarding","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"messages out (-) / in (+)","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*Out.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":59},"id":115,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_netstat_Icmp_InMsgs{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"InMsgs - Messages which the entity received. Note that this counter includes all those counted by icmpInErrors","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_netstat_Icmp_OutMsgs{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"OutMsgs - Messages which this entity attempted to send. Note that this counter includes all those counted by icmpOutErrors","refId":"B","step":240}],"title":"ICMP In / Out","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"messages out (-) / in (+)","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*Out.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":10,"w":12,"x":12,"y":59},"id":50,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_netstat_Icmp_InErrors{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"InErrors - Messages which the entity received but determined as having ICMP-specific errors (bad ICMP checksums, bad length, etc.)","refId":"A","step":240}],"title":"ICMP Errors","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"datagrams out (-) / in (+)","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*Out.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]},{"matcher":{"id":"byRegexp","options":"/.*Snd.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":69},"id":55,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_netstat_Udp_InDatagrams{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"InDatagrams - Datagrams received","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_netstat_Udp_OutDatagrams{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"OutDatagrams - Datagrams sent","refId":"B","step":240}],"title":"UDP In / Out","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"datagrams","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":12,"y":69},"id":109,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_netstat_Udp_InErrors{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"InErrors - UDP Datagrams that could not be delivered to an application","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_netstat_Udp_NoPorts{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"NoPorts - UDP Datagrams received on a port with no listener","refId":"B","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_netstat_UdpLite_InErrors{instance=\"$node\",job=\"$job\"}[$__rate_interval])","interval":"","legendFormat":"InErrors Lite - UDPLite Datagrams that could not be delivered to an application","refId":"C"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_netstat_Udp_RcvbufErrors{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"RcvbufErrors - UDP buffer errors received","refId":"D","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_netstat_Udp_SndbufErrors{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"SndbufErrors - UDP buffer errors send","refId":"E","step":240}],"title":"UDP Errors","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"datagrams out (-) / in (+)","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*Out.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]},{"matcher":{"id":"byRegexp","options":"/.*Snd.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":79},"id":299,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_netstat_Tcp_InSegs{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"InSegs - Segments received, including those received in error. This count includes segments received on currently established connections","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_netstat_Tcp_OutSegs{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"OutSegs - Segments sent, including those on current connections but excluding those containing only retransmitted octets","refId":"B","step":240}],"title":"TCP In / Out","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":12,"y":79},"id":104,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_netstat_TcpExt_ListenOverflows{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"ListenOverflows - Times the listen queue of a socket overflowed","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_netstat_TcpExt_ListenDrops{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"ListenDrops - SYNs to LISTEN sockets ignored","refId":"B","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_netstat_TcpExt_TCPSynRetrans{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"TCPSynRetrans - SYN-SYN/ACK retransmits to break down retransmissions in SYN, fast/timeout retransmits","refId":"C","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_netstat_Tcp_RetransSegs{instance=\"$node\",job=\"$job\"}[$__rate_interval])","interval":"","legendFormat":"RetransSegs - Segments retransmitted - that is, the number of TCP segments transmitted containing one or more previously transmitted octets","refId":"D"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_netstat_Tcp_InErrs{instance=\"$node\",job=\"$job\"}[$__rate_interval])","interval":"","legendFormat":"InErrs - Segments received in error (e.g., bad TCP checksums)","refId":"E"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_netstat_Tcp_OutRsts{instance=\"$node\",job=\"$job\"}[$__rate_interval])","interval":"","legendFormat":"OutRsts - Segments sent with RST flag","refId":"F"}],"title":"TCP Errors","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"connections","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*MaxConn *./"},"properties":[{"id":"color","value":{"fixedColor":"#890F02","mode":"fixed"}},{"id":"custom.fillOpacity","value":0}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":89},"id":85,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_netstat_Tcp_CurrEstab{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"CurrEstab - TCP connections for which the current state is either ESTABLISHED or CLOSE- WAIT","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_netstat_Tcp_MaxConn{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"MaxConn - Limit on the total number of TCP connections the entity can support (Dynamic is \"-1\")","refId":"B","step":240}],"title":"TCP Connections","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter out (-) / in (+)","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*Sent.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":10,"w":12,"x":12,"y":89},"id":91,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_netstat_TcpExt_SyncookiesFailed{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"SyncookiesFailed - Invalid SYN cookies received","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_netstat_TcpExt_SyncookiesRecv{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"SyncookiesRecv - SYN cookies received","refId":"B","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_netstat_TcpExt_SyncookiesSent{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"SyncookiesSent - SYN cookies sent","refId":"C","step":240}],"title":"TCP SynCookie","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"connections","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":0,"y":99},"id":82,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_netstat_Tcp_ActiveOpens{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"ActiveOpens - TCP connections that have made a direct transition to the SYN-SENT state from the CLOSED state","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_netstat_Tcp_PassiveOpens{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"PassiveOpens - TCP connections that have made a direct transition to the SYN-RCVD state from the LISTEN state","refId":"B","step":240}],"title":"TCP Direct Transition","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"Enable with --collector.tcpstat argument on node-exporter","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"connections","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"}]},"unit":"short"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":12,"y":99},"id":320,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"node_tcp_connection_states{state=\"established\",instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"established - TCP sockets in established state","range":true,"refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"node_tcp_connection_states{state=\"fin_wait2\",instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"fin_wait2 - TCP sockets in fin_wait2 state","range":true,"refId":"B","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"node_tcp_connection_states{state=\"listen\",instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"listen - TCP sockets in listen state","range":true,"refId":"C","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"node_tcp_connection_states{state=\"time_wait\",instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"time_wait - TCP sockets in time_wait state","range":true,"refId":"D","step":240}],"title":"TCP Stat","type":"timeseries"}],"targets":[{"datasource":{"type":"prometheus","uid":"000000001"},"refId":"A"}],"title":"Network Netstat","type":"row"},{"collapsed":true,"datasource":{"type":"prometheus","uid":"000000001"},"gridPos":{"h":1,"w":24,"x":0,"y":33},"id":279,"panels":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"seconds","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"normal"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"s"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":0,"y":66},"id":40,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_scrape_collector_duration_seconds{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"{{collector}} - Scrape duration","refId":"A","step":240}],"title":"Node Exporter Scrape Time","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineStyle":{"fill":"solid"},"lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*error.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F2495C","mode":"fixed"}},{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":10,"w":12,"x":12,"y":66},"id":157,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_scrape_collector_success{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"{{collector}} - Scrape success","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_textfile_scrape_error{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"{{collector}} - Scrape textfile error (1 = true)","refId":"B","step":240}],"title":"Node Exporter Scrape","type":"timeseries"}],"targets":[{"datasource":{"type":"prometheus","uid":"000000001"},"refId":"A"}],"title":"Node Exporter","type":"row"}],"refresh":"1m","revision":1,"schemaVersion":38,"style":"dark","tags":["linux"],"templating":{"list":[{"current":{"selected":false,"text":"default","value":"default"},"hide":0,"includeAll":false,"label":"Datasource","multi":false,"name":"datasource","options":[],"query":"prometheus","queryValue":"","refresh":1,"regex":"","skipUrlSync":false,"type":"datasource"},{"current":{},"datasource":{"type":"prometheus","uid":"${datasource}"},"definition":"","hide":0,"includeAll":false,"label":"Job","multi":false,"name":"job","options":[],"query":{"query":"label_values(node_uname_info, job)","refId":"Prometheus-job-Variable-Query"},"refresh":1,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":"","tagsQuery":"","type":"query","useTags":false},{"current":{},"datasource":{"type":"prometheus","uid":"${datasource}"},"definition":"label_values(node_uname_info{job=\"$job\"}, instance)","hide":0,"includeAll":false,"label":"Host","multi":false,"name":"node","options":[],"query":{"query":"label_values(node_uname_info{job=\"$job\"}, instance)","refId":"Prometheus-node-Variable-Query"},"refresh":1,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":"","tagsQuery":"","type":"query","useTags":false},{"current":{"selected":false,"text":"[a-z]+|nvme[0-9]+n[0-9]+|mmcblk[0-9]+","value":"[a-z]+|nvme[0-9]+n[0-9]+|mmcblk[0-9]+"},"hide":2,"includeAll":false,"multi":false,"name":"diskdevices","options":[{"selected":true,"text":"[a-z]+|nvme[0-9]+n[0-9]+|mmcblk[0-9]+","value":"[a-z]+|nvme[0-9]+n[0-9]+|mmcblk[0-9]+"}],"query":"[a-z]+|nvme[0-9]+n[0-9]+|mmcblk[0-9]+","skipUrlSync":false,"type":"custom"}]},"time":{"from":"now-24h","to":"now"},"timepicker":{"refresh_intervals":["5s","10s","30s","1m","5m","15m","30m","1h","2h","1d"],"time_options":["5m","15m","1h","6h","12h","24h","2d","7d","30d"]},"timezone":"browser","title":"Node Metrics","uid":"node","version":90,"weekStart":""}
···
-1
systems/koumakan/services/telemetry/grafana/dashboards/vm.json
··· 1 - {"__inputs":[],"__elements":{},"__requires":[{"type":"grafana","id":"grafana","name":"Grafana","version":"10.4.2"},{"type":"datasource","id":"prometheus","name":"Prometheus","version":"1.0.0"},{"type":"panel","id":"stat","name":"Stat","version":""},{"type":"panel","id":"table","name":"Table","version":""},{"type":"panel","id":"text","name":"Text","version":""},{"type":"panel","id":"timeseries","name":"Time series","version":""}],"annotations":{"list":[{"builtIn":1,"datasource":{"type":"datasource","uid":"grafana"},"enable":true,"hide":true,"iconColor":"rgba(0, 211, 255, 1)","name":"Annotations & Alerts","target":{"limit":100,"matchAny":false,"tags":[],"type":"dashboard"},"type":"dashboard"},{"datasource":{"type":"prometheus","uid":"$ds"},"enable":true,"expr":"sum(ALERTS{job=~\"$job\", instance=~\"$instance\", alertgroup=\"vmsingle\",alertstate=\"firing\",show_at=\"dashboard\"}) by(alertname)","iconColor":"red","name":"alerts","titleFormat":"{{alertname}}"},{"datasource":{"type":"prometheus","uid":"$ds"},"enable":true,"expr":"sum(vm_app_version{job=~\"$job\", instance=~\"$instance\"}) by(version) unless (sum(vm_app_version{job=~\"$job\", instance=~\"$instance\"} offset $__interval) by(version))","hide":true,"iconColor":"dark-blue","name":"version","textFormat":"{{version}}","titleFormat":"Version change"}]},"description":"Overview for single-node VictoriaMetrics v1.83.0 or higher","editable":true,"fiscalYearStartMonth":0,"gnetId":10229,"graphTooltip":1,"id":null,"links":[{"icon":"doc","tags":[],"targetBlank":true,"title":"Single server Wiki","type":"link","url":"https://docs.victoriametrics.com/"},{"icon":"external link","tags":[],"targetBlank":true,"title":"Found a bug?","type":"link","url":"https://github.com/VictoriaMetrics/VictoriaMetrics/issues"},{"icon":"external link","tags":[],"targetBlank":true,"title":"New releases","tooltip":"","type":"link","url":"https://github.com/VictoriaMetrics/VictoriaMetrics/releases"}],"liveNow":false,"panels":[{"collapsed":false,"datasource":{"type":"prometheus","uid":"$ds"},"gridPos":{"h":1,"w":24,"x":0,"y":0},"id":6,"panels":[],"targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"refId":"A"}],"title":"Stats","type":"row"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"","gridPos":{"h":2,"w":4,"x":0,"y":1},"id":85,"options":{"code":{"language":"plaintext","showLineNumbers":false,"showMiniMap":false},"content":"<div style=\"text-align: center;\">$version</div>","mode":"markdown"},"pluginVersion":"10.4.2","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"refId":"A"}],"title":"Version","type":"text"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"How many datapoints are in storage","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null}]},"unit":"short"},"overrides":[]},"gridPos":{"h":2,"w":5,"x":4,"y":1},"id":26,"maxDataPoints":100,"options":{"colorMode":"value","graphMode":"area","justifyMode":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"showPercentChange":false,"text":{},"textMode":"auto","wideLayout":true},"pluginVersion":"10.4.2","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","exemplar":false,"expr":"sum(vm_rows{job=~\"$job\", instance=~\"$instance\", type!~\"indexdb.*\"})","format":"time_series","instant":true,"interval":"","intervalFactor":1,"legendFormat":"","refId":"A"}],"title":"Total datapoints","type":"stat"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Shows the datapoints ingestion rate.","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null}]},"unit":"short"},"overrides":[]},"gridPos":{"h":2,"w":5,"x":9,"y":1},"id":107,"maxDataPoints":100,"options":{"colorMode":"value","graphMode":"area","justifyMode":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"showPercentChange":false,"text":{},"textMode":"auto","wideLayout":true},"pluginVersion":"10.4.2","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","exemplar":false,"expr":"sum(rate(vm_rows_inserted_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval]))","format":"time_series","instant":true,"interval":"","intervalFactor":1,"legendFormat":"","refId":"A"}],"title":"Ingestion rate","type":"stat"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Shows the rate of HTTP read requests.","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null}]},"unit":"short"},"overrides":[]},"gridPos":{"h":2,"w":5,"x":14,"y":1},"id":108,"maxDataPoints":100,"options":{"colorMode":"value","graphMode":"area","justifyMode":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"showPercentChange":false,"text":{},"textMode":"auto","wideLayout":true},"pluginVersion":"10.4.2","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","exemplar":false,"expr":"sum(rate(vm_http_requests_total{job=~\"$job\", instance=~\"$instance\", path!~\".*(/write|/metrics)\"}[$__rate_interval]))","format":"time_series","instant":true,"interval":"","intervalFactor":1,"legendFormat":"","refId":"A"}],"title":"Read requests","type":"stat"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Total number of available CPUs for VM process","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":2,"w":5,"x":19,"y":1},"id":77,"maxDataPoints":100,"options":{"colorMode":"value","graphMode":"area","justifyMode":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"showPercentChange":false,"text":{},"textMode":"auto","wideLayout":true},"pluginVersion":"10.4.2","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"exemplar":false,"expr":"sum(vm_available_cpu_cores{job=~\"$job\", instance=~\"$instance\"})","format":"time_series","instant":true,"interval":"","intervalFactor":1,"legendFormat":"","refId":"A"}],"title":"Available CPU","type":"stat"},{"datasource":{"type":"prometheus","uid":"$ds"},"fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"red","value":null},{"color":"green","value":1800}]},"unit":"s"},"overrides":[]},"gridPos":{"h":2,"w":4,"x":0,"y":3},"id":87,"options":{"colorMode":"value","graphMode":"area","justifyMode":"auto","orientation":"auto","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"showPercentChange":false,"text":{},"textMode":"auto","wideLayout":true},"pluginVersion":"10.4.2","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","exemplar":false,"expr":"min(vm_app_uptime_seconds{job=~\"$job\", instance=~\"$instance\"})","instant":true,"interval":"","legendFormat":"","refId":"A"}],"title":"Uptime","type":"stat"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Shows the number of [active time series](https://docs.victoriametrics.com/faq/#what-is-an-active-time-series) with new data points inserted during the last hour. High value may result in ingestion slowdown.","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null}]},"unit":"short"},"overrides":[]},"gridPos":{"h":2,"w":5,"x":4,"y":3},"id":38,"maxDataPoints":100,"options":{"colorMode":"value","graphMode":"area","justifyMode":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"showPercentChange":false,"text":{},"textMode":"auto","wideLayout":true},"pluginVersion":"10.4.2","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","exemplar":false,"expr":"sum(vm_cache_entries{job=~\"$job\", instance=~\"$instance\", type=\"storage/hour_metric_ids\"})","format":"time_series","instant":true,"interval":"","intervalFactor":1,"legendFormat":"","refId":"A"}],"title":"Active series","type":"stat"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Total amount of used disk space","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null}]},"unit":"bytes"},"overrides":[]},"gridPos":{"h":2,"w":5,"x":9,"y":3},"id":81,"maxDataPoints":100,"options":{"colorMode":"value","graphMode":"area","justifyMode":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"showPercentChange":false,"text":{},"textMode":"auto","wideLayout":true},"pluginVersion":"10.4.2","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","exemplar":false,"expr":"sum(vm_data_size_bytes{job=~\"$job\", instance=~\"$instance\"})","format":"time_series","instant":true,"interval":"","intervalFactor":1,"legendFormat":"","refId":"A"}],"title":"Disk space usage","type":"stat"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Average disk usage per datapoint.","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null}]},"unit":"bytes"},"overrides":[]},"gridPos":{"h":2,"w":5,"x":14,"y":3},"id":82,"maxDataPoints":100,"options":{"colorMode":"value","graphMode":"area","justifyMode":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"showPercentChange":false,"text":{},"textMode":"auto","wideLayout":true},"pluginVersion":"10.4.2","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","exemplar":false,"expr":"max(sum(vm_data_size_bytes{job=~\"$job\", instance=~\"$instance\"}) / sum(vm_rows{job=~\"$job\", instance=~\"$instance\"}))","format":"time_series","instant":true,"interval":"","intervalFactor":1,"legendFormat":"","refId":"A"}],"title":"Bytes per point","type":"stat"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Total size of available memory for VM process","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null}]},"unit":"bytes"},"overrides":[]},"gridPos":{"h":2,"w":5,"x":19,"y":3},"id":78,"maxDataPoints":100,"options":{"colorMode":"value","graphMode":"area","justifyMode":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"showPercentChange":false,"text":{},"textMode":"auto","wideLayout":true},"pluginVersion":"10.4.2","targets":[{"datasource":{"uid":"$ds"},"exemplar":false,"expr":"sum(vm_available_memory_bytes{job=~\"$job\", instance=~\"$instance\"})","format":"time_series","instant":true,"interval":"","intervalFactor":1,"legendFormat":"","refId":"A"}],"title":"Available memory","type":"stat"},{"collapsed":false,"datasource":{"type":"prometheus","uid":"$ds"},"gridPos":{"h":1,"w":24,"x":0,"y":5},"id":24,"panels":[],"targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"refId":"A"}],"title":"Overview","type":"row"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"How many datapoints are inserted into storage per second","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":10,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":8,"w":12,"x":0,"y":6},"id":106,"options":{"legend":{"calcs":["mean","lastNotNull"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"uid":"$ds"},"editorMode":"code","expr":"sum(rate(vm_rows_inserted_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])) by (type, instance) > 0","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"{{instance}} - {{type}}","range":true,"refId":"A"}],"title":"Datapoints ingestion rate","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"* `*` - unsupported query path\n* `/write` - insert into VM\n* `/metrics` - query VM system metrics\n* `/query` - query instant values\n* `/query_range` - query over a range of time\n* `/series` - match a certain label set\n* `/label/{}/values` - query a list of label values (variables mostly)","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":8,"w":12,"x":12,"y":6},"id":12,"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(rate(vm_http_requests_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])) by (path, instance) > 0","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"{{instance}} - {{path}}","range":true,"refId":"A"}],"title":"Requests rate","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Shows the number of [active time series](https://docs.victoriametrics.com/faq/#what-is-an-active-time-series) with new data points inserted during the last hour. High value may result in ingestion slowdown. \n\nSee following link for details:","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":10,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":8,"w":12,"x":0,"y":14},"id":51,"links":[{"targetBlank":true,"title":"troubleshooting","url":"https://docs.victoriametrics.com/troubleshooting"}],"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"vm_cache_entries{job=~\"$job\", instance=~\"$instance\", type=\"storage/hour_metric_ids\"}","format":"time_series","intervalFactor":1,"legendFormat":"{{instance}}","range":true,"refId":"A"}],"title":"Active time series","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"The less time it takes is better.\n* `*` - unsupported query path\n* `/write` - insert into VM\n* `/metrics` - query VM system metrics\n* `/query` - query instant values\n* `/query_range` - query over a range of time\n* `/series` - match a certain label set\n* `/label/{}/values` - query a list of label values (variables mostly)","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":10,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"s"},"overrides":[]},"gridPos":{"h":8,"w":12,"x":12,"y":14},"id":22,"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"max(vm_request_duration_seconds{job=~\"$job\", instance=~\"$instance\", quantile=\"0.99\"}) by (instance, path) > 0","format":"time_series","intervalFactor":1,"legendFormat":"{{instance}} - {{path}}","range":true,"refId":"A"}],"title":"Query duration 0.99 quantile","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"* `*` - unsupported query path\n* `/write` - insert into VM\n* `/metrics` - query VM system metrics\n* `/query` - query instant values\n* `/query_range` - query over a range of time\n* `/series` - match a certain label set\n* `/label/{}/values` - query a list of label values (variables mostly)","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":10,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":8,"w":12,"x":0,"y":22},"id":35,"options":{"legend":{"calcs":["mean","lastNotNull"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","exemplar":false,"expr":"sum(rate(vm_http_request_errors_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])) by (instance, path) > 0","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"{{instance}} - {{path}}","range":true,"refId":"A"}],"title":"Requests error rate","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Shows the rate of logging the messages by their level. Unexpected spike in rate is a good reason to check logs.","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"bars","fillOpacity":100,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"auto","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]}},"overrides":[]},"gridPos":{"h":8,"w":12,"x":12,"y":22},"id":110,"options":{"legend":{"calcs":["lastNotNull","mean","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"single","sort":"none"}},"targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(rate(vm_log_messages_total{job=~\"$job\", instance=~\"$instance\", level!=\"info\"}[$__rate_interval])) by (instance, level, location) > 0","interval":"5m","legendFormat":"{{instance}} - {{level}}: {{location}}","range":true,"refId":"A"}],"title":"Logging rate","type":"timeseries"},{"collapsed":true,"datasource":{"type":"prometheus","uid":"$ds"},"gridPos":{"h":1,"w":24,"x":0,"y":30},"id":46,"panels":[{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Percentage of used RSS memory (resident).\nThe RSS memory shows the amount of memory recently accessed by the application. It includes anonymous memory and data from recently accessed files (aka page cache).\nThe application's performance will significantly degrade when memory usage is close to 100%.\n\nClick on the line and choose Drilldown to show memory usage per instance","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"percentunit","unitScale":true},"overrides":[]},"gridPos":{"h":8,"w":12,"x":0,"y":11},"id":112,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","exemplar":false,"expr":"max(\n max_over_time(process_resident_memory_bytes{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])\n /\n vm_available_memory_bytes{job=~\"$job\", instance=~\"$instance\"}\n) by(instance)","interval":"","legendFormat":"__auto","range":true,"refId":"A"}],"title":"RSS memory % usage","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"bytes","unitScale":true},"overrides":[]},"gridPos":{"h":8,"w":12,"x":12,"y":11},"id":44,"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(go_memstats_sys_bytes{job=~\"$job\", instance=~\"$instance\"}) by (instance) + sum(vm_cache_size_bytes{job=~\"$job\", instance=~\"$instance\"}) by (instance)","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"{{instance}} - requested from system","range":true,"refId":"A"},{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(go_memstats_heap_inuse_bytes{job=~\"$job\", instance=~\"$instance\"}) by (instance) + sum(vm_cache_size_bytes{job=~\"$job\", instance=~\"$instance\"}) by (instance)","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"{{instance}} - heap inuse","range":true,"refId":"B"},{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(go_memstats_stack_inuse_bytes{job=~\"$job\", instance=~\"$instance\"}) by (instance)","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"{{instance}} - stack inuse","range":true,"refId":"C"},{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(process_resident_memory_bytes{job=~\"$job\", instance=~\"$instance\"}) by (instance)","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"{{instance}} - resident","range":true,"refId":"D"},{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","exemplar":false,"expr":"sum(process_resident_memory_anon_bytes{job=~\"$job\", instance=~\"$instance\"}) by (instance)","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"{{instance}} - resident anonymous","range":true,"refId":"E"}],"title":"Memory usage","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Share for memory allocated by the process itself. When memory usage reaches 100% it will be likely OOM-killed.\nSafe memory usage % considered to be below 80%\n\nClick on the line and choose Drilldown to show memory usage per instance","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"percentunit","unitScale":true},"overrides":[]},"gridPos":{"h":8,"w":12,"x":0,"y":19},"id":123,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","exemplar":false,"expr":"max(\n max_over_time(process_resident_memory_anon_bytes{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])\n /\n vm_available_memory_bytes{job=~\"$job\", instance=~\"$instance\"}\n) by(instance)","interval":"","legendFormat":"__auto","range":true,"refId":"A"}],"title":"RSS anonymous memory % usage","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"percentunit","unitScale":true},"overrides":[]},"gridPos":{"h":8,"w":12,"x":12,"y":19},"id":114,"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","exemplar":false,"expr":"max(\n rate(process_cpu_seconds_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])\n /\n vm_available_cpu_cores{job=~\"$job\", instance=~\"$instance\"}\n) by(instance)","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"__auto","range":true,"refId":"A"}],"title":"CPU % usage","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Shows the percentage of open file descriptors compared to the limit set in the OS.\nReaching the limit of open files can cause various issues and must be prevented.\n\nSee how to change limits here https://medium.com/@muhammadtriwibowo/set-permanently-ulimit-n-open-files-in-ubuntu-4d61064429a","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"decimals":2,"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"percentunit"},"overrides":[{"matcher":{"id":"byName","options":"max"},"properties":[{"id":"color","value":{"fixedColor":"#C4162A","mode":"fixed"}}]}]},"gridPos":{"h":8,"w":12,"x":0,"y":27},"id":75,"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"max_over_time(process_open_fds{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])\n/\nprocess_max_fds{job=~\"$job\", instance=~\"$instance\"}","format":"time_series","hide":false,"interval":"","intervalFactor":2,"legendFormat":"{{instance}}","range":true,"refId":"A"}],"title":"Open FDs","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"CPU cores used by instance","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[{"matcher":{"id":"byName","options":"Limit"},"properties":[{"id":"color","value":{"fixedColor":"#F2495C","mode":"fixed"}}]}]},"gridPos":{"h":8,"w":12,"x":12,"y":27},"id":57,"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"rate(process_cpu_seconds_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"{{instance}}","range":true,"refId":"A"},{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","exemplar":false,"expr":"min(process_cpu_cores_available{job=~\"$job\", instance=~\"$instance\"})","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"Limit","range":true,"refId":"B"}],"title":"CPU","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":10,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"decimals":0,"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":8,"w":12,"x":0,"y":35},"id":47,"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(go_goroutines{job=~\"$job\", instance=~\"$instance\"}) by(instance)","format":"time_series","intervalFactor":2,"legendFormat":"{{instance}}","range":true,"refId":"A"}],"title":"Goroutines","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Shows the number of bytes read/write from the storage layer.","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":10,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"bytes"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*read/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":8,"w":12,"x":12,"y":35},"id":76,"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(rate(process_io_storage_read_bytes_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])) by (instance)","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"{{instance}} - read","range":true,"refId":"A"},{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(rate(process_io_storage_written_bytes_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])) by (instance)","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"{{instance}} - write","range":true,"refId":"B"}],"title":"Disk writes/reads","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":10,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"decimals":0,"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":8,"w":12,"x":0,"y":43},"id":48,"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(process_num_threads{job=~\"$job\", instance=~\"$instance\"}) by(instance)","format":"time_series","intervalFactor":2,"legendFormat":"{{instance}}","range":true,"refId":"A"}],"title":"Threads","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Shows the number of read/write syscalls such as read, pread, write, pwrite.","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":10,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*read.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":8,"w":12,"x":12,"y":43},"id":124,"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(rate(process_io_read_syscalls_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])) by (instance)","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"{{instance}} - read calls","range":true,"refId":"A"},{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(rate(process_io_write_syscalls_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])) by (instance)","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"{{instance}} - write calls","range":true,"refId":"B"}],"title":"Disk write/read calls","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":10,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":8,"w":12,"x":0,"y":51},"id":49,"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(rate(vm_tcplistener_accepts_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])) by(instance)","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"{{instance}}","range":true,"refId":"A"}],"title":"TCP connections rate","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":10,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":8,"w":12,"x":12,"y":51},"id":37,"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(vm_tcplistener_conns{job=~\"$job\", instance=~\"$instance\"}) by(instance)","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"{{instance}}","range":true,"refId":"A"}],"title":"TCP connections","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Shows network usage by VM:\n* Writes show traffic sent to clients\n* Reads show traffic received from clients","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":10,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"decbits"},"overrides":[{"matcher":{"id":"byRegexp","options":"/read.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":8,"w":12,"x":0,"y":59},"id":127,"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(rate(vm_tcplistener_read_bytes_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])) by(name) * 8 > 0","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"read via {{name}}","range":true,"refId":"A"},{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(rate(vm_tcplistener_written_bytes_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])) by(name) * 8 > 0","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"write via {{name}}","range":true,"refId":"B"}],"title":"Network usage","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Shows the percent of CPU spent on garbage collection.\n\nIf % is high, then CPU usage can be decreased by changing GOGC to higher values. Increasing GOGC value will increase memory usage, and decrease CPU usage.\n\nTry searching for keyword `GOGC` at https://docs.victoriametrics.com/troubleshooting/ ","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"decimals":0,"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"percentunit"},"overrides":[]},"gridPos":{"h":8,"w":12,"x":12,"y":59},"id":125,"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.2.6","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"max(\n rate(go_gc_cpu_seconds_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval]) \n / rate(process_cpu_seconds_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])\n ) by(instance)","format":"time_series","interval":"","intervalFactor":2,"legendFormat":"__auto","range":true,"refId":"A"}],"title":"CPU spent on GC","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Shows the time goroutines have spent in runnable state before actually running. The lower is better.\n\nHigh values or values exceeding the threshold is usually a sign of insufficient CPU resources or CPU throttling. \n\nVerify that service has enough CPU resources. Otherwise, the service could work unreliably with delays in processing.","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"line"}},"decimals":0,"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":0.1}]},"unit":"s"},"overrides":[]},"gridPos":{"h":8,"w":12,"x":0,"y":67},"id":128,"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.2.6","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"histogram_quantile(0.99, sum(rate(go_sched_latencies_seconds_bucket{job=~\"$job\"}[$__rate_interval])) by (job, instance, le))","format":"time_series","interval":"","intervalFactor":2,"legendFormat":"__auto","range":true,"refId":"A"}],"title":"Go scheduling latency","type":"timeseries"}],"targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"refId":"A"}],"title":"Resource usage","type":"row"},{"collapsed":true,"datasource":{"type":"prometheus","uid":"$ds"},"gridPos":{"h":1,"w":24,"x":0,"y":31},"id":71,"panels":[{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Shows the rate and total number of new series created over last 24h.\n\nHigh [churn rate](https://docs.victoriametrics.com/faq/#what-is-high-churn-rate) tightly connected with database performance and may result in unexpected OOM's or slow queries. It is recommended to always keep an eye on this metric to avoid unexpected [cardinality](https://docs.victoriametrics.com/keyconcepts/#cardinality) \"explosions\".\n\nThe higher churn rate is, the more resources required to handle it. Consider to keep the churn rate as low as possible.\n\nGood references to read:\n* https://www.robustperception.io/cardinality-is-key\n* https://www.robustperception.io/using-tsdb-analyze-to-investigate-churn-and-cardinality","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":8,"w":12,"x":0,"y":32},"id":66,"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(rate(vm_new_timeseries_created_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])) by (instance)","interval":"","legendFormat":"{{instance}} - churn rate","range":true,"refId":"A"},{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(increase(vm_new_timeseries_created_total{job=~\"$job\", instance=~\"$instance\"}[24h])) by (instance)","interval":"","legendFormat":"{{instance}} - new series over 24h","range":true,"refId":"B"}],"title":"Churn rate","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"The percentage of slow inserts comparing to total insertion rate during the last 5 minutes. \n\nThe less value is better. If percentage remains high (>10%) during extended periods of time, then it is likely more RAM is needed for optimal handling of the current number of [active time series](https://docs.victoriametrics.com/faq/#what-is-an-active-time-series). \n\nIn general, VictoriaMetrics requires ~1KB or RAM per active time series, so it should be easy calculating the required amounts of RAM for the current workload according to capacity planning docs. But the resulting number may be far from the real number because the required amounts of memory depends on many other factors such as the number of labels per time series and the length of label values. See also [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/3976#issuecomment-1476883183) for details.","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":10,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"line+area"}},"decimals":2,"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"transparent","value":null},{"color":"red","value":0.1}]},"unit":"percentunit"},"overrides":[]},"gridPos":{"h":8,"w":12,"x":12,"y":32},"id":68,"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"max(\n rate(vm_slow_row_inserts_total{job=~\"$job\"}[$__rate_interval]) \n / rate(vm_rows_added_to_storage_total{job=~\"$job\"}[$__rate_interval])\n) by (instance)","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"{{instance}}","range":true,"refId":"A"}],"title":"Slow inserts %","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Merge assist happens when storage can't keep up with merging parts. This is usually a sign of overload for storage.","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"bars","fillOpacity":100,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":8,"w":12,"x":0,"y":40},"id":116,"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","exemplar":false,"expr":"sum(increase(vm_assisted_merges_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])) by(instance, type) > 0","format":"time_series","interval":"5m","intervalFactor":1,"legendFormat":"{{instance}} - {{type}}","range":true,"refId":"A"}],"title":"Assisted merges","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Slow queries rate according to `search.logSlowQueryDuration` flag, which is `5s` by default.","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":10,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":8,"w":12,"x":12,"y":40},"id":60,"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(rate(vm_slow_queries_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])) by (instance)","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"{{instance}}","range":true,"refId":"A"}],"title":"Slow queries rate","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Shows the percentage of used cache size from the allowed size by type. \nValues close to 100% show the maximum potential utilization.\nValues close to 0% show that cache is underutilized.","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"percentunit"},"overrides":[]},"gridPos":{"h":9,"w":12,"x":0,"y":48},"id":90,"options":{"legend":{"calcs":["lastNotNull","mean","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","exemplar":false,"expr":"vm_cache_size_bytes{job=~\"$job\", instance=~\"$instance\"} / vm_cache_size_max_bytes{job=~\"$job\", instance=~\"$instance\"}","interval":"","legendFormat":"{{instance}} - {{type}}","range":true,"refId":"A"}],"title":"Cache usage % by type","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Shows cache miss ratio. Lower is better.","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"max":1,"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"percentunit"},"overrides":[]},"gridPos":{"h":9,"w":12,"x":12,"y":48},"id":118,"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","exemplar":false,"expr":"(\n rate(vm_cache_misses_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])\n /\n rate(vm_cache_requests_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])\n) > 0","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"{{instance}} - {{type}}","range":true,"refId":"A"}],"title":"Cache miss ratio","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Flags explicitly set to non-default values","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"custom":{"align":"auto","cellOptions":{"type":"auto"},"inspect":false},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]}},"overrides":[{"matcher":{"id":"byName","options":"Time"},"properties":[{"id":"custom.hidden","value":true}]},{"matcher":{"id":"byName","options":"Value"},"properties":[{"id":"custom.hidden","value":true}]},{"matcher":{"id":"byName","options":"job"},"properties":[{"id":"custom.hidden","value":true}]}]},"gridPos":{"h":8,"w":12,"x":0,"y":57},"id":126,"options":{"cellHeight":"sm","footer":{"countRows":false,"fields":"","reducer":["sum"],"show":false},"showHeader":true},"pluginVersion":"10.4.2","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","exemplar":false,"expr":"sum(flag{is_set=\"true\", job=~\"$job\", instance=~\"$instance\"}) by(job, instance, name, value)","format":"table","instant":true,"legendFormat":"__auto","range":false,"refId":"A"}],"title":"Non-default flags","type":"table"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"VictoriaMetrics limits the number of labels per each metric with `-maxLabelsPerTimeseries` command-line flag.\n\nThis prevents from ingesting metrics with too many labels. The value of `maxLabelsPerTimeseries` must be adjusted for your workload.\n\nWhen limit is exceeded (graph is > 0) - extra labels are dropped, which could result in unexpected identical time series. See more details about dropped labels in logs.","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":10,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"decimals":2,"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":8,"w":12,"x":12,"y":57},"id":74,"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"list","placement":"bottom","showLegend":false},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"exemplar":false,"expr":"sum(increase(vm_metrics_with_dropped_labels_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])) by (instance)","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"{{instance}} - limit exceeded","range":true,"refId":"A"}],"title":"Labels limit exceeded","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Shows the number of restarts per job. The chart can be useful to identify periodic process restarts and correlate them with potential issues or anomalies. Normally, processes shouldn't restart unless restart was inited by user. The reason of restarts should be figured out by checking the logs of each specific service. ","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","axisSoftMin":0,"barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"stepAfter","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"decimals":0,"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"none"},"overrides":[]},"gridPos":{"h":8,"w":12,"x":0,"y":65},"id":129,"options":{"legend":{"calcs":["lastNotNull"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(changes(vm_app_start_timestamp{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval]) > 0) by(job)","format":"time_series","instant":false,"legendFormat":"{{job}}","refId":"A"}],"title":"Restarts ($job)","type":"timeseries"}],"targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"refId":"A"}],"title":"Troubleshooting","type":"row"},{"collapsed":true,"datasource":{"type":"prometheus","uid":"$ds"},"gridPos":{"h":1,"w":24,"x":0,"y":32},"id":14,"panels":[{"datasource":{"type":"prometheus","uid":"$ds"},"description":"How many datapoints are inserted into storage per second","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":10,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short","unitScale":true},"overrides":[]},"gridPos":{"h":8,"w":12,"x":0,"y":13},"id":10,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(rate(vm_rows_inserted_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])) by (instance, type) > 0","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"{{instance}} - {{type}}","range":true,"refId":"A"}],"title":"Datapoints ingestion rate","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Shows the approx time needed to reach 100% of disk capacity based on the following params:\n* free disk space;\n* row ingestion rate;\n* compression.\n\nNote: this panel doesn't account for deduplication process.","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"s","unitScale":true},"overrides":[]},"gridPos":{"h":8,"w":12,"x":12,"y":13},"id":73,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","min"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"(vm_free_disk_space_bytes{job=~\"$job\", instance=~\"$instance\"}-vm_free_disk_space_limit_bytes{job=~\"$job\", instance=~\"$instance\"}) \n/ ignoring(path) (\n rate(vm_rows_added_to_storage_total{job=~\"$job\", instance=~\"$instance\"}[1d]) \n * scalar(\n sum(vm_data_size_bytes{job=~\"$job\", instance=~\"$instance\", type!~\"indexdb.*\"}) \n / sum(vm_rows{job=~\"$job\", instance=~\"$instance\", type!~\"indexdb.*\"})\n )\n )","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"{{instance}}","range":true,"refId":"A"}],"title":"Storage full ETA","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Shows amount of on-disk space occupied by data points and the remaining disk space at `-storageDataPath`","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"bytes","unitScale":true},"overrides":[]},"gridPos":{"h":8,"w":12,"x":0,"y":21},"id":53,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(vm_data_size_bytes{job=~\"$job\", instance=~\"$instance\", type!~\"indexdb.*\"}) by (instance)","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"{{instance}} - Used (datapoints)","range":true,"refId":"A"},{"datasource":{"type":"prometheus","uid":"$ds"},"expr":"vm_free_disk_space_bytes{job=~\"$job\", instance=~\"$instance\"} - vm_free_disk_space_limit_bytes{job=~\"$job\", instance=~\"$instance\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"{{instance}} - Free","range":true,"refId":"B"},{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(vm_data_size_bytes{job=~\"$job\", instance=~\"$instance\", type=~\"indexdb.*\"}) by (instance)","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"{{instance}} - Used (index)","range":true,"refId":"C"}],"title":"Disk space usage - datapoints","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"How many datapoints are in RAM queue waiting to be written into storage. The number of pending data points should be in the range from 0 to `3*<ingestion_rate>`, since VictoriaMetrics pushes pending data to persistent storage every two seconds.","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":10,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short","unitScale":true},"overrides":[{"matcher":{"id":"byName","options":"pending index entries"},"properties":[{"id":"unit","value":"none"},{"id":"decimals","value":3}]}]},"gridPos":{"h":8,"w":12,"x":12,"y":21},"id":34,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"expr":"vm_pending_rows{job=~\"$job\", instance=~\"$instance\", type=\"storage\"}","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"{{instance}} - pending datapoints","range":true,"refId":"A"},{"datasource":{"type":"prometheus","uid":"$ds"},"expr":"vm_pending_rows{job=~\"$job\", instance=~\"$instance\", type=\"indexdb\"}","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"{{instance}} - pending index entries","range":true,"refId":"B"}],"title":"Pending datapoints","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Shows how many datapoints are in the storage and what is average disk usage per datapoint.","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short","unitScale":true},"overrides":[{"matcher":{"id":"byName","options":"bytes-per-datapoint"},"properties":[{"id":"unit","value":"bytes"},{"id":"decimals","value":2}]}]},"gridPos":{"h":8,"w":12,"x":0,"y":29},"id":30,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(vm_rows{job=~\"$job\", instance=~\"$instance\", type!~\"indexdb.*\"}) by (instance)","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"{{instance}} - total datapoints","range":true,"refId":"A"},{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(vm_data_size_bytes{job=~\"$job\", instance=~\"$instance\"}) by (instance)\n/ sum(vm_rows{job=~\"$job\", instance=~\"$instance\", type!~\"indexdb.*\"}) by (instance)","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"{{instance}} - bytes-per-datapoint","range":true,"refId":"B"}],"title":"Datapoints","type":"timeseries"},{"datasource":{"uid":"$ds"},"description":"Data parts of LSM tree.\nHigh number of parts could be an evidence of slow merge performance - check the resource utilization.\n* `indexdb` - inverted index\n* `storage/small` - recently added parts of data ingested into storage(hot data)\n* `storage/big` - small parts gradually merged into big parts (cold data)","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short","unitScale":true},"overrides":[]},"gridPos":{"h":8,"w":12,"x":12,"y":29},"id":36,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(vm_parts{job=~\"$job\", instance=~\"$instance\"}) by (instance, type)","format":"time_series","intervalFactor":1,"legendFormat":"{{instance}} - {{type}}","range":true,"refId":"A"}],"title":"LSM parts","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Shows how many rows were ignored on insertion due to corrupted or out of retention timestamps.","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":10,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short","unitScale":true},"overrides":[]},"gridPos":{"h":8,"w":12,"x":0,"y":37},"id":58,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","exemplar":false,"expr":"sum(increase(vm_rows_ignored_total{job=~\"$job\", instance=~\"$instance\"}[1h])) by (instance, reason)","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"{{instance}} - {{reason}}","range":true,"refId":"A"}],"title":"Rows ignored for last 1h","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"The number of on-going merges in storage nodes. It is expected to have high numbers for `storage/small` metric.","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"decimals":0,"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short","unitScale":true},"overrides":[]},"gridPos":{"h":8,"w":12,"x":12,"y":37},"id":62,"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(vm_active_merges{job=~\"$job\", instance=~\"$instance\"}) by(instance, type)","legendFormat":"{{instance}} - {{type}}","range":true,"refId":"A"}],"title":"Active merges","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Shows how many ongoing insertions (not API /write calls) on disk are taking place, where:\n* `max` - equal to number of CPUs;\n* `current` - current number of goroutines busy with inserting rows into underlying storage.\n\nEvery successful API /write call results into flush on disk. However, these two actions are separated and controlled via different concurrency limiters. The `max` on this panel can't be changed and always equal to number of CPUs. \n\nWhen `current` hits `max` constantly, it means storage is overloaded and requires more CPU.\n\n","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"decimals":0,"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short","unitScale":true},"overrides":[{"matcher":{"id":"byName","options":"max"},"properties":[{"id":"color","value":{"fixedColor":"#C4162A","mode":"fixed"}}]}]},"gridPos":{"h":8,"w":12,"x":0,"y":45},"id":59,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"max_over_time(vm_concurrent_insert_capacity{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"{{instance}} - max","range":true,"refId":"A"},{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(vm_concurrent_insert_current{job=~\"$job\", instance=~\"$instance\"}) by (instance)","format":"time_series","intervalFactor":1,"legendFormat":"{{instance}} - current","range":true,"refId":"B"}],"title":"Concurrent flushes on disk","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"The number of rows merged per second by storage nodes.","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"decimals":0,"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short","unitScale":true},"overrides":[]},"gridPos":{"h":8,"w":12,"x":12,"y":45},"id":64,"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(rate(vm_rows_merged_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])) by(instance, type)","legendFormat":"{{instance}} - {{type}}","range":true,"refId":"A"}],"title":"Merge speed","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"99th percentile of number of series read per query.","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"decimals":2,"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short","unitScale":true},"overrides":[]},"gridPos":{"h":8,"w":12,"x":0,"y":53},"id":99,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"histogram_quantile(0.99, sum(rate(vm_series_read_per_query_bucket{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])) by (instance, vmrange))","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"{{instance}}","range":true,"refId":"A"}],"title":"Series read per query","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"99th percentile of number of [data samples](https://docs.victoriametrics.com/keyconcepts/#raw-samples) read per queried series.","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"decimals":2,"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short","unitScale":true},"overrides":[]},"gridPos":{"h":8,"w":12,"x":12,"y":53},"id":103,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"histogram_quantile(0.99, sum(rate(vm_rows_read_per_series_bucket{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])) by (instance, vmrange))","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"{{instance}}","range":true,"refId":"A"}],"title":"Datapoints read per series","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"99th percentile of number of [data samples](https://docs.victoriametrics.com/keyconcepts/#raw-samples) read per query.","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"decimals":2,"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short","unitScale":true},"overrides":[]},"gridPos":{"h":8,"w":12,"x":0,"y":61},"id":122,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"histogram_quantile(0.99, sum(rate(vm_rows_read_per_query_bucket{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])) by (instance, vmrange))","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"{{instance}}","range":true,"refId":"A"}],"title":"Datapoints read per query","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"99th percentile of number of [data samples](https://docs.victoriametrics.com/keyconcepts/#raw-samples) scanner per query.\n\nThis number can exceed number of RowsReadPerQuery if `step` query arg passed to [/api/v1/query_range](https://prometheus.io/docs/prometheus/latest/querying/api/#range-queries) is smaller than the lookbehind window set in square brackets of [rollup function](https://docs.victoriametrics.com/metricsql/#rollup-functions). For example, if `increase(some_metric[1h])` is executed with the `step=5m`, then the same [data samples](https://docs.victoriametrics.com/keyconcepts/#raw-samples) on a hour time range are scanned `1h/5m=12` times. See [this article](https://valyala.medium.com/how-to-optimize-promql-and-metricsql-queries-85a1b75bf986) for details.","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"decimals":2,"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short","unitScale":true},"overrides":[]},"gridPos":{"h":8,"w":12,"x":12,"y":61},"id":105,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"histogram_quantile(0.99, sum(rate(vm_rows_scanned_per_query_bucket{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])) by (instance, vmrange))","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"{{instance}}","range":true,"refId":"A"}],"title":"Datapoints scanned per query","type":"timeseries"}],"targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"refId":"A"}],"title":"Storage","type":"row"}],"refresh":"","schemaVersion":39,"tags":["victoriametrics","vmsingle"],"templating":{"list":[{"current":{"selected":false,"text":"VictoriaMetrics","value":"P4169E866C3094E38"},"hide":0,"includeAll":false,"multi":false,"name":"ds","options":[],"query":"prometheus","queryValue":"","refresh":1,"regex":"","skipUrlSync":false,"type":"datasource"},{"current":{},"datasource":{"type":"prometheus","uid":"$ds"},"definition":"label_values(vm_app_version{version=~\"victoria-metrics-.*\"}, job)","hide":0,"includeAll":false,"multi":false,"name":"job","options":[],"query":{"query":"label_values(vm_app_version{version=~\"victoria-metrics-.*\"}, job)","refId":"VictoriaMetrics-job-Variable-Query"},"refresh":1,"regex":"","skipUrlSync":false,"sort":0,"tagValuesQuery":"","tagsQuery":"","type":"query","useTags":false},{"current":{},"datasource":{"type":"prometheus","uid":"$ds"},"definition":"label_values(vm_app_version{job=~\"$job\", instance=~\"$instance\"}, version)","hide":2,"includeAll":false,"multi":false,"name":"version","options":[],"query":{"query":"label_values(vm_app_version{job=~\"$job\", instance=~\"$instance\"}, version)","refId":"VictoriaMetrics-version-Variable-Query"},"refresh":1,"regex":"/.*-(?:tags|heads)-(.*)-(?:0|dirty)-.*/","skipUrlSync":false,"sort":2,"tagValuesQuery":"","tagsQuery":"","type":"query","useTags":false},{"allValue":".*","current":{},"datasource":{"type":"prometheus","uid":"$ds"},"definition":"label_values(vm_app_version{job=~\"$job\"}, instance)","hide":0,"includeAll":true,"multi":true,"name":"instance","options":[],"query":{"query":"label_values(vm_app_version{job=~\"$job\"}, instance)","refId":"VictoriaMetrics-instance-Variable-Query"},"refresh":1,"regex":"","skipUrlSync":false,"sort":0,"tagValuesQuery":"","tagsQuery":"","type":"query","useTags":false},{"datasource":{"type":"prometheus","uid":"$ds"},"filters":[],"hide":0,"name":"adhoc","skipUrlSync":false,"type":"adhoc"}]},"time":{"from":"now-3h","to":"now"},"timepicker":{"refresh_intervals":["10s","30s","1m","5m","15m","30m","1h","2h","1d"],"time_options":["5m","15m","1h","6h","12h","24h","2d","7d","30d"]},"timezone":"","title":"VictoriaMetrics - single-node","uid":"vm","version":1,"weekStart":""}
···
-106
systems/koumakan/services/telemetry/grafana/default.nix
··· 1 - { 2 - _utils, 3 - config, 4 - ... 5 - }: 6 - let 7 - secrets = _utils.setupSecrets config { 8 - namespace = "grafana"; 9 - secrets = [ 10 - "oauth2/github/cid" 11 - "oauth2/github/cse" 12 - "oauth2/gateway/cid" 13 - "oauth2/gateway/cse" 14 - ]; 15 - config = { 16 - owner = config.users.users.grafana.name; 17 - }; 18 - }; 19 - fromSecret = path: "$__file{${secrets.get path}}"; 20 - in 21 - { 22 - imports = [ 23 - secrets.generate 24 - ./provisioning.nix 25 - ]; 26 - 27 - users.users.grafana.extraGroups = [ 28 - "nginx" 29 - ]; 30 - 31 - services.grafana = { 32 - enable = true; 33 - settings = { 34 - server = { 35 - protocol = "socket"; 36 - socket_gid = config.users.groups.nginx.gid; 37 - read_timeout = "1m"; 38 - 39 - domain = "suika.soopy.moe"; 40 - enforce_domain = true; 41 - 42 - root_url = "https://suika.soopy.moe/"; 43 - router_logging = false; 44 - }; 45 - 46 - security = { 47 - disable_initial_admin_creation = true; 48 - disable_gravatar = false; 49 - cookie_secure = true; 50 - cookie_samesite = "lax"; 51 - }; 52 - 53 - dashboards = { 54 - versions_to_keep = 5; 55 - min_refresh_interval = "30s"; 56 - }; 57 - 58 - users = { 59 - allow_sign_up = false; 60 - allow_org_create = false; 61 - }; 62 - 63 - auth = { 64 - login_cookie_name = "girls_last_stats"; 65 - disable_login_form = true; 66 - }; 67 - 68 - snapshots = { 69 - enabled = true; 70 - external_enabled = true; 71 - }; 72 - 73 - # "auth.generic_oauth" = { 74 - # name = "GensoGateway"; 75 - # enabled = true; 76 - 77 - # allow_sign_up = true; 78 - 79 - # client_id = fromSecret "oauth2/gateway/cid"; 80 - # client_secret = fromSecret "oauth2/gateway/cse"; 81 - # scopes = "openid email profile offline_access roles"; 82 - 83 - # email_attribute_path = "email"; 84 - # login_attribute_path = "username"; 85 - # name_attribute_path = "username"; 86 - 87 - # auth_url = "https://gateway.soopy.moe/realms/gensokyo/protocol/openid-connect/auth"; 88 - # token_url = "https://gateway.soopy.moe/realms/gensokyo/protocol/openid-connect/token"; 89 - # api_url = "https://gateway.soopy.moe/realms/gensokyo/protocol/openid-connect/userinfo"; 90 - # }; 91 - 92 - "auth.github" = { 93 - enabled = true; 94 - allow_sign_up = true; # TODO: disable this when we're done with gensogateway 95 - client_id = fromSecret "oauth2/github/cid"; 96 - client_secret = fromSecret "oauth2/github/cse"; 97 - scopes = "user:email,read:org"; 98 - }; 99 - }; 100 - }; 101 - 102 - services.nginx.virtualHosts."suika.soopy.moe" = _utils.mkSimpleProxy { 103 - socketPath = config.services.grafana.settings.server.socket; 104 - websockets = true; 105 - }; 106 - }
···
-34
systems/koumakan/services/telemetry/grafana/provisioning.nix
··· 1 - { ... }: 2 - { 3 - services.grafana.provision = { 4 - datasources.settings = { 5 - apiVersion = 1; # i am stupid. keep this as 1. 6 - 7 - datasources = [ 8 - { 9 - version = 2; 10 - name = "panopticon"; 11 - type = "prometheus"; 12 - uid = "gs_panopticon"; 13 - url = "http://localhost:20090"; 14 - isDefault = true; 15 - jsonData = { 16 - prometheusVersion = "2.44.0"; 17 - }; 18 - } 19 - ]; 20 - }; 21 - 22 - dashboards.settings = { 23 - apiVersion = 1; # same as above 24 - 25 - providers = [ 26 - { 27 - name = "flake"; 28 - allowUiUpdates = false; 29 - options.path = ./dashboards; 30 - } 31 - ]; 32 - }; 33 - }; 34 - }
···
-124
systems/koumakan/services/telemetry/victoriametrics.nix
··· 1 - { 2 - config, 3 - lib, 4 - _utils, 5 - ... 6 - }: 7 - let 8 - monitoredHosts = [ 9 - "satori" 10 - "renko" 11 - "kita" 12 - "ryo" 13 - "nijika" 14 - ]; 15 - secrets = _utils.setupSecrets config { 16 - namespace = "vmetrics"; 17 - secrets = builtins.map (f: "auth/hosts/" + f) monitoredHosts; 18 - }; 19 - in 20 - { 21 - imports = [ 22 - secrets.generate 23 - 24 - (secrets.mkTemplate "vmauth.env" ( 25 - lib.concatLines ( 26 - builtins.map ( 27 - host: "AUTH_${lib.toUpper host}_TOKEN=${secrets.placeholder "auth/hosts/${host}"}" 28 - ) monitoredHosts 29 - ) 30 - )) 31 - ]; 32 - 33 - services.victoriametrics = { 34 - enable = true; 35 - listenAddress = "127.0.0.1:20090"; 36 - retentionPeriod = "5y"; # 5 years 37 - }; 38 - 39 - services.vmagent = { 40 - enable = true; 41 - remoteWrite.url = "http://${config.services.victoriametrics.listenAddress}/api/v1/write"; 42 - prometheusConfig = { 43 - global = { 44 - scrape_interval = "30s"; 45 - }; 46 - 47 - scrape_configs = [ 48 - { 49 - job_name = "victoriametrics"; 50 - scrape_interval = "15s"; 51 - static_configs = lib.singleton { 52 - targets = lib.singleton "${builtins.toString config.services.victoriametrics.listenAddress}"; 53 - }; 54 - } 55 - 56 - # node exporters 57 - { 58 - job_name = "node"; 59 - scrape_interval = "15s"; 60 - static_configs = lib.singleton { 61 - targets = lib.singleton "localhost:${builtins.toString config.services.prometheus.exporters.node.port}"; 62 - }; 63 - relabel_configs = lib.singleton { 64 - target_label = "instance"; 65 - replacement = "koumakan"; 66 - }; 67 - } 68 - 69 - # external nodes uses remote write 70 - # [mail, gateway] 71 - 72 - # other services' metrics 73 - { 74 - job_name = "nginx"; 75 - static_configs = lib.singleton { 76 - targets = lib.singleton "localhost:${builtins.toString config.services.prometheus.exporters.nginx.port}"; 77 - }; 78 - relabel_configs = lib.singleton { 79 - target_label = "instance"; 80 - replacement = "koumakan"; 81 - }; 82 - } 83 - ]; 84 - }; 85 - }; 86 - 87 - # vmetrics docs suggests NOT to expose any vmetrics component to the public except vmauth or vmgateway, so we're not going to do that. 88 - # this unfortunately requires a custom module which we have written ourselves, and might upstream to core nixpkgs when we are sure of its stability. 89 - # some may wonder why we can't just use nginx directly instead of another module 90 - # i mean, yeah. vmauth is honestly just another nginx. whatever, i do not care. i'm tired. 91 - 92 - # module search: https://mystia.soopy.moe 93 - services.vmauth = { 94 - enable = true; 95 - listenAddress = "127.0.0.1:21000"; 96 - authConfig = { 97 - users = builtins.concatMap ( 98 - token: 99 - lib.singleton { 100 - bearer_token = token; 101 - url_prefix = "http://${config.services.victoriametrics.listenAddress}"; # send directly to vm 102 - } 103 - ) (builtins.map (host: "%{AUTH_${lib.toUpper host}_TOKEN}") monitoredHosts); 104 - }; 105 - environmentFile = secrets.getTemplate "vmauth.env"; 106 - }; 107 - 108 - # expose vmauth remote write endpoint 109 - services.nginx.virtualHosts."panopticon.soopy.moe" = _utils.mkVhost { 110 - # Deny all routes by default 111 - # This is strictly a write-only exposure so anything else can explod. 112 - locations."/".return = "444"; 113 - 114 - locations."= /".extraConfig = '' 115 - add_header content-type text/plain; 116 - return 200 "HTTP/1.1 100 CONTINUE - big sister is watching you."; 117 - ''; 118 - 119 - # Allow only the write route 120 - locations."~* /api/.*/write" = { 121 - proxyPass = "http://127.0.0.1:21000"; 122 - }; 123 - }; 124 - }
···
-53
systems/renko/configuration.nix
··· 1 - { 2 - inputs, 3 - ... 4 - }: 5 - { 6 - imports = [ 7 - ./gui 8 - ./development 9 - ./services 10 - inputs.nixos-hardware.nixosModules.common-cpu-amd-pstate 11 - inputs.nixos-hardware.nixosModules.common-gpu-amd 12 - ]; 13 - 14 - gensokyo = { 15 - traits = { 16 - gui = true; 17 - games = true; 18 - }; 19 - presets = { 20 - vmetrics = true; 21 - secureboot = true; 22 - }; 23 - system-manager = { 24 - enable = true; 25 - flakeLocation = "/home/cassie/gensokyo"; 26 - }; 27 - }; 28 - 29 - # boot.kernelPackages = pkgs.linuxPackages_latest; 30 - # Use the systemd-boot EFI boot loader. 31 - boot.loader.systemd-boot = { 32 - enable = true; 33 - consoleMode = "max"; 34 - }; 35 - boot.initrd.systemd.enable = true; 36 - 37 - boot.loader.efi.canTouchEfiVariables = true; 38 - boot.loader.efi.efiSysMountPoint = "/efi"; 39 - 40 - fileSystems."/".options = [ 41 - "compress=zstd:5" 42 - "autodefrag" 43 - ]; 44 - 45 - networking.firewall = { 46 - allowedTCPPorts = [ 59153 5515 ]; 47 - }; 48 - 49 - # muh unfree software!!!!!!!!!!!!!!!!!! 50 - nixpkgs.config.allowUnfree = true; 51 - 52 - system.stateVersion = "23.11"; # Did you read the comment? Yes. 53 - }
···
-4
systems/renko/development/adb.nix
··· 1 - { 2 - programs.adb.enable = true; 3 - users.users.cassie.extraGroups = [ "adbusers" ]; 4 - }
···
-9
systems/renko/development/default.nix
··· 1 - { ... }: 2 - { 3 - imports = [ 4 - ./adb.nix 5 - ./docker.nix 6 - ./jvm.nix 7 - ./postgresql.nix 8 - ]; 9 - }
···
-11
systems/renko/development/docker.nix
··· 1 - { ... }: 2 - { 3 - virtualisation.docker = { 4 - enable = true; 5 - storageDriver = "btrfs"; 6 - }; 7 - 8 - users.groups.docker.members = [ 9 - "cassie" 10 - ]; 11 - }
···
-6
systems/renko/development/jvm.nix
··· 1 - { pkgs, ... }: 2 - { 3 - environment.systemPackages = [ 4 - pkgs.jetbrains.idea-ultimate 5 - ]; 6 - }
···
-13
systems/renko/development/postgresql.nix
··· 1 - { lib, ... }: 2 - { 3 - services.postgresql = { 4 - enable = true; 5 - enableTCPIP = true; 6 - 7 - authentication = lib.mkForce '' 8 - local all all peer 9 - host all all 127.0.0.1/32 scram-sha-256 10 - host all all ::1/128 scram-sha-256 11 - ''; 12 - }; 13 - }
···
-9
systems/renko/gui/default.nix
··· 1 - { ... }: 2 - { 3 - imports = [ 4 - ./virt.nix 5 - ./finance.nix 6 - 7 - ./games 8 - ]; 9 - }
···
-6
systems/renko/gui/finance.nix
··· 1 - { ... }: 2 - { 3 - environment.systemPackages = [ 4 - # pkgs.kmymoney 5 - ]; 6 - }
···
-96
systems/renko/gui/games/_osu.nix
··· 1 - { 2 - lib, 3 - stdenvNoCC, 4 - fetchurl, 5 - appimageTools, 6 - makeWrapper, 7 - nativeWayland ? false, 8 - 9 - version, 10 - hash, 11 - }: 12 - 13 - let 14 - pname = "osu-lazer-bin"; 15 - 16 - src = fetchurl { 17 - inherit hash; 18 - url = "https://github.com/ppy/osu/releases/download/${version}/osu.AppImage"; 19 - }; 20 - 21 - meta = { 22 - description = "Rhythm is just a *click* away (tachyon, patched drv)"; 23 - homepage = "https://osu.ppy.sh"; 24 - license = with lib.licenses; [ 25 - mit 26 - cc-by-nc-40 27 - unfreeRedistributable # osu-framework contains libbass.so in repository 28 - ]; 29 - sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ]; 30 - maintainers = with lib.maintainers; [ 31 - gepbird 32 - stepbrobd 33 - Guanran928 34 - soopyc 35 - ]; 36 - mainProgram = "osu!"; 37 - platforms = [ 38 - "x86_64-linux" 39 - ]; 40 - }; 41 - 42 - passthru.updateScript = ./update.sh; 43 - in 44 - if stdenvNoCC.hostPlatform.isDarwin then 45 - stdenvNoCC.mkDerivation { 46 - inherit 47 - pname 48 - version 49 - src 50 - meta 51 - passthru 52 - ; 53 - 54 - nativeBuildInputs = [ makeWrapper ]; 55 - 56 - installPhase = '' 57 - runHook preInstall 58 - OSU_WRAPPER="$out/Applications/osu!.app/Contents" 59 - OSU_CONTENTS="osu!.app/Contents" 60 - mkdir -p "$OSU_WRAPPER/MacOS" 61 - cp -r "$OSU_CONTENTS/Info.plist" "$OSU_CONTENTS/Resources" "$OSU_WRAPPER" 62 - cp -r "osu!.app" "$OSU_WRAPPER/Resources/osu-wrapped.app" 63 - makeWrapper "$OSU_WRAPPER/Resources/osu-wrapped.app/Contents/MacOS/osu!" "$OSU_WRAPPER/MacOS/osu!" --set OSU_EXTERNAL_UPDATE_PROVIDER 1 64 - runHook postInstall 65 - ''; 66 - } 67 - else 68 - appimageTools.wrapType2 { 69 - inherit 70 - pname 71 - version 72 - src 73 - meta 74 - passthru 75 - ; 76 - 77 - extraPkgs = pkgs: with pkgs; [ icu ]; 78 - 79 - extraInstallCommands = 80 - let 81 - contents = appimageTools.extract { inherit pname version src; }; 82 - in 83 - '' 84 - . ${makeWrapper}/nix-support/setup-hook 85 - mv -v $out/bin/${pname} $out/bin/osu! 86 - 87 - wrapProgram $out/bin/osu! \ 88 - ${lib.optionalString nativeWayland "--set SDL_VIDEODRIVER wayland"} \ 89 - --set OSU_EXTERNAL_UPDATE_PROVIDER 1 90 - 91 - install -m 444 -D ${contents}/osu!.desktop -t $out/share/applications 92 - for i in 16 32 48 64 96 128 256 512 1024; do 93 - install -D ${contents}/osu.png $out/share/icons/hicolor/''${i}x$i/apps/osu.png 94 - done 95 - ''; 96 - }
···
-11
systems/renko/gui/games/default.nix
··· 1 - { ... }: 2 - { 3 - imports = [ 4 - ./osu.nix 5 - ./steam.nix 6 - ./minecraft.nix 7 - ./lutris.nix 8 - 9 - ./hud.nix 10 - ]; 11 - }
···
-11
systems/renko/gui/games/hud.nix
··· 1 - { 2 - pkgs, 3 - lib, 4 - config, 5 - ... 6 - }: 7 - lib.mkIf config.gensokyo.traits.games { 8 - environment.systemPackages = [ 9 - pkgs.mangohud 10 - ]; 11 - }
···
-11
systems/renko/gui/games/lutris.nix
··· 1 - { 2 - pkgs, 3 - lib, 4 - config, 5 - ... 6 - }: 7 - lib.mkIf config.gensokyo.traits.games { 8 - environment.systemPackages = [ 9 - pkgs.lutris 10 - ]; 11 - }
···
-11
systems/renko/gui/games/minecraft.nix
··· 1 - { 2 - pkgs, 3 - lib, 4 - config, 5 - ... 6 - }: 7 - lib.mkIf config.gensokyo.traits.games { 8 - environment.systemPackages = [ 9 - pkgs.prismlauncher 10 - ]; 11 - }
···
-16
systems/renko/gui/games/osu.nix
··· 1 - { 2 - lib, 3 - config, 4 - pkgs, 5 - ... 6 - }: 7 - lib.mkIf config.gensokyo.traits.games { 8 - environment.systemPackages = [ 9 - # this override is crap don't do it 10 - (pkgs.callPackage ./_osu.nix { 11 - version = "2025.912.0-lazer"; 12 - hash = "sha256-73UY3RJp0pFfbxRWX8qSnLeoZB/BRGtucmQClJP7Qwg="; 13 - # nativeWayland = true; # this doesnt window properly 14 - }) 15 - ]; 16 - }
···
-17
systems/renko/gui/games/steam.nix
··· 1 - { 2 - pkgs, 3 - lib, 4 - config, 5 - ... 6 - }: 7 - lib.mkIf config.gensokyo.traits.games { 8 - programs.steam = { 9 - enable = true; 10 - 11 - extraCompatPackages = [ 12 - pkgs.proton-ge-bin 13 - ]; 14 - 15 - protontricks.enable = true; 16 - }; 17 - }
···
-8
systems/renko/gui/graphics.nix
··· 1 - { 2 - # enforce settings 3 - hardware.opengl = { 4 - enable = true; 5 - driSupport = true; 6 - driSupport32Bit = true; 7 - }; 8 - }
···
-7
systems/renko/gui/media.nix
··· 1 - { pkgs, ... }: 2 - { 3 - environment.systemPackages = [ 4 - # only renko is powerful enough to run this 5 - pkgs.blender 6 - ]; 7 - }
···
-29
systems/renko/gui/virt.nix
··· 1 - { 2 - programs.virt-manager.enable = true; 3 - virtualisation.libvirtd = { 4 - enable = true; 5 - qemu.swtpm.enable = true; 6 - }; 7 - 8 - virtualisation.waydroid.enable = true; 9 - 10 - # try virtualbox 11 - virtualisation.virtualbox.host = { 12 - enable = true; 13 - enableKvm = true; 14 - enableExtensionPack = false; 15 - addNetworkInterface = false; # conflicts with KVM 16 - }; 17 - 18 - # GPU Passthrough 19 - # boot.initrd.kernelModules = [ 20 - # "vfio_pci" "vfio" "vfio_iommu_type1" "amdgpu" 21 - # ]; 22 - # boot.kernelParams = lib.singleton ("vfio-pci.ids=" + lib.concatStringsSep "," [ 23 - # "1002:7480" # GPU video 24 - # "1002:ab30" # GPU Audio 25 - # ]); 26 - # virtualisation.spiceUSBRedirection.enable = true; 27 - 28 - # vm performance is still terrible after pinning 29 - }
···
-55
systems/renko/hardware-configuration.nix
··· 1 - # Do not modify this file! It was generated by โ€˜nixos-generate-configโ€™ 2 - # and may be overwritten by future invocations. Please make changes 3 - # to /etc/nixos/configuration.nix instead. 4 - { 5 - config, 6 - lib, 7 - modulesPath, 8 - ... 9 - }: 10 - { 11 - imports = [ 12 - (modulesPath + "/installer/scan/not-detected.nix") 13 - ]; 14 - 15 - boot.initrd.availableKernelModules = [ 16 - "nvme" 17 - "xhci_pci" 18 - "ahci" 19 - "usbhid" 20 - ]; 21 - boot.initrd.kernelModules = [ ]; 22 - boot.kernelModules = [ "kvm-amd" ]; 23 - boot.extraModulePackages = [ ]; 24 - 25 - fileSystems."/" = { 26 - device = "/dev/disk/by-uuid/e6637f8a-12fc-4aa4-8335-3fad10d8f63a"; 27 - fsType = "btrfs"; 28 - }; 29 - 30 - boot.initrd.luks.devices."gock".device = "/dev/disk/by-uuid/9d57daa1-f152-443d-992c-b58cbfa57ec1"; 31 - 32 - fileSystems."/efi" = { 33 - device = "/dev/disk/by-uuid/77E6-011C"; 34 - fsType = "vfat"; 35 - options = [ 36 - "fmask=0022" 37 - "dmask=0022" 38 - "umask=0077" 39 - ]; 40 - }; 41 - 42 - swapDevices = [ 43 - { device = "/dev/disk/by-uuid/40a77774-ab28-45db-8f8a-845814eacba9"; } 44 - ]; 45 - 46 - # Enables DHCP on each ethernet and wireless interface. In case of scripted networking 47 - # (the default) this is the recommended approach. When using systemd-networkd it's 48 - # still possible to use this option, but it's recommended to use it in conjunction 49 - # with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`. 50 - networking.useDHCP = lib.mkDefault true; 51 - # networking.interfaces.eno1.useDHCP = lib.mkDefault true; 52 - 53 - nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; 54 - hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; 55 - }
···
-38
systems/renko/services/backup-servers.nix
··· 1 - { lib, pkgs, ... }: 2 - { 3 - systemd.user = { 4 - timers.backup-2025 = { 5 - wantedBy = lib.singleton "default.target"; 6 - timerConfig = { 7 - OnCalendar = "*:0/5"; 8 - AccuracySec = "1us"; 9 - }; 10 - }; 11 - 12 - services.backup-2025 = { 13 - path = with pkgs; [ 14 - rsync 15 - openssh 16 - ]; 17 - script = '' 18 - SOURCE="/home/cassie/mcservers/season-2025" 19 - DESTINATION="backup@koumakan:/home/backup/public/" 20 - rsync \ 21 - -rltH \ 22 - --rsh="ssh -i $HOME/.ssh/id_backup_koumakan" \ 23 - --safe-links \ 24 - --delay-updates \ 25 - --human-readable --progress \ 26 - --exclude="*/bluemap/web" \ 27 - --exclude="*/libraries" \ 28 - --exclude=".fabric" \ 29 - --exclude="*.tmp" \ 30 - --exclude="*/tmp" \ 31 - --exclude="DistantHorizons.sqlite*" \ 32 - --verbose \ 33 - $SOURCE \ 34 - $DESTINATION 35 - ''; 36 - }; 37 - }; 38 - }
···
-7
systems/renko/services/default.nix
··· 1 - { 2 - imports = [ 3 - ./backup-servers.nix 4 - ./forgejo-runner.nix 5 - ./proxy.nix 6 - ]; 7 - }
···
-29
systems/renko/services/forgejo-runner.nix
··· 1 - { 2 - _utils, 3 - config, 4 - lib, 5 - pkgs, 6 - ... 7 - }: 8 - let 9 - secrets = _utils.setupSecrets config { 10 - namespace = "forgejo"; 11 - secrets = [ "tokenFile" ]; 12 - }; 13 - in 14 - { 15 - imports = lib.singleton secrets.generate; 16 - 17 - services.gitea-actions-runner = { 18 - package = pkgs.forgejo-runner; 19 - instances.default = { 20 - enable = true; 21 - name = "renko-default"; 22 - url = "https://patchy.soopy.moe"; 23 - tokenFile = secrets.get "tokenFile"; 24 - labels = [ 25 - "debian-trixie:docker://node:24-trixie" 26 - ]; 27 - }; 28 - }; 29 - }
···
-19
systems/renko/services/proxy.nix
··· 1 - { 2 - services.nginx = { 3 - enable = true; 4 - recommendedOptimisation = true; 5 - 6 - virtualHosts."renko.mist-nessie.ts.net" = { 7 - listen = [ 8 - { 9 - addr = "100.86.12.107"; 10 - port = 80; 11 - } 12 - ]; 13 - 14 - locations."/" = { 15 - proxyPass = "http://110.40.153.242"; 16 - }; 17 - }; 18 - }; 19 - }
···
-21
systems/ryo/configuration.nix
··· 1 - # ryo because empty-headed. also btr naming scheme. 2 - # DO NOT copy anything done on this host, it's insecure by design. 3 - { ... }: 4 - { 5 - imports = [ 6 - ./services 7 - ]; 8 - 9 - gensokyo.presets = { 10 - vmetrics = true; 11 - certificates = true; 12 - nginx = true; 13 - }; 14 - swapDevices = [ 15 - { 16 - device = "/Swapfile"; 17 - size = 2048; 18 - } 19 - ]; 20 - system.stateVersion = "23.11"; 21 - }
···
-35
systems/ryo/hardware-configuration.nix
··· 1 - { 2 - modulesPath, 3 - lib, 4 - ... 5 - }: 6 - { 7 - imports = [ (modulesPath + "/profiles/qemu-guest.nix") ]; 8 - 9 - boot.initrd.availableKernelModules = [ 10 - "ata_piix" 11 - "uhci_hcd" 12 - "virtio_pci" 13 - "virtio_scsi" 14 - "sd_mod" 15 - "xen_blkfront" 16 - "vmw_pvscsi" 17 - ]; 18 - boot.initrd.kernelModules = [ "nvme" ]; 19 - boot.loader.grub = { 20 - efiSupport = true; 21 - efiInstallAsRemovable = true; 22 - device = "nodev"; 23 - }; 24 - 25 - fileSystems."/boot" = { 26 - device = "/dev/disk/by-uuid/14EF-4002"; 27 - fsType = "vfat"; 28 - }; 29 - fileSystems."/" = { 30 - device = "/dev/disk/by-uuid/88cb39be-b19e-4c4a-b544-286b2f45f003"; 31 - fsType = "xfs"; 32 - }; 33 - 34 - nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; 35 - }
···
-7
systems/ryo/services/default.nix
··· 1 - { ... }: 2 - { 3 - imports = [ 4 - ./novnc.nix 5 - ./thefunny.nix 6 - ]; 7 - }
···
-45
systems/ryo/services/novnc.nix
··· 1 - { 2 - _utils, 3 - pkgs, 4 - lib, 5 - ... 6 - }: 7 - { 8 - services.nginx.virtualHosts."ryo.soopy.moe" = _utils.mkSimpleProxy { 9 - port = 6080; 10 - websockets = true; 11 - extraConfig = { 12 - locations."= /".return = "303 /vnc_lite.html"; 13 - enableACME = true; # don't bother with DNS-01 14 - useACMEHost = null; 15 - }; 16 - }; 17 - 18 - systemd.services."novnc" = { 19 - enable = true; 20 - wantedBy = [ "multi-user.target" ]; 21 - path = with pkgs; [ procps ]; 22 - serviceConfig = { 23 - DynamicUser = true; 24 - ExecStart = "${lib.getExe pkgs.novnc} --file-only"; 25 - 26 - # hardening 27 - PrivateUsers = true; 28 - LockPersonality = true; 29 - ProtectHostname = true; 30 - ProtectKernelTunables = true; 31 - ProtectDevices = true; 32 - ProtectClock = true; 33 - SystemCallArchitectures = "native"; 34 - CapabilityBoundingSet = null; 35 - RestrictAddressFamilies = [ 36 - "AF_INET" 37 - "AF_INET6" 38 - ]; 39 - SystemCallFilter = [ 40 - "@system-service" 41 - "~@privileged" 42 - ]; 43 - }; 44 - }; 45 - }
···
-86
systems/ryo/services/thefunny.nix
··· 1 - { 2 - pkgs, 3 - lib, 4 - ... 5 - }: 6 - let 7 - serviceHardening = { 8 - PrivateUsers = true; 9 - LockPersonality = true; 10 - ProtectHostname = true; 11 - ProtectKernelTunables = true; 12 - ProtectClock = true; 13 - ProtectSystem = true; 14 - ProtectProc = true; 15 - ProtectHome = true; 16 - PrivateTmp = true; 17 - PrivateDevices = false; # cage's drmGetDevices need devices despite being headless. 18 - SystemCallArchitectures = "native"; 19 - CapabilityBoundingSet = null; 20 - NoNewPrivileges = true; 21 - RestrictAddressFamilies = [ 22 - "AF_INET" 23 - "AF_INET6" 24 - "AF_UNIX" 25 - ]; 26 - SystemCallFilter = [ 27 - "@system-service" 28 - # "~@privileged" # cage/wlroots needs setgid for some reason? 29 - ]; 30 - }; 31 - in 32 - { 33 - users.users.funny = { 34 - isSystemUser = true; 35 - group = "funny"; 36 - }; 37 - users.groups.funny = { }; 38 - 39 - systemd.services = { 40 - cage-feh = { 41 - wantedBy = [ "multi-user.target" ]; 42 - serviceConfig = { 43 - User = "funny"; 44 - RuntimeDirectory = "funny"; 45 - Restart = "on-failure"; 46 - RestartSec = "1"; 47 - } 48 - // serviceHardening; 49 - path = with pkgs; [ 50 - cage 51 - feh 52 - ]; 53 - script = '' 54 - set -e 55 - cage -d feh -- -.dz -D10 --draw-tinted /srv/funny 56 - ''; 57 - environment = { 58 - WLR_BACKENDS = "headless"; 59 - WLR_LIBINPUT_NO_DEVICES = "1"; 60 - XDG_RUNTIME_DIR = "%t/funny"; # if this is set to %t only, it fails with a cryptic "invalid argument" error but in fact it's probably just a permission denied error. 61 - }; 62 - }; 63 - 64 - wayvnc-feh = { 65 - wantedBy = [ "multi-user.target" ]; 66 - requires = [ "cage-feh.service" ]; 67 - after = [ "cage-feh.service" ]; 68 - serviceConfig = { 69 - User = "funny"; 70 - RuntimeDirectory = "funny"; 71 - ExecStart = "${lib.getExe pkgs.wayvnc} -d 0.0.0.0"; 72 - Restart = "on-failure"; 73 - RestartSec = "1"; 74 - } 75 - // serviceHardening; 76 - environment = { 77 - WAYLAND_DISPLAY = "wayland-0"; 78 - XDG_RUNTIME_DIR = "%t/funny"; 79 - }; 80 - }; 81 - }; 82 - 83 - networking.firewall.allowedTCPPorts = [ 84 - 5900 # vnc; yes this is intended. 85 - ]; 86 - }
···
-92
systems/satori/configuration.nix
··· 1 - { 2 - inputs, 3 - pkgs, 4 - lib, 5 - ... 6 - }: 7 - { 8 - imports = [ 9 - ./steam.nix 10 - inputs.nixos-hardware.nixosModules.apple-t2 11 - inputs.nixos-hardware.nixosModules.common-cpu-intel 12 - ]; 13 - 14 - gensokyo = { 15 - traits = { 16 - gui = true; 17 - games = true; 18 - portable = true; 19 - hidpi = true; 20 - }; 21 - presets = { 22 - vmetrics = true; 23 - }; 24 - system-manager = { 25 - enable = true; 26 - flakeLocation = "/home/cassie/gensokyo"; 27 - }; 28 - }; 29 - 30 - # Use the systemd-boot EFI boot loader. 31 - boot.loader.systemd-boot.enable = true; 32 - boot.loader.efi.canTouchEfiVariables = true; 33 - boot.loader.efi.efiSysMountPoint = "/boot"; 34 - 35 - # development 36 - # services.redis.servers."".enable = true; 37 - 38 - boot.initrd.systemd.enable = true; 39 - hardware.apple.touchBar = { 40 - enable = true; 41 - settings = { 42 - FontTemplate = "Hurmit Nerd Font"; 43 - }; 44 - }; 45 - hardware.firmware = [ 46 - inputs.self.packages.${pkgs.system}.brcmfmac 47 - ]; 48 - 49 - hardware.apple-t2.kernelChannel = "stable"; 50 - specialisation.latest-kernel.configuration.hardware.apple-t2.kernelChannel = lib.mkForce "latest"; 51 - 52 - # experimental 53 - boot.kernelParams = [ "mem_sleep_default=s2idle" ]; 54 - systemd = { 55 - services.tiny-dfr = { 56 - wantedBy = [ 57 - "post-resume.target" 58 - "dev-tiny_dfr_display.device" 59 - "dev-tiny_dfr_backlight.device" 60 - "dev-tiny_dfr_display_backlight.device" 61 - ]; 62 - after = [ "post-resume.target" ]; 63 - }; 64 - }; 65 - 66 - environment.etc."systemd/timesyncd.conf.d/50-save-clock.conf".text = '' 67 - [Time] 68 - SaveIntervalSec=30 69 - ''; 70 - 71 - environment.systemPackages = [ 72 - pkgs.jetbrains.idea-ultimate 73 - pkgs.prismlauncher 74 - ]; 75 - 76 - # TODO: make this a trait 77 - virtualisation.docker = { 78 - enable = true; 79 - storageDriver = "btrfs"; 80 - }; 81 - 82 - users.groups.docker.members = [ 83 - "cassie" 84 - ]; 85 - 86 - zramSwap.enable = true; 87 - 88 - # muh unfree software!!!!!!!!!!!!!!!!!! 89 - nixpkgs.config.allowUnfree = true; 90 - 91 - system.stateVersion = "23.05"; # Did you read the comment? Yes. 92 - }
···
-53
systems/satori/hardware-configuration.nix
··· 1 - # Do not modify this file! It was generated by โ€˜nixos-generate-configโ€™ 2 - # and may be overwritten by future invocations. Please make changes 3 - # to /etc/nixos/configuration.nix instead. 4 - { 5 - config, 6 - lib, 7 - modulesPath, 8 - ... 9 - }: 10 - { 11 - imports = [ 12 - (modulesPath + "/installer/scan/not-detected.nix") 13 - ]; 14 - 15 - boot.initrd.availableKernelModules = [ 16 - "xhci_pci" 17 - "nvme" 18 - "usbhid" 19 - "usb_storage" 20 - "sd_mod" 21 - ]; 22 - boot.initrd.kernelModules = [ ]; 23 - boot.kernelModules = [ "kvm-intel" ]; 24 - boot.extraModulePackages = [ ]; 25 - 26 - fileSystems."/" = { 27 - device = "/dev/disk/by-uuid/f4bb41e2-b477-49e7-ae96-61fd80a63b2e"; 28 - fsType = "btrfs"; 29 - }; 30 - 31 - fileSystems."/boot" = { 32 - device = "/dev/disk/by-uuid/3231-A446"; 33 - fsType = "vfat"; 34 - options = [ 35 - "fmask=0022" 36 - "dmask=0022" 37 - "umask=0077" 38 - ]; 39 - }; 40 - 41 - swapDevices = [ ]; 42 - 43 - # Enables DHCP on each ethernet and wireless interface. In case of scripted networking 44 - # (the default) this is the recommended approach. When using systemd-networkd it's 45 - # still possible to use this option, but it's recommended to use it in conjunction 46 - # with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`. 47 - networking.useDHCP = lib.mkDefault true; 48 - # networking.interfaces.enp0s13f0u2.useDHCP = lib.mkDefault true; 49 - # networking.interfaces.enp230s0f1u1.useDHCP = lib.mkDefault true; 50 - 51 - nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; 52 - hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; 53 - }
···
-14
systems/satori/steam.nix
··· 1 - { pkgs, ... }: 2 - { 3 - programs.steam = { 4 - enable = true; 5 - 6 - extraCompatPackages = [ 7 - pkgs.proton-ge-bin 8 - ]; 9 - }; 10 - 11 - environment.systemPackages = [ 12 - pkgs.protontricks 13 - ]; 14 - }
···
-8
users/README.md
··· 1 - # gensokyo/users 2 - 3 - This directory holds per-user configurations. 4 - 5 - Note that files in `./home/` directories are **not** NixOS modules, rather 6 - [Home Manager](https://github.com/nix-community/home-manager) modules. You can 7 - see the available options [in the HM manual](https://nix-community.github.io/home-manager/options.xhtml) 8 - or with the [option searcher](https://home-manager-options.extranix.com/).
···
-8
users/_tester.nix
··· 1 - { ... }: 2 - { 3 - virtualisation.vmVariant.users.users._tester = builtins.warn "[vm] building tester user..." { 4 - password = "explode"; 5 - isNormalUser = true; 6 - extraGroups = [ "wheel" ]; 7 - }; 8 - }
···
-28
users/builder.nix
··· 1 - { 2 - inputs, 3 - config, 4 - lib, 5 - pkgs, 6 - ... 7 - }: 8 - lib.mkIf (!config.gensokyo.traits.sensitive) { 9 - users.users.builder = { 10 - openssh = { 11 - authorizedKeys.keyFiles = [ 12 - (inputs.self + "/creds/ssh/users/builder") 13 - ]; 14 - }; 15 - isNormalUser = false; 16 - isSystemUser = true; 17 - # group = "nixbld"; 18 - # https://github.com/NixOS/nix/blob/946fd29422361e8478425d6aaf9ccae23d7ddffb/src/nix/daemon.cc#L266-L267 19 - # https://discourse.nixos.org/t/strange-remote-build-issue/24387/4 20 - group = "remote-builder"; 21 - 22 - # allow builders to actually access nix 23 - # todo: harden this somehow 24 - shell = pkgs.zsh; 25 - }; 26 - 27 - users.groups.remote-builder = { }; 28 - }
···
-14
users/cassie/default.nix
··· 1 - { 2 - users.users.cassie = { 3 - isNormalUser = true; 4 - extraGroups = [ 5 - "wheel" 6 - "dialout" # esp programming 7 - ]; 8 - openssh = { 9 - authorizedKeys.keyFiles = [ ../../creds/ssh/users/cassie ]; 10 - }; 11 - }; 12 - 13 - home-manager.users.cassie = import ./home; 14 - }
···
-1
users/cassie/ephemeral/vscode/.gitignore
··· 1 - sync.lock
···
-25
users/cassie/ephemeral/vscode/extension.json
··· 1 - [ 2 - "anweber.local-sync", 3 - "astro-build.astro-vscode", 4 - "catppuccin.catppuccin-vsc", 5 - "catppuccin.catppuccin-vsc-icons", 6 - "dbaeumer.vscode-eslint", 7 - "denoland.vscode-deno", 8 - "editorconfig.editorconfig", 9 - "esbenp.prettier-vscode", 10 - "formulahendry.auto-rename-tag", 11 - "gruntfuggly.todo-tree", 12 - "hossaini.bootstrap-intellisense", 13 - "inlang.vs-code-extension", 14 - "jnoortheen.nix-ide", 15 - "llvm-vs-code-extensions.vscode-clangd", 16 - "minecraftcommands.syntax-mcfunction", 17 - "mkhl.direnv", 18 - "ms-python.debugpy", 19 - "ms-python.python", 20 - "ms-vscode.hexeditor", 21 - "redhat.vscode-yaml", 22 - "svelte.svelte-vscode", 23 - "usernamehw.errorlens", 24 - "yoavbls.pretty-ts-errors" 25 - ]
···
-42
users/cassie/ephemeral/vscode/keybindings.json
··· 1 - // Place your key bindings in this file to override the defaults 2 - [ 3 - { 4 - "key": "alt+s", 5 - "command": "git.stageSelectedRanges", 6 - "when": "isInDiffEditor && !operationInProgress" 7 - }, 8 - { 9 - "key": "ctrl+k ctrl+alt+s", 10 - "command": "-git.stageSelectedRanges", 11 - "when": "isInDiffEditor && !operationInProgress" 12 - }, 13 - { 14 - "key": "ctrl+k ctrl+w", 15 - "command": "-workbench.action.closeAllEditors" 16 - }, 17 - { 18 - "key": "ctrl+k ctrl+w", 19 - "command": "workbench.action.openWorkspace" 20 - }, 21 - { 22 - "key": "ctrl+alt+n", 23 - "command": "explorer.newFile" 24 - }, 25 - { 26 - "key": "ctrl+k shift+f", 27 - "command": "workbench.explorer.fileView.focus" 28 - }, 29 - { 30 - "key": "ctrl+`", 31 - "command": "workbench.action.focusActiveEditorGroup", 32 - "when": "terminalFocus" 33 - }, 34 - { 35 - "key": "alt+t alt+r", 36 - "command": "typescript.restartTsServer" 37 - }, 38 - { 39 - "key": "alt+'", 40 - "command": "editor.emmet.action.wrapWithAbbreviation" 41 - } 42 - ]
···
-97
users/cassie/ephemeral/vscode/settings.json
··· 1 - { 2 - // reduce eye strain 3 - "terminal.integrated.fontFamily": "Hurmit Nerd Font Mono", 4 - "terminal.integrated.enableImages": true, 5 - "terminal.integrated.enableVisualBell": true, 6 - "terminal.integrated.tabs.defaultColor": "terminal.ansiBlue", 7 - "terminal.integrated.cursorBlinking": true, 8 - "terminal.integrated.environmentChangesIndicator": "on", 9 - "git.terminalGitEditor": false, 10 - // ricing 11 - "workbench.colorTheme": "Catppuccin Latte", 12 - "catppuccin.accentColor": "pink", 13 - "catppuccin.boldKeywords": true, 14 - "editor.renderWhitespace": "all", 15 - "editor.cursorSmoothCaretAnimation": "on", 16 - "editor.cursorBlinking": "phase", 17 - "editor.fontFamily": "'Hurmit Nerd Font', 'Menlo', monospace", 18 - "editor.fontSize": 17, 19 - "editor.lineHeight": 1.65, 20 - "editor.fontLigatures": false, 21 - "errorLens.statusBarIconsEnabled": true, 22 - "errorLens.gutterIconSet": "defaultOutline", 23 - "errorLens.statusBarColorsEnabled": true, 24 - "errorLens.statusBarIconsPriority": 1000, 25 - "workbench.iconTheme": "catppuccin-latte", 26 - "explorer.confirmDelete": false, 27 - "files.autoSave": "onFocusChange", 28 - "git.suggestSmartCommit": false, 29 - "git.verboseCommit": true, 30 - "editor.bracketPairColorization.independentColorPoolPerBracketType": true, 31 - "workbench.preferredDarkColorTheme": "Catppuccin Mocha", 32 - "workbench.preferredLightColorTheme": "Catppuccin Latte", 33 - "window.autoDetectColorScheme": true, 34 - "git.branchRandomName.dictionary": [ 35 - "adjectives", 36 - "colors", 37 - "animals" 38 - ], 39 - "todo-tree.general.statusBar": "top three", 40 - "window.titleBarStyle": "native", 41 - "window.dialogStyle": "custom", 42 - "window.customTitleBarVisibility": "never", 43 - "svelte.enable-ts-plugin": true, 44 - "editor.smoothScrolling": true, 45 - "workbench.list.smoothScrolling": true, 46 - "editor.insertSpaces": false, 47 - "json.format.enable": false, 48 - "editor.rulers": [ 49 - 100 50 - ], 51 - "todo-tree.highlights.useColourScheme": true, 52 - "window.confirmBeforeClose": "keyboardOnly", 53 - "prettier.useEditorConfig": false, 54 - "nix.enableLanguageServer": true, 55 - "nix.serverPath": "nixd", 56 - "editor.unicodeHighlight.allowedLocales": { 57 - "zh-hant": true 58 - }, 59 - "[html]": { 60 - "editor.defaultFormatter": "esbenp.prettier-vscode" 61 - }, 62 - "bootstrapIntelliSense": { 63 - "enable": true, 64 - "bsVersion": "5.3.6", 65 - "useLocalFile": false, 66 - "cssFilePath": "", 67 - "languageSupport": [] 68 - }, 69 - "git.closeDiffOnOperation": true, 70 - "redhat.telemetry.enabled": false, 71 - "update.mode": "none", 72 - "[javascript]": { 73 - "editor.defaultFormatter": "esbenp.prettier-vscode" 74 - }, 75 - "python.terminal.activateEnvironment": false, 76 - "git.openRepositoryInParentFolders": "never", 77 - "diffEditor.ignoreTrimWhitespace": false, 78 - "terminal.integrated.stickyScroll.enabled": false, 79 - // shit removal 80 - "chat.agent.enabled": false, 81 - "chat.detectParticipant.enabled": false, 82 - "chat.checkpoints.enabled": false, 83 - "chat.disableAIFeatures": true, 84 - // backups 85 - "local-sync.autobackup": true, 86 - "local-sync.autorestore": true, 87 - "sherlock.userId": "6a5316dc-c799-445c-934c-34b77e148545", 88 - "[dockercompose]": { 89 - "editor.insertSpaces": true, 90 - "editor.tabSize": 2, 91 - "editor.autoIndent": "advanced", 92 - "editor.defaultFormatter": "redhat.vscode-yaml" 93 - }, 94 - "[github-actions-workflow]": { 95 - "editor.defaultFormatter": "redhat.vscode-yaml" 96 - } 97 - }
···
-120
users/cassie/home/assets/cursor_smear.glsl
··· 1 - // from https://github.com/KroneCorylus/ghostty-shader-playground/tree/eec84ccb34564ef4b41ef494338de1d1b7098638 2 - 3 - float getSdfRectangle(in vec2 p, in vec2 xy, in vec2 b) 4 - { 5 - vec2 d = abs(p - xy) - b; 6 - return length(max(d, 0.0)) + min(max(d.x, d.y), 0.0); 7 - } 8 - 9 - // Based on Inigo Quilez's 2D distance functions article: https://iquilezles.org/articles/distfunctions2d/ 10 - // Potencially optimized by eliminating conditionals and loops to enhance performance and reduce branching 11 - 12 - float seg(in vec2 p, in vec2 a, in vec2 b, inout float s, float d) { 13 - vec2 e = b - a; 14 - vec2 w = p - a; 15 - vec2 proj = a + e * clamp(dot(w, e) / dot(e, e), 0.0, 1.0); 16 - float segd = dot(p - proj, p - proj); 17 - d = min(d, segd); 18 - 19 - float c0 = step(0.0, p.y - a.y); 20 - float c1 = 1.0 - step(0.0, p.y - b.y); 21 - float c2 = 1.0 - step(0.0, e.x * w.y - e.y * w.x); 22 - float allCond = c0 * c1 * c2; 23 - float noneCond = (1.0 - c0) * (1.0 - c1) * (1.0 - c2); 24 - float flip = mix(1.0, -1.0, step(0.5, allCond + noneCond)); 25 - s *= flip; 26 - return d; 27 - } 28 - 29 - float getSdfParallelogram(in vec2 p, in vec2 v0, in vec2 v1, in vec2 v2, in vec2 v3) { 30 - float s = 1.0; 31 - float d = dot(p - v0, p - v0); 32 - 33 - d = seg(p, v0, v3, s, d); 34 - d = seg(p, v1, v0, s, d); 35 - d = seg(p, v2, v1, s, d); 36 - d = seg(p, v3, v2, s, d); 37 - 38 - return s * sqrt(d); 39 - } 40 - 41 - vec2 normalize(vec2 value, float isPosition) { 42 - return (value * 2.0 - (iResolution.xy * isPosition)) / iResolution.y; 43 - } 44 - 45 - float antialising(float distance) { 46 - return 1. - smoothstep(0., normalize(vec2(2., 2.), 0.).x, distance); 47 - } 48 - 49 - float determineStartVertexFactor(vec2 a, vec2 b) { 50 - // Conditions using step 51 - float condition1 = step(b.x, a.x) * step(a.y, b.y); // a.x < b.x && a.y > b.y 52 - float condition2 = step(a.x, b.x) * step(b.y, a.y); // a.x > b.x && a.y < b.y 53 - 54 - // If neither condition is met, return 1 (else case) 55 - return 1.0 - max(condition1, condition2); 56 - } 57 - 58 - vec2 getRectangleCenter(vec4 rectangle) { 59 - return vec2(rectangle.x + (rectangle.z / 2.), rectangle.y - (rectangle.w / 2.)); 60 - } 61 - float ease(float x) { 62 - return pow(1.0 - x, 3.0); 63 - } 64 - vec4 saturate(vec4 color, float factor) { 65 - float gray = dot(color, vec4(0.299, 0.587, 0.114, 0.)); // luminance 66 - return mix(vec4(gray), color, factor); 67 - } 68 - 69 - vec4 TRAIL_COLOR = iCurrentCursorColor; 70 - const float OPACITY = 0.6; 71 - const float DURATION = 0.3; //IN SECONDS 72 - 73 - void mainImage(out vec4 fragColor, in vec2 fragCoord) 74 - { 75 - 76 - #if !defined(WEB) 77 - fragColor = texture(iChannel0, fragCoord.xy / iResolution.xy); 78 - #endif 79 - // Normalization for fragCoord to a space of -1 to 1; 80 - vec2 vu = normalize(fragCoord, 1.); 81 - vec2 offsetFactor = vec2(-.5, 0.5); 82 - 83 - // Normalization for cursor position and size; 84 - // cursor xy has the postion in a space of -1 to 1; 85 - // zw has the width and height 86 - vec4 currentCursor = vec4(normalize(iCurrentCursor.xy, 1.), normalize(iCurrentCursor.zw, 0.)); 87 - vec4 previousCursor = vec4(normalize(iPreviousCursor.xy, 1.), normalize(iPreviousCursor.zw, 0.)); 88 - 89 - // When drawing a parellelogram between cursors for the trail i need to determine where to start at the top-left or top-right vertex of the cursor 90 - float vertexFactor = determineStartVertexFactor(currentCursor.xy, previousCursor.xy); 91 - float invertedVertexFactor = 1.0 - vertexFactor; 92 - 93 - // Set every vertex of my parellogram 94 - vec2 v0 = vec2(currentCursor.x + currentCursor.z * vertexFactor, currentCursor.y - currentCursor.w); 95 - vec2 v1 = vec2(currentCursor.x + currentCursor.z * invertedVertexFactor, currentCursor.y); 96 - vec2 v2 = vec2(previousCursor.x + currentCursor.z * invertedVertexFactor, previousCursor.y); 97 - vec2 v3 = vec2(previousCursor.x + currentCursor.z * vertexFactor, previousCursor.y - previousCursor.w); 98 - 99 - float sdfCurrentCursor = getSdfRectangle(vu, currentCursor.xy - (currentCursor.zw * offsetFactor), currentCursor.zw * 0.5); 100 - float sdfTrail = getSdfParallelogram(vu, v0, v1, v2, v3); 101 - 102 - float progress = clamp((iTime - iTimeCursorChange) / DURATION, 0.0, 1.0); 103 - float easedProgress = ease(progress); 104 - // Distance between cursors determine the total length of the parallelogram; 105 - vec2 centerCC = getRectangleCenter(currentCursor); 106 - vec2 centerCP = getRectangleCenter(previousCursor); 107 - float lineLength = distance(centerCC, centerCP); 108 - 109 - vec4 newColor = vec4(fragColor); 110 - 111 - vec4 trail = TRAIL_COLOR; 112 - trail = saturate(trail, 2.5); 113 - // Draw trail 114 - newColor = mix(newColor, trail, antialising(sdfTrail)); 115 - // Draw current cursor 116 - newColor = mix(newColor, trail, antialising(sdfCurrentCursor)); 117 - newColor = mix(newColor, fragColor, step(sdfCurrentCursor, 0.)); 118 - // newColor = mix(fragColor, newColor, OPACITY); 119 - fragColor = mix(fragColor, newColor, step(sdfCurrentCursor, easedProgress * lineLength)); 120 - }
···
-17
users/cassie/home/default.nix
··· 1 - { ... }: 2 - { 3 - imports = [ 4 - ./dev 5 - ./path.nix 6 - ./obs.nix 7 - ./virt.nix 8 - ./eyecandy.nix 9 - ./shell.nix 10 - ./ghostty.nix 11 - ./media.nix 12 - ./syncthing.nix 13 - ./extras.nix 14 - ]; 15 - 16 - home.stateVersion = "23.11"; 17 - }
···
-15
users/cassie/home/dev/default.nix
··· 1 - { pkgs, ... }: 2 - { 3 - imports = [ 4 - ./git.nix 5 - ./ssh.nix 6 - ./lazygit.nix 7 - ./editors.nix 8 - ]; 9 - 10 - home.packages = with pkgs; [ 11 - mdbook 12 - mdbook-admonish 13 - mdbook-pagetoc 14 - ]; 15 - }
···
-76
users/cassie/home/dev/editors.nix
··· 1 - { 2 - traits, 3 - lib, 4 - ... 5 - }: 6 - lib.mkMerge [ 7 - { 8 - programs.helix = { 9 - enable = true; 10 - languages.language = [ 11 - { 12 - name = "yaml"; 13 - scope = "source.yaml"; 14 - indent = { 15 - unit = " "; 16 - tab-width = 2; 17 - }; 18 - } 19 - ]; 20 - }; 21 - } 22 - 23 - (lib.mkIf traits.gui { 24 - programs.zed-editor = { 25 - enable = true; 26 - userSettings = { 27 - # crap disablement 28 - agent = { 29 - version = "1"; 30 - enabled = false; 31 - }; 32 - features = { 33 - edit_prediction_provider = "none"; # no copilot 34 - }; 35 - telemetry = { 36 - metrics = false; 37 - }; 38 - 39 - # display 40 - ui_font_size = 20; 41 - buffer_font_size = 16; 42 - buffer_font_family = "Fira Code"; 43 - buffer_font_weight = 500; 44 - buffer_font_features.calt = false; 45 - 46 - preferred_line_length = 120; 47 - wrap_guides = [ 120 ]; 48 - show_whitespaces = "all"; 49 - indent_guides = { 50 - enabled = true; 51 - coloring = "indent_aware"; 52 - }; 53 - theme = { 54 - mode = "system"; 55 - # light = "Catppuccin Latte"; 56 - dark = lib.mkForce "Catppuccin Mocha (pink)"; 57 - }; 58 - diagnostics.inline.enable = true; 59 - 60 - # editing settings 61 - base_keymap = "VSCode"; 62 - hard_tabs = true; 63 - vim_mode = false; 64 - autosave = "on_focus_change"; 65 - 66 - # nix stuff 67 - load_direnv = "shell_hook"; 68 - 69 - # terminal 70 - terminal.env = { 71 - "TERM" = "xterm-256color"; # this is not set apparently 72 - }; 73 - }; 74 - }; 75 - }) 76 - ]
···
-40
users/cassie/home/dev/git.nix
··· 1 - { 2 - lib, 3 - traits, 4 - inputs, 5 - ... 6 - }: 7 - { 8 - programs.git = lib.mkMerge [ 9 - { 10 - enable = true; 11 - 12 - settings = { 13 - user.name = "Sophie Cheung"; 14 - user.email = "git@soopy.moe"; 15 - }; 16 - } 17 - 18 - (lib.mkIf traits.gui { 19 - settings = { 20 - gpg.format = "ssh"; 21 - commit.gpgSign = true; 22 - tag.gpgSign = true; 23 - 24 - user.signingKey = inputs.self + "/creds/ssh/auth"; 25 - }; 26 - }) 27 - ]; 28 - 29 - programs.diff-so-fancy = { 30 - enable = true; 31 - enableGitIntegration = true; 32 - 33 - settings.stripLeadingSymbols = false; 34 - }; 35 - 36 - home.shellAliases = { 37 - # redo previous commit when something explodes, like my key died or something 38 - gcmm = "git commit -eF .git/COMMIT_EDITMSG"; # FIXME: strip the thing after ------ 8< ------ 39 - }; 40 - }
···
-10
users/cassie/home/dev/lazygit.nix
··· 1 - { 2 - programs.lazygit = { 3 - enable = true; 4 - settings = { 5 - # we use ssh keys as auth, and this is hyper annoying for when we want to do literally anything longer than 2 minutes. 6 - # we think the concept of autofetching is kind of stupid anyways. i will fetch when i want to. 7 - git.autoFetch = false; 8 - }; 9 - }; 10 - }
···
-45
users/cassie/home/dev/ssh.nix
··· 1 - { ... }: 2 - { 3 - programs.ssh = { 4 - enable = true; 5 - enableDefaultConfig = false; # silent warning 6 - 7 - matchBlocks = { 8 - # most intuitive design /s 9 - patchy = { 10 - # host is set to the match block name by default but it is not in the manual/option docs. 11 - hostname = "koumakan"; 12 - user = "forgejo"; 13 - }; 14 - 15 - gh = { 16 - hostname = "github.com"; 17 - user = "git"; 18 - }; 19 - 20 - backup = { 21 - hostname = "koumakan"; 22 - user = "forgejo"; 23 - identitiesOnly = true; 24 - identityFile = "~/.ssh/id_minecraft_backup"; 25 - }; 26 - 27 - "*" = { 28 - forwardAgent = true; 29 - compression = false; 30 - serverAliveInterval = 0; 31 - serverAliveCountMax = 3; 32 - hashKnownHosts = true; 33 - userKnownHostsFile = "~/.ssh/known_hosts"; 34 - # visualHostKey = true; # if this doesn't work im moving to hjem 35 - }; 36 - }; 37 - 38 - # extraConfig is config for the Host * block. 39 - ## n.b.: identitesonly and identityfile makes bootstrapping other devices hard esp. 40 - ## if they're embedded or resource constrained. 41 - extraConfig = '' 42 - VisualHostKey yes 43 - ''; 44 - }; 45 - }
···
-12
users/cassie/home/extras.nix
··· 1 - { 2 - pkgs, 3 - traits, 4 - lib, 5 - ... 6 - }: 7 - { 8 - home.packages = lib.mkIf traits.gui [ 9 - pkgs.wl-clipboard 10 - # pkgs.logseq 11 - ]; 12 - }
···
-17
users/cassie/home/eyecandy.nix
··· 1 - { ... }: 2 - { 3 - programs.eza = { 4 - enable = true; 5 - icons = "auto"; 6 - git = true; 7 - }; 8 - 9 - catppuccin = { 10 - enable = true; 11 - accent = "pink"; 12 - flavor = "latte"; 13 - }; 14 - 15 - programs.bat.enable = true; 16 - programs.zsh.enable = true; 17 - }
···
-26
users/cassie/home/ghostty.nix
··· 1 - { 2 - inputs, 3 - traits, 4 - lib, 5 - pkgs, 6 - ... 7 - }: 8 - lib.mkIf traits.gui { 9 - programs.ghostty = { 10 - enable = true; 11 - package = inputs.ghostty.packages.${pkgs.system}.ghostty; 12 - settings = { 13 - theme = "catppuccin-latte"; 14 - font-family = "CozetteVector"; 15 - font-size = 14; 16 - window-decoration = "client"; 17 - 18 - # great feature, but breaks a bit too many things :( 19 - # minimum-contrast = 1.1; 20 - async-backend = "epoll"; # see if this fixes iowait "bug" 21 - 22 - custom-shader = builtins.toString ./assets/cursor_smear.glsl; 23 - custom-shader-animation = true; 24 - }; 25 - }; 26 - }
···
-13
users/cassie/home/media.nix
··· 1 - { 2 - traits, 3 - lib, 4 - pkgs, 5 - ... 6 - }: 7 - lib.mkIf traits.gui { 8 - home.packages = [ 9 - pkgs.gimp3 10 - pkgs.krita 11 - pkgs.kdePackages.kdenlive 12 - ]; 13 - }
···
-16
users/cassie/home/obs.nix
··· 1 - { 2 - pkgs, 3 - traits, 4 - lib, 5 - ... 6 - }: 7 - lib.mkIf traits.gui { 8 - programs.obs-studio = { 9 - enable = true; 10 - plugins = with pkgs.obs-studio-plugins; [ 11 - obs-vaapi 12 - obs-vkcapture 13 - obs-pipewire-audio-capture 14 - ]; 15 - }; 16 - }
···
-6
users/cassie/home/path.nix
··· 1 - { ... }: 2 - { 3 - home.sessionPath = [ 4 - "$HOME/.cargo/bin/" 5 - ]; 6 - }
···
-44
users/cassie/home/shell.nix
··· 1 - { ... }: 2 - { 3 - programs.atuin = { 4 - enable = true; 5 - daemon.enable = true; 6 - settings = { 7 - search_mode = "fuzzy"; 8 - update_check = false; 9 - workspaces = true; 10 - sync_address = "https://atuin.soopy.moe"; 11 - search_mode_shell_up_key_binding = "prefix"; 12 - filter_mode_shell_up_key_binding = "session"; 13 - enter_accept = true; 14 - inline_height = 10; 15 - 16 - daemon.sync_frequency = 10; 17 - sync.records = true; 18 - 19 - stats.common_subcommands = [ 20 - "," 21 - "apt" 22 - "cargo" 23 - "composer" 24 - "dnf" 25 - "docker" 26 - "git" 27 - "go" 28 - "ip" 29 - "just" 30 - "kubectl" 31 - "nix" 32 - "nmcli" 33 - "npm" 34 - "pecl" 35 - "pnpm" 36 - "podman" 37 - "port" 38 - "systemctl" 39 - "tmux" 40 - "yarn" 41 - ]; 42 - }; 43 - }; 44 - }
···
-41
users/cassie/home/syncthing.nix
··· 1 - { lib, traits, ... }: 2 - let 3 - mkDevice = name: id: { 4 - inherit name; 5 - value = { 6 - inherit id; 7 - addresses = [ 8 - "tcp://${name}.mist-nessie.ts.net" 9 - "quic://${name}.mist-nessie.ts.net" 10 - ]; 11 - }; 12 - }; 13 - devices = lib.listToAttrs [ 14 - (mkDevice "renko" "JSPWYCM-O76XTAY-IEP3AKI-A2IK4KX-X2NC7N4-ADMQKXY-VYM45XX-OADHHA3") 15 - (mkDevice "satori" "OZ2QYJS-463IWPW-DXL6OKH-BU2D2QK-ZP577US-BYXSMAA-LAXRWV7-6PC54QF") 16 - ]; 17 - allDevices = lib.attrNames devices; 18 - in 19 - lib.mkIf (traits.gui) { 20 - services.syncthing = { 21 - enable = true; 22 - settings = { 23 - inherit devices; 24 - options.globalAnnounceEnabled = false; 25 - defaults.ignores = [ 26 - "(?d)**/node_modules" 27 - "(?d)**/target" 28 - "(?d)**/.svelte-kit" 29 - "(?d)**/build" 30 - "(?d)**/.gradle" 31 - "(?d)**/.direnv" 32 - ]; 33 - folders = { 34 - "/home/cassie/projects/synced" = { 35 - id = "synced-projects"; 36 - devices = allDevices; 37 - }; 38 - }; 39 - }; 40 - }; 41 - }
···
-12
users/cassie/home/virt.nix
··· 1 - { 2 - traits, 3 - lib, 4 - ... 5 - }: 6 - lib.mkIf traits.gui { 7 - # this complements **/*/virt.nix in nixos modules. 8 - dconf.settings."org/virt-manager/virt-manager/connections" = { 9 - autoconnect = [ "qemu:///system" ]; 10 - uris = [ "qemu:///system" ]; 11 - }; 12 - }
···
-8
users/default.nix
··· 1 - { ... }: 2 - { 3 - imports = [ 4 - ./cassie 5 - ./_tester.nix 6 - ./builder.nix 7 - ]; 8 - }
···
-9
utils/build-yaml.nix
··· 1 - # impure alert 2 - { 3 - name, 4 - content, 5 - }: 6 - let 7 - pkgs = import <nixpkgs> { }; # uses builtins.currentSystem 8 - in 9 - pkgs.writeText name (builtins.toJSON content)
···
+2 -22
utils/justfile
··· 1 python_executable := if os() == "android" { "python3" } else { "nix develop ..# -c python3" } 2 3 list: 4 - just -l 5 6 # grab a new nitter guest account and save it 7 nitter-token: 8 - {{python_executable}} nitter-guest-account.py tokens.json 9 - 10 - # sync sops config with the nix file 11 - update-sops-config: 12 - #!/usr/bin/env bash 13 - set -euxo pipefail 14 - rm ../.sops.yaml || true 15 - # mv ../.sops.yaml{,.bak} 2>/dev/null || true 16 - OUT=$(nix-build build-yaml.nix --argstr name ".sops.yaml" --arg content "import ../.sops.nix") 17 - echo -e "# WARNING: This is a generated file. DO NOT EDIT DIRECTLY!\n# See .sops.nix and utils/build-yaml.nix for more details." \ 18 - | cat - $OUT > ../.sops.yaml 19 - 20 - for file in ../creds/sops/**/*; do sops updatekeys $file; done 21 - 22 - rotate-sops-keys: 23 - for file in ../creds/sops/**/*; do sops -i -r $file; done 24 - 25 - add-grafana-dashboard id name *title="": 26 - xh https://grafana.com/api/dashboards/{{id}} | \ 27 - jq '.json | .uid="{{name}}" {{ if title != "" {"| .title=\"" + title + "\"" } else {""} }}' \ 28 - -c > ../systems/koumakan/services/telemetry/grafana/dashboards/{{name}}.json
··· 1 python_executable := if os() == "android" { "python3" } else { "nix develop ..# -c python3" } 2 3 list: 4 + just -l 5 6 # grab a new nitter guest account and save it 7 nitter-token: 8 + {{python_executable}} nitter-guest-account.py tokens.json
-9
utils/rebuild-collations.sh
··· 1 - #!/usr/bin/env bash 2 - set -euo pipefail 3 - 4 - for db in $(psql -Atc 'select datname from pg_database;' postgres); do 5 - echo "Updating database ${db}" 6 - psql -e -c "reindex (verbose) database ${db};" -c "alter database ${db} refresh collation version;" ${db} & 7 - done 8 - 9 - wait
···
-1
vendor/brcmfmac/.gitignore
··· 1 - firmware.tar.gz
···
-32
vendor/brcmfmac/default.nix
··· 1 - { 2 - zstd, 3 - lib, 4 - fetchzip, 5 - stdenvNoCC, 6 - }: 7 - stdenvNoCC.mkDerivation (final: { 8 - name = "brcm-mac-firmware"; 9 - 10 - src = fetchzip { 11 - nativeBuildInputs = [ zstd ]; 12 - stripRoot = false; 13 - url = "https://mirror.funami.tech/arch-mact2/os/x86_64/apple-bcm-firmware-14.0-1-any.pkg.tar.zst"; 14 - hash = "sha256-7HFXStpTkBG8wujsO8OTm5x+h17mqRiGSrS/Srv49Yg="; 15 - }; 16 - 17 - dontBuild = true; 18 - dontConfigure = true; # don't do unnecessary stuff. 19 - 20 - installPhase = '' 21 - finalDir="$out/lib/firmware" 22 - mkdir -p "$finalDir" 23 - cp -r ${final.src}/usr/lib/firmware/brcm "$finalDir" 24 - ''; 25 - 26 - meta = { 27 - description = "Collection of Wi-Fi and Bluetooth firmware files for Apple Mac devices."; 28 - license = lib.licenses.unfree; 29 - maintainers = with lib.maintainers; [ soopyc ]; 30 - platforms = lib.platforms.linux; 31 - }; 32 - })
···