Compare changes

Choose any two refs to compare.

Changed files
+1326 -10628
.github
creds
docs
global
modules
nix
systems
kita
koumakan
nijika
renko
ryo
satori
users
utils
vendor
+9 -5
.editorconfig
···
root = true
[*]
-
indent_size = 4
-
indent_style = tab
+
indent_size = 2
+
indent_style = space
insert_final_newline = true
trim_trailing_whitespace = true
-
[*.{yaml,yml,nix}]
-
indent_style = space
-
indent_size = 2
+
[*.py]
+
indent_size = 4
+
indent_style = tab
[*.cry]
insert_final_newline = false
+
+
[Makefile]
+
indent_style = tab
+
indent_size = 4
-2
.envrc
···
-
common_options="-vL --no-update-lock-file"
-
use flake . $common_options
-1
.git-blame-ignore-revs
···
-
17333cf95859ed5eccfacd015b2e08efa1245069
-44
.github/workflows/build-docs.yaml
···
-
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
-
name: "Build documentation"
-
-
permissions:
-
contents: read
-
pages: write
-
id-token: write
-
-
on:
-
push:
-
branches:
-
- main
-
paths:
-
- "docs/**"
-
-
jobs:
-
build:
-
runs-on: ubuntu-latest
-
steps:
-
- uses: actions/checkout@v4
-
- name: Install Nix
-
uses: DeterminateSystems/nix-installer-action@v10
-
with:
-
extra-conf: |
-
experimental-features = nix-command flakes
-
-
- name: Build site
-
run: "nix develop .#devShells.x86_64-linux.docs -c mdbook build docs"
-
-
- name: Upload built site as artifact
-
uses: actions/upload-pages-artifact@v3
-
with:
-
path: ./docs/dist
-
-
deploy:
-
environment:
-
name: github-pages
-
url: ${{ steps.deployment.outputs.page_url }}
-
runs-on: ubuntu-latest
-
needs: build
-
steps:
-
- name: Deploy to GitHub Pages
-
id: deployment
-
uses: actions/deploy-pages@v4
+79
.github/workflows/build.yaml
···
+
name: Check and Build configuration
+
+
on:
+
push:
+
+
jobs:
+
check:
+
runs-on: ubuntu-latest
+
steps:
+
- name: Checkout
+
uses: actions/checkout@v3
+
+
- name: Replace .cry files with some bollocks
+
run: find . -name "*.cry" -execdir bash -c 'echo some bollocks > {}' \;
+
+
- name: Install Nix
+
uses: DeterminateSystems/nix-installer-action@v4
+
with:
+
extra-conf: |
+
experimental-features = nix-command flakes
+
+
- name: Setup Nix cache
+
uses: DeterminateSystems/magic-nix-cache-action@v2
+
+
- name: Run nix flake check
+
run: nix flake check
+
+
- name: Check with DeterminateSystems/flake-checker-action
+
uses: DeterminateSystems/flake-checker-action@v5
+
with:
+
ignore-missing-flake-lock: false
+
+
build:
+
needs: check
+
runs-on: ubuntu-latest
+
strategy:
+
matrix:
+
host:
+
- koumakan
+
+
steps:
+
- name: Checkout
+
uses: actions/checkout@v3
+
+
- name: Write Nix netrc file
+
run: |
+
sudo mkdir -p /etc/nix
+
echo "machine nonbunary.soopy.moe password ${access_token}" | sudo tee /etc/nix/netrc > /dev/null
+
env:
+
access_token: ${{ secrets.ATTIC_ACCESS_TOKEN }}
+
+
- name: Install Nix
+
uses: DeterminateSystems/nix-installer-action@v4
+
with:
+
extra-conf: |
+
fallback = true # why is this not the default?
+
connect-timeout = 30
+
netrc-file = /etc/nix/netrc
+
experimental-features = nix-command flakes
+
extra-substituters = https://nonbunary.soopy.moe/gensokyo-systems https://nonbunary.soopy.moe/gensokyo-global
+
extra-trusted-public-keys = gensokyo-systems:r/Wx649dPuQrCN9Pgh3Jic526zQNk3oWMqYJHnob/Ok= gensokyo-global:XiCN0D2XeSxF4urFYTprR+1Nr/5hWyydcETwZtPG6Ec=
+
+
- name: Setup Nix cache
+
uses: DeterminateSystems/magic-nix-cache-action@v2
+
+
- name: Replace .cry files with some bollocks
+
run: find . -name "*.cry" -execdir bash -c 'echo some bollocks > {}' \;
+
+
- name: Build configuration
+
run: nix build .#nixosConfigurations."${{ matrix.host }}".config.system.build.toplevel
+
+
- name: Setup attic and push to cache
+
if: ${{ github.event_name != 'pull_request' }}
+
run: |
+
nix run github:zhaofengli/attic#default login nbsm https://nonbunary.soopy.moe ${access_token}
+
nix run github:zhaofengli/attic#default push gensokyo-systems result
+
env:
+
access_token: ${{ secrets.ATTIC_ACCESS_TOKEN }}
+
continue-on-error: true
+37
.github/workflows/update-lockfile.yaml
···
+
name: "Update Flake Lockfile"
+
+
permissions:
+
pull-requests: write
+
contents: write
+
+
on:
+
workflow_dispatch:
+
schedule:
+
- cron: "0 8 * * 1,3,5"
+
+
jobs:
+
lockfile:
+
runs-on: ubuntu-latest
+
steps:
+
- name: Checkout repo
+
uses: actions/checkout@v3
+
+
- name: Install Nix
+
uses: DeterminateSystems/nix-installer-action@v4
+
with:
+
extra-conf: |
+
fallback = true
+
connect-timeout = 30
+
experimental-features = nix-command flakes
+
+
- name: Update flake.lock
+
uses: DeterminateSystems/update-flake-lock@v20
+
with:
+
pr-title: "flake: update lockfile"
+
pr-labels: |
+
dependencies
+
automated
+
git-author-name: soopyc [bot]
+
git-author-email: ci_signing+github@ningenkai.soopy.moe
+
git-committer-name: soopyc [bot]
+
git-committer-email: ci_signing+github@ningenkai.soopy.moe
-7
.gitignore
···
# balls
result
-
-
.direnv/
-
*.qcow2
-
-
# backup files
-
*.bak
-
*.old
-3
.ignore
···
-
systems/koumakan/services/telemetry/grafana/dashboards
-
*.db
-
docs/vendor
-56
.sops.nix
···
-
let
-
# maintainers
-
age.soopyc_pxl7ag = "age1l3qxt6630dzesdclfm3eqgw3uuhwj09dh6typwlwr6clcv0qhfrqgtj2fk";
-
# age.soopyc_yub302 = "age1yubikey1qgmfcf0vddslyza7djdekjjk3t3u29d474c5xscmcdye8x3spvhlxxj23xz";
-
age.soopyc_mbp14 = "age1zkafenrdkkmatjh034yykpzjzzs5fx6kft23jlmsung3dwyufcksds59l2";
-
-
# hosts
-
age.koumakan = "age18h7hya5terghrwawgpny28swlat2nqkdrfd4clk0svujqlz9xfusd3zeqt";
-
age.satori = "age132qsqclmp5d6x968x5y8amdn90v64rldy3assprr8g8wjdpecvmqwryah8";
-
age.renko = "age1p6n5yh9fy09xspwf29klfsa4zdrhp04q22gvxkz2vvm88vt9tunsdn020s";
-
age.bocchi = "age1kdctxllje2rw3kwpzell0rt6t7mruc3h3j5zfjelnpmahchjlaqs9v9vm9";
-
age.kita = "age1qzma7prftj6d4atqcmatdl9le0tuuqzegm6f8e9gkwrp3pja0aaqs49g7n";
-
age.ryo = "age1tdatk0rrr6uf89g5vpq96wjcjcetkrs6yadkxv47v76q8qhtva2sn7tun2";
-
age.nijika = "age1rzxugsgkpnf0ns0w70swdc3sndjpktx23eucah4w47zcppz56sls2c5e6m";
-
-
everything = [
-
{
-
age = builtins.attrValues age;
-
}
-
];
-
-
mkHost =
-
name: identities:
-
assert builtins.typeOf identities == "list";
-
{
-
path_regex = "creds/sops/${name}/.*";
-
key_groups = [
-
{
-
age = [
-
# admin
-
age.soopyc_pxl7ag
-
age.soopyc_mbp14
-
]
-
++ identities;
-
}
-
];
-
};
-
in
-
{
-
# remember to run `just utils update-sops-config` and `sops updatekeys` after editing.
-
creation_rules = [
-
{
-
path_regex = "creds/sops/global/.*";
-
key_groups = everything;
-
}
-
-
(mkHost "koumakan" [ age.koumakan ])
-
(mkHost "satori" [ age.satori ])
-
(mkHost "renko" [ age.renko ])
-
-
(mkHost "bocchi" [ age.bocchi ])
-
(mkHost "kita" [ age.kita ])
-
(mkHost "ryo" [ age.ryo ])
-
(mkHost "nijika" [ age.nijika ])
-
];
-
}
+23 -3
.sops.yaml
···
-
# WARNING: This is a generated file. DO NOT EDIT DIRECTLY!
-
# See .sops.nix and utils/build-yaml.nix for more details.
-
{"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/.*"}]}
+
keys:
+
# maintainers
+
- &soopyc_mpxl7a age10rkyshu0lswdqyvun4cs9cekm9zt4fw5c8ssa38tn3lukgcahcvsltnqx2
+
- &soopyc_pgp302 8F3B277901484C6EA7E63F82D539637D518022C6
+
# - &soopyc_age302 age1yubikey1qgmfcf0vddslyza7djdekjjk3t3u29d474c5xscmcdye8x3spvhlxxj23xz
+
# failed to parse input as Bech32-encoded age public key: malformed recipient "age1yubikey1qgmfcf0vddslyza7djdekjjk3t3u29d474c5xscmcdye8x3spvhlxxj23xz": invalid type "age1yubikey"
+
+
# Hosts
+
- &koumakan_ssh age18h7hya5terghrwawgpny28swlat2nqkdrfd4clk0svujqlz9xfusd3zeqt
+
+
default_group: &default_group
+
pgp:
+
- *soopyc_pgp302
+
age:
+
# - *soopyc_age302
+
- *soopyc_mpxl7a
+
+
creation_rules:
+
- path_regex: creds/sops/koumakan.yaml
+
key_groups:
+
- <<: *default_group
+
age:
+
- *koumakan_ssh
+5
Makefile
···
+
default: build
+
+
%:
+
@echo "WARNING: using make is deprecated. please use just instead."
+
@just $(O)
+6 -12
README.md
···
[![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)
-
[![Garnix Build Status](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Fgarnix.io%2Fapi%2Fbadges%2Fsoopyc%2Fnix-on-koumakan)](https://garnix.io)
# Cow
-
![a yak on some grass](docs/src/images/quaritsch-photography-1_6rJHQ2Gmw-unsplash.jpg)
+
![a yak on some grass](docs/quaritsch-photography-1_6rJHQ2Gmw-unsplash.jpg)
-
*Picture by [Quaritsch Photography](https://unsplash.com/@quaritsch) on Unsplash, via https://unsplash.com/photos/1_6rJHQ2Gmw*
+
*Gracefully provided by [Quaritsch Photography](https://unsplash.com/@quaritsch) on Unsplash, via https://unsplash.com/photos/1_6rJHQ2Gmw*
# NixOS Configuration
This is a bare minimum nix configuration for koumakan.
···
โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“
-
## Todo
-
See ./TODO.md
-
-
## Tangled
+
## TODO
+
- [ ] migrate ~/.yubico/authorized_yubikeys to HM config (via pam.yubico.authorizedYubiKeys.ids)
-
Viewing on <https://tangled.sh>? The SSH clone URL below is not correct for our knotserver. Use this instead:
-
-
```sh
-
git clone knot@enanan.staging.soopy.moe:soopy.moe/gensokyo
-
```
+
<!-- very future tasks -->
+
- [ ] migrate to a configuration where [erase your darlings](https://grahamc.com/blog/erase-your-darlings/) is possible
-25
TODO.md
···
-
# Todo Items
-
- [x] **!important** flatten nixosSystem definitions
-
- instead of `import ./systems/stuff {}` do `nixosSystem = {...; imports = [./systems/stuff]}`
-
-
- [ ] migrate firewall to nftables
-
- [ ] setup ipsets and block known abusers
-
<!-- - [ ] setup autoUpgrade -->
-
- [ ] migrate ~/.yubico/authorized_yubikeys to HM config (via pam.yubico.authorizedYubiKeys.ids)
-
-
- [-] fcitx5
-
- [x] enable and configure basic fcitx5 stuff
-
- [ ] migrate rime config to HM
-
- [x] arrpc
-
-
- one of
-
- [ ] setup port knocking/fwknop
-
- [ ] shield sshd behind fwknop
-
- [ ] wireguard
-
-
<!-- very future tasks -->
-
- [ ] migrate to a configuration where [erase your darlings](https://grahamc.com/blog/erase-your-darlings/) is possible
-
-
<!-- ## Completed Tasks -->
-
- [x] setup patchouli
-
- [x] setup vaultwarden
-52
creds/sops/global/id_builder
···
-
{
-
"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]",
-
"sops": {
-
"kms": null,
-
"gcp_kms": null,
-
"azure_kv": null,
-
"hc_vault": null,
-
"age": [
-
{
-
"recipient": "age1kdctxllje2rw3kwpzell0rt6t7mruc3h3j5zfjelnpmahchjlaqs9v9vm9",
-
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA1MldKQjZSSTBnaXNrK3dm\nRXNwZitRZ0c0djVFSXpxdUJCSWJNaWg5MzJVCk5aMlBWM3VwM3R2ekwwY0xQWFlW\nZWlndkRjRlNGdC9nUVAzVU1lRGlTZUkKLS0tIDY5eE15VDQwWlpvSWNUWlYvK0xh\nQWlEVE1BWWkxNmtUR1Z2d2ZKaUNmVjgKk6kC9LHOT1bNIBw7VhgDpuauC1gRR8hh\np4iD7i1GFtMHWBUzZ4jztKLlPJ7g49GkdFeYjqzb76l7FuThqXBLiQ==\n-----END AGE ENCRYPTED FILE-----\n"
-
},
-
{
-
"recipient": "age1qzma7prftj6d4atqcmatdl9le0tuuqzegm6f8e9gkwrp3pja0aaqs49g7n",
-
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBJU20wNlIzckJXZTd2Z2hG\nSE9FaDkzaVlwREZIUG5CZG96SFRpQy9QbkdVCmx1VktxNDBFVVJSVFNQVUdOaE9W\nZkpRQlRWalJNZzRXb0RxczVzSUZGQ2cKLS0tIDRQYzhYWEZ3clhBK05NN3pubGhX\nNmhwenA2U1ZVWTBESTMwVndyc3RMT2cKlSpcSS9cIMS+1GUzJ9A3/Ke+609VrSGZ\nmg9I6VPDyhVJ9JqEKgz23mRwRhQur/fMPMdpw1RtiADb+DpOOHx6VA==\n-----END AGE ENCRYPTED FILE-----\n"
-
},
-
{
-
"recipient": "age18h7hya5terghrwawgpny28swlat2nqkdrfd4clk0svujqlz9xfusd3zeqt",
-
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBiQ0NSKzYrQ25JcmJXQlJH\nMTNWQjlEVldkcENoaXRmZm8xTVV2ZUNSZjFnCjVlK2czeXlQS1hpcllKTXhISzM3\nb3dZcGxuR0ZXU2pMWHY4M3M4Sy9KbWMKLS0tIEVJUVBsU0VEL1NIQU5BRUtKVEVr\nUHpOa1RTY0RrRlNNVzVMQWQ5OHZjMlUKisMhDxBZnTIPleVZ6Yk+ticY5iH6pXG0\niLfEP3hn2WN6Ohnqx31v98MCWsF2Eoxpc5mO8pSEeKzt4tyQ9XniFA==\n-----END AGE ENCRYPTED FILE-----\n"
-
},
-
{
-
"recipient": "age1rzxugsgkpnf0ns0w70swdc3sndjpktx23eucah4w47zcppz56sls2c5e6m",
-
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBSOFpXenVlOEFZL0cxZHRw\nZDlpNzVtVTcvVWQ2Nkk3UWtERnlQeGkvclFrCk4vVWNraklzQTB3cHZqZmFtdDdK\neGRYNVNzS2R6QXpXWDd6M3JsUWpnVGsKLS0tIDBOcmJvTFR4L1hDYitLQ0g0TmNZ\nbzN6VGNwVzdpZVhYdU1OdHd0MkV2TFUKmvKx7KYoe4ACGuiS9+nUee7G4qskYFYZ\nwVtzm+BYr0VDaP1qaphYhNLzsyW6lycpZXYzZ+jhSAoJmdWznt7cNQ==\n-----END AGE ENCRYPTED FILE-----\n"
-
},
-
{
-
"recipient": "age1p6n5yh9fy09xspwf29klfsa4zdrhp04q22gvxkz2vvm88vt9tunsdn020s",
-
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB0Wlp2NG5tanJVMlFqSEU1\nRVNuMnh3aXhJUTFMNzZNeHFxNmlYVkpqajFrCmFrNm1DcHJNQk15VmZWd1BZOFdh\nWGFhNE1ERmhGdFhGMUhXM1llYTZVTzAKLS0tIEdRQkZYcVJYRmhLZWpQaUZwNzVr\nakM1c2JxRGp4RGtEeVNPV1NlMDZ2R3MKMcwd0cq4B4ibs7xHOchI7ubb7XpHonxF\nJdsatg/l2d4fgmHd2BuTc9gGrIwx2EIk+nbA3YSPHbBafwj8KwfN6Q==\n-----END AGE ENCRYPTED FILE-----\n"
-
},
-
{
-
"recipient": "age1tdatk0rrr6uf89g5vpq96wjcjcetkrs6yadkxv47v76q8qhtva2sn7tun2",
-
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBjRExaUVg3NG9UaHF5UWdW\nVk1CdmQ1RXoxdWw0WVQvazdVSnc5VlVVUDIwCmhtYzRxcG50UHFLTm5VdFozUFpy\nMzhyTU12clYyZHl5bENJS0ZCaFlGSVEKLS0tIDhYRDhxYmxQZGpzY0cvRTgwcHNt\nM3NkVVduREhQakl5UDFadU54OHJhUEEKXMd/iCv4eSSonsiObm9zvyne2OFuHTXe\nYHJXYNItiZVFLEtHqut0ekghwtFOJEbqN80rHXs3SvgKLd+X9qmt7w==\n-----END AGE ENCRYPTED FILE-----\n"
-
},
-
{
-
"recipient": "age132qsqclmp5d6x968x5y8amdn90v64rldy3assprr8g8wjdpecvmqwryah8",
-
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBGVHU5cWx4NEJFL2x6VER1\nNmtPeGsrcElvWk5OSUIyL1JnR1hCMjVVTUZZCkl5ak9xUlE3U3RRblI0RitzUkRZ\nekJZQ2szL1A0eDNUUjJPY1FKMGowOFEKLS0tIHFOVXU1MThmRU01OG4yOERNc0lB\nNzlFNWI4aW5Bd1QvMGZpTE5xbHpsQmsKUTDPQUNPtfjEsWtLxYDgqvhfmvaQfS/l\nhqoCH5Tb2rQXrFDvpgEshFC/Jsergp0G0BoTPyCTu7dl6uSqTlRELw==\n-----END AGE ENCRYPTED FILE-----\n"
-
},
-
{
-
"recipient": "age1zkafenrdkkmatjh034yykpzjzzs5fx6kft23jlmsung3dwyufcksds59l2",
-
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBlWUhvVWxDZ2ZtNURwczZ5\nM3o5WFFlclhuTk5HTjEyZS94T0dDMHBWM2pjClo1TXplckE0aE9VSmFVZ1g4aGVy\nb3h4OGd2VEEzcDVCblpxOHhyemdHL3MKLS0tIHB3MmttVTFoenJtK1lTRFUvbVY3\nSFpEOVhsUVloMDZpOUhuVlBUMWJoQ2MKFmD1hleUYc4ExiQVSlEjz2bQOnP4dsHR\nTN/vBdk8jbOHYwrIkUrYCv+Cb811BKn6J/UE0gOFbGcsv1ZZZ82iWw==\n-----END AGE ENCRYPTED FILE-----\n"
-
},
-
{
-
"recipient": "age1l3qxt6630dzesdclfm3eqgw3uuhwj09dh6typwlwr6clcv0qhfrqgtj2fk",
-
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBOMlkwNWh5ODFnaXE3ejl1\nVGFGZ0dzZVFubXZQNFUrYU1PUWNiTWwvdnpnCnF1TFB4OW9LWGxIZm9TVDRndG40\ncnNkclZDRHJIakxTN1dseDVyU21WeFEKLS0tIG1vL1ZrVlI4WDlNU2FqNHBzL3E1\nZWduQnBKQVZSckNjdjk1c0lRajBiK1UKjeANy+e0ofZknke8ehse5hh8vnxfw6rS\n00FeAg3/GkIASV14W0Hg/wlU+FyxOCQoRRBUp5ZqP10zrGXcZb9xKA==\n-----END AGE ENCRYPTED FILE-----\n"
-
}
-
],
-
"lastmodified": "2024-10-21T13:14:54Z",
-
"mac": "ENC[AES256_GCM,data:8eeUCAWUrYz2fb4rgg8dIIHKdrWe/4JTfedoZX8OTE5kXyRuh0uJ8y//W9m450UZgozSEYrnBMiYJDwXHpEXgHoA2cK4Oah2ddp3JyHDsmRuLaWfuRZSVu9WVVXLrovmu/NVcagYiBiGY/Rx3IUsTaDfXQtiFxaR+7jAPB7eGQg=,iv:C7u1uczF5XPX7dSeck/IcEeRIwd3Bd42s66Uw6WXF3k=,tag:6O2b/90efYiNKeTe6pmZYA==,type:str]",
-
"pgp": null,
-
"unencrypted_suffix": "_unencrypted",
-
"version": "3.8.1"
-
}
-
}
-94
creds/sops/global/passwords.yaml
···
-
passwords:
-
_tester: ENC[AES256_GCM,data:9ho/2DMonRC2I/uYe31lUSw=,iv:8eZDKi1+naT8jAwJ0pD3muua11sk+v+7NNbgkwCJx3g=,tag:WEWo8GxuTI5M6s0FXl9/nQ==,type:str]
-
sops:
-
kms: []
-
gcp_kms: []
-
azure_kv: []
-
hc_vault: []
-
age:
-
- recipient: age1kdctxllje2rw3kwpzell0rt6t7mruc3h3j5zfjelnpmahchjlaqs9v9vm9
-
enc: |
-
-----BEGIN AGE ENCRYPTED FILE-----
-
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB3Mk9LYTdqWlRCUW9Lak0v
-
K2pSVXh1SmNBYSt2OEdCTk1ld3VKWVhOUWhBCk0yM09lbDBBUWhHRVFDOWVIdkpO
-
UUt3bWxzS0E0UGdqZzZjcEMva1kvR0UKLS0tIFA3ajlLOW9DekIvcFpBTFpoM2dS
-
a05OVHRYNG1UMDkzNGQ1NjZUUHZvc2MKJ7wCH2S/l9jKPIwjunMlUF6xsT85/eQA
-
EAcxWhJCMGSFz5p5y7QkMC7zUPwqgDhOZXdbWl8lwjsiyD9tO2T3gQ==
-
-----END AGE ENCRYPTED FILE-----
-
- recipient: age1qzma7prftj6d4atqcmatdl9le0tuuqzegm6f8e9gkwrp3pja0aaqs49g7n
-
enc: |
-
-----BEGIN AGE ENCRYPTED FILE-----
-
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB6ajRseEE1YU5YV01UekV6
-
dFcxazVEZy9rTVBUYi9hOWxSYUtuc01wdURrCjJkUVlhYW9yL2tSZER1ZGFRMTBK
-
VzFaNGo1NnBMZCsxRVJjZ00zQmZNencKLS0tIDRZZlRGSFNpNmgyUGpjZjhkQWRa
-
TE9vMHZxQmtGRGQvbS9CZ091MlZGeHMKVfUK6AEFFNROONGriB7+Quv92ddQQA5r
-
OG1LsudEbva9uHlSI/+HX4OAypTBuIBg8QyO61nyNPM5zia+00H1Zw==
-
-----END AGE ENCRYPTED FILE-----
-
- recipient: age18h7hya5terghrwawgpny28swlat2nqkdrfd4clk0svujqlz9xfusd3zeqt
-
enc: |
-
-----BEGIN AGE ENCRYPTED FILE-----
-
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBNWTNwZ0VtUG1mNW9JSHp3
-
Vnh5aTI4TG5sQ0Rid0M4YXVTemtQQWpnNnhjClRZcTJycGpUenFMSUNZdnY2NmxT
-
SmlqbzZsMkVoa2F0aFc0NDU5U3NyaDQKLS0tIGZwNitQSWh5VWRjUDF3QWlPeXkx
-
MWMrMkNDNkNmNEhwV1pnb1VLZlNqbFUK6GYIiWWG3I5fy9LaTSbJ1/z8eKMeOQbC
-
EYEps64U7ZJmlt6ly1TTfjk+pIvuf7N47qsniRv8u19JD9qAtPg0kQ==
-
-----END AGE ENCRYPTED FILE-----
-
- recipient: age1rzxugsgkpnf0ns0w70swdc3sndjpktx23eucah4w47zcppz56sls2c5e6m
-
enc: |
-
-----BEGIN AGE ENCRYPTED FILE-----
-
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA3d3VrQmtHQVFTKzlKQldD
-
U2haZ0FIemh5YmY4dG9wZk1QZ20xQVFSZVFJClZZWTBNRGppM1FqL0FXSHVCbG52
-
TUxSL0ZTYS9Zak42Yk9UWFBoMG1IRlUKLS0tIEJYeWhObXZNT0ZzaXdGY2VSbEdh
-
Ny9PS0Z4dlQxQVA1eS93ZWZOR2dGWDgKu4Cqblh/ghnjUCT0stvM0riRuY9YAAhT
-
XRjJkiLKCBO4zg6CRSsfNh7B0GFQBmfLAiL2rhfhO7A6z49WQEY6ZQ==
-
-----END AGE ENCRYPTED FILE-----
-
- recipient: age1p6n5yh9fy09xspwf29klfsa4zdrhp04q22gvxkz2vvm88vt9tunsdn020s
-
enc: |
-
-----BEGIN AGE ENCRYPTED FILE-----
-
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBMdGFPc0pibTdtbWFpSTRj
-
UWoxSFcySlhJalBkcFZaYVpCK2dRdVc5d2dnCjgvNWdBWTc3eUJGVmo3MXBLRHFP
-
NGtpeHpYaDVLV0VyYnZyRk9wTjVuTVkKLS0tIGd3NFBESGJCQzZTYm1nRXpWSkRq
-
a3RnSVZlN2J4bXljWHhveTZNMkhDYjgKyQbKT5EHtO/90gmfnoXrgruqMcEI1Xcn
-
TJbNvLueNWiCjXW2eMeTCrBnDRk+r/URxHoNjuV6e+9xgn0V/NtMHQ==
-
-----END AGE ENCRYPTED FILE-----
-
- recipient: age1tdatk0rrr6uf89g5vpq96wjcjcetkrs6yadkxv47v76q8qhtva2sn7tun2
-
enc: |
-
-----BEGIN AGE ENCRYPTED FILE-----
-
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBuY3FacDIzU1V1eW84dWFS
-
ako4bXFKTFFCQVlKSG56bDZXd0xPUnlRWUhBCldPVVBhZ0dFWjdZQXpBaGlLZnow
-
RE9nTm1VajVLVkdHUDNSSjZ2Wjd6OEEKLS0tIGxRaGYxS1BjQVBoSkVQWmxoTXE4
-
ZkN5OElhaE9CQUhJMjJQS2w0OHd0eU0K9YLGXqRYVKn70klldR2PsxffpVXUnFi5
-
Lxhmj3/NuPZFR1cqA9sbX6XsuYk/paMjNUP1wmlD2U8UoqY3ogUmhg==
-
-----END AGE ENCRYPTED FILE-----
-
- recipient: age132qsqclmp5d6x968x5y8amdn90v64rldy3assprr8g8wjdpecvmqwryah8
-
enc: |
-
-----BEGIN AGE ENCRYPTED FILE-----
-
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB2andoZUVaYjBiT05TYkhh
-
M1I0cysycmYvV285bko1NEVQVEptVGxuVjA4CmhzWkZHK2NOWmVBZFZSRFZiTVRS
-
V0phZ29DRFhHNUd5Ky9GUUNGNFNrcTAKLS0tIEQxYWp3SkQvTGFCTG1mQkpCMGVm
-
bkJoVG9KeVBhNEhQUjRoNnE5Q3NXd2sK3lGbXtzSyClCYoBShQySLa0pysg7Vb2n
-
+QqSxzC6MN5ZC0RXQZHTLCOiWtkYgwXQu5DimnOgwaoNRhNED3aKIw==
-
-----END AGE ENCRYPTED FILE-----
-
- recipient: age1zkafenrdkkmatjh034yykpzjzzs5fx6kft23jlmsung3dwyufcksds59l2
-
enc: |
-
-----BEGIN AGE ENCRYPTED FILE-----
-
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAycDZxNFl2amxSZFJvNU5h
-
USt4a0RMcGtuSmFmaEFaNWpwNWRJVWVScEU4CjlQRmRkQWlwVlpDRGVjbCszaSt2
-
dVRXTUlTTlM2Nktscmp6L25YQThKUFUKLS0tIFJKZ3pyNVZaMzljT2R4bjNzbWdi
-
Q2srRXlIZHdjMUE3VGwxeElFaFdlZmcKGzDTQkB+elOuwnvZFoc1hzv28UgtbZWu
-
6F1zQP17VQjlwCZANExxRUeVUacEXwmIGwnOD7jzQtjU8QIwaRXwEg==
-
-----END AGE ENCRYPTED FILE-----
-
- recipient: age1l3qxt6630dzesdclfm3eqgw3uuhwj09dh6typwlwr6clcv0qhfrqgtj2fk
-
enc: |
-
-----BEGIN AGE ENCRYPTED FILE-----
-
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBrVExoVzlqMlE1Z2t5Tmxi
-
dzJPRDY0L2dRcDF4V1VQd01pa2NlSnJkWkhjCmZiSktCd0l0THNRaXVmdjNQU1kz
-
d2VCUFZnVnZuYjdQelNpakpKL01vVlEKLS0tIGtZUVgrcFErZVZhSjJpb0FSdUw4
-
NHpPeitlcjdVK2RWeWN5aVlkQlRabWsKUrfxg20ocfEfjTGMEWLPTBemkPI8+EF5
-
Cxvof8388C10DDkPXozpUlGIQY//9hBlPmro9sa0WPHlk8nY3mUibQ==
-
-----END AGE ENCRYPTED FILE-----
-
lastmodified: "2024-10-21T13:14:54Z"
-
mac: ENC[AES256_GCM,data:ndRfHMQ52661Zwte2ntar6/uAM4aLnmvf4wp753DrRBg+7Pk+MQiqOFpM0twq98yXUfZzPNM32LwbWqIHdOtRpX3suWusSd8VKoNXV4iSSE7nT1uLa27TITz4kePYASrJI2Nwyg32dS3UEXFjMmPI3Xwj0ha4lQeep6wMp8w7NQ=,iv:+koj3cIVr2tCHtHrECdLEZhnqP9EzxZRguvinUKQeEw=,tag:kD8xWs4GWFMUIxxC/yGatg==,type:str]
-
pgp: []
-
unencrypted_suffix: _unencrypted
-
version: 3.8.1
-48
creds/sops/kita/default.yaml
···
-
vmetrics:
-
auth: ENC[AES256_GCM,data:JW1Q2Eldbi69xSX0g4D7G+s50mzOkKsQlrXcJ7T8tA2FyiCRj7cfOIq84Pii3kqUtYGa5qy4Cdn+YS25vdx8eMn2998X8+G08q2gbAXQN7xhLlb7rdEF8bAso75csyGakb4vvMQ8GpqIYbdYaoTyp37suiRIa5XU48kQ5cnXUqg480grn7sZSoN0kU4pId1A8pfZPZO6X2gaY1DNXn91XQgYzdrJ6b95wJbESA==,iv:abGTu/sywBaDpBYYExivqxaHpk3rTOCKmcf8USczVXQ=,tag:xgXCErk1dOe14UUOEZIorw==,type:str]
-
lego:
-
cf_token: ENC[AES256_GCM,data:LU3iREF8nNBlouP/197u/Q9LWORwnzgpmZwIYW/yCb7lMOchFKcWog==,iv:mSrMj7ze50ue7V5/3PO29Wq38iUDxzXJ96DUeZU1RwU=,tag:yx+Ze12x9komS7zLK/tHXw==,type:str]
-
dovecot:
-
db_password: ENC[AES256_GCM,data:gwKhyuboMlQYkeatRvP+MJ+dWMpy2JFZxwSffXdDdLxhsOGrVk3VsQZeiJnvXQtXIc7lPK171AQ4zVKuuJ7WR0SMCFdtyq/D0OYB2YVCR93+UKtnCZ9wBDgoCI3cnt/F,iv:dX6HkDhz3r4huRWtP9UlxhKycQg5TMG+Wwei9rtVz0I=,tag:RKXK7DHGb1B/HAnyTcNl9w==,type:str]
-
rspamd:
-
controller_passwd: ENC[AES256_GCM,data:Fh9ClKohwvMfEH6vYVibvxaDFC+p869caOagsgRrHu5D/DpXwHhspwAfnOfcxF5pyIaEX1/yA2ehWj3G7jY6Fa0jLRyvc/7zyT/fYeQid6jakHafjQLcPw==,iv:Tp0vQji0u7aPydZLB6ARMhkLv5BGj4KjOzVKkWXCUlQ=,tag:2ZYreeXQf+7L/WCuDt8ohg==,type:str]
-
keycloak:
-
db_password: ENC[AES256_GCM,data:TFdFWLGW+Ditj4fb4Jk6R8b4augsO+pYV4ApLmVcONfMEFDx3leoIJbMtyk=,iv:DZYnh2gXk4dLWEQiiJQ+264yyXgIKaPQ/KjLirNCMJw=,tag:uhjquy2vNheJBAaevzdx8g==,type:str]
-
sops:
-
kms: []
-
gcp_kms: []
-
azure_kv: []
-
hc_vault: []
-
age:
-
- recipient: age1l3qxt6630dzesdclfm3eqgw3uuhwj09dh6typwlwr6clcv0qhfrqgtj2fk
-
enc: |
-
-----BEGIN AGE ENCRYPTED FILE-----
-
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBpbW9KVm5EK0pxc0dhaWVR
-
WGtzSW1mRUEvSm5Vclg0YTJ5NFhWaWxFa0RnCmtZR3FhcDM0NEdWdE1NdWtjYVhm
-
UVcxOXVVMUZXQ2pPSEtSdTIya09qWHMKLS0tIDlNZTZPOWZqM0tEeFpqWG5ObzEy
-
M2Vpa2FPL2E5cmdvU0MwL0V5LzFPNncKz6Su+KS5LmJMTNTU/3X6M/wR1wc3kInE
-
LM4Er0568ERxB65Pq2LS6Yf+fvlRvj6khfMAfH1fDS0w01HwHDcvQg==
-
-----END AGE ENCRYPTED FILE-----
-
- recipient: age1zkafenrdkkmatjh034yykpzjzzs5fx6kft23jlmsung3dwyufcksds59l2
-
enc: |
-
-----BEGIN AGE ENCRYPTED FILE-----
-
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAwak5zS1FjU1pKQXdDZlBN
-
Vm5JUU1KWGNESGJuQmtCd1lHWjQ4cDVSdUhjCmpuZnoyTGtDWGdxZ0FCV1NxcTk5
-
dmlTZUttckFnd29HeW8zUUxQdTUxYmcKLS0tIGFmOFJWRUk3VGJEUk9FdlZjOWNR
-
cjVmbHhOOHVPYnJ4clZHaE9VeDZJWFUKpa/K66fvxzpAh1hXMbz2l8qbN7buA4fk
-
YDdpyG8jeEUcOXvJeHlI8kEgB2/nFLw3kZUYH3GNlMSX/vOTtlGYXw==
-
-----END AGE ENCRYPTED FILE-----
-
- recipient: age1qzma7prftj6d4atqcmatdl9le0tuuqzegm6f8e9gkwrp3pja0aaqs49g7n
-
enc: |
-
-----BEGIN AGE ENCRYPTED FILE-----
-
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBxWWtIcWFzVDZGampwMDZj
-
eVJHRzFqQVNkb1BpdXExMHozWnNIOVVKbVRVCjE0ZUJhSW0wZjFYYmRMbmlXK1RH
-
bnNkcVdFZGZoZ0p3YWhPeTQ3M0ZyRDAKLS0tIGZQU0ViSVpraFY0LzBzMmluMFFx
-
OS9pNVcvUkVKTlVRcDdJdHdXczZ1QVEKPnNkVBiu1bevKkM+KLDBU0CjF40tU1vm
-
bNPznLB/qV/FydcBHZPi6BPytuPNloQ1inm85KTPpTyRjA1e9V+gaw==
-
-----END AGE ENCRYPTED FILE-----
-
lastmodified: "2024-10-21T13:14:54Z"
-
mac: ENC[AES256_GCM,data:tBSSGJDHTzxW+10DDIlSMO7tD8x8UfZfwrW25l6XZ5+TWwoS8B/XWLYe51IjB655Z76Zu7z7q8SCXodnqb2zGHoer5pKMlOkNXiUHgmIHw6P2eIPpNIK5IT9ZAMTfd9HmyRsslee/mgV6cc4tzir14PGa7wUM1fcD/CfuOp0aJ8=,iv:OC9AKwM7gUc4lx5bmhhGviAAkKShrFrEfzJL1wRai78=,tag:Djrh9jW1gBTuPP//xP993w==,type:str]
-
pgp: []
-
unencrypted_suffix: _unencrypted
-
version: 3.9.0
-117
creds/sops/koumakan/default.yaml
···
-
synapse_comment_unencrypted: See https://github.com/Mic92/sops-nix/issues/120 for synapse.yaml quirks
-
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]
-
matrix-signing-key: ENC[AES256_GCM,data:BeTwWMxbwC314CMn6BxPUKtnr48ipV2pbewRI0l8yNEuzbSFPNwU8a3i41viOoRS6Mg2jEHTSWDRMw==,iv:abvwkrNe324QCbWLwiPY0UwqezS0wbyk2Fvi0vs3SI0=,tag:1MkrL33pWhmdVUSJQviITg==,type:str]
-
vaultwarden:
-
admin_token: ENC[AES256_GCM,data:SLO0d6zZhC3t8vSx99mUlhUSkWcx5P+fKrNZvzy0SBGT+Ga4puHtteCXk3xALlTQJ2LmQTNg+uj9vI5XC0+4eNT+kjl4gmZvberT+6/ANQwylKWkL+IXMjfjMzRuX8yRJGH1R1j11fZDgtSWpGvNqMicDkasuA==,iv:BbBjgsHh1pl904COKCMAh41uI7UH9kHcyy79zKYcM8E=,tag:8goYKIdtE9QX92VgZpA9tQ==,type:str]
-
smtp:
-
host: ENC[AES256_GCM,data:8lWB6bWXvlSkJmshSw==,iv:7QtLQ3Wx5uw1TDjS5OP8vgMZMDIQ5wHZtq2JfkhTdLc=,tag:bHv3Yw/N1H8tDq8h66+Vwg==,type:str]
-
security: ENC[AES256_GCM,data:4X5CLH4KoVQ=,iv:CTir/KO8cTDK0eDpa6dugYH694DLDcKG+ygRceaI7g0=,tag:J/WuWuNYKxrXZ08n9rG7+g==,type:str]
-
port: ENC[AES256_GCM,data:XKc8,iv:g5aIKLKIB5++TI9se3a8DAm1TXBtFpraW7ZkuAUMT0Q=,tag:qumWtCf4qsyNh6dOkDPmiA==,type:str]
-
username: ENC[AES256_GCM,data:RjGJbKkEmaMhKKsjdEvpb9YrvYBeAJJV,iv:5J73NP2SZQtvt3Uh3SemkEVLiQoPp2TpWGcgDbvVA7s=,tag:CkucUUmuRESTCSzdJ2EF8w==,type:str]
-
password: ENC[AES256_GCM,data:DdBBZbN62iNlTNzxknygeZeaiTVQ5behsJzlswsRzDa+7L8wSqaHp5UsnkuomTfJdgGSqQo9ObnCqm3zBj3vEbUupj6Ur2o5OWJDYXK8hep+WRUMrYqd2w==,iv:M47gM1ZU+TgldQqP/PfogBFChDhyK5xckqtVRbAWzxQ=,tag:kNw+TslEPPena5jtdRLqNg==,type:str]
-
database:
-
username: ENC[AES256_GCM,data:UjcrR4QQxBtjoto=,iv:qPVLau+h4t1SiD5PqwoHjSuCwG/ftH1x+eLhpN5g+nM=,tag:msp2oCjlM7TzrFyit4Qi6Q==,type:str]
-
password: ENC[AES256_GCM,data:5fZan5fT1mEKQp3j1BoLNKM8TZBj4D3GJEuHJC4iOjot/fCs+8CToU9K5ZbBlJmBLU0NQNmuw7ic1fajw3J0HkSLeKMR1IXYymQy9nGs7/Dtw7QmpanLRatZpSYfPCgQg3BM6lol2aW1rhwIgZGtuj03zp/+GhklRxZyj91k76M=,iv:yekf7PRi/bwpJ/bLrfSz8nxubJxs1ckJNBxfslnfvl4=,tag:adD+ZG/VNn9Q4shCU+6lrw==,type:str]
-
yubico:
-
id: ENC[AES256_GCM,data:P+Rg6xo=,iv:I6YWEq8+lpSvVicgnTnXyobK/dLi/hwyYOGUu52q1hU=,tag:QfF6mJJfklGlf3eqiISjeA==,type:str]
-
secret: ENC[AES256_GCM,data:lUHh8w6FUR8HqDvLEVa9f27wrtpqsZOYDG8DhA==,iv:ovEwbuFtdnnYnr0qpmWrXM3AqmoUsPwe8nIW/4Mkn34=,tag:ikECSoxkqmFehjMJS2ju2w==,type:str]
-
push:
-
installation_id: ENC[AES256_GCM,data:u3uthapB5tvhLsyawp17H05zF9rgwpo/nulRc53zPQ6eKg9T,iv:kakIcF8ZUsdfeH65FfzsF0Vk5GotrDMmzWQF4IQRxhE=,tag:ytTT+k7EH+aYdkP0BpvI7Q==,type:str]
-
installation_key: ENC[AES256_GCM,data:qYDdS5gV+1RWwjhZZVdQFvTqdNI=,iv:1jk1+5V278evEl/gU/aocOMgXUzAfbFVECG/sQC0s4k=,tag:yAEzpPbY8+7DCXq0gvUcDQ==,type:str]
-
forgejo:
-
database:
-
pass: ENC[AES256_GCM,data:KJZATszG5hOCV6tlZiNNK9n0Psn+l14hys1ZzMy9Hwsy6gjanFQzedNn3fnwZgZ9ani9CO1ncdAj/xNk7EweO40FIBT12Ih6m9JvTugQDveYU38v9TKitQ==,iv:OTogoxwmalk4CiUlQstlER0JVN1YuVhWJgrhGJPYiuw=,tag:ZNavKCvqjkxzvOb3hSpd5g==,type:str]
-
turnstile:
-
secret: ENC[AES256_GCM,data:zmnN7OmRjf02BVTiEic3LzbxCOD/Q0GaBx6wTha0k1jB728=,iv:yMnxn15p5HYZSMOCBT30i3gpClyW/2fx8Ytx9sQKLSc=,tag:Hw/HZrO7QEYExCPWFkwYDw==,type:str]
-
sitekey: ENC[AES256_GCM,data:9hOoGMaEPGUT0XgWc+tSeHqxNBKwavoc,iv:VaWMEu1QIh4LeauflFjJJgblLyOFkTpb4Db9wip6uY8=,tag:cPbcxVL3Ov+xlGqbx45NQw==,type:str]
-
mailing:
-
host: ENC[AES256_GCM,data:wIG697u0AjEo0Hu71g==,iv:00ahgX0qqr7905RgA1QoLW5xFC6EhMlfPvZpcjgWmkE=,tag:StOQOrXHVghW1WHkLdbZig==,type:str]
-
protocol: ENC[AES256_GCM,data:N9xCOt4=,iv:5ryKSzDHl1Vo375IqCnRr2TrcjJCvQgkdHHuIJ0Tk6w=,tag:lIxU1dWDKfKtzSl7F/Q2KA==,type:str]
-
from: ENC[AES256_GCM,data:mwcO1TA9w2A5hbkrKIwbpA8vApqaoGUeK+QVry87WmH52K6KXg1RztgFAi7E25w3cg==,iv:p1Xp/Szhh60QzBPN/7w+QgRe/s+VOzv4JlEEVhiysQI=,tag:WQSIoGEJ8gAbPO1ZArkU6w==,type:str]
-
user: ENC[AES256_GCM,data:71ZJuyuFeT+YHCdYZ96ogP6NfErYnXLr+g==,iv:242pszmIpJzoaX4Rx+7nYSD8xoDt1aqViQeBCUH0SlQ=,tag:EOsPhFvozIFkqdA8/B03FQ==,type:str]
-
pass: ENC[AES256_GCM,data:K7AwpFI5KNJC7lyTipnus2ynkAmbYikDeX17qUutun/EAprDgr2dufB7mlhvvsejj+m7b7toh8BcHYfjN8oqSjYpB74=,iv:qBqTOLuzS0E0uBQyUK8vsF9uAhKyCf0Q/Iuy22twGEk=,tag:43Ug+zcCDEPyWcOPDkpAdw==,type:str]
-
lego:
-
cf_token: ENC[AES256_GCM,data:b/04yeqgfzo3A6kx7ddnYCzRv+5hkDdbBNJNgCHceUPv8x98KQQDmg==,iv:uaOjV7F2ENE7PDt3z46JwSaT9prH6XAr8/XaDCzDXEc=,tag:92bnvrjciGWlD+sUwY9u1Q==,type:str]
-
grafana:
-
oauth2:
-
github:
-
cid: ENC[AES256_GCM,data:YZ6c5PHqdMwM30hCYxycpk2xapU=,iv:K/WKrdiq9mXaFV33zYQYeYgia/54t6/qCseVGykW/yg=,tag:e0UQEcMJg88JD/5s+pkK+Q==,type:str]
-
cse: ENC[AES256_GCM,data:o9yW6DRgdV+eX1OQ6XyJUQsZ0SMtUY2MrWrfhhqf9LgDRdsHFZNxUQ==,iv:iNbKhyUIuKtBUVHXdR36KWCueMjQuKIErl8P7intFX8=,tag:OpzLX7zbOfxVxZmL6crLWA==,type:str]
-
gateway:
-
cid: ENC[AES256_GCM,data:M9LrS2w=,iv:F8A+gIGPUjziBTuBnhVS9kygzZYjnwFayL6Mx7LBwe4=,tag:ioQXCTFxqZo5yOnucSLz/Q==,type:str]
-
cse: ENC[AES256_GCM,data:YYTOpfaOlwo08qnPCkydj92N3TxDtQxwXAA0xVVB1hQ=,iv:1InLcW58sbz9wfp9VnONsqE+iDrhCWhlBBkr13KfN1s=,tag:4/OIhs4kqgBeCHCNkIwAGg==,type:str]
-
vmetrics:
-
agent: null
-
auth:
-
hosts:
-
#ENC[AES256_GCM,data:gh8JtuOIKKQuttfi8QiE+N1IzmIHvV/pnBuHmAZBJOYG6CJmOfCxoTVcN4/wyc4=,iv:IeAZya/9R5fF4iqmmMzZ28J8hj9yYBPXnljsCVhN73U=,tag:a2NofH9HbEL6+tJUSufFig==,type:comment]
-
satori: ENC[AES256_GCM,data:LoTJoCWMtWtpJhcbS73kffix7QMhM0rPHtJQbM77oG4aT/D4sX8vWsWgKPmYsxzkAMeI9lUQ1rgX2u2yOd7asUSjuW/U4pUsaMSi8EEq5dxbxPoAZQVHRRCImBWtcHeOa8AMH17lohYDy01AiCmH1da8c7iMeg68IQ8DoHGLQMqY0GJVLIwoh9dnyvpf4ALFMPMnt39vGi3hXjHQlcwYSdTS0BIgcrW1oHMrhg==,iv:6NhlTlShIUrtl5844NGWq5903liy7pbbsaa9z/OBxSQ=,tag:7i48gmPmEKCzv1cq8P8jUw==,type:str]
-
renko: ENC[AES256_GCM,data:PBo4AZ2ELq7+D142B2TdrAEPfcOAee7Go+dpN1crBvJy0DBLMvOCDnhRevRyf2hhqfJ57r++ILTMr+R3VmEVvTNG8ABhEDSria5F5IgAbuRTnk/ZJgi84xqlEyGVIkG84GsTF+QFNWBgS5OUOjuelBosYoi1OhhnQU+zxUIt4a/T+JNASq+ge/AQoyUJUOZcHv91mOG9AJEVqQCXA8nV8WQxPNBJII7qFimdIw==,iv:WA8CsytshgRN0LXWyxm6pHQ0N8vwDfvh7VNlemrja8o=,tag:h89e8WCDuzbkd+vLAA7EYg==,type:str]
-
kita: ENC[AES256_GCM,data:Niwnk6+48nXbUOqGr66czfLffwNf22Uewr2NWI5WzLzxxQXmc4z5/PBzjDKScwoHwOCW8g1b310h4xOcEfzcco54xpGhRhdGuHYjZp+voVC7ugTsQ1qA72a1cjIfJekPtUeeWzX7tiav+6AcP9xdmVWGtPG8DWbCQRn58B4kR43G6fyIMD5XNW4VSJdcssZTR5EvT9DFSPVhdGBYPjEOsohnMB89W/+e4gVKFg==,iv:Wvx+ItZIrdHO4W4M6QWIZgyGDINWoNKKPWVbarnGYj4=,tag:PARM4+q0H+w4v9ZJUnTvQA==,type:str]
-
ryo: ENC[AES256_GCM,data:vFOGhKs29DKvUUp/+N2YyOEf1eRz5Jr+F06zfAYSIcR8E7NHHlPeZO2xwok9V+4TRvCmFsJZs9X8OQ7DI929nKZ5xqE6ej7aXOhgd+3KPY4cLcSS+3QShW7I/EKNnt3P/TI479AZeXWToZ+QrcUQ4erH9FG3iiz7AD1c+oDc7BP1LjoNQcVJKrWch5P60tJoJE0tq8wwhOsvMCsSPW2lAJvLmuvXF98hTL8EZQ==,iv:eIIFeKHC6DygdX0JIqZgban10d/24UF8K49DiFLpqb8=,tag:qtGKAssQygryT+/aog8sfw==,type:str]
-
nijika: ENC[AES256_GCM,data:VMwS0kJR3NByYh7GO6FMKJx1B8Oj0MG+JnPtBhZqq6B0uv1maLeZWfCC5u2vDUKy1kRuooKE3eD5cV+pnIclqrg8thuHGmQyffgmdVRZBCgf8sKyMLn2KjebmydfTrZafIn1XlMoNnCezfcWrRmyoA2fOotcDSiU4imnews1TtQOyupucaTXBq8miJHUkM6Ya9bhhVxTm9o2vZCwedxy+orz1GYHG3iLro/5Qw==,iv:VZnjKfSygCrt50k8rwhI/jG06ej5uDJ4UZk/54hArvU=,tag:j0X81BTprWUr1QilmpP06g==,type:str]
-
miniflux:
-
admin_pw: ENC[AES256_GCM,data:yad28v4L9v1U349tOqlSJLs+wxU2isFi,iv:zJMay0BMstifEbpzQ+fAEr6+exkVpdGvRLve5Ni8EiQ=,tag:eEChDTcEFytzkWA6/qEimQ==,type:str]
-
pds:
-
email:
-
address: ENC[AES256_GCM,data:4GAp7aW4JtTlfKc7bohYRyY+6KeJjAXJW/R6lpF22qMEbOTNZA==,iv:GG9N8u6Tlse+rVTQ4Na3KhA85stsFSF874/5/TKlw38=,tag:NfW/5VqIX5raz411Jji6rQ==,type:str]
-
url: ENC[AES256_GCM,data:wXRXEjrLeCVyrsTWfAHw0D95byOWHABU6SvIHguiOUW7r1fljAt8f0QkaSaaIg1AUN0jeSYESkoQG9yk8cxL7/vqLwK421j+Q/LZsWATbpLtkSHHdzX6YQUDw77MXqGON88YkTpk3Ur6P/ereQz2iBP9Ph8=,iv:nwED4OY1R3VWSjgNy79FbiuNQ5qKgOX3YPHhZJKTf9A=,tag:fVJtQwAr9rEtDcREXVqgwg==,type:str]
-
pixivfe:
-
token: ENC[AES256_GCM,data:N90DOJ0mip8FuuQD2iHA2OMDIePuM6tddLRLCjgNXpnp4PnRBFgt7UOvY/163DYphRtI/dl6Dl2odlpJ7UDtqYUKmNVtzGUGHLz38XQMCXN4rXnCXQ==,iv:3w5L2p+yQvKxusT3LBG/YXwQMrYhz+km1RuWmr4ZeO8=,tag:YHAHqrgqzq3K0x3XcNizwg==,type:str]
-
searxng:
-
secret: ENC[AES256_GCM,data:u1qFKXn4J21sO5a68/YJq8pWHHk98NINOG7FuwY8+o7M+hNod4vO2Axw1fJPUnDnUdcnEBQ/UUpUuH/DeAjr5HyjuZ1kyzHQYUVhjl8Mp7W7S/R2GCKoIg==,iv:bPKgs0ZAJl7TgNOjTh4aKks5/DHBYdfIemYa9SnfoXg=,tag:KiKf4sKhsi1dtwNFtzhEPw==,type:str]
-
hydra:
-
signing_key:
-
v1: ENC[AES256_GCM,data:Oc1E2MNzUgRZvXm54HmumhomF3M7LIHQl1u/Jta8cdOKmZgB5jSzv8aUeaKa1SOGCtIfVSbsJb7ijKTULtrWOkge6SBtiNYkOAKlvDGXWhChAO4GRFrMyeJgjLFWgY7+OKFicNQwU3uLPA==,iv:j25ZwWmzt7r53CVxJkGia8tSpIUQD7UecQElM+JDJ3w=,tag:zxSvJV3qfius+QwBYbgNrw==,type:str]
-
s3:
-
key_id: ENC[AES256_GCM,data:ONhytMHluXYgZw0hErBid5PmD+o=,iv:j6NPjLPIPN3rNs/RSDoqhYqGaZ11ZZwyM3Q4SoXviKY=,tag:oc+L6+TwAy/OLKQVfZsdww==,type:str]
-
key_secret: ENC[AES256_GCM,data:41QIwGRJP3Pw2fsYgZIG3wk6GLCy3EeJszwM+kdGrjriIfCXs6D45g==,iv:sWMgzhIh9VnBbiuv1jg+ZIfolHtuaxamthp3OKwOVgc=,tag:JLIHG5f4tdjaJxP5Il+nFA==,type:str]
-
wastebasket:
-
key: ENC[AES256_GCM,data:tvlRsZkX+jrJWJXXxBcFnZtweaiK6V+1YV6evN2ppu14I7h4vPOOTpqav9lvzol5y8PwJ98Uw1kXFUZWTZfUda204aK1G0o4n8OS/Q403xrWzouusUI+06Jm91L75a9+/M3ql5/sQOtR0/gTMAN/10gEcTSJGnCQQVy9MDe76ppkmXnp+Bk919S8qhh3kIJ2brRnZ98RmejpJsJKG/2D10e4k9pA8uiN4vhhWg==,iv:CBzRc7Oltetqo29M29cuUr6aI/Hu5tHkbRLInDFCRzc=,tag:m7GR8ZG7ymFhQRQfQIdodw==,type:str]
-
zipline:
-
core:
-
secret: ENC[AES256_GCM,data:9Yro0dKRoW/q3nAJeBi2/DBVzq2l9Q8cNjg+ZlDf/ssn1oDNnxeBtW6C+VpChUssP59behc7NQAdEH1XnhE/5YITiRw0SpMclLBDO74KmSmfhoGvQBDWU0rRQqHoSg/8WpDJcVUs9iIU2LzUoKf2ZAPqRzS9IdegaKQA8l2djsgW1Io6fGeUAH7UdLh+QTYhRzhga0vRInDcRbm9dzrRW8rB41ff9Tsm++hYCA==,iv:loOALkfZFg0sd9t0k6XR5ckV0ix5Oda9X3H+7bnA2xs=,tag:NL+gyDxW5fS0TmYtiB6HLw==,type:str]
-
s3:
-
access_key: ENC[AES256_GCM,data:dwV+xA+2MYAizNMuHZptqDFv62s=,iv:MDmcEGAA3gdhDBA4ie4A5nlBwJElek/7qSvzFrGP9FI=,tag:pDIU8LTNagJrVwPw700XQQ==,type:str]
-
access_secret: ENC[AES256_GCM,data:ID9NA21++yUNmF/UGWudyxXuZXbMPfViGnariYe8H06aKZias9OK2A==,iv:PMXdLwkz+JpBJ0ZrVwaUdcqDxew/+Yv9AbVrX1EUfWE=,tag:4puu4oyZVGdfvaZpkdKFFQ==,type:str]
-
minio:
-
root_user: ENC[AES256_GCM,data:q+w4FgnCA2QxWsxM,iv:NojzSMmZ2yq7VyPn7fOYauLpgMOE0NGCyTUQ6slGN2Q=,tag:5FfjO4KH8XfLuymxDgV2iA==,type:str]
-
root_pass: ENC[AES256_GCM,data:oh/VQDU1dR9YLribrhZeVJxMoY9/7Ri8bloM650j6Ut/vHF6BB4NYY94RngkBYRVkHplF9oKx+Ey13kMyIPvC+EvPczoWKCHJ4pJqq3GgWigFp7ufUDdvY4hBjW7SU7fk0wYOjZYH2JlLqjmU0MsVKSqt66Rq9Si0MU7VACNrJzYDe6KbCbL/YT3DmTvBpPR6ysLCE525rH7Tg2LVyn775Si+vo+KGC5gqGMlw==,iv:8pbJMeuDIcvkI8Uda30i8ote/PRUSSAmaua22gQmbHc=,tag:6hNvVytKXbjrKZMKkQ5pEA==,type:str]
-
vmetrics_token: ENC[AES256_GCM,data:ZZcCBpLlyjMOh55H44WKVSIcNgU+GVpQf9ApMfNV7Tg7dXtP0gF4Cy0RkgKT5hp2arO23HZB/jZGxAY60IDOr9nHVFih5+e2OaXeu5RPGlqsgpp6EZeBDcFvLBtJvx/3qmijuB92HdUXP8/x4Gr0d52xID9YXr3w/To50fMvK8UPFVwkh3Ck4tU7tYLWrhwNOmLu3jZCRMq47Adn7Gu090Zekie4S+LijB1pJvz9h3n36R1M5NOkEpLVb2MjMxtLLTQkoordLq82Vsvpd704VkZohTU=,iv:hiCRdE7dFGHcWjDEc3ZkXFIiTC+YkvCus3tbwVe8aBc=,tag:HflQTi3SuSgibEGKT0Zi1Q==,type:str]
-
whitelisted-web:
-
entra_secret: ENC[AES256_GCM,data:h5tiggV5MgUby5tZ7oLqxAiJReB9L07XfEzfBWoSkgxJFm3mTDH3jg==,iv:xBi9pBWmyg+KGcGMxTXsabzK/uqcNpHdXdJ36UtiET4=,tag:OFyuvZuXvE/L/jBJSU3Vpw==,type:str]
-
turnstile_key: ENC[AES256_GCM,data:r60Jgabtrkx9vYenlb0u+IM00PbD+v+V4/Vb0JT8Y/7lcoQ=,iv:GfcCLWI+mRlbOr2DDDs6nzWKpABJUP0xtrAyK4xhP9g=,tag:J9MO8UULfIT7nhf7/icuoA==,type:str]
-
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]
-
sops:
-
age:
-
- recipient: age1l3qxt6630dzesdclfm3eqgw3uuhwj09dh6typwlwr6clcv0qhfrqgtj2fk
-
enc: |
-
-----BEGIN AGE ENCRYPTED FILE-----
-
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBRbm9IUFZKWW1obG03VmZM
-
amR3N2NPMDhDUTNkTENPZStLV3luUEsrVkVJClVUL3JtYzNGYk90b3NubU5VVG1u
-
Q0JVQXlhWjFBeHZVQUl4SGtBZHhJUWMKLS0tIDZ5RUpNdkFVaW1uRHIrQ09EczZa
-
U1FQbVRKMGw0eURlY0I5S1BPTmFvK0kKF/NluxRwkAkS11AujkOzdMlUXfkAolvl
-
2Mt62hDtFwxh1gCQDq1j1RC2LtcG7FnQpm1CI10POIDE+HfuYNj7uA==
-
-----END AGE ENCRYPTED FILE-----
-
- recipient: age1zkafenrdkkmatjh034yykpzjzzs5fx6kft23jlmsung3dwyufcksds59l2
-
enc: |
-
-----BEGIN AGE ENCRYPTED FILE-----
-
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBFYzJWZjNQOGNaZTB3NGpG
-
ZzlBY3lPeDVXNmhjR21CTUVBRWZYZ3pPRldRCjJjN1E1YVFrMkorYVZRSFRhTzRM
-
clJkL3RyalllUldVbmkvWjdsV2JJNjgKLS0tICs5WVFvQzBITGtJT1FnSU9lSUpQ
-
cElpckVHZG5WTXV5b2dML041UW9Md1kKtqsN/agZiQSEmsRcuWoe0FZwYk+CTjld
-
xhVsLW4STRZ7Xxd//RTrKf77uPfyZglQ1TdstXi1WbFnruJbOq+piw==
-
-----END AGE ENCRYPTED FILE-----
-
- recipient: age18h7hya5terghrwawgpny28swlat2nqkdrfd4clk0svujqlz9xfusd3zeqt
-
enc: |
-
-----BEGIN AGE ENCRYPTED FILE-----
-
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBoRlVoZERKTWpESXlFRkEv
-
Ukx5b240RDllT0xsYnZJQ2MrSGZHeXBuMDNRCjA1VTRpRzJaMHpicmJWSXpFa0Yv
-
b3lxSnFGMysvbFIvaTBPVFg0dldwR1kKLS0tIFgySVNQT1QxOE5SVGNvWUY0ejNC
-
QUlVNExmVGd2QXJwVmRGa0JvMmtocEUK7Zo0Mtj3oZm5Etp61cGbLs+2XP97pjR6
-
rtfHnuxceJj0+yBugfwgFD1TGJ+6M7z5YCwTx+GAvbPDrmSm2TGrwg==
-
-----END AGE ENCRYPTED FILE-----
-
lastmodified: "2025-09-28T16:46:06Z"
-
mac: ENC[AES256_GCM,data:gWB+a7urGrcH81OoVCMANMRWvHihxXyg7S5IkxhnJ+OFNW+gTB0E7ZV35GOCTnBk0W+pUgL3Rqb63LZ7HSWkCx/iCHwKZXuYFKLsHPp7123E9QTUI1uTcfCiZE/mUT5MD0UQzfv4NwQqZMReMa4vJaodFz1tdvMrDHwbA9LP8eI=,iv:LWY0fMDtGvSLIoPsfm6c/hEFxytXZhXziA5OCa3sM+8=,tag:AF0SrnpyZdgiTMKYIMb/FQ==,type:str]
-
unencrypted_suffix: _unencrypted
-
version: 3.10.2
-28
creds/sops/koumakan/vsftpdUsers.db
···
-
{
-
"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]",
-
"sops": {
-
"kms": null,
-
"gcp_kms": null,
-
"azure_kv": null,
-
"hc_vault": null,
-
"age": [
-
{
-
"recipient": "age1l3qxt6630dzesdclfm3eqgw3uuhwj09dh6typwlwr6clcv0qhfrqgtj2fk",
-
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB4eEVwR1dPTEFWMHQ1WFh0\nVUxoaXRaRFJKZWtQTkx1ekpuUGJmb0FRaXdVCjJkZ0xTdUx0WlhveHhjZHRrM3k2\naWMzSXVkZVlyd2JTdXFVSTlVbWFlZVUKLS0tIElvYWtNeXBCTUJTcHkvODRkR0lt\nVno3U3p1ekxvL3JKMXQ1R3psSjlMUWcKDQEhGe8cRlHjfw+sQFdK/DwG8QoJnSxx\nYtbyI8fsEJGrhVXaz7eDH7smWcNBxlVe1SSF0AUI6no1sOlbiW+B0A==\n-----END AGE ENCRYPTED FILE-----\n"
-
},
-
{
-
"recipient": "age1zkafenrdkkmatjh034yykpzjzzs5fx6kft23jlmsung3dwyufcksds59l2",
-
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAvU2piejFJc29STjVmVkV0\nRWxPbVZGVjV2U3NudGRvcnlOTFdMTU5Oa0g0CllyNFNVNVFuQnNnV2FORHY0SkZ3\nczJMOHNEZjhJaEVtYlQrc0N1NXZhaWMKLS0tIEYxMnp5bmhYZ2cwNGpBeHJyS00r\ncnF4YWdpNXdjRzdUcXRvQW1TcnFBNW8KsQz72b6nW10nv2/f3I5glQy+5lQzBGvH\nMV5gllulel7SyAISLvR7te0rmGixHqiv1g1IiI39Z1RiuXnDqeBFFA==\n-----END AGE ENCRYPTED FILE-----\n"
-
},
-
{
-
"recipient": "age18h7hya5terghrwawgpny28swlat2nqkdrfd4clk0svujqlz9xfusd3zeqt",
-
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBwRzFESVhWVFNPQ0d5ODVY\nbnJRYVBwUjhSTG4yRFUrSUNDTzU4SnRuRlNvCnNiWVBrOTJjWVlqTW5sV3FSUHk2\nUFF5cVYvZVRlQVpUTnZ1QUVJLytlK3cKLS0tIDRweUtNR3RJOS9ZdHZRRjRDN2Qr\nYzRnTVZvNHJxSE9OU1pwZkc5NnpGNE0KqA9d5X7hUPSbcl48mTiXKZCy7gZqHsjk\nYLS4UOAcWgQBfJU80Wu0jSD6+y7wVsrdZ3pwjrxyHcjHHGrZz0ldDA==\n-----END AGE ENCRYPTED FILE-----\n"
-
}
-
],
-
"lastmodified": "2024-10-21T13:14:54Z",
-
"mac": "ENC[AES256_GCM,data:oT/WC92JMTqPVop840fnMi8nw6H1lXiHglUY6iyIjeh/8lxzkdgV7A2lGxhAf0RhjvO1Tfd435Wd0+1bTg4PRTOsDKj9ucOtb+Rq58JupBGeS+AjE9HK7BvpC4zkdaATePuXAfFZvc3GIzQRkYYb1FIPrjxqT6JHqo/U8tb/7Co=,iv:PSrZRzmoAukLb3QCWvwRoNcVQWYEAwCMHGvHNlikQZk=,tag:QbXkblPXjgz1ftwwEkUAGA==,type:str]",
-
"pgp": null,
-
"unencrypted_suffix": "_unencrypted",
-
"version": "3.8.1"
-
}
-
}
-28
creds/sops/koumakan/webdav.scan.htpasswd
···
-
{
-
"data": "ENC[AES256_GCM,data:PJmL5puYlmCKyj+CfCIJ1AYZEP1X9ZoHV5Clq40qI5gT5WRWTsG4s+uU+MWvluB3gOQyPfLUzckm6ewEdsYBb8P4HwQ=,iv:sU/WZ+d1nE8zIzLWVqPsg9NbD4nsVq2CBLbTZEqH6uE=,tag:AqfmErBFOtrJIrss4kMl/w==,type:str]",
-
"sops": {
-
"kms": null,
-
"gcp_kms": null,
-
"azure_kv": null,
-
"hc_vault": null,
-
"age": [
-
{
-
"recipient": "age1l3qxt6630dzesdclfm3eqgw3uuhwj09dh6typwlwr6clcv0qhfrqgtj2fk",
-
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBGZmxhblp2SDh0RElUK3Jv\nbFhGYXBScGJISnROcEg5OVlXRUZvMGY2S1dJClo4dGdWMUVsbjBvU2hRWEhMVUVK\neCtHczRLSXFubmZjNkpoYXRlS3c4QVEKLS0tIDZWNkluamhjTnh2cFlpdmg3UmZs\nNmtqbS9LSEZ0UjFyWkNwSTgwa29iYVEKsY2j+gbb3cwie2le8ngWGzWz5SD/1NhR\nGg0IWVCjH5SXFKKlAjLlnmF3kmNs7mUCbglG9kJZ1r8/62mY3jeYsg==\n-----END AGE ENCRYPTED FILE-----\n"
-
},
-
{
-
"recipient": "age1zkafenrdkkmatjh034yykpzjzzs5fx6kft23jlmsung3dwyufcksds59l2",
-
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA0QzBDSFBXbzJQNXZIbThj\nQ200U1VOMUhHVVg4UC9ha25TTHd6TnRKTmg4CkRpRk5Kdld6T1JUS3E0WWdoNUVr\nbVJnS2tDZHg3T2VDb2FWeEttdWpidUkKLS0tIG04c1gxWVBtZGpoVWZZSDRTZ3A5\nelVYcFdML292RkxDM0VmTGl5Qmc0Q2MKB8lJ9hrB/j+XNhJnUxwOfmy3Py/hZFSN\n9mYmJOE9U9fQBIiosVZFeXaXXZ/QlzSipV2sWPIvbJBBpDOZ36JKZw==\n-----END AGE ENCRYPTED FILE-----\n"
-
},
-
{
-
"recipient": "age18h7hya5terghrwawgpny28swlat2nqkdrfd4clk0svujqlz9xfusd3zeqt",
-
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBONmxubmltRU84L3dITFEy\nRE1hT1NoQy85dlQwZE8zNzRoUklaS0E1YkhFCjRYWUJLZy9IRFVUNi9PdmNUdFRE\ncjU5NXNwa0lZei96Qzl3OUFvZWdreDgKLS0tIE1qeG5ZQ0tFVmx5Nm9qYjkycTVU\nMjJ2RERHZFBCbjM0RkplV2l2WEZtNGsKHItOPOKeL4rsWB8bDpuGaKf7uoEw89tk\ng+XX+RO2EnJ+fi3R2mi6rT63FKvDIx52FeNKUL8isqeY2R47inQCOA==\n-----END AGE ENCRYPTED FILE-----\n"
-
}
-
],
-
"lastmodified": "2024-10-21T13:14:55Z",
-
"mac": "ENC[AES256_GCM,data:oXii6vKcekEh3Ca8nwpfUnGMz1FA5r0lhcGuupr3tgvo19LAtbMz+0aB+mBK4pbW9lXi4Db6pmn+P9doxJcaJeOYyinN/NLDNEB7cFixf+53zALJPpZXsJ0R7KR66UJs+KoFB8xf+rmt2A6YhIiwx5cyTjAMgGF5uhparX0k5Iw=,iv:2VvpS+2uxSbLsIEyimLD/GKmTMERZZcVRvbpTy0NllQ=,tag:CKO8H58Anha4nIArnPYg+g==,type:str]",
-
"pgp": null,
-
"unencrypted_suffix": "_unencrypted",
-
"version": "3.8.1"
-
}
-
}
+68
creds/sops/koumakan.yaml
···
+
comment_unencrypted: See https://github.com/Mic92/sops-nix/issues/120 for synapse.yaml quirks
+
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]
+
matrix-signing-key: ENC[AES256_GCM,data:u6miE2oM3TUXaQ7wc776SwSMaOAxJOVlpl2kBW+AjI/aDH5vcGBp0L0uTpZbVfOtIe+RDNEv5E/mKA==,iv:abvwkrNe324QCbWLwiPY0UwqezS0wbyk2Fvi0vs3SI0=,tag:ZmpDB9LHbezQrxuwHNgpRg==,type:str]
+
akkoma:
+
dist:
+
cookie: ENC[AES256_GCM,data:5jpsa4KsOAoCMGAt9laK9ioVTJfuT9+viKva8wDWRnAimVY6jDoNr4+hxVty6yQAAfSJYA7ddTxaSCEjnJtneg==,iv:V8+MpX/IEc57zEfhNGX5f+eMyipraaXDKPDNDOy0Ieo=,tag:+xCy18Ni8F5wYkO/4NbSzw==,type:str]
+
endpoint:
+
secret_base: ENC[AES256_GCM,data:l34Rj4iIQIykgzTLJolqWLQQz5pcfa0o5U/ZMKeNc2CBQedxiMXYrLSNOx6OuV38aqoOolccJEOSiVjfbTawtg==,iv:/x0ydo2gOPrhIZI7at877bzfFgMpraauozfLq95aHCk=,tag:RQI4aeLiAkAcWYlwLaTj5w==,type:str]
+
salt: ENC[AES256_GCM,data:CP4805tG05A=,iv:aSun7ABJdbDQrFcrGQMM9H1/7d5lJqeMwO08gUYrD2A=,tag:ikhxbijsqyBFJs02j2j/vw==,type:str]
+
live_view:
+
salt: ENC[AES256_GCM,data:4fKLclucoV0=,iv:ZvWKutuMTOm2X8w8a0fOTq+ldrXemayIUY2PUcurY80=,tag:qkIB1gPCI5HO0G0mLEsV+w==,type:str]
+
joken_default_signer: ENC[AES256_GCM,data:myCEFUkf8s1YNQAigjxygRYvbwkpsv7cqgs00fARe9nxSFl2wveWM5JcfOnoVPwVBVV2GaAjFe4oMWXkaTPtqg==,iv:Yk1f/fzzbruW64mvTTeiyTlbrOO/G47CKKfr9BLtQ5g=,tag:QLpM22ec+VWtkjx5U/mzCw==,type:str]
+
search:
+
meili:
+
host_unencrypted: https://megumin.soopy.moe/
+
key: ENC[AES256_GCM,data:00TLCUneHn7NcSK1joURfIzxNFWyOBf/0/fceOn4RMcMt59dZz9LOvbs3F8B0vcH7tf/eUi3SnhYJNyRdPklyw==,iv:t0kQUCmjhFw8Z2CTmYOPUNFvyiYfsXETU8GSxhRR5KE=,tag:CPjtd7jQzgHJDrsIjHlVFQ==,type:str]
+
vapid:
+
pub: ENC[AES256_GCM,data:HYMKjhVCW/7DsMfPPssEduuwWnFezH4OOq4hfAovI82RUPsfVEKhgvkI9INY8hArAb/AIfyyxZhVx+bd2QkPlnASz51L7MxPtkPfZNUKqafjlMmK0nwH,iv:154BP5EmBqnKyf9BND2laKV3caVxa34MCRzrsg6/dik=,tag:wHLYdI6oQXPUzbw8dSxgwg==,type:str]
+
key: ENC[AES256_GCM,data:t+da4NLEPZBMvq3MQkFEr+Fsj3XMGPMFKUWwbHDWNJAyuUZuiVcn3zX0kw==,iv:yQLu5CFl73GCojMBa2II6OhLrNNinsiVG1aPOAx+HtM=,tag:n0oelXaNFvilyee+MRSB8A==,type:str]
+
postgres:
+
hostname: ENC[AES256_GCM,data:rFEnhnn/Bw85,iv:GM2SH4Gkvt8tLG8AYIKxfHTZvB1sT+hgIoqkiViH6Es=,tag:yyGY9/nS9WFcJTGXlYpz6Q==,type:str]
+
database_unencrypted: akkoma
+
username: ENC[AES256_GCM,data:6skzOqv1,iv:OQ6zNmDn0uqKqNKEqOHWY6VBuT/4/CHog7b0Pf0TAPM=,tag:8HLmGykXg2V4t4RHzB8yaA==,type:str]
+
password: ENC[AES256_GCM,data:J3OewVKr2A3TlT7ZUTk7tQr4olFs7bKx47Lus4LGbwGAZfNEmyk9coFTeQ8L/EJ0hpLfPfD1OcGBc+p0ZWK/XQ==,iv:UFe/3H/AfTgSlJikHqE1IED3zINjDuOs5niXpGWXGYE=,tag:MvT0z3TMs1dehg4gp54MyQ==,type:str]
+
smtp:
+
username: ENC[AES256_GCM,data:N7XbQkngWcUGzn/SR4AXCQ==,iv:wBXWtRYawOkjumsvTPcKfvL95CCB+RbsEyJv0YUG3WA=,tag:vGQREe+Cv0ITTxszl21J2g==,type:str]
+
password: ENC[AES256_GCM,data:oU/aWkVmDU8WJhmwqOcXJ/EngiF7hvfUzPwpdjwkyh7Dw50dyG5AY7b2+hh6LIv9RZrN4yU+fXPAYr1W21OG/A==,iv:ds8Bg9JSJdNHUXh0FvD5a4pquyRnIXowcsJcVV1TyB4=,tag:JoYqas2RGSv8xyvJT9wHAQ==,type:str]
+
relay: ENC[AES256_GCM,data:F2NnRLSTO5kmbWy4fx0=,iv:omnyn+Xa/cjqK+9l5bI573aR2p7UsUvqGX5ZQGf3CD0=,tag:t4u/jLQ1nZchyxf3WrhW6w==,type:str]
+
sops:
+
kms: []
+
gcp_kms: []
+
azure_kv: []
+
hc_vault: []
+
age:
+
- recipient: age10rkyshu0lswdqyvun4cs9cekm9zt4fw5c8ssa38tn3lukgcahcvsltnqx2
+
enc: |
+
-----BEGIN AGE ENCRYPTED FILE-----
+
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBYMFBMZHdrR2ZMaEErZVlE
+
RmRZNnoxRVpVSDc5Rlg3MmhiVkxnK1NkNmljCjBsNE5oejcyOTRJRVVvdzJsMmw3
+
SGdyaUM1T0JvN3lDQjd4V054MWc1UjQKLS0tIDVvSndXZ29KSC8yUW5SRjdIcEZL
+
WkFkK1hsdzRnMmRBdDI0dWU3a1hBOEUKf+pJ6PAH1tPLXG14ghG4gxHpVN4D6TU1
+
GHCvsS5qNW8Cjis/Ubb3PHJfFiN4quN3rLaM/Ivkl5G1gzf9cGSDyQ==
+
-----END AGE ENCRYPTED FILE-----
+
- recipient: age18h7hya5terghrwawgpny28swlat2nqkdrfd4clk0svujqlz9xfusd3zeqt
+
enc: |
+
-----BEGIN AGE ENCRYPTED FILE-----
+
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBXbVhFQXJ5ZWVVZTJocmpn
+
Q1VFc01mcnZLRGtqQVF0VjB3RU1DL0phaFVVCkFmU2w3WlhuTDFHYnF5VC9TM0xz
+
VGdSSVpVbkN1Tlh4WnQxdHJkQU42dGMKLS0tIFVnVERoQWk1N1dmdWk0KzA0R1ZG
+
cHJ5aWIrQ2Zrb1dhbC9yZ1lIMU1jbzgK4mx+S5bF6KBMe6+TrSZfaBcuWEg9cHyd
+
tbJty1zxS9pndA/u3qz5EJxDouiAODvyAR07yeegtEcbw1FlG6W/gA==
+
-----END AGE ENCRYPTED FILE-----
+
lastmodified: "2023-09-14T17:13:38Z"
+
mac: ENC[AES256_GCM,data:Jyx0f+w9fJ+B1lz4jVVkcKxd1xUh3FzxDhk+KaxJLVh0BG/1d8Nx0/cOnxZV1FfJkn5Z2wYiLzBPSvJKe8MjlExOSH1mIAnuXcSP6dvXp21bgX17CXM6OP91Ny6IvwSZriqs6EIpWOkZNdxsEnySwtECoQfgs09ZnA4qmbtb01U=,iv:XHnY20d0WsnaECF1/68eu2/xcGLGeGnzba+/kBxDcc0=,tag:alo+8B2fVHon0lHGsQSUyQ==,type:str]
+
pgp:
+
- created_at: "2023-09-08T14:11:19Z"
+
enc: |-
+
-----BEGIN PGP MESSAGE-----
+
+
wV4DAxCcDC4ukRQSAQdA6IXTpPTgsoAuUSW0NqFw4MpqX4j3Wt9IqcGbrDobZGIw
+
FFZDSKuMgO7ADZCFoADJ9OWOQBUyE3htwkXWjT/NQdBbVX3nuANbsfRfTdPN5NJt
+
0lEB30Vck2fEXQsIGrIeg3pPRBl3U/z7F35tw+79EFZ5yOrAsOzSn3wzNA549/T7
+
dEVnej/86D4ZxtMqMjVB2NjsXrphqd7ENozlljMM6QKkjtg=
+
=juKF
+
-----END PGP MESSAGE-----
+
fp: 8F3B277901484C6EA7E63F82D539637D518022C6
+
unencrypted_suffix: _unencrypted
+
version: 3.7.3
-42
creds/sops/nijika/default.yaml
···
-
vmetrics:
-
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]
-
lego:
-
cf_token: ENC[AES256_GCM,data:qxF3WPZlhX3G,iv:kNFCT0zJype1OrAqngAOsQRp1zxzGIUJfhTBwhACxTs=,tag:Z6W4fKvGQAfi3ATWaTGg8Q==,type:str]
-
sops:
-
kms: []
-
gcp_kms: []
-
azure_kv: []
-
hc_vault: []
-
age:
-
- recipient: age1l3qxt6630dzesdclfm3eqgw3uuhwj09dh6typwlwr6clcv0qhfrqgtj2fk
-
enc: |
-
-----BEGIN AGE ENCRYPTED FILE-----
-
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBFK2lYV0Rac00vYldQd1JL
-
ajE5bXRDVnFTN280VFBWYjBhZnFjVHBNT1FFCnVHcTBETjNQMGtmUDFMRUExOHFV
-
Z1E2b1UxcFErRjhxaXdVNUg0OFRkblkKLS0tIDNZM0M1emhoMUFUaFRVeDNrS3Fn
-
ZERvVjUzbVpQMzR6N0dSOWgwcXNHNU0KvNyvxVuQzBOyn9ufoJVMnLg4R3mHC2dV
-
LKL2sZHq2iuMAVoXwaf1ZXQHlV1qilB+fxWKx710KrqHH1/ezKMnRA==
-
-----END AGE ENCRYPTED FILE-----
-
- recipient: age1zkafenrdkkmatjh034yykpzjzzs5fx6kft23jlmsung3dwyufcksds59l2
-
enc: |
-
-----BEGIN AGE ENCRYPTED FILE-----
-
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBaM0tnelUzcU9lMVdMdjBs
-
dVdSVVVNS01jek12cEpqZVN3aUxOc3JKK0VjCndaRnJoRmQ4aXdaS0lmelVMOW5h
-
WmFITzhKUHR2a2RQb0RyVnZ6Qkp0T1UKLS0tIEIwQkE1R1Ftd0RWZUNkZUNwc09I
-
Wm5WRjBaNS9jbDhMaWkyaU0rVE9Pa1kKql2UBxIB3DLlXud1Sh5b4/YJwu/brzqy
-
hxUiO9HtftBsXEtgph+mJn2GAj+2K8eKEJe5oP1sNs4CFdAIup4U4Q==
-
-----END AGE ENCRYPTED FILE-----
-
- recipient: age1rzxugsgkpnf0ns0w70swdc3sndjpktx23eucah4w47zcppz56sls2c5e6m
-
enc: |
-
-----BEGIN AGE ENCRYPTED FILE-----
-
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBwV2ljZUJRaXlLdEFoZ25m
-
TE1RUFd0S1R1ekNhakozWFpBNEJid29RVjFZCkZkL3o5ZnVtSXpmdUVGT04yczdT
-
MTdENmtZZ0xnS2Rkc0RMTG9XZzdjU1kKLS0tIE1MS2lwTExhWkNRTkNEQW10Ukpz
-
eTNNaUJablhCZ21sUWZHNk5UVmVzMmsKyImtNp3LC/dSsCVEvR2ME9pdtmpOTkQN
-
AEkzIy1Lbt5mCRCEawwJvQSHATztwjJ/1v24tbiPH5YeP+2C0JwYOg==
-
-----END AGE ENCRYPTED FILE-----
-
lastmodified: "2025-03-25T02:15:52Z"
-
mac: ENC[AES256_GCM,data:+VBCgQ/rAYC8YKZDeJQcK263ODAPfT1KiDfniMruHM1fQ0hZSlmHLLUr31HVxGiTWrswnpBEmqbkHCEUKK/zUFx+u0u2fgLHtDgIl2kIs6/JAljJdEsVTbx1+OCt6Q+Dd54ZyFuNEGzzMgWldrR7TEGlB0AjDNGJTI9QynSSX6w=,iv:zWWvxph6uqLdSTgrYax0TFjPIHra1BJkHtR51LLRg0E=,tag:COlo1jHhQ9wsmoxPXbE/vQ==,type:str]
-
pgp: []
-
unencrypted_suffix: _unencrypted
-
version: 3.9.4
-37
creds/sops/renko/default.yaml
···
-
vmetrics:
-
auth: ENC[AES256_GCM,data:oxbj18DlfPJ+PEdIj6YEdF66ZZNar1l9Mak0Bmqu2AOZWlhCo2aRlrcGfvs7mORplvQmcfh5MwjTqGExjQX4ke28SZ7pszoLMGM3XR2BdedPNsO0KcI/zV19dAL1wijBr1c2qqDJGqqO1P0UzLaUbonl9bskG8L9+lB2pr8aU7z1Unejd/Qq2Ae/3x9Ku82deeP5jGWJkeUae9wADEsBPdbqRbv1bpW5zzmc2A==,iv:x65jPFbodvp3/v09OJ0BIgxMUFOLBkpiKRVMoB8seP4=,tag:wz5UVNBJoSl2994GYjVgpA==,type:str]
-
forgejo:
-
tokenFile: ENC[AES256_GCM,data:zY6+75ES2lKwOl9L0lTbolpOu7XqWkfJPYw59557DUqjCFyEqyP2BknCgVhqWA==,iv:U6xv/0CE3i6ea67QBo3PeOhzuyRWbEEtDZbvLgBnrko=,tag:K6KrXGqArx9Dd+Q53T+Ilw==,type:str]
-
sops:
-
age:
-
- recipient: age1l3qxt6630dzesdclfm3eqgw3uuhwj09dh6typwlwr6clcv0qhfrqgtj2fk
-
enc: |
-
-----BEGIN AGE ENCRYPTED FILE-----
-
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBnS1NickYrNUFrWS83bUEz
-
bzIrNUxYdy9zYjVaMVZDVi9PNTcwdmgyekF3ClUyTDhFallLTU9aWnk3Qk8wcHF2
-
VXJ6UjROSEJiOWNBdm1YM3ZYMEVxUHMKLS0tIHFEbzdaM2FBQTh5d2tqbUVHMmM4
-
R0dpU2lNaHBDVFlrekpwbVgyczQ2MGcKA855+mgYImDqlENOYINg3SMfml9UOcp7
-
z7RJaRIybWxd/usOdaCyfYtDqJTzZT9qNdZCm4YEFVYk9HZ4fHUzOA==
-
-----END AGE ENCRYPTED FILE-----
-
- recipient: age1zkafenrdkkmatjh034yykpzjzzs5fx6kft23jlmsung3dwyufcksds59l2
-
enc: |
-
-----BEGIN AGE ENCRYPTED FILE-----
-
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB0aFJGczBvVmQ4aUN4OEZL
-
MngveEx5dHVCWERicmhIK1BDcGlSZFJJQ0NjCklvYjRXQ3prREppemdWc25CdGMz
-
UEhzQlhWQVh3azdYYVhNR044c3lZRk0KLS0tIExUYmVVYzR2ODI5S3dIS0ZISitm
-
Q1AzM09MSENFV2R4SDVkY2trcnVrTFkKjnsHGr/CkW+xW1owa4WYk2x23luUtQJT
-
aC1kfRw5hjo5byMTb+NfKzW5Ogj2QRyHKxRhAkWvYGr7oSonnzd2Ig==
-
-----END AGE ENCRYPTED FILE-----
-
- recipient: age1p6n5yh9fy09xspwf29klfsa4zdrhp04q22gvxkz2vvm88vt9tunsdn020s
-
enc: |
-
-----BEGIN AGE ENCRYPTED FILE-----
-
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBhQjRMcEVyVFh5M2FaQkNN
-
WDBoeklpS05xdUlNSXBSa0svYmpmQnRDSXdVCk1tc0s2WW9vajBLTHRyR0YyMnRr
-
ZTl3N3ZDb3hBa3V1cWJoYlhZdGo4TlUKLS0tIEliY1I3VysxdGY5L1hZRUVDdXZj
-
S2duS3ZmMVZJYW9HOERMc1FadlZIekEKaXDFW+Szv9WlqQMIr6Mc5qYlMyt8M19u
-
DmMZu5Mzl2bLQK5LQvT/iLktWZZidYKfOuP73HpAFf8iIhYXBOLKMQ==
-
-----END AGE ENCRYPTED FILE-----
-
lastmodified: "2025-10-03T01:46:03Z"
-
mac: ENC[AES256_GCM,data:zD5HByLfLjAvAC1XjN0ZhSVkihEAnNs2tKT8dN11NLy5ne52wMDcWaaxnUSj6zFC98vnlELATCUu7JuOzaFp0YTBWcD5hknXbcCKMhAnF92ArXw0O4Iq7wYSX5xZzbCoYfU9FMZi76GfJ1RoY1c6R+6gACTNeYml1ZgH7IGDTAY=,iv:xZvHlck+vYELhWP2yvTP4eWx4lTfJvQYSwm8LHJyiuc=,tag:LlPEJpLbkTsIktjeSWY1bw==,type:str]
-
unencrypted_suffix: _unencrypted
-
version: 3.10.2
-42
creds/sops/ryo/default.yaml
···
-
vmetrics:
-
auth: ENC[AES256_GCM,data:D+EKKAsDVIrTdXyxhQQ65rkgbOUlTfbMqYn3a1GWYwHQDAplb1lAqY7yPbvrLhC7QJRagMMfMxN1q39dsz5eBiUZU3YORrt/Eo3sjlZGT5HcZo7ASnGWO62FarjAZOk2dFk6Qj3TtZ+z8OOnmW4JpoaILKBA3KTb5PQKRmrF7iEJwjr3w8ojqmRjt/nGn6CE5xU6Fpq3tuwSHNmfGiK9hpVRig9WyzDv6Ii+Fg==,iv:BVNHFOmGisiiEvX4+qyFrY/kfF9lhFh+iLXO3lLVIbE=,tag:H7N5XPqr1wjAZeKnBjCH8Q==,type:str]
-
lego:
-
cf_token: ENC[AES256_GCM,data:rH9al1jeSY/FsyQ2dDsjyi39m4VKjouBydo85wTxE3qTKDNLY/anhQ==,iv:XssbI1d82KkP0OLK4hHe2a4UwCdT+4TZX51JalSRZ2c=,tag:bqOCrxg6+HX6hDRn4xLOhQ==,type:str]
-
sops:
-
kms: []
-
gcp_kms: []
-
azure_kv: []
-
hc_vault: []
-
age:
-
- recipient: age1l3qxt6630dzesdclfm3eqgw3uuhwj09dh6typwlwr6clcv0qhfrqgtj2fk
-
enc: |
-
-----BEGIN AGE ENCRYPTED FILE-----
-
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB6ZU5HM202V3QzeVpPeklL
-
Sk0vVS9TQy94cW1qYmtsa3NJbmZRcUc1Z1VJCmJBNW1tYy83ejUwV1VoLzBzQSto
-
OHRkSEw0RUhZbDBONDhIS1F1aWtRM0EKLS0tIGZvRVNHYS9qVXRIeWx1NGVrMUIx
-
WVB6Zmh6dGRGMXNvblFoTEJ0VnBES1UKpfzPPf/Afk1GNdR/h2hZM6TonyuhH4i6
-
OUSiZwdiLq5zBA5c0f0EeM+tuK8H2pLy9PeFF26aFx7N1tqzqtR+HA==
-
-----END AGE ENCRYPTED FILE-----
-
- recipient: age1zkafenrdkkmatjh034yykpzjzzs5fx6kft23jlmsung3dwyufcksds59l2
-
enc: |
-
-----BEGIN AGE ENCRYPTED FILE-----
-
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBLYlFxeTNkNVVpcTlJZzZF
-
aWdiRFdaS2dRQkhreVNhdzQ5ZDZ3WjZtS3dNCm1MSExNeGlEc2xRdHJHMmw2YS9T
-
Mmd0aTcyUmVaeTRpK1VOekhHNFVObHcKLS0tIEs2dTNqVU9URG13dHltamN2Ullx
-
RG1uZmVWM1RyR2NKdkFGZlFLdmxlSlkKN8qJEePEjtbFxVW3BkA5j1BEd0Ylr/rm
-
5EdOfEU7A16blv+i3/tgfxGEEVls2+YfpRhkI9IKLICFjNlq6wX3NA==
-
-----END AGE ENCRYPTED FILE-----
-
- recipient: age1tdatk0rrr6uf89g5vpq96wjcjcetkrs6yadkxv47v76q8qhtva2sn7tun2
-
enc: |
-
-----BEGIN AGE ENCRYPTED FILE-----
-
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB6akdJME5zMmdSSVNXUnFu
-
bjBXSzcxQjRWVEdxRVM5SncrcFNIK3lTcGd3Ci9tclZrbHZ2Z29kclAvckp3dnUy
-
aHJsVDNsamFDUVpkNDFITDFBRzA5WVEKLS0tIDVqN0VPaE13REJxRVhvTlRUOEtC
-
emlNZ1dUT2J6TlNRVjJsZlJDeWZOQ3MKEj9zpAX8PJ1wWuokrXJf0tkwPJx3zZAD
-
MTy/t6dddmzfrltmZnE+MdsS9U5Dol/TdGOR7YhjdvsWfHcCT6g2TA==
-
-----END AGE ENCRYPTED FILE-----
-
lastmodified: "2025-01-20T13:19:18Z"
-
mac: ENC[AES256_GCM,data:vSZDS9yqyQNiBbqvI4fCsPU/vEbxjX22E6d+N2Dz2oa+/0OP1X7aQiT4JJ2g5HRGo4ziGUrE8fZLR32s7V3VEErx6AETotwnzVMRYbfw+rHbjaWWb4kjgMOiJRO1iYa28t+0FnEXdFICDw/DB9unJT2Vtj55Og1p8sp3UqBGef4=,iv:HPisIwKptZSPkgIhzPnVbRa9aInOTZWrN38aIVpWC+c=,tag:YM8sZFee7RTKHkaYC07mzQ==,type:str]
-
pgp: []
-
unencrypted_suffix: _unencrypted
-
version: 3.9.2
creds/sops/satori/.gitkeep

This is a binary file and will not be displayed.

-40
creds/sops/satori/default.yaml
···
-
vmetrics:
-
auth: ENC[AES256_GCM,data:oXCxA++8+GR8IRjknnZA5eHns4dWj9TIzECU5U0t5F86v16SGeq/eFSDqRF0fFNa//By+2Uk8CgozrLcQbsyRYSoyTBQX5S69vu5EXrwLsmHEQtj/xFs4nPjM7zAXABM+fpROh4R8C0cmI1nkP9v5Ks+fzU9lQAyHELAWf50BnZWhlMdt2t4aXBr8qFJKq5C7E6LITWP9/H2AZw9GowoZ07oNebJHwowFer8/g==,iv:Q49WI+0O4MzeLK7TbKZFal5Q37UVjZ7+J2uyBQkgzd0=,tag:lUXCwp2ErOQjCo5E4TqOGg==,type:str]
-
sops:
-
kms: []
-
gcp_kms: []
-
azure_kv: []
-
hc_vault: []
-
age:
-
- recipient: age1l3qxt6630dzesdclfm3eqgw3uuhwj09dh6typwlwr6clcv0qhfrqgtj2fk
-
enc: |
-
-----BEGIN AGE ENCRYPTED FILE-----
-
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBGdGh2dllDeDNmU0VneDVs
-
anhaSEtqaWtzSkxsMml5L0wxK09pVU5QTEFrCkM2U21vRWRSUUN0SGJBa3ZEcGtL
-
elpIU1pGMzZ2Uko4dnUxRHcrYnZMQlkKLS0tIHJKekJCRHdibU4zUlpDTzdmZnpa
-
MnI5RlhMUjRLQXNrSGVxajZXdllPaFEKmXzHmdGE6qNFMDA1VMVSe9qRUTBZALOO
-
26VhNllKNoc9pHdrSwVng98Ss4zHzImoP7NQX+EEy0lXJ2N8wISyfA==
-
-----END AGE ENCRYPTED FILE-----
-
- recipient: age1zkafenrdkkmatjh034yykpzjzzs5fx6kft23jlmsung3dwyufcksds59l2
-
enc: |
-
-----BEGIN AGE ENCRYPTED FILE-----
-
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBFSWh1dHA4eFhsZ3lzaEtr
-
SHRiOElYcnpEUnEyZVRKSjRLTXNpZHBqaDNJClMxYTNoVlVldnVad2NsK2VlZmo4
-
M1hGZFFBUUhkb3ZqS296MGc1MkxEMjgKLS0tIGhrQUhneHY1SXNLUy9KSGN2OGdu
-
d2NBc3grZ3U5UmlEcmNZSUN1SzFJanMKiZL51wTg58x8zGdE4f2B4Ao9UPgcrOa7
-
T4MkeHdIV56SykeVsbPDPoRBFusKllc2KKJtTRbG4+WlvdBCkQYLBQ==
-
-----END AGE ENCRYPTED FILE-----
-
- recipient: age132qsqclmp5d6x968x5y8amdn90v64rldy3assprr8g8wjdpecvmqwryah8
-
enc: |
-
-----BEGIN AGE ENCRYPTED FILE-----
-
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBJMStoTHRMRGRWSlJwVWhG
-
M0VLaFNIK0tTTHJCVVFFUUg4ZXNjUHJ5T2xBCnB2NkNZMWtHUkxMU05lZFRaTG5a
-
amJzOVhHeUxyQWJwUldQZTRUMzFnRUEKLS0tIFpsWVhEc2lNdzBySWxNRGxOcVNt
-
eUorbDJEVWwrMDJ6NkQ4L1UwL1V5QnMKItqoMM/gk3WP4EOxrTqnZT+V6l44BAna
-
ucZVT3t1xBK+qYzLf4zjmncTuk3r9QCCZBTiK6Q7nyVBKfcXHwBZYA==
-
-----END AGE ENCRYPTED FILE-----
-
lastmodified: "2024-10-21T13:14:55Z"
-
mac: ENC[AES256_GCM,data:37hju7YsT2eQ9u6ZYp57GCS71CZY0/RWU6icVytz80ioS0vYqO59a+751sUIy19H6+874AU5cmk4gwruU5jk2UbuYJ0JE70BLMWjz/AElZWN17psfUq/0LR1dg1UTIElxCAC9vQjR93ciDWaNyB+eZQTLLZ2inAL9GZdINYlvrY=,iv:qH5KvySvPI2nZRNNMJ8CVMiPEO99+W6OWR2tgU12z6o=,tag:E2MjGrfH9pOBOxH7lQ5QkA==,type:str]
-
pgp: []
-
unencrypted_suffix: _unencrypted
-
version: 3.8.1
-1
creds/ssh/auth
···
-
sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAILJ3mxaweLrFL//bYIJvE1XVmjQf2Dq/CjKIPkIVmDpXAAAABHNzaDo= YubiKey #19302295
+12
creds/ssh/cassie
···
+
# If I had an option, I would not use ecdsa keys.
+
# SmartCards
+
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGvCpt7yWIptJ9XFBhwVIj9zR30OzkWI976B/P5+0whD cardno:13 901 056
+
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJxpXpPlPEZPfnw2mIuWJEy/C/5h1bb6pIMeFsHAICQ+lLdEkbBSeDXQuA8feLN0MJw8KaB9jqrJbYgFadV/nVA= YubiKey #19302295 PIV Slot 9a
+
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICMjRM3BNkLbU57RyfUx7kOlZeBEj/NByr1PfXri82aP cardno:19 302 432
+
+
# Static devices
+
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIPTbZL0dq0ynBl8fy9yZmrKVWd/fOybZoqBKchP0MPM sophie@marisa
+
+
# Phones
+
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIELnUun49XZwfj535a5COURTKF85A79jn7oyUt4EDa8+ u0_a288@localhost
+
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOsxx+UE9xiHbQM+lKF5CbDcZOlu0AGg7rrzMbldJARO u0_a282@localhost
-1
creds/ssh/users/builder
···
-
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILJtCpuxmzHqW6GCZ5D+ECyP45MSfZWCZRJFlGGwALeF builder@*
-11
creds/ssh/users/cassie
···
-
# If I had an option, I would not use ecdsa keys.
-
# SmartCards
-
# ssh-keygen -t ed25519-sk -C "YubiKey #${invalid:?gock}" -O{resident,verify-required}
-
# -> To obtain resident keys, use ssh-keygen -K
-
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJxpXpPlPEZPfnw2mIuWJEy/C/5h1bb6pIMeFsHAICQ+lLdEkbBSeDXQuA8feLN0MJw8KaB9jqrJbYgFadV/nVA= YubiKey #19302295 PIV Slot 9a
-
sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIEP1oum6r6bTb4My/ZRqhVWxYKYGEqDyijUqqL1ZCIWjAAAABHNzaDo= YubiKey #13901056
-
sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAILJ3mxaweLrFL//bYIJvE1XVmjQf2Dq/CjKIPkIVmDpXAAAABHNzaDo= YubiKey #19302295
-
-
# Phones and Portables (portals)
-
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICPydYsQOmcjpsuhwi+w7TD5DRPXIe3pemUYyUbmOLMt pixel7a+graphite@portal.d.soopy.moe
-
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID41KR2A+6frMVx7VVsONXmPi88RcHLQLOs1QVNngqoY vault.stored@portal.d.soopy.moe
-1
docs/.gitignore
···
-
dist/
+6
docs/_config.yml
···
+
remote_theme: pages-themes/leap-day@v0.2.0
+
plugins:
+
- jekyll-remote-theme # add this line to the plugins list if you already have one
+
+
title: nix-on-koumakan
+
show_downloads: false
-29
docs/book.toml
···
-
[book]
-
authors = ["Cassie Cheung"]
-
language = "en"
-
multilingual = false
-
src = "src"
-
title = "gensokyo"
-
-
[build]
-
build-dir = "./dist"
-
-
[output.html]
-
default-theme = "latte"
-
preferred-dark-theme = "mocha"
-
git-repository-url = "https://patchy.soopy.moe/cassie/gensokyo"
-
git-repository-icon = "fa-code-fork"
-
edit-url-template = "https://patchy.soopy.moe/cassie/gensokyo/_edit/main/docs/{path}"
-
cname = "flake.soopy.moe"
-
-
additional-js = ["theme/pagetoc.js"]
-
additional-css = ["mdbook-admonish.css", "./theme/catppuccin.css", "./theme/catppuccin-admonish.css", "theme/pagetoc.css"]
-
-
[preprocessor.admonish]
-
command = "mdbook-admonish"
-
assets_version = "3.0.2" # do not edit: managed by `mdbook-admonish install`
-
-
[preprocessor.pagetoc]
-
-
# [preprocessor.catppuccin]
-
# assets_version = "2.1.0" # DO NOT EDIT: Managed by `mdbook-catppuccin install`
+6
docs/docs.md
···
+
# documentation
+
lmao bals
+
+
## table of contents
+
- [tips_n_tricks.md](./tips_n_tricks.md) Tips and tricks for nix
+
- [utils.md](./utils.md) _utils functions reference
+10
docs/ext-files.md
···
+
# external files not tracked by flakes
+
+
due to the required secure nature of these files, we are unable to include
+
thses sets of files/directories in this repository.
+
+
<!-- These are coincidentally the same length. magic! -->
+
- `-rw------- /etc/atticd.env`: attic credentials file
+
- `-r-------- /etc/lego/desec`: acme credentials
+
- `drwx------ /etc/secureboot`: secureboot keys
+
- `-r-------- /etc/nitter/guest_accounts.json`: nitter guest account tokens
+18
docs/index.md
···
+
# Cow
+
![a yak on some grass](./quaritsch-photography-1_6rJHQ2Gmw-unsplash.jpg)
+
+
*Gracefully provided by [Quaritsch Photography](https://unsplash.com/@quaritsch) on Unsplash, via https://unsplash.com/photos/1_6rJHQ2Gmw*
+
+
# NixOS Configuration
+
This is a bare minimum nix configuration for koumakan.
+
+
I'm still very, very new to Nix and its ecosystem so pointers to better
+
way of doing things are very much appreciated.
+
+
## docs
+
documentation and extra tips can be found [here](./docs)
+
+
couldn't find what you needed? suffer with me! see the
+
[How 2 Nix section in this repo.](https://github.com/hlissner/dotfiles#frequently-asked-questions)
+
+
โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“
-348
docs/mdbook-admonish.css
···
-
@charset "UTF-8";
-
:is(.admonition) {
-
display: flow-root;
-
margin: 1.5625em 0;
-
padding: 0 1.2rem;
-
color: var(--fg);
-
page-break-inside: avoid;
-
background-color: var(--bg);
-
border: 0 solid black;
-
border-inline-start-width: 0.4rem;
-
border-radius: 0.2rem;
-
box-shadow: 0 0.2rem 1rem rgba(0, 0, 0, 0.05), 0 0 0.1rem rgba(0, 0, 0, 0.1);
-
}
-
@media print {
-
:is(.admonition) {
-
box-shadow: none;
-
}
-
}
-
:is(.admonition) > * {
-
box-sizing: border-box;
-
}
-
:is(.admonition) :is(.admonition) {
-
margin-top: 1em;
-
margin-bottom: 1em;
-
}
-
:is(.admonition) > .tabbed-set:only-child {
-
margin-top: 0;
-
}
-
html :is(.admonition) > :last-child {
-
margin-bottom: 1.2rem;
-
}
-
-
a.admonition-anchor-link {
-
display: none;
-
position: absolute;
-
left: -1.2rem;
-
padding-right: 1rem;
-
}
-
a.admonition-anchor-link:link, a.admonition-anchor-link:visited {
-
color: var(--fg);
-
}
-
a.admonition-anchor-link:link:hover, a.admonition-anchor-link:visited:hover {
-
text-decoration: none;
-
}
-
a.admonition-anchor-link::before {
-
content: "ยง";
-
}
-
-
:is(.admonition-title, summary.admonition-title) {
-
position: relative;
-
min-height: 4rem;
-
margin-block: 0;
-
margin-inline: -1.6rem -1.2rem;
-
padding-block: 0.8rem;
-
padding-inline: 4.4rem 1.2rem;
-
font-weight: 700;
-
background-color: rgba(68, 138, 255, 0.1);
-
print-color-adjust: exact;
-
-webkit-print-color-adjust: exact;
-
display: flex;
-
}
-
:is(.admonition-title, summary.admonition-title) p {
-
margin: 0;
-
}
-
html :is(.admonition-title, summary.admonition-title):last-child {
-
margin-bottom: 0;
-
}
-
:is(.admonition-title, summary.admonition-title)::before {
-
position: absolute;
-
top: 0.625em;
-
inset-inline-start: 1.6rem;
-
width: 2rem;
-
height: 2rem;
-
background-color: #448aff;
-
print-color-adjust: exact;
-
-webkit-print-color-adjust: exact;
-
mask-image: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"></svg>');
-
-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>');
-
mask-repeat: no-repeat;
-
-webkit-mask-repeat: no-repeat;
-
mask-size: contain;
-
-webkit-mask-size: contain;
-
content: "";
-
}
-
:is(.admonition-title, summary.admonition-title):hover a.admonition-anchor-link {
-
display: initial;
-
}
-
-
details.admonition > summary.admonition-title::after {
-
position: absolute;
-
top: 0.625em;
-
inset-inline-end: 1.6rem;
-
height: 2rem;
-
width: 2rem;
-
background-color: currentcolor;
-
mask-image: var(--md-details-icon);
-
-webkit-mask-image: var(--md-details-icon);
-
mask-repeat: no-repeat;
-
-webkit-mask-repeat: no-repeat;
-
mask-size: contain;
-
-webkit-mask-size: contain;
-
content: "";
-
transform: rotate(0deg);
-
transition: transform 0.25s;
-
}
-
details[open].admonition > summary.admonition-title::after {
-
transform: rotate(90deg);
-
}
-
-
:root {
-
--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>");
-
}
-
-
:root {
-
--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>");
-
--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>");
-
--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>");
-
--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>");
-
--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>");
-
--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>");
-
--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>");
-
--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>");
-
--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>");
-
--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>");
-
--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>");
-
--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>");
-
}
-
-
:is(.admonition):is(.admonish-note) {
-
border-color: #448aff;
-
}
-
-
:is(.admonish-note) > :is(.admonition-title, summary.admonition-title) {
-
background-color: rgba(68, 138, 255, 0.1);
-
}
-
:is(.admonish-note) > :is(.admonition-title, summary.admonition-title)::before {
-
background-color: #448aff;
-
mask-image: var(--md-admonition-icon--admonish-note);
-
-webkit-mask-image: var(--md-admonition-icon--admonish-note);
-
mask-repeat: no-repeat;
-
-webkit-mask-repeat: no-repeat;
-
mask-size: contain;
-
-webkit-mask-repeat: no-repeat;
-
}
-
-
:is(.admonition):is(.admonish-abstract, .admonish-summary, .admonish-tldr) {
-
border-color: #00b0ff;
-
}
-
-
:is(.admonish-abstract, .admonish-summary, .admonish-tldr) > :is(.admonition-title, summary.admonition-title) {
-
background-color: rgba(0, 176, 255, 0.1);
-
}
-
:is(.admonish-abstract, .admonish-summary, .admonish-tldr) > :is(.admonition-title, summary.admonition-title)::before {
-
background-color: #00b0ff;
-
mask-image: var(--md-admonition-icon--admonish-abstract);
-
-webkit-mask-image: var(--md-admonition-icon--admonish-abstract);
-
mask-repeat: no-repeat;
-
-webkit-mask-repeat: no-repeat;
-
mask-size: contain;
-
-webkit-mask-repeat: no-repeat;
-
}
-
-
:is(.admonition):is(.admonish-info, .admonish-todo) {
-
border-color: #00b8d4;
-
}
-
-
:is(.admonish-info, .admonish-todo) > :is(.admonition-title, summary.admonition-title) {
-
background-color: rgba(0, 184, 212, 0.1);
-
}
-
:is(.admonish-info, .admonish-todo) > :is(.admonition-title, summary.admonition-title)::before {
-
background-color: #00b8d4;
-
mask-image: var(--md-admonition-icon--admonish-info);
-
-webkit-mask-image: var(--md-admonition-icon--admonish-info);
-
mask-repeat: no-repeat;
-
-webkit-mask-repeat: no-repeat;
-
mask-size: contain;
-
-webkit-mask-repeat: no-repeat;
-
}
-
-
:is(.admonition):is(.admonish-tip, .admonish-hint, .admonish-important) {
-
border-color: #00bfa5;
-
}
-
-
:is(.admonish-tip, .admonish-hint, .admonish-important) > :is(.admonition-title, summary.admonition-title) {
-
background-color: rgba(0, 191, 165, 0.1);
-
}
-
:is(.admonish-tip, .admonish-hint, .admonish-important) > :is(.admonition-title, summary.admonition-title)::before {
-
background-color: #00bfa5;
-
mask-image: var(--md-admonition-icon--admonish-tip);
-
-webkit-mask-image: var(--md-admonition-icon--admonish-tip);
-
mask-repeat: no-repeat;
-
-webkit-mask-repeat: no-repeat;
-
mask-size: contain;
-
-webkit-mask-repeat: no-repeat;
-
}
-
-
:is(.admonition):is(.admonish-success, .admonish-check, .admonish-done) {
-
border-color: #00c853;
-
}
-
-
:is(.admonish-success, .admonish-check, .admonish-done) > :is(.admonition-title, summary.admonition-title) {
-
background-color: rgba(0, 200, 83, 0.1);
-
}
-
:is(.admonish-success, .admonish-check, .admonish-done) > :is(.admonition-title, summary.admonition-title)::before {
-
background-color: #00c853;
-
mask-image: var(--md-admonition-icon--admonish-success);
-
-webkit-mask-image: var(--md-admonition-icon--admonish-success);
-
mask-repeat: no-repeat;
-
-webkit-mask-repeat: no-repeat;
-
mask-size: contain;
-
-webkit-mask-repeat: no-repeat;
-
}
-
-
:is(.admonition):is(.admonish-question, .admonish-help, .admonish-faq) {
-
border-color: #64dd17;
-
}
-
-
:is(.admonish-question, .admonish-help, .admonish-faq) > :is(.admonition-title, summary.admonition-title) {
-
background-color: rgba(100, 221, 23, 0.1);
-
}
-
:is(.admonish-question, .admonish-help, .admonish-faq) > :is(.admonition-title, summary.admonition-title)::before {
-
background-color: #64dd17;
-
mask-image: var(--md-admonition-icon--admonish-question);
-
-webkit-mask-image: var(--md-admonition-icon--admonish-question);
-
mask-repeat: no-repeat;
-
-webkit-mask-repeat: no-repeat;
-
mask-size: contain;
-
-webkit-mask-repeat: no-repeat;
-
}
-
-
:is(.admonition):is(.admonish-warning, .admonish-caution, .admonish-attention) {
-
border-color: #ff9100;
-
}
-
-
:is(.admonish-warning, .admonish-caution, .admonish-attention) > :is(.admonition-title, summary.admonition-title) {
-
background-color: rgba(255, 145, 0, 0.1);
-
}
-
:is(.admonish-warning, .admonish-caution, .admonish-attention) > :is(.admonition-title, summary.admonition-title)::before {
-
background-color: #ff9100;
-
mask-image: var(--md-admonition-icon--admonish-warning);
-
-webkit-mask-image: var(--md-admonition-icon--admonish-warning);
-
mask-repeat: no-repeat;
-
-webkit-mask-repeat: no-repeat;
-
mask-size: contain;
-
-webkit-mask-repeat: no-repeat;
-
}
-
-
:is(.admonition):is(.admonish-failure, .admonish-fail, .admonish-missing) {
-
border-color: #ff5252;
-
}
-
-
:is(.admonish-failure, .admonish-fail, .admonish-missing) > :is(.admonition-title, summary.admonition-title) {
-
background-color: rgba(255, 82, 82, 0.1);
-
}
-
:is(.admonish-failure, .admonish-fail, .admonish-missing) > :is(.admonition-title, summary.admonition-title)::before {
-
background-color: #ff5252;
-
mask-image: var(--md-admonition-icon--admonish-failure);
-
-webkit-mask-image: var(--md-admonition-icon--admonish-failure);
-
mask-repeat: no-repeat;
-
-webkit-mask-repeat: no-repeat;
-
mask-size: contain;
-
-webkit-mask-repeat: no-repeat;
-
}
-
-
:is(.admonition):is(.admonish-danger, .admonish-error) {
-
border-color: #ff1744;
-
}
-
-
:is(.admonish-danger, .admonish-error) > :is(.admonition-title, summary.admonition-title) {
-
background-color: rgba(255, 23, 68, 0.1);
-
}
-
:is(.admonish-danger, .admonish-error) > :is(.admonition-title, summary.admonition-title)::before {
-
background-color: #ff1744;
-
mask-image: var(--md-admonition-icon--admonish-danger);
-
-webkit-mask-image: var(--md-admonition-icon--admonish-danger);
-
mask-repeat: no-repeat;
-
-webkit-mask-repeat: no-repeat;
-
mask-size: contain;
-
-webkit-mask-repeat: no-repeat;
-
}
-
-
:is(.admonition):is(.admonish-bug) {
-
border-color: #f50057;
-
}
-
-
:is(.admonish-bug) > :is(.admonition-title, summary.admonition-title) {
-
background-color: rgba(245, 0, 87, 0.1);
-
}
-
:is(.admonish-bug) > :is(.admonition-title, summary.admonition-title)::before {
-
background-color: #f50057;
-
mask-image: var(--md-admonition-icon--admonish-bug);
-
-webkit-mask-image: var(--md-admonition-icon--admonish-bug);
-
mask-repeat: no-repeat;
-
-webkit-mask-repeat: no-repeat;
-
mask-size: contain;
-
-webkit-mask-repeat: no-repeat;
-
}
-
-
:is(.admonition):is(.admonish-example) {
-
border-color: #7c4dff;
-
}
-
-
:is(.admonish-example) > :is(.admonition-title, summary.admonition-title) {
-
background-color: rgba(124, 77, 255, 0.1);
-
}
-
:is(.admonish-example) > :is(.admonition-title, summary.admonition-title)::before {
-
background-color: #7c4dff;
-
mask-image: var(--md-admonition-icon--admonish-example);
-
-webkit-mask-image: var(--md-admonition-icon--admonish-example);
-
mask-repeat: no-repeat;
-
-webkit-mask-repeat: no-repeat;
-
mask-size: contain;
-
-webkit-mask-repeat: no-repeat;
-
}
-
-
:is(.admonition):is(.admonish-quote, .admonish-cite) {
-
border-color: #9e9e9e;
-
}
-
-
:is(.admonish-quote, .admonish-cite) > :is(.admonition-title, summary.admonition-title) {
-
background-color: rgba(158, 158, 158, 0.1);
-
}
-
:is(.admonish-quote, .admonish-cite) > :is(.admonition-title, summary.admonition-title)::before {
-
background-color: #9e9e9e;
-
mask-image: var(--md-admonition-icon--admonish-quote);
-
-webkit-mask-image: var(--md-admonition-icon--admonish-quote);
-
mask-repeat: no-repeat;
-
-webkit-mask-repeat: no-repeat;
-
mask-size: contain;
-
-webkit-mask-repeat: no-repeat;
-
}
-
-
.navy :is(.admonition) {
-
background-color: var(--sidebar-bg);
-
}
-
-
.ayu :is(.admonition),
-
.coal :is(.admonition) {
-
background-color: var(--theme-hover);
-
}
-
-
.rust :is(.admonition) {
-
background-color: var(--sidebar-bg);
-
color: var(--sidebar-fg);
-
}
-
.rust .admonition-anchor-link:link, .rust .admonition-anchor-link:visited {
-
color: var(--sidebar-fg);
-
}
docs/quaritsch-photography-1_6rJHQ2Gmw-unsplash.jpg

This is a binary file and will not be displayed.

-24
docs/src/README.md
···
-
# Cow
-
![a yak on some grass](./images/quaritsch-photography-1_6rJHQ2Gmw-unsplash.jpg)
-
-
*Picture by [Quaritsch Photography](https://unsplash.com/@quaritsch) on Unsplash, via
-
https://unsplash.com/photos/1_6rJHQ2Gmw*
-
-
# NixOS Configuration
-
This is a bare minimum nix configuration for various gensokyo servers.
-
-
I'm still very, very new to Nix and its ecosystem so pointers to better
-
way of doing things are very much appreciated.
-
-
The canonical URL of this site is <https://flake.soopy.moe>.
-
-
## Documentation
-
Documentation and other tips can be found in this book. See the sidebar on the left for a table of contents.
-
-
couldn't find what you needed? suffer with me! see the
-
[How 2 Nix section in this repo.](https://github.com/hlissner/dotfiles#frequently-asked-questions)
-
-
<div class="center" style="margin: auto; text-align: center;">
-
<p>โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“โœ“</p>
-
<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" />
-
</div>
-27
docs/src/SUMMARY.md
···
-
# Summary
-
[Welcome to the Cow](README.md)
-
-
# Documentation
-
- [Tips and Tricks](tips/README.md)
-
- [Overriding packages](tips/overriding-packages.md)
-
- [Overlays](tips/overlays.md)
-
- ["Global" Options](tips/global-options.md)
-
- [Passing large secrets to DynamicUser=true services](tips/pass-big-secrets-to-dynamic-user.md)
-
- [Miscellaneous Tips](tips/misc.md)
-
- [Pitfalls](tips/pitfalls.md)
-
- [Utility Functions](utils/README.md)
-
- [mkVhost](utils/mkVhost.md)
-
- [mkSimpleProxy](utils/mkSimpleProxy.md)
-
- [genSecrets](utils/genSecrets.md)
-
- [setupSecrets](utils/setupSecrets.md)
-
- [mkNginxFile](utils/mkNginxFile.md)
-
- [mkNginxJSON](utils/mkNginxJSON.md)
-
-
# Internal documentation
-
- ["Private" use]()
-
- [Ports](internal/ports.md)
-
- [External Untracked Files](internal/ext-files.md)
-
- [Presets]()
-
- [`certificates`](internal/presets/certificates.md)
-
- [`nginx`](internal/presets/nginx.md)
-
- [`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
···
-
# External Untracked Files
-
-
due to the required secure nature of these files, we are unable to include thses
-
sets of files/directories in this repository.
-
-
<!-- These are coincidentally the same length. magic! -->
-
-
- `-r-------- /etc/lego/desec`: acme credentials
-
- `drwx------ /var/lib/sbctl`: secure boot keys
-
- `-r-------- /v/l/forgejo/data/jwt/oauth.pem`: forgejo oauth jwt private key
-
- `-r-------- kita:/etc/radicale/users`: radicale user htpasswd mappings
-
-
## changelog
-
-
This section will only list removals.
-
-
### as of commit 8501880 (`850188052ea0968e7eb96724c2027ad998cbbefb`)
-
-
- ~~`nitter/guest_tokens.json`~~ managed in-tree
-10
docs/src/internal/new-host.md
···
-
# Adding a new host
-
-
## Secret configuration
-
-
```yaml
-
vmetrics:
-
auth: # openssl rand 129 | base64 -w0 | tr "/=+" "-_."
-
lego:
-
cf_token: # generate from cloudflare
-
```
-18
docs/src/internal/ports.md
···
-
# Ports
-
-
This section mainly focuses on our existing port definition stuff.
-
We try to not use ports as much and to use unix sockets, but sometimes it's just not possible.
-
-
Note: most of this document focuses on koumakan.
-
-
## Defined port ranges
-
-
- `20xxx`: Prometheus/Metrics
-
- `2009x`: core metrics, node metrics
-
- `201xx`: service metrics
-
- `21000`: VMAuth (special case as this is not strictly metrics but a proxy)
-
<!-- note: grafana uses unix sockets instead. -->
-
-
- `3xxxx`: Service ports
-
- `34723`: miniflux
-
- `35xxx`: exposed docker container ports
-16
docs/src/internal/presets/certificates.md
···
-
# Certificates presets
-
-
```nix
-
{...}: {
-
gensokyo.presets.certificates = true;
-
}
-
```
-
-
This enables and set some ACME related configurations to a common value.
-
-
This requires the following secrets to be set:
-
-
```yaml
-
lego:
-
cf_token: # generate from cloudflare
-
```
-9
docs/src/internal/presets/nginx.md
···
-
# Nginx presets
-
-
```nix
-
{...}: {
-
gensokyo.presets.nginx = true;
-
}
-
```
-
-
This enables nginx and related default configurations.
-37
docs/src/internal/presets/vmetrics.md
···
-
# VictoriaMetrics presets
-
-
```nix
-
{...}: {
-
gensokyo.presets.vmetrics = true;
-
}
-
```
-
-
This enables vmetrics and some default configurations. Afterwards, you can add new scrape configs like below.
-
-
```nix
-
{...}: {
-
services.vmagent.prometheusConfig.scrape_configs = [{
-
job_name = "nginx";
-
static_configs = [{targets = ["localhost:${builtins.toString config.services.prometheus.exporters.nginx.port}"];}];
-
relabel_configs = [{
-
target_label = "instance";
-
replacement = "${config.networking.fqdnOrHostName}";
-
}];
-
}];
-
}
-
```
-
-
## Prerequisites
-
-
You need to do the following things when adding a new host.
-
-
### Secrets
-
-
Include the follow secret configuration.
-
-
```yaml
-
vmetrics:
-
auth: # openssl rand 129 | base64 -w0 | tr "/=+" "-_."
-
```
-
-
Then add to koumakan.
-14
docs/src/tips/README.md
···
-
# Tips and Tricks
-
*formerly known as tops and bottoms*
-
-
This section outlines things that I've learned from various sources and some pure guesswork.
-
-
> To learn Nix is to learn to suffer, and to learn the way of numbing the pain
-
>
-
> *โ€” Cassie circa. 2023*
-
-
There might be more undocumented things. Interesting things are usually marked with `#โ€ HACK:`.
-
-
Of course, I might completely miss stuff. in that case, feel free to open an issue.
-
-
To get started, look at the sidebar to the left.
-41
docs/src/tips/global-options.md
···
-
# "Global"/Extra Options
-
a way of passing additional options "globally" to modules is by using extraOpts.
-
-
in nix flakes, this is accomplished by using `specialArgs` in `nixosSystem`.
-
-
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)
-
-
```nix
-
# note: unrelated attributes stripped and removed.
-
# note2: this code is now out of date from our code, but can still be referenced.
-
{
-
outputs = { ... }:{
-
nixosConfigurations = {
-
koumakan = lib.nixosSystem {
-
specialArgs = {
-
_utils = (import ./global/utils.nix) { inherit pkgs; };
-
-
someOtherArg = {thisCanBe = "LiterallyAnything";};
-
};
-
};
-
};
-
};
-
}
-
```
-
-
With this, you can now do this in other imported nixos modules.
-
-
```nix
-
{ someOtherArg, ... }: {
-
users.users.${someOtherArg} = {};
-
}
-
```
-
-
this avoids the horror of `import ../../../utils/bar.nix;` and various other things.
-
-
refer to [nixpkgs:nixos/lib/eval-config.nix] and [nixpkgs:lib/modules.nix#122] for more info
-
-
*pointers by \@natsukagami*
-
-
[nixpkgs:lib/modules.nix#122]: https://github.com/NixOS/nixpkgs/blob/6e68daefde56a7a8e6fe7c3ca9ceeb436294bb9f/lib/modules.nix#L122
-
[nixpkgs:nixos/lib/eval-config.nix]: https://github.com/NixOS/nixpkgs/blob/5054472759a3b0df8e18cfe4031a5eff92d4cdc3/nixos/lib/eval-config.nix
-10
docs/src/tips/hydra.md
···
-
# Hydra Setup
-
-
## Config options
-
-
see <https://patchy.soopy.moe/soopyc/nix-missing-doc/src/branch/main/src/hydra-config.md>
-
-
## Remote builds
-
-
Remote building works.
-
-51
docs/src/tips/misc.md
···
-
# Misc tips
-
-
This page contains stuff that ~~I couldn't be bothered to move to the new format~~ is probably outdated or just short tips.
-
-
*previously: tops and bottoms*
-
-
## @ (at) syntax
-
very simple.
-
-
```nix
-
args@{a, b, c, ...}: {
-
# args.a and a are the same
-
some = "value";
-
}
-
```
-
-
## nginx regex location
-
```nix
-
{
-
locations."~ \.php$".extraConfig = ''
-
# balls
-
'';
-
}
-
```
-
from [nixos wiki](https://nixos.wiki/wiki/Nginx#LEMP_stack)
-
-
## adding a package with an overlay to a package set
-
-
for package sets with a scope, you will have to do something like
-
```nix
-
final: prev: {
-
nimPackages = prev.nimPackages.overrideScope (final': prev': {
-
sha1 = final'.callPackage ./sha1.nix {};
-
oauth = final'.callPackage ./oauth.nix {};
-
});
-
}
-
```
-
There's an alternative method that i used to use here:
-
-
https://github.com/soopyc/nix-on-koumakan/blob/30e65402d22b000a3b5af6c9e5ea48a2b58a54e0/overlays/nim/oauth/default.nix
-
-
however i do not think that's the best way lol
-
-
## what the hell is an IFD??
-
IFD stands for import from derivation.
-
-
*nixos/nixpkgs really need better and significantly less scattered documentation while improving manual readability.*
-
-
# Useful links
-
-
Builtin stdlib functions search engine: https://noogle.dev/
-73
docs/src/tips/overlays.md
···
-
# Overlays
-
overlays are useful when you want to refer to a package globally, or to fix a broken package locally.
-
-
you might also want to use overlays when something hasn't made it into nixos-unstable or whatever you're on yet, but you
-
desparately need said thing.
-
-
the gist of overlays is as thus:
-
-
> overlay is just `final: prev: {}` functions
-
>
-
> dumbed down idea is that you do `pkg = prev.pkg.override` and
-
> refer to everything else from `final`
-
>
-
> idea is like final = prev // overlay(prev, final)
-
>
-
> (it's a recursive definition)
-
-
(poorly made) example overlays can be found [here](https://github.com/soopyc/nixos-config/blob/master/overlays/discord-canary.nix)
-
-
~~currently in-use and slightly better overlays can be found in this repo! head over to /overlays to see them.~~
-
-
*note: replace `self: super:` with `final: prev:` for consistency*
-
-
UPDATE: we don't really use overlays anymore. If you'd like an example, please reach out and we can add some here.
-
-
*concept and quote content by @natsukagami*
-
-
```admonish info
-
If you write 3rd party nix modules, it is a bad idea to do overlays as the performance impact propagates to everyone
-
in the stream. See [this article that talks about overlays](
-
https://zimbatm.com/notes/1000-instances-of-nixpkgs
-
).
-
```
-
-
## Overlaying python packages
-
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.
-
-
While overriding normal packages is relatively straightforward, doing so with python is most definitely not.
-
-
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.
-
-
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.
-
-
Copy-paste the new package definiton next to the place where you're defining the overlay. We will be referencing it as `./package.nix`.
-
-
```nix
-
final: prev: {
-
# this does not work because the package uses python3Packages. this is defining standalone package.
-
pyscard = prev.python3Packages.callPackage ./package.nix {};
-
-
python3 = prev.python3.override {
-
self = final.python3;
-
-
# to their credit we do have this thing here which was already great
-
packageOverrides = (final': prev': {
-
# we cannot use final'.pkgs.callPackage here because it's missing buildPythonModule or something.
-
pyscard = final.python3Packages.callPackage ./package.nix {
-
inherit (final.darwin.apple_sdk.frameworks) PCSC; # apple carp
-
};
-
});
-
};
-
-
# probably some `rec` carp
-
# IMPORTANT: you need this! this is needed to let nix know we want to use our overrided python3 package earlier.
-
# if you don't add this, you will still be building the old package like nothing changed at all.
-
# Yes, nix is this sad.
-
python3Packages = final.python3.pkgs;
-
}
-
```
-
-
A full example is accessible [here](https://github.com/soopyc/gensokyo/tree/53fcb9bdeeede6e250c84a05ff8c6c1aca9b5fe6/global/overlays/temp/pyscard).
-
-
[Scrumplex]: https://github.com/scrumplex
-16
docs/src/tips/overriding-packages.md
···
-
# Overriding Packages
-
The nix pill confused me and i thought i had to make overlays to do overrides but no
-
-
in packages (i.e. `environment.systemPackages`), just do
-
```nix
-
{pkgs, ...}: {
-
environment.systemPackages = with pkgs; [
-
(discord.override {withOpenASAR = true;})
-
];
-
}
-
```
-
-
This works as well
-
```nix
-
security.sudo.package = (pkgs.sudo.override {withInsults = true;});
-
```
-78
docs/src/tips/pass-big-secrets-to-dynamic-user.md
···
-
<!--
-
vim:fileencoding=utf-8:foldmethod=marker
-
-->
-
-
## using sops-nix or other stuff to pass big chungus files to services with DynamicUser=true
-
-
afaik this is not possible.
-
-
The option that makes the most sense, LoadCredentials only supports files up to 1 MB in size.
-
([relevant documentation (`systemd.exec(5)`)](https://www.freedesktop.org/software/systemd/man/systemd.exec.html#LoadCredential=ID:PATH:~:text=Currently%2C%20an,is%20enforced))
-
-
Without that option, we are only left with giving a user access to the file somehow.
-
-
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.
-
The user is ran with root privileges and there are no signs of the final ephemeral user id. the same happens with
-
ones prefixed with `!`.
-
-
```admonish note
-
While the `!` syntax do preallocate a dynamic user, we cannot use it to change any permissions. (at least per my last attempt)
-
```
-
-
<!--
-
This is a vim fold. press z+o to open, z+c to close.
-
Terminal output {{{
-
-->
-
~~~admonish tldr title="Terminal Output" collapsible=true
-
```ShellSession
-
cassie in marisa in ~ took 1s
-
โœ— 1 โžœ systemd-run -pPrivateTmp=true -pDynamicUser=true --property="SystemCallFilter=@system-service ~@privileged ~@resources" -pExecStartPre="+env" -pPrivateUsers=true -t bash
-
-
Running as unit: run-u1196.service
-
Press ^] three times within 1s to disconnect TTY.
-
LANG=en_US.UTF-8
-
PATH=/usr/local/sbin:/usr/local/bin:/usr/bin
-
LOGNAME=run-u1196
-
USER=run-u1196
-
[...]
-
^C%
-
-
cassie in marisa in ~ took 2s
-
โžœ systemd-run -pPrivateTmp=true -pDynamicUser=true --property="SystemCallFilter=@system-service ~@privileged ~@resources" -pExecStartPre="\!env" -pPrivateUsers=true -t bash
-
-
Running as unit: run-u1200.service
-
Press ^] three times within 1s to disconnect TTY.
-
LANG=en_US.UTF-8
-
PATH=/usr/local/sbin:/usr/local/bin:/usr/bin
-
LOGNAME=run-u1200
-
USER=run-u1200
-
[...]
-
^C%
-
-
cassie in marisa in ~ took 2s
-
โžœ systemd-run -pPrivateTmp=true -pDynamicUser=true -pSystemCallFilter=@system-service -pSystemCallFilter=~@privileged -pSystemCallFilter=~@resources -pExecStartPre="\!bash -c 'echo \$UID'" -pPrivateUsers=true -t bash -c "ls"
-
-
Running as unit: run-u1236.service
-
Press ^] three times within 1s to disconnect TTY.
-
0
-
^C%
-
-
cassie in marisa in ~ took 4s
-
โžœ systemd-run -pPrivateTmp=true -pDynamicUser=true -pSystemCallFilter=@system-service -pSystemCallFilter=~@privileged -pSystemCallFilter=~@resources -pExecStartPre="+bash -c 'echo \$UID'" -pPrivateUsers=true -t bash -c "ls"
-
-
Running as unit: run-u1241.service
-
Press ^] three times within 1s to disconnect TTY.
-
0
-
^C%
-
```
-
~~~
-
<!--
-
}}}
-
-->
-
-
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.
-
This step is a little involved, you will have to add a user option to the service and forcibly disable DynamicUser.
-
-
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.
-
Here's the link to [the modified source file.](https://github.com/soopyc/mystia/blob/a999736/modules/fixups/nitter.nix)
-
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
···
-
# Pitfalls
-
-
"There are pitfalls in this language???!??!?"
-
-
*-- The uninitiated*
-
-
## importing nixpkgs with an empty attrset
-
-
ever had this in your flake.nix
-
-
```nix
-
{
-
outputs = { nixpkgs, ... }@inputs: let
-
pkgs = import nixpkgs {};
-
lib = nixpkgs.lib;
-
in {
-
# ...
-
};
-
}
-
```
-
-
... and got fucked with this?
-
```shell
-
error:
-
โ€ฆ while checking flake output 'nixosConfigurations'
-
-
at /nix/store/lz2ra1180qfffmpwg41jpyg1z602qdgx-source/flake.nix:50:5:
-
-
49| in {
-
50| nixosConfigurations = {
-
| ^
-
51| koumakan = (import ./systems/koumakan { inherit pkgs lib inputs; });
-
-
โ€ฆ while checking the NixOS configuration 'nixosConfigurations.koumakan'
-
-
at /nix/store/lz2ra1180qfffmpwg41jpyg1z602qdgx-source/flake.nix:51:7:
-
-
50| nixosConfigurations = {
-
51| koumakan = (import ./systems/koumakan { inherit pkgs lib inputs; });
-
| ^
-
52| };
-
-
(stack trace truncated; use '--show-trace' to show the full trace)
-
-
error: attribute 'currentSystem' missing
-
-
at /nix/store/5c0k827yjq7j24qaq8l2fcnsxp7nv8v1-source/pkgs/top-level/impure.nix:17:43:
-
-
16| # (build, in GNU Autotools parlance) platform.
-
17| localSystem ? { system = args.system or builtins.currentSystem; }
-
| ^
-
18|
-
```
-
-
just don't!!!11 remove the pkgs definition. (note that this only applies to `pkgs = import nixpkgs {};`)
-
-
explanation
-
-
> you shouldn't ever really import nixpkgs with an empty attrset either
-
>
-
> that causes it to fall back on guessing your system using `builtins.currentSystem`,
-
> which is impure and so not allowed in pure evaluation mode
-
>
-
> โ€”- @getchoo
-32
docs/src/utils/README.md
···
-
# Utility Functions
-
-
In this section you will find various utility functions available in this flake.
-
-
You are free to use them as you wish if you find them useful.
-
-
Watch out! Here's a hint box!
-
-
```admonish hint title="Hint Box"
-
Please take care when using these functions. They are opinionated by nature and are designed to be used on our systems.
-
-
There is a high chance for you to be discontent with them. In which case, please feel free to copy them and adapt them
-
to your needs.
-
-
Also what in the world? Is that discrimination against hint boxes? I demand this be rectified immediately!
-
```
-
-
## Getting started
-
You first need to import this flake as an input.
-
-
If you don't know how to do so, you should not be here. Please refer to various Nix documentation first, then come back.
-
Using these utilities when you're just starting out causes unnecessary pain later on when it doesn't match your needs.
-
-
For NixOS users, it is possible to make the utils module "globally" available in your NixOS configuration modules.
-
To do so, please refer to [Tips/"Global" Options](../tips/global-options.md).
-
-
We are dogfooding on these functions ourselves so they should be relatively error-free. If you encounter unexpected
-
behavior though, do reach out and open an issue/send us a message. We won't bite. Promise.
-
-
```admonish hint title="Hint Box"
-
Hey! Are you even listening?
-
```
-29
docs/src/utils/genSecrets.md
···
-
# `_utils.genSecrets`
-
`namespace<str> -> files<list[str]> -> value<attrset> -> attrset`
-
-
```admonish danger
-
This function is now an internal function. The signature is not likely to be changed, but there are better utilities to
-
do the job even better. Consider using [`setupSecrets`](./setupSecrets.md) instead.
-
```
-
-
generate an attrset to be passed into sops.secrets.
-
-
## Example
-
```nix
-
{ _utils, ... }:
-
let
-
secrets = [
-
"secure_secret"
-
# this is a directory structure, so secrets will be stored as a file in /run/secrets/service/test/secret.
-
"service/test/secret"
-
];
-
in {
-
sops.secrets = _utils.genSecrets "" secrets {}; # it's recommended to use a namespace, but having none is still fine.
-
# -> sops.secrets."secure_secret" = {};
-
# sops.secrets."service/test/secret" = {};
-
sops.secrets = _utils.genSecrets "balls" ["balls_secret"] {owner = "balls";};
-
# -> sops.secrets."balls/balls_secret" = {owner = "balls";};
-
}
-
```
-
-
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
···
-
# `_utils.mkArionProject`
-
`(lambda: freeformAttrset) -> freeformAttrset`
-
-
Flattened Arion project configuration
-
-
## Example
-
```nix
-
{_utils, ...}: {
-
virtualisation.arion.projects."cop" = _utils.mkArionProject (config': {
-
networks.main.enable_ipv6 = true;
-
});
-
}
-
```
-
-
See <https://docs.hercules-ci.com/arion/options> for more information.
-23
docs/src/utils/mkNginxFile.md
···
-
# `_utils.mkNginxFile`
-
`{filename<str> ? "index.html", content<str>, status<int> ? 200} -> {alias<str>, tryFiles<str>}`
-
-
Helper function to generate an attrset compatible with a nginx vhost `locations` attribute that serves a single file.
-
-
## Example
-
-
### Without filename
-
```nix
-
services.nginx.virtualHosts."example.com".locations."/" = _utils.mkNginxFile {
-
content = ''
-
<!doctype html><html><body>We've been trying to reach you about your car's Extended Warranty.</body></html>
-
'';
-
};
-
```
-
-
### With filename
-
```nix
-
services.nginx.virtualHosts."filename.example.com".locations."/filename" = _utils.mkNginxFile {
-
content = "the filename doesn't really matter, but it's there to help you figure out where your things are";
-
filename = "random.txt";
-
}
-
```
-19
docs/src/utils/mkNginxJSON.md
···
-
# `_utils.mkNginxJSON`
-
`filename<str> -> freeformAttrset ==> attrset`
-
-
Simple wrapper around [`mkNginxFile`](./mkNginxFile.md) that takes in an attrset and formats it as JSON.
-
-
Note that the function signature is different in that it doesn't take in only one attrset.
-
This may change in the future.
-
-
## Example
-
```nix
-
services.nginx.virtualHosts."balls.org" = _utils.mkVhost {
-
locations."/" = _utils.mkNginxJSON "index.json" {
-
arbitraryAttribute = "arbitraryValue";
-
doTheyKnow = false;
-
};
-
};
-
```
-
-
<!-- TODO: check if Content-Type is correctly returned with this -->
-26
docs/src/utils/mkSimpleProxy.md
···
-
# `_utils.mkSimpleProxy`
-
`attrSet -> freeformAttrset`
-
-
make a simple reverse proxy
-
-
takes a set:
-
```nix
-
{
-
host ? "localhost", # proxying servers on the network
-
port ? null,
-
socketPath ? null,
-
protocol ? "http",
-
location ? "/",
-
websockets ? false,
-
extraConfig ? {}
-
}
-
```
-
-
Provide either a `socketPath` to a UNIX socket or a `port` to connect to the upstream via TCP.
-
Note that both of these options are mutually exclusive in that only one can be specified.
-
-
It is recommended to override/add attributes with `extraConfig` to
-
preserve defaults.
-
-
Items in `extraConfig` are merged verbatim to the base attrset with defaults.
-
They are overridden based on their priority order (i.e. via `lib.mk{Default,Force,Order}`).
-11
docs/src/utils/mkVhost.md
···
-
# `_utils.mkVhost`
-
`freeformAttrset -> freeformAttrset`
-
-
make a virtual host with sensible defaults.
-
-
pass in an attrset to override the defaults. the attrset is essentially the same as any virtual host config.
-
-
## Example
-
```nix
-
services.nginx.virtualHosts."balls.example" = _utils.mkVhost {};
-
```
-49
docs/src/utils/setupSecrets.md
···
-
# `_utils.setupSecrets`
-
`attrset<nixos config attr> -> {namespace<str> ? "", secrets[list<str>], config ? freeformAttrset} -> secretHelpers`
-
-
This is a higher-level setup that wraps around `_utils.genSecrets` and provides some additional helper functions.
-
Usage of this function should make more sense than just using `genSecrets`.
-
-
```admonish note
-
`<ReturnValue>.generate` is not actually a function. The attrset is "already" "rendered" should it be actually
-
resolved by not being ignored by lazy eval. This is essentially equivalent to `genSecrets`, but is now an inline module
-
that can be put inside an input block instead of being a random attrset.
-
```
-
-
NOTE: does not support overriding config for only 1 path. might implement when demand arises.
-
-
The definition of `secretHelpers` is defined as follows:
-
```nix
-
secretHelpers = {
-
generate = {}; # => {sops.secrets.* = <sopsConfig>} (inline module)
-
get = path: ""; # => actual path of the secret, usually /run/secrets/the/secret
-
-
placeholder = path: ""; # => placeholder string generated by sops-nix, for that secret path to be used in templates.
-
getTemplate = file: ""; # => actual path of the template, realized at activation time, similar to the get function.
-
mkTemplate = file: content: {}; # => {sops.templates.* = ...;}
-
# ^ => filename of the template. can be any arbitrary string.
-
}
-
```
-
-
## Example
-
```nix
-
{ _utils, config, ... }: let
-
secrets = _utils.setupSecrets config {
-
namespace = "balls"; # for us, the namespace is just the top level element in our secrets yaml file.
-
config = {
-
owner = "jane";
-
};
-
secrets = [ "my/definitions/gock" "my/sizes/gock" ];
-
};
-
in {
-
imports = [
-
secrets.generate
-
(secrets.mkTemplate "my-secret.env" ''
-
MY_GOCK_SIZE=${secrets.placeholder "my/sizes/gock"}
-
'')
-
];
-
-
some.service.settings.gock.file = secrets.get "my/definitions/gock"; # resolves to the path of balls/my/definitions/gock.
-
some.service.settings.envFile = secrets.getTemplate "my-secret.env";
-
}
-
```
-363
docs/theme/catppuccin-admonish.css
···
-
.latte :is(.admonition):is(.admonish-hint, .admonish-important, .admonish-tip) {
-
border-color: #df8e1d;
-
}
-
.latte :is(.admonish-hint, .admonish-important, .admonish-tip) > :is(.admonition-title, summary.admonition-title) {
-
background-color: rgba(223, 142, 29, 0.2);
-
}
-
.latte :is(.admonish-hint, .admonish-important, .admonish-tip) > :is(.admonition-title, summary.admonition-title)::before {
-
background-color: #df8e1d;
-
}
-
.latte :is(.admonition):is(.admonish-abstract, .admonish-summary, .admonish-tldr) {
-
border-color: #dd7878;
-
}
-
.latte :is(.admonish-abstract, .admonish-summary, .admonish-tldr) > :is(.admonition-title, summary.admonition-title) {
-
background-color: rgba(221, 120, 120, 0.2);
-
}
-
.latte :is(.admonish-abstract, .admonish-summary, .admonish-tldr) > :is(.admonition-title, summary.admonition-title)::before {
-
background-color: #dd7878;
-
}
-
.latte :is(.admonition):is(.admonish-example) {
-
border-color: #8839ef;
-
}
-
.latte :is(.admonish-example) > :is(.admonition-title, summary.admonition-title) {
-
background-color: rgba(136, 57, 239, 0.2);
-
}
-
.latte :is(.admonish-example) > :is(.admonition-title, summary.admonition-title)::before {
-
background-color: #8839ef;
-
}
-
.latte :is(.admonition):is(.admonish-info, .admonish-todo) {
-
border-color: #04a5e5;
-
}
-
.latte :is(.admonish-info, .admonish-todo) > :is(.admonition-title, summary.admonition-title) {
-
background-color: rgba(4, 165, 229, 0.2);
-
}
-
.latte :is(.admonish-info, .admonish-todo) > :is(.admonition-title, summary.admonition-title)::before {
-
background-color: #04a5e5;
-
}
-
.latte :is(.admonition):is(.admonish-check, .admonish-done, .admonish-success) {
-
border-color: #40a02b;
-
}
-
.latte :is(.admonish-check, .admonish-done, .admonish-success) > :is(.admonition-title, summary.admonition-title) {
-
background-color: rgba(64, 160, 43, 0.2);
-
}
-
.latte :is(.admonish-check, .admonish-done, .admonish-success) > :is(.admonition-title, summary.admonition-title)::before {
-
background-color: #40a02b;
-
}
-
.latte :is(.admonition):is(.admonish-note) {
-
border-color: #1e66f5;
-
}
-
.latte :is(.admonish-note) > :is(.admonition-title, summary.admonition-title) {
-
background-color: rgba(30, 102, 245, 0.2);
-
}
-
.latte :is(.admonish-note) > :is(.admonition-title, summary.admonition-title)::before {
-
background-color: #1e66f5;
-
}
-
.latte :is(.admonition):is(.admonish-attention, .admonish-caution, .admonish-warning) {
-
border-color: #fe640b;
-
}
-
.latte :is(.admonish-attention, .admonish-caution, .admonish-warning) > :is(.admonition-title, summary.admonition-title) {
-
background-color: rgba(254, 100, 11, 0.2);
-
}
-
.latte :is(.admonish-attention, .admonish-caution, .admonish-warning) > :is(.admonition-title, summary.admonition-title)::before {
-
background-color: #fe640b;
-
}
-
.latte :is(.admonition):is(.admonish-faq, .admonish-help, .admonish-question) {
-
border-color: #179299;
-
}
-
.latte :is(.admonish-faq, .admonish-help, .admonish-question) > :is(.admonition-title, summary.admonition-title) {
-
background-color: rgba(23, 146, 153, 0.2);
-
}
-
.latte :is(.admonish-faq, .admonish-help, .admonish-question) > :is(.admonition-title, summary.admonition-title)::before {
-
background-color: #179299;
-
}
-
.latte :is(.admonition):is(.admonish-bug, .admonish-danger, .admonish-error, .admonish-fail, .admonish-failure, .admonish-missing) {
-
border-color: #d20f39;
-
}
-
.latte :is(.admonish-bug, .admonish-danger, .admonish-error, .admonish-fail, .admonish-failure, .admonish-missing) > :is(.admonition-title, summary.admonition-title) {
-
background-color: rgba(210, 15, 57, 0.2);
-
}
-
.latte :is(.admonish-bug, .admonish-danger, .admonish-error, .admonish-fail, .admonish-failure, .admonish-missing) > :is(.admonition-title, summary.admonition-title)::before {
-
background-color: #d20f39;
-
}
-
.latte :is(.admonition):is(.admonish-cite, .admonish-quote) {
-
border-color: #ea76cb;
-
}
-
.latte :is(.admonish-cite, .admonish-quote) > :is(.admonition-title, summary.admonition-title) {
-
background-color: rgba(234, 118, 203, 0.2);
-
}
-
.latte :is(.admonish-cite, .admonish-quote) > :is(.admonition-title, summary.admonition-title)::before {
-
background-color: #ea76cb;
-
}
-
-
.frappe :is(.admonition):is(.admonish-hint, .admonish-important, .admonish-tip) {
-
border-color: #e5c890;
-
}
-
.frappe :is(.admonish-hint, .admonish-important, .admonish-tip) > :is(.admonition-title, summary.admonition-title) {
-
background-color: rgba(229, 200, 144, 0.2);
-
}
-
.frappe :is(.admonish-hint, .admonish-important, .admonish-tip) > :is(.admonition-title, summary.admonition-title)::before {
-
background-color: #e5c890;
-
}
-
.frappe :is(.admonition):is(.admonish-abstract, .admonish-summary, .admonish-tldr) {
-
border-color: #eebebe;
-
}
-
.frappe :is(.admonish-abstract, .admonish-summary, .admonish-tldr) > :is(.admonition-title, summary.admonition-title) {
-
background-color: rgba(238, 190, 190, 0.2);
-
}
-
.frappe :is(.admonish-abstract, .admonish-summary, .admonish-tldr) > :is(.admonition-title, summary.admonition-title)::before {
-
background-color: #eebebe;
-
}
-
.frappe :is(.admonition):is(.admonish-example) {
-
border-color: #ca9ee6;
-
}
-
.frappe :is(.admonish-example) > :is(.admonition-title, summary.admonition-title) {
-
background-color: rgba(202, 158, 230, 0.2);
-
}
-
.frappe :is(.admonish-example) > :is(.admonition-title, summary.admonition-title)::before {
-
background-color: #ca9ee6;
-
}
-
.frappe :is(.admonition):is(.admonish-info, .admonish-todo) {
-
border-color: #99d1db;
-
}
-
.frappe :is(.admonish-info, .admonish-todo) > :is(.admonition-title, summary.admonition-title) {
-
background-color: rgba(153, 209, 219, 0.2);
-
}
-
.frappe :is(.admonish-info, .admonish-todo) > :is(.admonition-title, summary.admonition-title)::before {
-
background-color: #99d1db;
-
}
-
.frappe :is(.admonition):is(.admonish-check, .admonish-done, .admonish-success) {
-
border-color: #a6d189;
-
}
-
.frappe :is(.admonish-check, .admonish-done, .admonish-success) > :is(.admonition-title, summary.admonition-title) {
-
background-color: rgba(166, 209, 137, 0.2);
-
}
-
.frappe :is(.admonish-check, .admonish-done, .admonish-success) > :is(.admonition-title, summary.admonition-title)::before {
-
background-color: #a6d189;
-
}
-
.frappe :is(.admonition):is(.admonish-note) {
-
border-color: #8caaee;
-
}
-
.frappe :is(.admonish-note) > :is(.admonition-title, summary.admonition-title) {
-
background-color: rgba(140, 170, 238, 0.2);
-
}
-
.frappe :is(.admonish-note) > :is(.admonition-title, summary.admonition-title)::before {
-
background-color: #8caaee;
-
}
-
.frappe :is(.admonition):is(.admonish-attention, .admonish-caution, .admonish-warning) {
-
border-color: #ef9f76;
-
}
-
.frappe :is(.admonish-attention, .admonish-caution, .admonish-warning) > :is(.admonition-title, summary.admonition-title) {
-
background-color: rgba(239, 159, 118, 0.2);
-
}
-
.frappe :is(.admonish-attention, .admonish-caution, .admonish-warning) > :is(.admonition-title, summary.admonition-title)::before {
-
background-color: #ef9f76;
-
}
-
.frappe :is(.admonition):is(.admonish-faq, .admonish-help, .admonish-question) {
-
border-color: #81c8be;
-
}
-
.frappe :is(.admonish-faq, .admonish-help, .admonish-question) > :is(.admonition-title, summary.admonition-title) {
-
background-color: rgba(129, 200, 190, 0.2);
-
}
-
.frappe :is(.admonish-faq, .admonish-help, .admonish-question) > :is(.admonition-title, summary.admonition-title)::before {
-
background-color: #81c8be;
-
}
-
.frappe :is(.admonition):is(.admonish-bug, .admonish-danger, .admonish-error, .admonish-fail, .admonish-failure, .admonish-missing) {
-
border-color: #e78284;
-
}
-
.frappe :is(.admonish-bug, .admonish-danger, .admonish-error, .admonish-fail, .admonish-failure, .admonish-missing) > :is(.admonition-title, summary.admonition-title) {
-
background-color: rgba(231, 130, 132, 0.2);
-
}
-
.frappe :is(.admonish-bug, .admonish-danger, .admonish-error, .admonish-fail, .admonish-failure, .admonish-missing) > :is(.admonition-title, summary.admonition-title)::before {
-
background-color: #e78284;
-
}
-
.frappe :is(.admonition):is(.admonish-cite, .admonish-quote) {
-
border-color: #f4b8e4;
-
}
-
.frappe :is(.admonish-cite, .admonish-quote) > :is(.admonition-title, summary.admonition-title) {
-
background-color: rgba(244, 184, 228, 0.2);
-
}
-
.frappe :is(.admonish-cite, .admonish-quote) > :is(.admonition-title, summary.admonition-title)::before {
-
background-color: #f4b8e4;
-
}
-
-
.macchiato :is(.admonition):is(.admonish-hint, .admonish-important, .admonish-tip) {
-
border-color: #eed49f;
-
}
-
.macchiato :is(.admonish-hint, .admonish-important, .admonish-tip) > :is(.admonition-title, summary.admonition-title) {
-
background-color: rgba(238, 212, 159, 0.2);
-
}
-
.macchiato :is(.admonish-hint, .admonish-important, .admonish-tip) > :is(.admonition-title, summary.admonition-title)::before {
-
background-color: #eed49f;
-
}
-
.macchiato :is(.admonition):is(.admonish-abstract, .admonish-summary, .admonish-tldr) {
-
border-color: #f0c6c6;
-
}
-
.macchiato :is(.admonish-abstract, .admonish-summary, .admonish-tldr) > :is(.admonition-title, summary.admonition-title) {
-
background-color: rgba(240, 198, 198, 0.2);
-
}
-
.macchiato :is(.admonish-abstract, .admonish-summary, .admonish-tldr) > :is(.admonition-title, summary.admonition-title)::before {
-
background-color: #f0c6c6;
-
}
-
.macchiato :is(.admonition):is(.admonish-example) {
-
border-color: #c6a0f6;
-
}
-
.macchiato :is(.admonish-example) > :is(.admonition-title, summary.admonition-title) {
-
background-color: rgba(198, 160, 246, 0.2);
-
}
-
.macchiato :is(.admonish-example) > :is(.admonition-title, summary.admonition-title)::before {
-
background-color: #c6a0f6;
-
}
-
.macchiato :is(.admonition):is(.admonish-info, .admonish-todo) {
-
border-color: #91d7e3;
-
}
-
.macchiato :is(.admonish-info, .admonish-todo) > :is(.admonition-title, summary.admonition-title) {
-
background-color: rgba(145, 215, 227, 0.2);
-
}
-
.macchiato :is(.admonish-info, .admonish-todo) > :is(.admonition-title, summary.admonition-title)::before {
-
background-color: #91d7e3;
-
}
-
.macchiato :is(.admonition):is(.admonish-check, .admonish-done, .admonish-success) {
-
border-color: #a6da95;
-
}
-
.macchiato :is(.admonish-check, .admonish-done, .admonish-success) > :is(.admonition-title, summary.admonition-title) {
-
background-color: rgba(166, 218, 149, 0.2);
-
}
-
.macchiato :is(.admonish-check, .admonish-done, .admonish-success) > :is(.admonition-title, summary.admonition-title)::before {
-
background-color: #a6da95;
-
}
-
.macchiato :is(.admonition):is(.admonish-note) {
-
border-color: #8aadf4;
-
}
-
.macchiato :is(.admonish-note) > :is(.admonition-title, summary.admonition-title) {
-
background-color: rgba(138, 173, 244, 0.2);
-
}
-
.macchiato :is(.admonish-note) > :is(.admonition-title, summary.admonition-title)::before {
-
background-color: #8aadf4;
-
}
-
.macchiato :is(.admonition):is(.admonish-attention, .admonish-caution, .admonish-warning) {
-
border-color: #f5a97f;
-
}
-
.macchiato :is(.admonish-attention, .admonish-caution, .admonish-warning) > :is(.admonition-title, summary.admonition-title) {
-
background-color: rgba(245, 169, 127, 0.2);
-
}
-
.macchiato :is(.admonish-attention, .admonish-caution, .admonish-warning) > :is(.admonition-title, summary.admonition-title)::before {
-
background-color: #f5a97f;
-
}
-
.macchiato :is(.admonition):is(.admonish-faq, .admonish-help, .admonish-question) {
-
border-color: #8bd5ca;
-
}
-
.macchiato :is(.admonish-faq, .admonish-help, .admonish-question) > :is(.admonition-title, summary.admonition-title) {
-
background-color: rgba(139, 213, 202, 0.2);
-
}
-
.macchiato :is(.admonish-faq, .admonish-help, .admonish-question) > :is(.admonition-title, summary.admonition-title)::before {
-
background-color: #8bd5ca;
-
}
-
.macchiato :is(.admonition):is(.admonish-bug, .admonish-danger, .admonish-error, .admonish-fail, .admonish-failure, .admonish-missing) {
-
border-color: #ed8796;
-
}
-
.macchiato :is(.admonish-bug, .admonish-danger, .admonish-error, .admonish-fail, .admonish-failure, .admonish-missing) > :is(.admonition-title, summary.admonition-title) {
-
background-color: rgba(237, 135, 150, 0.2);
-
}
-
.macchiato :is(.admonish-bug, .admonish-danger, .admonish-error, .admonish-fail, .admonish-failure, .admonish-missing) > :is(.admonition-title, summary.admonition-title)::before {
-
background-color: #ed8796;
-
}
-
.macchiato :is(.admonition):is(.admonish-cite, .admonish-quote) {
-
border-color: #f5bde6;
-
}
-
.macchiato :is(.admonish-cite, .admonish-quote) > :is(.admonition-title, summary.admonition-title) {
-
background-color: rgba(245, 189, 230, 0.2);
-
}
-
.macchiato :is(.admonish-cite, .admonish-quote) > :is(.admonition-title, summary.admonition-title)::before {
-
background-color: #f5bde6;
-
}
-
-
.mocha :is(.admonition):is(.admonish-hint, .admonish-important, .admonish-tip) {
-
border-color: #f9e2af;
-
}
-
.mocha :is(.admonish-hint, .admonish-important, .admonish-tip) > :is(.admonition-title, summary.admonition-title) {
-
background-color: rgba(249, 226, 175, 0.2);
-
}
-
.mocha :is(.admonish-hint, .admonish-important, .admonish-tip) > :is(.admonition-title, summary.admonition-title)::before {
-
background-color: #f9e2af;
-
}
-
.mocha :is(.admonition):is(.admonish-abstract, .admonish-summary, .admonish-tldr) {
-
border-color: #f2cdcd;
-
}
-
.mocha :is(.admonish-abstract, .admonish-summary, .admonish-tldr) > :is(.admonition-title, summary.admonition-title) {
-
background-color: rgba(242, 205, 205, 0.2);
-
}
-
.mocha :is(.admonish-abstract, .admonish-summary, .admonish-tldr) > :is(.admonition-title, summary.admonition-title)::before {
-
background-color: #f2cdcd;
-
}
-
.mocha :is(.admonition):is(.admonish-example) {
-
border-color: #cba6f7;
-
}
-
.mocha :is(.admonish-example) > :is(.admonition-title, summary.admonition-title) {
-
background-color: rgba(203, 166, 247, 0.2);
-
}
-
.mocha :is(.admonish-example) > :is(.admonition-title, summary.admonition-title)::before {
-
background-color: #cba6f7;
-
}
-
.mocha :is(.admonition):is(.admonish-info, .admonish-todo) {
-
border-color: #89dceb;
-
}
-
.mocha :is(.admonish-info, .admonish-todo) > :is(.admonition-title, summary.admonition-title) {
-
background-color: rgba(137, 220, 235, 0.2);
-
}
-
.mocha :is(.admonish-info, .admonish-todo) > :is(.admonition-title, summary.admonition-title)::before {
-
background-color: #89dceb;
-
}
-
.mocha :is(.admonition):is(.admonish-check, .admonish-done, .admonish-success) {
-
border-color: #a6e3a1;
-
}
-
.mocha :is(.admonish-check, .admonish-done, .admonish-success) > :is(.admonition-title, summary.admonition-title) {
-
background-color: rgba(166, 227, 161, 0.2);
-
}
-
.mocha :is(.admonish-check, .admonish-done, .admonish-success) > :is(.admonition-title, summary.admonition-title)::before {
-
background-color: #a6e3a1;
-
}
-
.mocha :is(.admonition):is(.admonish-note) {
-
border-color: #89b4fa;
-
}
-
.mocha :is(.admonish-note) > :is(.admonition-title, summary.admonition-title) {
-
background-color: rgba(137, 180, 250, 0.2);
-
}
-
.mocha :is(.admonish-note) > :is(.admonition-title, summary.admonition-title)::before {
-
background-color: #89b4fa;
-
}
-
.mocha :is(.admonition):is(.admonish-attention, .admonish-caution, .admonish-warning) {
-
border-color: #fab387;
-
}
-
.mocha :is(.admonish-attention, .admonish-caution, .admonish-warning) > :is(.admonition-title, summary.admonition-title) {
-
background-color: rgba(250, 179, 135, 0.2);
-
}
-
.mocha :is(.admonish-attention, .admonish-caution, .admonish-warning) > :is(.admonition-title, summary.admonition-title)::before {
-
background-color: #fab387;
-
}
-
.mocha :is(.admonition):is(.admonish-faq, .admonish-help, .admonish-question) {
-
border-color: #94e2d5;
-
}
-
.mocha :is(.admonish-faq, .admonish-help, .admonish-question) > :is(.admonition-title, summary.admonition-title) {
-
background-color: rgba(148, 226, 213, 0.2);
-
}
-
.mocha :is(.admonish-faq, .admonish-help, .admonish-question) > :is(.admonition-title, summary.admonition-title)::before {
-
background-color: #94e2d5;
-
}
-
.mocha :is(.admonition):is(.admonish-bug, .admonish-danger, .admonish-error, .admonish-fail, .admonish-failure, .admonish-missing) {
-
border-color: #f38ba8;
-
}
-
.mocha :is(.admonish-bug, .admonish-danger, .admonish-error, .admonish-fail, .admonish-failure, .admonish-missing) > :is(.admonition-title, summary.admonition-title) {
-
background-color: rgba(243, 139, 168, 0.2);
-
}
-
.mocha :is(.admonish-bug, .admonish-danger, .admonish-error, .admonish-fail, .admonish-failure, .admonish-missing) > :is(.admonition-title, summary.admonition-title)::before {
-
background-color: #f38ba8;
-
}
-
.mocha :is(.admonition):is(.admonish-cite, .admonish-quote) {
-
border-color: #f5c2e7;
-
}
-
.mocha :is(.admonish-cite, .admonish-quote) > :is(.admonition-title, summary.admonition-title) {
-
background-color: rgba(245, 194, 231, 0.2);
-
}
-
.mocha :is(.admonish-cite, .admonish-quote) > :is(.admonition-title, summary.admonition-title)::before {
-
background-color: #f5c2e7;
-
}
-836
docs/theme/catppuccin.css
···
-
/* https://highlightjs.readthedocs.io/en/latest/css-classes-reference.html */
-
.latte.hljs {
-
color: #4c4f69;
-
background: #eff1f5;
-
}
-
.latte .hljs-keyword {
-
color: #8839ef;
-
}
-
.latte .hljs-built_in {
-
color: #d20f39;
-
}
-
.latte .hljs-type {
-
color: #df8e1d;
-
}
-
.latte .hljs-literal {
-
color: #fe640b;
-
}
-
.latte .hljs-number {
-
color: #fe640b;
-
}
-
.latte .hljs-operator {
-
color: #04a5e5;
-
}
-
.latte .hljs-punctuation {
-
color: #5c5f77;
-
}
-
.latte .hljs-property {
-
color: #179299;
-
}
-
.latte .hljs-regexp {
-
color: #ea76cb;
-
}
-
.latte .hljs-string {
-
color: #40a02b;
-
}
-
.latte .hljs-char.escape_ {
-
color: #40a02b;
-
}
-
.latte .hljs-subst {
-
color: #6c6f85;
-
}
-
.latte .hljs-symbol {
-
color: #dd7878;
-
}
-
.latte .hljs-variable {
-
color: #8839ef;
-
}
-
.latte .hljs-variable.language_ {
-
color: #8839ef;
-
}
-
.latte .hljs-variable.constant_ {
-
color: #fe640b;
-
}
-
.latte .hljs-title {
-
color: #1e66f5;
-
}
-
.latte .hljs-title.class_ {
-
color: #df8e1d;
-
}
-
.latte .hljs-title.function_ {
-
color: #1e66f5;
-
}
-
.latte .hljs-params {
-
color: #4c4f69;
-
}
-
.latte .hljs-comment {
-
color: #7c7f93;
-
}
-
.latte .hljs-doctag {
-
color: #d20f39;
-
}
-
.latte .hljs-meta {
-
color: #fe640b;
-
}
-
.latte .hljs-section {
-
color: #1e66f5;
-
}
-
.latte .hljs-tag {
-
color: #179299;
-
}
-
.latte .hljs-name {
-
color: #8839ef;
-
}
-
.latte .hljs-attr {
-
color: #1e66f5;
-
}
-
.latte .hljs-attribute {
-
color: #40a02b;
-
}
-
.latte .hljs-bullet {
-
color: #179299;
-
}
-
.latte .hljs-code {
-
color: #40a02b;
-
}
-
.latte .hljs-emphasis {
-
color: #d20f39;
-
font-style: italic;
-
}
-
.latte .hljs-strong {
-
color: #d20f39;
-
font-weight: bold;
-
}
-
.latte .hljs-formula {
-
color: #179299;
-
}
-
.latte .hljs-link {
-
color: #209fb5;
-
font-style: italic;
-
}
-
.latte .hljs-quote {
-
color: #40a02b;
-
font-style: italic;
-
}
-
.latte .hljs-selector-tag {
-
color: #df8e1d;
-
}
-
.latte .hljs-selector-id {
-
color: #1e66f5;
-
}
-
.latte .hljs-selector-class {
-
color: #179299;
-
}
-
.latte .hljs-selector-attr {
-
color: #8839ef;
-
}
-
.latte .hljs-selector-pseudo {
-
color: #179299;
-
}
-
.latte .hljs-template-tag {
-
color: #dd7878;
-
}
-
.latte .hljs-template-variable {
-
color: #dd7878;
-
}
-
.latte .hljs-addition {
-
color: #40a02b;
-
background: rgba(64, 160, 43, 0.15);
-
}
-
.latte .hljs-deletion {
-
color: #d20f39;
-
background: rgba(210, 15, 57, 0.15);
-
}
-
.latte :is(h1, h2, h3, h4, h5, h6) a code {
-
color: #4c4f69;
-
}
-
.latte a code {
-
color: #1e66f5;
-
}
-
.latte code {
-
color: #4c4f69;
-
background: #e6e9ef;
-
}
-
.latte blockquote blockquote {
-
border-top: 0.1em solid #acb0be;
-
border-bottom: 0.1em solid #acb0be;
-
}
-
.latte hr {
-
border-color: #acb0be;
-
border-style: solid;
-
}
-
.latte del {
-
color: #7c7f93;
-
}
-
.latte .ace_gutter {
-
color: #8c8fa1;
-
background: #e6e9ef;
-
}
-
.latte .ace_gutter-active-line.ace_gutter-cell {
-
color: #ea76cb;
-
background: #e6e9ef;
-
}
-
.latte .tooltiptext {
-
background: #e6e9ef;
-
color: #4c4f69;
-
}
-
-
.frappe.hljs {
-
color: #c6d0f5;
-
background: #303446;
-
}
-
.frappe .hljs-keyword {
-
color: #ca9ee6;
-
}
-
.frappe .hljs-built_in {
-
color: #e78284;
-
}
-
.frappe .hljs-type {
-
color: #e5c890;
-
}
-
.frappe .hljs-literal {
-
color: #ef9f76;
-
}
-
.frappe .hljs-number {
-
color: #ef9f76;
-
}
-
.frappe .hljs-operator {
-
color: #99d1db;
-
}
-
.frappe .hljs-punctuation {
-
color: #b5bfe2;
-
}
-
.frappe .hljs-property {
-
color: #81c8be;
-
}
-
.frappe .hljs-regexp {
-
color: #f4b8e4;
-
}
-
.frappe .hljs-string {
-
color: #a6d189;
-
}
-
.frappe .hljs-char.escape_ {
-
color: #a6d189;
-
}
-
.frappe .hljs-subst {
-
color: #a5adce;
-
}
-
.frappe .hljs-symbol {
-
color: #eebebe;
-
}
-
.frappe .hljs-variable {
-
color: #ca9ee6;
-
}
-
.frappe .hljs-variable.language_ {
-
color: #ca9ee6;
-
}
-
.frappe .hljs-variable.constant_ {
-
color: #ef9f76;
-
}
-
.frappe .hljs-title {
-
color: #8caaee;
-
}
-
.frappe .hljs-title.class_ {
-
color: #e5c890;
-
}
-
.frappe .hljs-title.function_ {
-
color: #8caaee;
-
}
-
.frappe .hljs-params {
-
color: #c6d0f5;
-
}
-
.frappe .hljs-comment {
-
color: #949cbb;
-
}
-
.frappe .hljs-doctag {
-
color: #e78284;
-
}
-
.frappe .hljs-meta {
-
color: #ef9f76;
-
}
-
.frappe .hljs-section {
-
color: #8caaee;
-
}
-
.frappe .hljs-tag {
-
color: #81c8be;
-
}
-
.frappe .hljs-name {
-
color: #ca9ee6;
-
}
-
.frappe .hljs-attr {
-
color: #8caaee;
-
}
-
.frappe .hljs-attribute {
-
color: #a6d189;
-
}
-
.frappe .hljs-bullet {
-
color: #81c8be;
-
}
-
.frappe .hljs-code {
-
color: #a6d189;
-
}
-
.frappe .hljs-emphasis {
-
color: #e78284;
-
font-style: italic;
-
}
-
.frappe .hljs-strong {
-
color: #e78284;
-
font-weight: bold;
-
}
-
.frappe .hljs-formula {
-
color: #81c8be;
-
}
-
.frappe .hljs-link {
-
color: #85c1dc;
-
font-style: italic;
-
}
-
.frappe .hljs-quote {
-
color: #a6d189;
-
font-style: italic;
-
}
-
.frappe .hljs-selector-tag {
-
color: #e5c890;
-
}
-
.frappe .hljs-selector-id {
-
color: #8caaee;
-
}
-
.frappe .hljs-selector-class {
-
color: #81c8be;
-
}
-
.frappe .hljs-selector-attr {
-
color: #ca9ee6;
-
}
-
.frappe .hljs-selector-pseudo {
-
color: #81c8be;
-
}
-
.frappe .hljs-template-tag {
-
color: #eebebe;
-
}
-
.frappe .hljs-template-variable {
-
color: #eebebe;
-
}
-
.frappe .hljs-addition {
-
color: #a6d189;
-
background: rgba(166, 209, 137, 0.15);
-
}
-
.frappe .hljs-deletion {
-
color: #e78284;
-
background: rgba(231, 130, 132, 0.15);
-
}
-
.frappe :is(h1, h2, h3, h4, h5, h6) a code {
-
color: #c6d0f5;
-
}
-
.frappe a code {
-
color: #8caaee;
-
}
-
.frappe code {
-
color: #c6d0f5;
-
background: #292c3c;
-
}
-
.frappe blockquote blockquote {
-
border-top: 0.1em solid #626880;
-
border-bottom: 0.1em solid #626880;
-
}
-
.frappe hr {
-
border-color: #626880;
-
border-style: solid;
-
}
-
.frappe del {
-
color: #949cbb;
-
}
-
.frappe .ace_gutter {
-
color: #838ba7;
-
background: #292c3c;
-
}
-
.frappe .ace_gutter-active-line.ace_gutter-cell {
-
color: #f4b8e4;
-
background: #292c3c;
-
}
-
.frappe .tooltiptext {
-
background: #292c3c;
-
color: #c6d0f5;
-
}
-
-
.macchiato.hljs {
-
color: #cad3f5;
-
background: #24273a;
-
}
-
.macchiato .hljs-keyword {
-
color: #c6a0f6;
-
}
-
.macchiato .hljs-built_in {
-
color: #ed8796;
-
}
-
.macchiato .hljs-type {
-
color: #eed49f;
-
}
-
.macchiato .hljs-literal {
-
color: #f5a97f;
-
}
-
.macchiato .hljs-number {
-
color: #f5a97f;
-
}
-
.macchiato .hljs-operator {
-
color: #91d7e3;
-
}
-
.macchiato .hljs-punctuation {
-
color: #b8c0e0;
-
}
-
.macchiato .hljs-property {
-
color: #8bd5ca;
-
}
-
.macchiato .hljs-regexp {
-
color: #f5bde6;
-
}
-
.macchiato .hljs-string {
-
color: #a6da95;
-
}
-
.macchiato .hljs-char.escape_ {
-
color: #a6da95;
-
}
-
.macchiato .hljs-subst {
-
color: #a5adcb;
-
}
-
.macchiato .hljs-symbol {
-
color: #f0c6c6;
-
}
-
.macchiato .hljs-variable {
-
color: #c6a0f6;
-
}
-
.macchiato .hljs-variable.language_ {
-
color: #c6a0f6;
-
}
-
.macchiato .hljs-variable.constant_ {
-
color: #f5a97f;
-
}
-
.macchiato .hljs-title {
-
color: #8aadf4;
-
}
-
.macchiato .hljs-title.class_ {
-
color: #eed49f;
-
}
-
.macchiato .hljs-title.function_ {
-
color: #8aadf4;
-
}
-
.macchiato .hljs-params {
-
color: #cad3f5;
-
}
-
.macchiato .hljs-comment {
-
color: #939ab7;
-
}
-
.macchiato .hljs-doctag {
-
color: #ed8796;
-
}
-
.macchiato .hljs-meta {
-
color: #f5a97f;
-
}
-
.macchiato .hljs-section {
-
color: #8aadf4;
-
}
-
.macchiato .hljs-tag {
-
color: #8bd5ca;
-
}
-
.macchiato .hljs-name {
-
color: #c6a0f6;
-
}
-
.macchiato .hljs-attr {
-
color: #8aadf4;
-
}
-
.macchiato .hljs-attribute {
-
color: #a6da95;
-
}
-
.macchiato .hljs-bullet {
-
color: #8bd5ca;
-
}
-
.macchiato .hljs-code {
-
color: #a6da95;
-
}
-
.macchiato .hljs-emphasis {
-
color: #ed8796;
-
font-style: italic;
-
}
-
.macchiato .hljs-strong {
-
color: #ed8796;
-
font-weight: bold;
-
}
-
.macchiato .hljs-formula {
-
color: #8bd5ca;
-
}
-
.macchiato .hljs-link {
-
color: #7dc4e4;
-
font-style: italic;
-
}
-
.macchiato .hljs-quote {
-
color: #a6da95;
-
font-style: italic;
-
}
-
.macchiato .hljs-selector-tag {
-
color: #eed49f;
-
}
-
.macchiato .hljs-selector-id {
-
color: #8aadf4;
-
}
-
.macchiato .hljs-selector-class {
-
color: #8bd5ca;
-
}
-
.macchiato .hljs-selector-attr {
-
color: #c6a0f6;
-
}
-
.macchiato .hljs-selector-pseudo {
-
color: #8bd5ca;
-
}
-
.macchiato .hljs-template-tag {
-
color: #f0c6c6;
-
}
-
.macchiato .hljs-template-variable {
-
color: #f0c6c6;
-
}
-
.macchiato .hljs-addition {
-
color: #a6da95;
-
background: rgba(166, 218, 149, 0.15);
-
}
-
.macchiato .hljs-deletion {
-
color: #ed8796;
-
background: rgba(237, 135, 150, 0.15);
-
}
-
.macchiato :is(h1, h2, h3, h4, h5, h6) a code {
-
color: #cad3f5;
-
}
-
.macchiato a code {
-
color: #8aadf4;
-
}
-
.macchiato code {
-
color: #cad3f5;
-
background: #1e2030;
-
}
-
.macchiato blockquote blockquote {
-
border-top: 0.1em solid #5b6078;
-
border-bottom: 0.1em solid #5b6078;
-
}
-
.macchiato hr {
-
border-color: #5b6078;
-
border-style: solid;
-
}
-
.macchiato del {
-
color: #939ab7;
-
}
-
.macchiato .ace_gutter {
-
color: #8087a2;
-
background: #1e2030;
-
}
-
.macchiato .ace_gutter-active-line.ace_gutter-cell {
-
color: #f5bde6;
-
background: #1e2030;
-
}
-
.macchiato .tooltiptext {
-
background: #1e2030;
-
color: #cad3f5;
-
}
-
-
.mocha.hljs {
-
color: #cdd6f4;
-
background: #1e1e2e;
-
}
-
.mocha .hljs-keyword {
-
color: #cba6f7;
-
}
-
.mocha .hljs-built_in {
-
color: #f38ba8;
-
}
-
.mocha .hljs-type {
-
color: #f9e2af;
-
}
-
.mocha .hljs-literal {
-
color: #fab387;
-
}
-
.mocha .hljs-number {
-
color: #fab387;
-
}
-
.mocha .hljs-operator {
-
color: #89dceb;
-
}
-
.mocha .hljs-punctuation {
-
color: #bac2de;
-
}
-
.mocha .hljs-property {
-
color: #94e2d5;
-
}
-
.mocha .hljs-regexp {
-
color: #f5c2e7;
-
}
-
.mocha .hljs-string {
-
color: #a6e3a1;
-
}
-
.mocha .hljs-char.escape_ {
-
color: #a6e3a1;
-
}
-
.mocha .hljs-subst {
-
color: #a6adc8;
-
}
-
.mocha .hljs-symbol {
-
color: #f2cdcd;
-
}
-
.mocha .hljs-variable {
-
color: #cba6f7;
-
}
-
.mocha .hljs-variable.language_ {
-
color: #cba6f7;
-
}
-
.mocha .hljs-variable.constant_ {
-
color: #fab387;
-
}
-
.mocha .hljs-title {
-
color: #89b4fa;
-
}
-
.mocha .hljs-title.class_ {
-
color: #f9e2af;
-
}
-
.mocha .hljs-title.function_ {
-
color: #89b4fa;
-
}
-
.mocha .hljs-params {
-
color: #cdd6f4;
-
}
-
.mocha .hljs-comment {
-
color: #9399b2;
-
}
-
.mocha .hljs-doctag {
-
color: #f38ba8;
-
}
-
.mocha .hljs-meta {
-
color: #fab387;
-
}
-
.mocha .hljs-section {
-
color: #89b4fa;
-
}
-
.mocha .hljs-tag {
-
color: #94e2d5;
-
}
-
.mocha .hljs-name {
-
color: #cba6f7;
-
}
-
.mocha .hljs-attr {
-
color: #89b4fa;
-
}
-
.mocha .hljs-attribute {
-
color: #a6e3a1;
-
}
-
.mocha .hljs-bullet {
-
color: #94e2d5;
-
}
-
.mocha .hljs-code {
-
color: #a6e3a1;
-
}
-
.mocha .hljs-emphasis {
-
color: #f38ba8;
-
font-style: italic;
-
}
-
.mocha .hljs-strong {
-
color: #f38ba8;
-
font-weight: bold;
-
}
-
.mocha .hljs-formula {
-
color: #94e2d5;
-
}
-
.mocha .hljs-link {
-
color: #74c7ec;
-
font-style: italic;
-
}
-
.mocha .hljs-quote {
-
color: #a6e3a1;
-
font-style: italic;
-
}
-
.mocha .hljs-selector-tag {
-
color: #f9e2af;
-
}
-
.mocha .hljs-selector-id {
-
color: #89b4fa;
-
}
-
.mocha .hljs-selector-class {
-
color: #94e2d5;
-
}
-
.mocha .hljs-selector-attr {
-
color: #cba6f7;
-
}
-
.mocha .hljs-selector-pseudo {
-
color: #94e2d5;
-
}
-
.mocha .hljs-template-tag {
-
color: #f2cdcd;
-
}
-
.mocha .hljs-template-variable {
-
color: #f2cdcd;
-
}
-
.mocha .hljs-addition {
-
color: #a6e3a1;
-
background: rgba(166, 227, 161, 0.15);
-
}
-
.mocha .hljs-deletion {
-
color: #f38ba8;
-
background: rgba(243, 139, 168, 0.15);
-
}
-
.mocha :is(h1, h2, h3, h4, h5, h6) a code {
-
color: #cdd6f4;
-
}
-
.mocha a code {
-
color: #89b4fa;
-
}
-
.mocha code {
-
color: #cdd6f4;
-
background: #181825;
-
}
-
.mocha blockquote blockquote {
-
border-top: 0.1em solid #585b70;
-
border-bottom: 0.1em solid #585b70;
-
}
-
.mocha hr {
-
border-color: #585b70;
-
border-style: solid;
-
}
-
.mocha del {
-
color: #9399b2;
-
}
-
.mocha .ace_gutter {
-
color: #7f849c;
-
background: #181825;
-
}
-
.mocha .ace_gutter-active-line.ace_gutter-cell {
-
color: #f5c2e7;
-
background: #181825;
-
}
-
.mocha .tooltiptext {
-
background: #181825;
-
color: #cdd6f4;
-
}
-
-
.latte {
-
--bg: #eff1f5;
-
--fg: #4c4f69;
-
--sidebar-bg: #e6e9ef;
-
--sidebar-fg: #4c4f69;
-
--sidebar-non-existant: #9ca0b0;
-
--sidebar-active: #1e66f5;
-
--sidebar-spacer: #9ca0b0;
-
--scrollbar: #9ca0b0;
-
--icons: #9ca0b0;
-
--icons-hover: #7c7f93;
-
--links: #1e66f5;
-
--inline-code-color: #4c4f69;
-
--theme-popup-bg: #e6e9ef;
-
--theme-popup-border: #9ca0b0;
-
--theme-hover: #ccd0da;
-
--quote-bg: #e6e9ef;
-
--quote-border: #dce0e8;
-
--table-border-color: #ccd0da;
-
--table-header-bg: #e6e9ef;
-
--table-alternate-bg: #e6e9ef;
-
--searchbar-border-color: #ccd0da;
-
--searchbar-bg: #e6e9ef;
-
--searchbar-fg: #4c4f69;
-
--searchbar-shadow-color: #dce0e8;
-
--searchresults-header-fg: #4c4f69;
-
--searchresults-border-color: #ccd0da;
-
--searchresults-li-bg: #eff1f5;
-
--search-mark-bg: #fe640b;
-
--warning-border: #fe640b;
-
--color-scheme: light;
-
}
-
-
.frappe {
-
--bg: #303446;
-
--fg: #c6d0f5;
-
--sidebar-bg: #292c3c;
-
--sidebar-fg: #c6d0f5;
-
--sidebar-non-existant: #737994;
-
--sidebar-active: #8caaee;
-
--sidebar-spacer: #737994;
-
--scrollbar: #737994;
-
--icons: #737994;
-
--icons-hover: #949cbb;
-
--links: #8caaee;
-
--inline-code-color: #c6d0f5;
-
--theme-popup-bg: #292c3c;
-
--theme-popup-border: #737994;
-
--theme-hover: #414559;
-
--quote-bg: #292c3c;
-
--quote-border: #232634;
-
--table-border-color: #414559;
-
--table-header-bg: #292c3c;
-
--table-alternate-bg: #292c3c;
-
--searchbar-border-color: #414559;
-
--searchbar-bg: #292c3c;
-
--searchbar-fg: #c6d0f5;
-
--searchbar-shadow-color: #232634;
-
--searchresults-header-fg: #c6d0f5;
-
--searchresults-border-color: #414559;
-
--searchresults-li-bg: #303446;
-
--search-mark-bg: #ef9f76;
-
--warning-border: #ef9f76;
-
--color-scheme: dark;
-
}
-
-
.macchiato {
-
--bg: #24273a;
-
--fg: #cad3f5;
-
--sidebar-bg: #1e2030;
-
--sidebar-fg: #cad3f5;
-
--sidebar-non-existant: #6e738d;
-
--sidebar-active: #8aadf4;
-
--sidebar-spacer: #6e738d;
-
--scrollbar: #6e738d;
-
--icons: #6e738d;
-
--icons-hover: #939ab7;
-
--links: #8aadf4;
-
--inline-code-color: #cad3f5;
-
--theme-popup-bg: #1e2030;
-
--theme-popup-border: #6e738d;
-
--theme-hover: #363a4f;
-
--quote-bg: #1e2030;
-
--quote-border: #181926;
-
--table-border-color: #363a4f;
-
--table-header-bg: #1e2030;
-
--table-alternate-bg: #1e2030;
-
--searchbar-border-color: #363a4f;
-
--searchbar-bg: #1e2030;
-
--searchbar-fg: #cad3f5;
-
--searchbar-shadow-color: #181926;
-
--searchresults-header-fg: #cad3f5;
-
--searchresults-border-color: #363a4f;
-
--searchresults-li-bg: #24273a;
-
--search-mark-bg: #f5a97f;
-
--warning-border: #f5a97f;
-
--color-scheme: dark;
-
}
-
-
.mocha {
-
--bg: #1e1e2e;
-
--fg: #cdd6f4;
-
--sidebar-bg: #181825;
-
--sidebar-fg: #cdd6f4;
-
--sidebar-non-existant: #6c7086;
-
--sidebar-active: #89b4fa;
-
--sidebar-spacer: #6c7086;
-
--scrollbar: #6c7086;
-
--icons: #6c7086;
-
--icons-hover: #9399b2;
-
--links: #89b4fa;
-
--inline-code-color: #cdd6f4;
-
--theme-popup-bg: #181825;
-
--theme-popup-border: #6c7086;
-
--theme-hover: #313244;
-
--quote-bg: #181825;
-
--quote-border: #11111b;
-
--table-border-color: #313244;
-
--table-header-bg: #181825;
-
--table-alternate-bg: #181825;
-
--searchbar-border-color: #313244;
-
--searchbar-bg: #181825;
-
--searchbar-fg: #cdd6f4;
-
--searchbar-shadow-color: #11111b;
-
--searchresults-header-fg: #cdd6f4;
-
--searchresults-border-color: #313244;
-
--searchresults-li-bg: #1e1e2e;
-
--search-mark-bg: #fab387;
-
--warning-border: #fab387;
-
--color-scheme: dark;
-
}
docs/theme/favicon.png

This is a binary file and will not be displayed.

-1
docs/theme/highlight.js
···
-
../vendor/highlight.min.js
-329
docs/theme/index.hbs
···
-
<!DOCTYPE HTML>
-
<html lang="{{ language }}" class="{{ default_theme }} sidebar-visible" dir="{{ text_direction }}">
-
<head>
-
<!-- Book generated using mdBook -->
-
<meta charset="UTF-8">
-
<title>{{ title }}</title>
-
{{#if is_print }}
-
<meta name="robots" content="noindex">
-
{{/if}}
-
{{#if base_url}}
-
<base href="{{ base_url }}">
-
{{/if}}
-
-
-
<!-- Custom HTML head -->
-
{{> head}}
-
-
<meta name="description" content="{{ description }}">
-
<meta name="viewport" content="width=device-width, initial-scale=1">
-
<meta name="theme-color" content="#ffffff">
-
-
{{#if favicon_svg}}
-
<link rel="icon" href="{{ path_to_root }}favicon.svg">
-
{{/if}}
-
{{#if favicon_png}}
-
<link rel="shortcut icon" href="{{ path_to_root }}favicon.png">
-
{{/if}}
-
<link rel="stylesheet" href="{{ path_to_root }}css/variables.css">
-
<link rel="stylesheet" href="{{ path_to_root }}css/general.css">
-
<link rel="stylesheet" href="{{ path_to_root }}css/chrome.css">
-
{{#if print_enable}}
-
<link rel="stylesheet" href="{{ path_to_root }}css/print.css" media="print">
-
{{/if}}
-
-
<!-- Fonts -->
-
<link rel="stylesheet" href="{{ path_to_root }}FontAwesome/css/font-awesome.css">
-
{{#if copy_fonts}}
-
<link rel="stylesheet" href="{{ path_to_root }}fonts/fonts.css">
-
{{/if}}
-
-
<!-- Highlight.js Stylesheets -->
-
<link rel="stylesheet" href="{{ path_to_root }}highlight.css">
-
<link rel="stylesheet" href="{{ path_to_root }}tomorrow-night.css">
-
<link rel="stylesheet" href="{{ path_to_root }}ayu-highlight.css">
-
-
<!-- Custom theme stylesheets -->
-
{{#each additional_css}}
-
<link rel="stylesheet" href="{{ ../path_to_root }}{{ this }}">
-
{{/each}}
-
-
{{#if mathjax_support}}
-
<!-- MathJax -->
-
<script async src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
-
{{/if}}
-
-
<!-- Provide site root to javascript -->
-
<script>
-
var path_to_root = "{{ path_to_root }}";
-
var default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "{{ preferred_dark_theme }}" : "{{ default_theme }}";
-
</script>
-
<!-- Start loading toc.js asap -->
-
<script src="{{ path_to_root }}toc.js"></script>
-
</head>
-
<body>
-
<div id="body-container">
-
<!-- Work around some values being stored in localStorage wrapped in quotes -->
-
<script>
-
try {
-
var theme = localStorage.getItem('mdbook-theme');
-
var sidebar = localStorage.getItem('mdbook-sidebar');
-
-
if (theme.startsWith('"') && theme.endsWith('"')) {
-
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
-
}
-
-
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
-
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
-
}
-
} catch (e) { }
-
</script>
-
-
<!-- Set the theme before any content is loaded, prevents flash -->
-
<script>
-
var theme;
-
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
-
if (theme === null || theme === undefined) { theme = default_theme; }
-
const html = document.documentElement;
-
html.classList.remove('{{ default_theme }}')
-
html.classList.add(theme);
-
html.classList.add("js");
-
</script>
-
-
<input type="checkbox" id="sidebar-toggle-anchor" class="hidden">
-
-
<!-- Hide / unhide sidebar before it is displayed -->
-
<script>
-
var sidebar = null;
-
var sidebar_toggle = document.getElementById("sidebar-toggle-anchor");
-
if (document.body.clientWidth >= 1080) {
-
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
-
sidebar = sidebar || 'visible';
-
} else {
-
sidebar = 'hidden';
-
}
-
sidebar_toggle.checked = sidebar === 'visible';
-
html.classList.remove('sidebar-visible');
-
html.classList.add("sidebar-" + sidebar);
-
</script>
-
-
<nav id="sidebar" class="sidebar" aria-label="Table of contents">
-
<!-- populated by js -->
-
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
-
<noscript>
-
<iframe class="sidebar-iframe-outer" src="{{ path_to_root }}toc.html"></iframe>
-
</noscript>
-
<div id="sidebar-resize-handle" class="sidebar-resize-handle">
-
<div class="sidebar-resize-indicator"></div>
-
</div>
-
</nav>
-
-
<div id="page-wrapper" class="page-wrapper">
-
-
<div class="page">
-
{{> header}}
-
<div id="menu-bar-hover-placeholder"></div>
-
<div id="menu-bar" class="menu-bar sticky">
-
<div class="left-buttons">
-
<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">
-
<i class="fa fa-bars"></i>
-
</label>
-
<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">
-
<i class="fa fa-paint-brush"></i>
-
</button>
-
<ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu">
-
<li role="none"><button role="menuitem" class="theme" id="latte">Catppuccin Latte</button></li>
-
<li role="none"><button role="menuitem" class="theme" id="frappe">Catppuccin Frappรฉ</button></li>
-
<li role="none"><button role="menuitem" class="theme" id="macchiato">Catppuccin Macchiato</button></li>
-
<li role="none"><button role="menuitem" class="theme" id="mocha">Catppuccin Mocha</button></li>
-
<li role="none"><button role="menuitem" class="theme" id="light">Light</button></li>
-
<li role="none"><button role="menuitem" class="theme" id="rust">Rust</button></li>
-
<li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li>
-
<li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li>
-
<li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button></li>
-
</ul>
-
{{#if search_enabled}}
-
<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">
-
<i class="fa fa-search"></i>
-
</button>
-
{{/if}}
-
</div>
-
-
<h1 class="menu-title">{{ book_title }}</h1>
-
-
<div class="right-buttons">
-
{{#if print_enable}}
-
<a href="{{ path_to_root }}print.html" title="Print this book" aria-label="Print this book">
-
<i id="print-button" class="fa fa-print"></i>
-
</a>
-
{{/if}}
-
{{#if git_repository_url}}
-
<a href="{{git_repository_url}}" title="Git repository" aria-label="Git repository">
-
<i id="git-repository-button" class="fa {{git_repository_icon}}"></i>
-
</a>
-
{{/if}}
-
{{#if git_repository_edit_url}}
-
<a href="{{git_repository_edit_url}}" title="Suggest an edit" aria-label="Suggest an edit">
-
<i id="git-edit-button" class="fa fa-edit"></i>
-
</a>
-
{{/if}}
-
-
</div>
-
</div>
-
-
{{#if search_enabled}}
-
<div id="search-wrapper" class="hidden">
-
<form id="searchbar-outer" class="searchbar-outer">
-
<input type="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header">
-
</form>
-
<div id="searchresults-outer" class="searchresults-outer hidden">
-
<div id="searchresults-header" class="searchresults-header"></div>
-
<ul id="searchresults">
-
</ul>
-
</div>
-
</div>
-
{{/if}}
-
-
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
-
<script>
-
document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
-
document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
-
Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) {
-
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
-
});
-
</script>
-
-
<div id="content" class="content">
-
<main>
-
{{{ content }}}
-
</main>
-
-
<nav class="nav-wrapper" aria-label="Page navigation">
-
<!-- Mobile navigation buttons -->
-
{{#previous}}
-
<a rel="prev" href="{{ path_to_root }}{{link}}" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
-
<i class="fa fa-angle-left"></i>
-
</a>
-
{{/previous}}
-
-
{{#next}}
-
<a rel="next prefetch" href="{{ path_to_root }}{{link}}" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
-
<i class="fa fa-angle-right"></i>
-
</a>
-
{{/next}}
-
-
<div style="clear: both"></div>
-
</nav>
-
</div>
-
</div>
-
-
<nav class="nav-wide-wrapper" aria-label="Page navigation">
-
{{#previous}}
-
<a rel="prev" href="{{ path_to_root }}{{link}}" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
-
<i class="fa fa-angle-left"></i>
-
</a>
-
{{/previous}}
-
-
{{#next}}
-
<a rel="next prefetch" href="{{ path_to_root }}{{link}}" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
-
<i class="fa fa-angle-right"></i>
-
</a>
-
{{/next}}
-
</nav>
-
-
</div>
-
-
{{#if live_reload_endpoint}}
-
<!-- Livereload script (if served using the cli tool) -->
-
<script>
-
const wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
-
const wsAddress = wsProtocol + "//" + location.host + "/" + "{{{live_reload_endpoint}}}";
-
const socket = new WebSocket(wsAddress);
-
socket.onmessage = function (event) {
-
if (event.data === "reload") {
-
socket.close();
-
location.reload();
-
}
-
};
-
-
window.onbeforeunload = function() {
-
socket.close();
-
}
-
</script>
-
{{/if}}
-
-
{{#if google_analytics}}
-
<!-- Google Analytics Tag -->
-
<script>
-
var localAddrs = ["localhost", "127.0.0.1", ""];
-
-
// make sure we don't activate google analytics if the developer is
-
// inspecting the book locally...
-
if (localAddrs.indexOf(document.location.hostname) === -1) {
-
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
-
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
-
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
-
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
-
-
ga('create', '{{google_analytics}}', 'auto');
-
ga('send', 'pageview');
-
}
-
</script>
-
{{/if}}
-
-
{{#if playground_line_numbers}}
-
<script>
-
window.playground_line_numbers = true;
-
</script>
-
{{/if}}
-
-
{{#if playground_copyable}}
-
<script>
-
window.playground_copyable = true;
-
</script>
-
{{/if}}
-
-
{{#if playground_js}}
-
<script src="{{ path_to_root }}ace.js"></script>
-
<script src="{{ path_to_root }}editor.js"></script>
-
<script src="{{ path_to_root }}mode-rust.js"></script>
-
<script src="{{ path_to_root }}theme-dawn.js"></script>
-
<script src="{{ path_to_root }}theme-tomorrow_night.js"></script>
-
{{/if}}
-
-
{{#if search_js}}
-
<script src="{{ path_to_root }}elasticlunr.min.js"></script>
-
<script src="{{ path_to_root }}mark.min.js"></script>
-
<script src="{{ path_to_root }}searcher.js"></script>
-
{{/if}}
-
-
<script src="{{ path_to_root }}clipboard.min.js"></script>
-
<script src="{{ path_to_root }}highlight.js"></script>
-
<script src="{{ path_to_root }}book.js"></script>
-
-
<!-- Custom JS scripts -->
-
{{#each additional_js}}
-
<script src="{{ ../path_to_root }}{{this}}"></script>
-
{{/each}}
-
-
{{#if is_print}}
-
{{#if mathjax_support}}
-
<script>
-
window.addEventListener('load', function() {
-
MathJax.Hub.Register.StartupHook('End', function() {
-
window.setTimeout(window.print, 100);
-
});
-
});
-
</script>
-
{{else}}
-
<script>
-
window.addEventListener('load', function() {
-
window.setTimeout(window.print, 100);
-
});
-
</script>
-
{{/if}}
-
{{/if}}
-
-
</div>
-
</body>
-
</html>
-71
docs/theme/pagetoc.css
···
-
@media only screen and (max-width:1439px) {
-
.sidetoc {
-
display: none;
-
}
-
}
-
-
@media only screen and (min-width:1440px) {
-
main {
-
position: relative;
-
}
-
-
.sidetoc {
-
margin-left: auto;
-
margin-right: auto;
-
left: calc(100% + (var(--content-max-width))/4 - 140px);
-
position: absolute;
-
}
-
-
.pagetoc {
-
position: fixed;
-
width: 200px;
-
height: calc(100vh - var(--menu-bar-height) - 0.67em * 4);
-
overflow: auto;
-
}
-
-
.pagetoc a {
-
border-left: 1px solid var(--sidebar-bg);
-
color: var(--fg) !important;
-
display: block;
-
padding-bottom: 5px;
-
padding-top: 5px;
-
padding-left: 10px;
-
text-align: left;
-
text-decoration: none;
-
}
-
-
.pagetoc a:hover,
-
.pagetoc a.active {
-
background: var(--sidebar-bg);
-
color: var(--sidebar-fg) !important;
-
}
-
-
.pagetoc .active {
-
background: var(--sidebar-bg);
-
color: var(--sidebar-fg);
-
}
-
-
.pagetoc .pagetoc-H2 {
-
padding-left: 20px;
-
}
-
-
.pagetoc .pagetoc-H3 {
-
padding-left: 40px;
-
}
-
-
.pagetoc .pagetoc-H4 {
-
padding-left: 60px;
-
}
-
-
.pagetoc .pagetoc-H5 {
-
display: none;
-
}
-
-
.pagetoc .pagetoc-H6 {
-
display: none;
-
}
-
}
-
-
a[class^='pagetoc-H']:only-child {
-
display: none;
-
}
-73
docs/theme/pagetoc.js
···
-
let scrollTimeout;
-
-
const listenActive = () => {
-
const elems = document.querySelector(".pagetoc").children;
-
[...elems].forEach((el) => {
-
el.addEventListener("click", (event) => {
-
clearTimeout(scrollTimeout);
-
[...elems].forEach((el) => el.classList.remove("active"));
-
el.classList.add("active");
-
// Prevent scroll updates for a short period
-
scrollTimeout = setTimeout(() => {
-
scrollTimeout = null;
-
}, 100); // Adjust timing as needed
-
});
-
});
-
};
-
-
const getPagetoc = () =>
-
document.querySelector(".pagetoc") || autoCreatePagetoc();
-
-
const autoCreatePagetoc = () => {
-
const main = document.querySelector("#content > main");
-
const content = Object.assign(document.createElement("div"), {
-
className: "content-wrap",
-
});
-
content.append(...main.childNodes);
-
main.prepend(content);
-
main.insertAdjacentHTML(
-
"afterbegin",
-
'<div class="sidetoc"><nav class="pagetoc"></nav></div>',
-
);
-
return document.querySelector(".pagetoc");
-
};
-
const updateFunction = () => {
-
if (scrollTimeout) return; // Skip updates if within the cooldown period from a click
-
const headers = [...document.getElementsByClassName("header")];
-
const scrolledY = window.scrollY;
-
let lastHeader = null;
-
-
// Find the last header that is above the current scroll position
-
for (let i = headers.length - 1; i >= 0; i--) {
-
if (scrolledY >= headers[i].offsetTop) {
-
lastHeader = headers[i];
-
break;
-
}
-
}
-
-
const pagetocLinks = [...document.querySelector(".pagetoc").children];
-
pagetocLinks.forEach((link) => link.classList.remove("active"));
-
-
if (lastHeader) {
-
const activeLink = pagetocLinks.find((link) =>
-
lastHeader.href === link.href
-
);
-
if (activeLink) activeLink.classList.add("active");
-
}
-
};
-
-
window.addEventListener("load", () => {
-
const pagetoc = getPagetoc();
-
const headers = [...document.getElementsByClassName("header")];
-
headers.forEach((header) => {
-
const link = Object.assign(document.createElement("a"), {
-
textContent: header.text,
-
href: header.href,
-
className: `pagetoc-${header.parentElement.tagName}`,
-
});
-
pagetoc.appendChild(link);
-
});
-
updateFunction();
-
listenActive();
-
window.addEventListener("scroll", updateFunction);
-
});
+167
docs/tips_n_tricks.md
···
+
# tops and bottoms
+
this document outlines things that i learned from various sources and some pure guesswork
+
+
> To learn Nix is to learn to suffer, and to learn the way of numbing the pain
+
>
+
> โ€” Cassie circa. 2023
+
+
## overriding packages
+
the pill confused me and i thought i had to make overlays to do overrides but no
+
+
in packages (i.e. `environment.systemPackages`), just do
+
```nix
+
#-------8<-Snip-------
+
environment = {
+
systemPackages = with pkgs; [
+
(discord.override {withOpenASAR = true;})
+
()
+
];
+
};
+
#-------Snip->8-------
+
```
+
+
This works as well
+
```nix
+
security.sudo.package = (pkgs.sudo.override {withInsults = true;});
+
```
+
+
## overlays
+
overlays are useful when you want to refer to a package globally.
+
+
the gist of overlays is as thus:
+
+
> overlay is just `final: pref: {}` functions where dumbed down idea is
+
> that you do pkg = prev.pkg.override and refer to everything else from
+
> final
+
>
+
> idea is like final = prev // overlay(prev, final)
+
> (it's a recursive definition)
+
+
(poorly made) example overlays can be found [here](https://github.com/soopyc/nixos-config/blob/master/overlays/discord-canary.nix)
+
+
currently in-use and slightly better overlays can be found in this repo! head over to /overlays to see them.
+
+
*note: replace `self: super:` with `final: prev:` for consistency*
+
+
*concept and content by \@natsukagami*
+
+
## extra opts
+
a way of passing additional options globally to modules is by using extraOpts.
+
+
in nix flakes, this is accomplished by using `specialArgs` in `nixosSystem`.
+
+
for example, check out this line in our flake.nix:
+
+
https://github.com/soopyc/nix-on-koumakan/blob/492dfaa01808c2aa5dbb2d8223163e92bcef673b/flake.nix#L22-L28
+
+
this avoids the horror of `import ../../../utils/bar.nix;`
+
+
refer to [nixpkgs:nixos/lib/eval-config.nix] and [nixpkgs:lib/modules.nix#122] for more info
+
+
*pointers by \@natsukagami*
+
+
## @ (at) syntax
+
very simple.
+
+
```nix
+
args@{a, b, c, ...}: {
+
# args.a and a are the same
+
some = "value";
+
}
+
```
+
+
## nginx regex location
+
```nix
+
{
+
locations."~ \.php$".extraConfig = ''
+
# balls
+
'';
+
}
+
```
+
from [nixos wiki](https://nixos.wiki/wiki/Nginx#LEMP_stack)
+
+
## adding a package with an overlay to a package set
+
+
for package sets with a scope, you will have to do something like
+
```nix
+
final: prev: {
+
nimPackages = prev.nimPackages.overrideScope (final': prev': {
+
sha1 = final'.callPackage ./sha1.nix {};
+
oauth = final'.callPackage ./oauth.nix {};
+
});
+
}
+
```
+
There's an alternative method that i used to use here:
+
+
https://github.com/soopyc/nix-on-koumakan/blob/30e65402d22b000a3b5af6c9e5ea48a2b58a54e0/overlays/nim/oauth/default.nix
+
+
however i do not think that's the best way lol
+
+
# Common pitfalls
+
## importing nixpkgs with an empty attrset
+
+
ever had this in your flake.nix
+
+
```nix
+
{
+
outputs = { nixpkgs, ... }@inputs: let
+
pkgs = import nixpkgs {};
+
lib = nixpkgs.lib;
+
in {
+
# ...
+
};
+
}
+
```
+
+
... and got fucked with this?
+
```shell
+
error:
+
โ€ฆ while checking flake output 'nixosConfigurations'
+
+
at /nix/store/lz2ra1180qfffmpwg41jpyg1z602qdgx-source/flake.nix:50:5:
+
+
49| in {
+
50| nixosConfigurations = {
+
| ^
+
51| koumakan = (import ./systems/koumakan { inherit pkgs lib inputs; });
+
+
โ€ฆ while checking the NixOS configuration 'nixosConfigurations.koumakan'
+
+
at /nix/store/lz2ra1180qfffmpwg41jpyg1z602qdgx-source/flake.nix:51:7:
+
+
50| nixosConfigurations = {
+
51| koumakan = (import ./systems/koumakan { inherit pkgs lib inputs; });
+
| ^
+
52| };
+
+
(stack trace truncated; use '--show-trace' to show the full trace)
+
+
error: attribute 'currentSystem' missing
+
+
at /nix/store/5c0k827yjq7j24qaq8l2fcnsxp7nv8v1-source/pkgs/top-level/impure.nix:17:43:
+
+
16| # (build, in GNU Autotools parlance) platform.
+
17| localSystem ? { system = args.system or builtins.currentSystem; }
+
| ^
+
18|
+
```
+
+
just don't!!!11 remove the pkgs definition. (note that this only applies to `pkgs = import nixpkgs {};`)
+
+
explanation
+
+
> you shouldn't ever really import nixpkgs with an empty attrset either
+
>
+
> that causes it to fall back on guessing your system using `builtins.currentSystem`,
+
> which is impure and so not allowed in pure evaluation mode
+
>
+
> โ€” \@getchoo
+
+
# Useful links
+
+
Builtin stdlib functions search engine: https://noogle.dev/
+
+
+
<!--links-->
+
[nixpkgs:lib/modules.nix#122]: https://github.com/NixOS/nixpkgs/blob/6e68daefde56a7a8e6fe7c3ca9ceeb436294bb9f/lib/modules.nix#L122
+
[nixpkgs:nixos/lib/eval-config.nix]: https://github.com/NixOS/nixpkgs/blob/5054472759a3b0df8e18cfe4031a5eff92d4cdc3/nixos/lib/eval-config.nix
+59
docs/utils.md
···
+
# utility functions
+
+
## `_utils.mkVhost`
+
`attrset -> attrset`
+
make a virtual host with sensible defaults
+
+
pass in a set to override the defaults.
+
+
### Example
+
```nix
+
services.nginx.virtualHosts."balls.example" = _utils.mkVhost {};
+
```
+
+
## `_utils.mkSimpleProxy`
+
`attrset -> attrset`
+
+
make a simple reverse proxy
+
+
takes a set:
+
```nix
+
{
+
port,
+
protocol ? "http",
+
location ? "/",
+
websockets ? false,
+
extraConfig ? {}
+
}
+
```
+
+
It is recommended to override/add attributes with `extraConfig` to
+
preserve defaults.
+
+
Items in `extraConfig` are merged verbatim to the base attrset with defaults.
+
They are overridden based on their order.
+
+
## `_utils.genSecrets`
+
`namespace[str] -> files[list[str]] -> value[attrset] -> attrset`
+
a
+
generate an attrset to be passed into sops.secrets.
+
+
### Example
+
```nix
+
{ _utils, ... }:
+
let
+
secrets = [
+
"secure_secret"
+
# this is a directory structure, so secrets will be stored as a file in /run/secrets/service/test/secret.
+
"service/test/secret"
+
];
+
in {
+
sops.secrets = _utils.genSecrets "" secrets {}; # it's recommended to use a namespace, but having none is still fine.
+
# -> sops.secrets."secure_secret" = {};
+
# sops.secrets."service/test/secret" = {};
+
sops.secrets = _utils.genSecrets "balls" ["balls_secret"] {owner = "balls"};
+
# -> sops.secrets."balls/balls_secret" = {owner = "balls";};
+
}
+
```
+
+
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
···
-
/*!
-
Highlight.js v11.11.1 (git: d301848ccf)
-
(c) 2006-2025 Josh Goebel <hello@joshgoebel.com> and other contributors
-
License: BSD-3-Clause
-
*/
-
var hljs=function(){"use strict";function e(n){
-
return n instanceof Map?n.clear=n.delete=n.set=()=>{
-
throw Error("map is read-only")}:n instanceof Set&&(n.add=n.clear=n.delete=()=>{
-
throw Error("set is read-only")
-
}),Object.freeze(n),Object.getOwnPropertyNames(n).forEach((t=>{
-
const a=n[t],s=typeof a;"object"!==s&&"function"!==s||Object.isFrozen(a)||e(a)
-
})),n}class n{constructor(e){
-
void 0===e.data&&(e.data={}),this.data=e.data,this.isMatchIgnored=!1}
-
ignoreMatch(){this.isMatchIgnored=!0}}function t(e){
-
return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;")
-
}function a(e,...n){const t=Object.create(null);for(const n in e)t[n]=e[n]
-
;return n.forEach((e=>{for(const n in e)t[n]=e[n]})),t}const s=e=>!!e.scope
-
;class i{constructor(e,n){
-
this.buffer="",this.classPrefix=n.classPrefix,e.walk(this)}addText(e){
-
this.buffer+=t(e)}openNode(e){if(!s(e))return;const n=((e,{prefix:n})=>{
-
if(e.startsWith("language:"))return e.replace("language:","language-")
-
;if(e.includes(".")){const t=e.split(".")
-
;return[`${n}${t.shift()}`,...t.map(((e,n)=>`${e}${"_".repeat(n+1)}`))].join(" ")
-
}return`${n}${e}`})(e.scope,{prefix:this.classPrefix});this.span(n)}
-
closeNode(e){s(e)&&(this.buffer+="</span>")}value(){return this.buffer}span(e){
-
this.buffer+=`<span class="${e}">`}}const r=(e={})=>{const n={children:[]}
-
;return Object.assign(n,e),n};class o{constructor(){
-
this.rootNode=r(),this.stack=[this.rootNode]}get top(){
-
return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){
-
this.top.children.push(e)}openNode(e){const n=r({scope:e})
-
;this.add(n),this.stack.push(n)}closeNode(){
-
if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){
-
for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}
-
walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,n){
-
return"string"==typeof n?e.addText(n):n.children&&(e.openNode(n),
-
n.children.forEach((n=>this._walk(e,n))),e.closeNode(n)),e}static _collapse(e){
-
"string"!=typeof e&&e.children&&(e.children.every((e=>"string"==typeof e))?e.children=[e.children.join("")]:e.children.forEach((e=>{
-
o._collapse(e)})))}}class c extends o{constructor(e){super(),this.options=e}
-
addText(e){""!==e&&this.add(e)}startScope(e){this.openNode(e)}endScope(){
-
this.closeNode()}__addSublanguage(e,n){const t=e.root
-
;n&&(t.scope="language:"+n),this.add(t)}toHTML(){
-
return new i(this,this.options).value()}finalize(){
-
return this.closeAllNodes(),!0}}function l(e){
-
return e?"string"==typeof e?e:e.source:null}function d(e){return h("(?=",e,")")}
-
function g(e){return h("(?:",e,")*")}function u(e){return h("(?:",e,")?")}
-
function h(...e){return e.map((e=>l(e))).join("")}function b(...e){const n=(e=>{
-
const n=e[e.length-1]
-
;return"object"==typeof n&&n.constructor===Object?(e.splice(e.length-1,1),n):{}
-
})(e);return"("+(n.capture?"":"?:")+e.map((e=>l(e))).join("|")+")"}
-
function p(e){return RegExp(e.toString()+"|").exec("").length-1}
-
const m=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./
-
;function f(e,{joinWith:n}){let t=0;return e.map((e=>{t+=1;const n=t
-
;let a=l(e),s="";for(;a.length>0;){const e=m.exec(a);if(!e){s+=a;break}
-
s+=a.substring(0,e.index),
-
a=a.substring(e.index+e[0].length),"\\"===e[0][0]&&e[1]?s+="\\"+(Number(e[1])+n):(s+=e[0],
-
"("===e[0]&&t++)}return s})).map((e=>`(${e})`)).join(n)}
-
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={
-
begin:"\\\\[\\s\\S]",relevance:0},v={scope:"string",begin:"'",end:"'",
-
illegal:"\\n",contains:[S]},x={scope:"string",begin:'"',end:'"',illegal:"\\n",
-
contains:[S]},A=(e,n,t={})=>{const s=a({scope:"comment",begin:e,end:n,
-
contains:[]},t);s.contains.push({scope:"doctag",
-
begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",
-
end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0})
-
;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,}/)
-
;return s.contains.push({begin:h(/[ ]+/,"(",i,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),s
-
},k=A("//","$"),O=A("/\\*","\\*/"),R=A("#","$");var M=Object.freeze({
-
__proto__:null,APOS_STRING_MODE:v,BACKSLASH_ESCAPE:S,BINARY_NUMBER_MODE:{
-
scope:"number",begin:N,relevance:0},BINARY_NUMBER_RE:N,COMMENT:A,
-
C_BLOCK_COMMENT_MODE:O,C_LINE_COMMENT_MODE:k,C_NUMBER_MODE:{scope:"number",
-
begin:w,relevance:0},C_NUMBER_RE:w,END_SAME_AS_BEGIN:e=>Object.assign(e,{
-
"on:begin":(e,n)=>{n.data._beginMatch=e[1]},"on:end":(e,n)=>{
-
n.data._beginMatch!==e[1]&&n.ignoreMatch()}}),HASH_COMMENT_MODE:R,IDENT_RE:E,
-
MATCH_NOTHING_RE:/\b\B/,METHOD_GUARD:{begin:"\\.\\s*"+_,relevance:0},
-
NUMBER_MODE:{scope:"number",begin:y,relevance:0},NUMBER_RE:y,
-
PHRASAL_WORDS_MODE:{
-
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/
-
},QUOTE_STRING_MODE:x,REGEXP_MODE:{scope:"regexp",begin:/\/(?=[^/\n]*\/)/,
-
end:/\/[gimuy]*/,contains:[S,{begin:/\[/,end:/\]/,relevance:0,contains:[S]}]},
-
RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",
-
SHEBANG:(e={})=>{const n=/^#![ ]*\//
-
;return e.binary&&(e.begin=h(n,/.*\b/,e.binary,/\b.*/)),a({scope:"meta",begin:n,
-
end:/$/,relevance:0,"on:begin":(e,n)=>{0!==e.index&&n.ignoreMatch()}},e)},
-
TITLE_MODE:{scope:"title",begin:E,relevance:0},UNDERSCORE_IDENT_RE:_,
-
UNDERSCORE_TITLE_MODE:{scope:"title",begin:_,relevance:0}});function T(e,n){
-
"."===e.input[e.index-1]&&n.ignoreMatch()}function I(e,n){
-
void 0!==e.className&&(e.scope=e.className,delete e.className)}function C(e,n){
-
n&&e.beginKeywords&&(e.begin="\\b("+e.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",
-
e.__beforeBegin=T,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords,
-
void 0===e.relevance&&(e.relevance=0))}function B(e,n){
-
Array.isArray(e.illegal)&&(e.illegal=b(...e.illegal))}function $(e,n){
-
if(e.match){
-
if(e.begin||e.end)throw Error("begin & end are not supported with match")
-
;e.begin=e.match,delete e.match}}function L(e,n){
-
void 0===e.relevance&&(e.relevance=1)}const D=(e,n)=>{if(!e.beforeMatch)return
-
;if(e.starts)throw Error("beforeMatch cannot be used with starts")
-
;const t=Object.assign({},e);Object.keys(e).forEach((n=>{delete e[n]
-
})),e.keywords=t.keywords,e.begin=h(t.beforeMatch,d(t.begin)),e.starts={
-
relevance:0,contains:[Object.assign(t,{endsParent:!0})]
-
},e.relevance=0,delete t.beforeMatch
-
},j=["of","and","for","in","not","or","if","then","parent","list","value"]
-
;function P(e,n,t="keyword"){const a=Object.create(null)
-
;return"string"==typeof e?s(t,e.split(" ")):Array.isArray(e)?s(t,e):Object.keys(e).forEach((t=>{
-
Object.assign(a,P(e[t],n,t))})),a;function s(e,t){
-
n&&(t=t.map((e=>e.toLowerCase()))),t.forEach((n=>{const t=n.split("|")
-
;a[t[0]]=[e,z(t[0],t[1])]}))}}function z(e,n){
-
return n?Number(n):(e=>j.includes(e.toLowerCase()))(e)?0:1}const H={},U=e=>{
-
console.error(e)},F=(e,...n)=>{console.log("WARN: "+e,...n)},Z=(e,n)=>{
-
H[`${e}/${n}`]||(console.log(`Deprecated as of ${e}. ${n}`),H[`${e}/${n}`]=!0)
-
},K=Error();function G(e,n,{key:t}){let a=0;const s=e[t],i={},r={}
-
;for(let e=1;e<=n.length;e++)r[e+a]=s[e],i[e+a]=!0,a+=p(n[e-1])
-
;e[t]=r,e[t]._emit=i,e[t]._multi=!0}function q(e){(e=>{
-
e.scope&&"object"==typeof e.scope&&null!==e.scope&&(e.beginScope=e.scope,
-
delete e.scope)})(e),"string"==typeof e.beginScope&&(e.beginScope={
-
_wrap:e.beginScope}),"string"==typeof e.endScope&&(e.endScope={_wrap:e.endScope
-
}),(e=>{if(Array.isArray(e.begin)){
-
if(e.skip||e.excludeBegin||e.returnBegin)throw U("skip, excludeBegin, returnBegin not compatible with beginScope: {}"),
-
K
-
;if("object"!=typeof e.beginScope||null===e.beginScope)throw U("beginScope must be object"),
-
K;G(e,e.begin,{key:"beginScope"}),e.begin=f(e.begin,{joinWith:""})}})(e),(e=>{
-
if(Array.isArray(e.end)){
-
if(e.skip||e.excludeEnd||e.returnEnd)throw U("skip, excludeEnd, returnEnd not compatible with endScope: {}"),
-
K
-
;if("object"!=typeof e.endScope||null===e.endScope)throw U("endScope must be object"),
-
K;G(e,e.end,{key:"endScope"}),e.end=f(e.end,{joinWith:""})}})(e)}function W(e){
-
function n(n,t){
-
return RegExp(l(n),"m"+(e.case_insensitive?"i":"")+(e.unicodeRegex?"u":"")+(t?"g":""))
-
}class t{constructor(){
-
this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}
-
addRule(e,n){
-
n.position=this.position++,this.matchIndexes[this.matchAt]=n,this.regexes.push([n,e]),
-
this.matchAt+=p(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null)
-
;const e=this.regexes.map((e=>e[1]));this.matcherRe=n(f(e,{joinWith:"|"
-
}),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex
-
;const n=this.matcherRe.exec(e);if(!n)return null
-
;const t=n.findIndex(((e,n)=>n>0&&void 0!==e)),a=this.matchIndexes[t]
-
;return n.splice(0,t),Object.assign(n,a)}}class s{constructor(){
-
this.rules=[],this.multiRegexes=[],
-
this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){
-
if(this.multiRegexes[e])return this.multiRegexes[e];const n=new t
-
;return this.rules.slice(e).forEach((([e,t])=>n.addRule(e,t))),
-
n.compile(),this.multiRegexes[e]=n,n}resumingScanAtSamePosition(){
-
return 0!==this.regexIndex}considerAll(){this.regexIndex=0}addRule(e,n){
-
this.rules.push([e,n]),"begin"===n.type&&this.count++}exec(e){
-
const n=this.getMatcher(this.regexIndex);n.lastIndex=this.lastIndex
-
;let t=n.exec(e)
-
;if(this.resumingScanAtSamePosition())if(t&&t.index===this.lastIndex);else{
-
const n=this.getMatcher(0);n.lastIndex=this.lastIndex+1,t=n.exec(e)}
-
return t&&(this.regexIndex+=t.position+1,
-
this.regexIndex===this.count&&this.considerAll()),t}}
-
if(e.compilerExtensions||(e.compilerExtensions=[]),
-
e.contains&&e.contains.includes("self"))throw Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.")
-
;return e.classNameAliases=a(e.classNameAliases||{}),function t(i,r){const o=i
-
;if(i.isCompiled)return o
-
;[I,$,q,D].forEach((e=>e(i,r))),e.compilerExtensions.forEach((e=>e(i,r))),
-
i.__beforeBegin=null,[C,B,L].forEach((e=>e(i,r))),i.isCompiled=!0;let c=null
-
;return"object"==typeof i.keywords&&i.keywords.$pattern&&(i.keywords=Object.assign({},i.keywords),
-
c=i.keywords.$pattern,
-
delete i.keywords.$pattern),c=c||/\w+/,i.keywords&&(i.keywords=P(i.keywords,e.case_insensitive)),
-
o.keywordPatternRe=n(c,!0),
-
r&&(i.begin||(i.begin=/\B|\b/),o.beginRe=n(o.begin),i.end||i.endsWithParent||(i.end=/\B|\b/),
-
i.end&&(o.endRe=n(o.end)),
-
o.terminatorEnd=l(o.end)||"",i.endsWithParent&&r.terminatorEnd&&(o.terminatorEnd+=(i.end?"|":"")+r.terminatorEnd)),
-
i.illegal&&(o.illegalRe=n(i.illegal)),
-
i.contains||(i.contains=[]),i.contains=[].concat(...i.contains.map((e=>(e=>(e.variants&&!e.cachedVariants&&(e.cachedVariants=e.variants.map((n=>a(e,{
-
variants:null},n)))),e.cachedVariants?e.cachedVariants:X(e)?a(e,{
-
starts:e.starts?a(e.starts):null
-
}):Object.isFrozen(e)?a(e):e))("self"===e?i:e)))),i.contains.forEach((e=>{t(e,o)
-
})),i.starts&&t(i.starts,r),o.matcher=(e=>{const n=new s
-
;return e.contains.forEach((e=>n.addRule(e.begin,{rule:e,type:"begin"
-
}))),e.terminatorEnd&&n.addRule(e.terminatorEnd,{type:"end"
-
}),e.illegal&&n.addRule(e.illegal,{type:"illegal"}),n})(o),o}(e)}function X(e){
-
return!!e&&(e.endsWithParent||X(e.starts))}class V extends Error{
-
constructor(e,n){super(e),this.name="HTMLInjectionError",this.html=n}}
-
const J=t,Q=a,Y=Symbol("nomatch"),ee=t=>{
-
const a=Object.create(null),s=Object.create(null),i=[];let r=!0
-
;const o="Could not find the language '{}', did you forget to load/include a language module?",l={
-
disableAutodetect:!0,name:"Plain text",contains:[]};let p={
-
ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i,
-
languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",
-
cssSelector:"pre code",languages:null,__emitter:c};function m(e){
-
return p.noHighlightRe.test(e)}function f(e,n,t){let a="",s=""
-
;"object"==typeof n?(a=e,
-
t=n.ignoreIllegals,s=n.language):(Z("10.7.0","highlight(lang, code, ...args) has been deprecated."),
-
Z("10.7.0","Please use highlight(code, options) instead.\nhttps://github.com/highlightjs/highlight.js/issues/2277"),
-
s=e,a=n),void 0===t&&(t=!0);const i={code:a,language:s};A("before:highlight",i)
-
;const r=i.result?i.result:E(i.language,i.code,t)
-
;return r.code=i.code,A("after:highlight",r),r}function E(e,t,s,i){
-
const c=Object.create(null);function l(){if(!A.keywords)return void O.addText(R)
-
;let e=0;A.keywordPatternRe.lastIndex=0;let n=A.keywordPatternRe.exec(R),t=""
-
;for(;n;){t+=R.substring(e,n.index)
-
;const s=N.case_insensitive?n[0].toLowerCase():n[0],i=(a=s,A.keywords[a]);if(i){
-
const[e,a]=i
-
;if(O.addText(t),t="",c[s]=(c[s]||0)+1,c[s]<=7&&(M+=a),e.startsWith("_"))t+=n[0];else{
-
const t=N.classNameAliases[e]||e;g(n[0],t)}}else t+=n[0]
-
;e=A.keywordPatternRe.lastIndex,n=A.keywordPatternRe.exec(R)}var a
-
;t+=R.substring(e),O.addText(t)}function d(){null!=A.subLanguage?(()=>{
-
if(""===R)return;let e=null;if("string"==typeof A.subLanguage){
-
if(!a[A.subLanguage])return void O.addText(R)
-
;e=E(A.subLanguage,R,!0,k[A.subLanguage]),k[A.subLanguage]=e._top
-
}else e=_(R,A.subLanguage.length?A.subLanguage:null)
-
;A.relevance>0&&(M+=e.relevance),O.__addSublanguage(e._emitter,e.language)
-
})():l(),R=""}function g(e,n){
-
""!==e&&(O.startScope(n),O.addText(e),O.endScope())}function u(e,n){let t=1
-
;const a=n.length-1;for(;t<=a;){if(!e._emit[t]){t++;continue}
-
const a=N.classNameAliases[e[t]]||e[t],s=n[t];a?g(s,a):(R=s,l(),R=""),t++}}
-
function h(e,n){
-
return e.scope&&"string"==typeof e.scope&&O.openNode(N.classNameAliases[e.scope]||e.scope),
-
e.beginScope&&(e.beginScope._wrap?(g(R,N.classNameAliases[e.beginScope._wrap]||e.beginScope._wrap),
-
R=""):e.beginScope._multi&&(u(e.beginScope,n),R="")),A=Object.create(e,{parent:{
-
value:A}}),A}function b(e,t,a){let s=((e,n)=>{const t=e&&e.exec(n)
-
;return t&&0===t.index})(e.endRe,a);if(s){if(e["on:end"]){const a=new n(e)
-
;e["on:end"](t,a),a.isMatchIgnored&&(s=!1)}if(s){
-
for(;e.endsParent&&e.parent;)e=e.parent;return e}}
-
if(e.endsWithParent)return b(e.parent,t,a)}function m(e){
-
return 0===A.matcher.regexIndex?(R+=e[0],1):(C=!0,0)}function f(e){
-
const n=e[0],a=t.substring(e.index),s=b(A,e,a);if(!s)return Y;const i=A
-
;A.endScope&&A.endScope._wrap?(d(),
-
g(n,A.endScope._wrap)):A.endScope&&A.endScope._multi?(d(),
-
u(A.endScope,e)):i.skip?R+=n:(i.returnEnd||i.excludeEnd||(R+=n),
-
d(),i.excludeEnd&&(R=n));do{
-
A.scope&&O.closeNode(),A.skip||A.subLanguage||(M+=A.relevance),A=A.parent
-
}while(A!==s.parent);return s.starts&&h(s.starts,e),i.returnEnd?0:n.length}
-
let y={};function w(a,i){const o=i&&i[0];if(R+=a,null==o)return d(),0
-
;if("begin"===y.type&&"end"===i.type&&y.index===i.index&&""===o){
-
if(R+=t.slice(i.index,i.index+1),!r){const n=Error(`0 width match regex (${e})`)
-
;throw n.languageName=e,n.badRule=y.rule,n}return 1}
-
if(y=i,"begin"===i.type)return(e=>{
-
const t=e[0],a=e.rule,s=new n(a),i=[a.__beforeBegin,a["on:begin"]]
-
;for(const n of i)if(n&&(n(e,s),s.isMatchIgnored))return m(t)
-
;return a.skip?R+=t:(a.excludeBegin&&(R+=t),
-
d(),a.returnBegin||a.excludeBegin||(R=t)),h(a,e),a.returnBegin?0:t.length})(i)
-
;if("illegal"===i.type&&!s){
-
const e=Error('Illegal lexeme "'+o+'" for mode "'+(A.scope||"<unnamed>")+'"')
-
;throw e.mode=A,e}if("end"===i.type){const e=f(i);if(e!==Y)return e}
-
if("illegal"===i.type&&""===o)return i.index===t.length||(R+="\n"),1
-
;if(I>1e5&&I>3*i.index)throw Error("potential infinite loop, way more iterations than matches")
-
;return R+=o,o.length}const N=S(e)
-
;if(!N)throw U(o.replace("{}",e)),Error('Unknown language: "'+e+'"')
-
;const v=W(N);let x="",A=i||v;const k={},O=new p.__emitter(p);(()=>{const e=[]
-
;for(let n=A;n!==N;n=n.parent)n.scope&&e.unshift(n.scope)
-
;e.forEach((e=>O.openNode(e)))})();let R="",M=0,T=0,I=0,C=!1;try{
-
if(N.__emitTokens)N.__emitTokens(t,O);else{for(A.matcher.considerAll();;){
-
I++,C?C=!1:A.matcher.considerAll(),A.matcher.lastIndex=T
-
;const e=A.matcher.exec(t);if(!e)break;const n=w(t.substring(T,e.index),e)
-
;T=e.index+n}w(t.substring(T))}return O.finalize(),x=O.toHTML(),{language:e,
-
value:x,relevance:M,illegal:!1,_emitter:O,_top:A}}catch(n){
-
if(n.message&&n.message.includes("Illegal"))return{language:e,value:J(t),
-
illegal:!0,relevance:0,_illegalBy:{message:n.message,index:T,
-
context:t.slice(T-100,T+100),mode:n.mode,resultSoFar:x},_emitter:O};if(r)return{
-
language:e,value:J(t),illegal:!1,relevance:0,errorRaised:n,_emitter:O,_top:A}
-
;throw n}}function _(e,n){n=n||p.languages||Object.keys(a);const t=(e=>{
-
const n={value:J(e),illegal:!1,relevance:0,_top:l,_emitter:new p.__emitter(p)}
-
;return n._emitter.addText(e),n})(e),s=n.filter(S).filter(x).map((n=>E(n,e,!1)))
-
;s.unshift(t);const i=s.sort(((e,n)=>{
-
if(e.relevance!==n.relevance)return n.relevance-e.relevance
-
;if(e.language&&n.language){if(S(e.language).supersetOf===n.language)return 1
-
;if(S(n.language).supersetOf===e.language)return-1}return 0})),[r,o]=i,c=r
-
;return c.secondBest=o,c}function y(e){let n=null;const t=(e=>{
-
let n=e.className+" ";n+=e.parentNode?e.parentNode.className:""
-
;const t=p.languageDetectRe.exec(n);if(t){const n=S(t[1])
-
;return n||(F(o.replace("{}",t[1])),
-
F("Falling back to no-highlight mode for this block.",e)),n?t[1]:"no-highlight"}
-
return n.split(/\s+/).find((e=>m(e)||S(e)))})(e);if(m(t))return
-
;if(A("before:highlightElement",{el:e,language:t
-
}),e.dataset.highlighted)return void console.log("Element previously highlighted. To highlight again, first unset `dataset.highlighted`.",e)
-
;if(e.children.length>0&&(p.ignoreUnescapedHTML||(console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."),
-
console.warn("https://github.com/highlightjs/highlight.js/wiki/security"),
-
console.warn("The element with unescaped HTML:"),
-
console.warn(e)),p.throwUnescapedHTML))throw new V("One of your code blocks includes unescaped HTML.",e.innerHTML)
-
;n=e;const a=n.textContent,i=t?f(a,{language:t,ignoreIllegals:!0}):_(a)
-
;e.innerHTML=i.value,e.dataset.highlighted="yes",((e,n,t)=>{const a=n&&s[n]||t
-
;e.classList.add("hljs"),e.classList.add("language-"+a)
-
})(e,t,i.language),e.result={language:i.language,re:i.relevance,
-
relevance:i.relevance},i.secondBest&&(e.secondBest={
-
language:i.secondBest.language,relevance:i.secondBest.relevance
-
}),A("after:highlightElement",{el:e,result:i,text:a})}let w=!1;function N(){
-
if("loading"===document.readyState)return w||window.addEventListener("DOMContentLoaded",(()=>{
-
N()}),!1),void(w=!0);document.querySelectorAll(p.cssSelector).forEach(y)}
-
function S(e){return e=(e||"").toLowerCase(),a[e]||a[s[e]]}
-
function v(e,{languageName:n}){"string"==typeof e&&(e=[e]),e.forEach((e=>{
-
s[e.toLowerCase()]=n}))}function x(e){const n=S(e)
-
;return n&&!n.disableAutodetect}function A(e,n){const t=e;i.forEach((e=>{
-
e[t]&&e[t](n)}))}Object.assign(t,{highlight:f,highlightAuto:_,highlightAll:N,
-
highlightElement:y,
-
highlightBlock:e=>(Z("10.7.0","highlightBlock will be removed entirely in v12.0"),
-
Z("10.7.0","Please use highlightElement now."),y(e)),configure:e=>{p=Q(p,e)},
-
initHighlighting:()=>{
-
N(),Z("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")},
-
initHighlightingOnLoad:()=>{
-
N(),Z("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.")
-
},registerLanguage:(e,n)=>{let s=null;try{s=n(t)}catch(n){
-
if(U("Language definition for '{}' could not be registered.".replace("{}",e)),
-
!r)throw n;U(n),s=l}
-
s.name||(s.name=e),a[e]=s,s.rawDefinition=n.bind(null,t),s.aliases&&v(s.aliases,{
-
languageName:e})},unregisterLanguage:e=>{delete a[e]
-
;for(const n of Object.keys(s))s[n]===e&&delete s[n]},
-
listLanguages:()=>Object.keys(a),getLanguage:S,registerAliases:v,
-
autoDetection:x,inherit:Q,addPlugin:e=>{(e=>{
-
e["before:highlightBlock"]&&!e["before:highlightElement"]&&(e["before:highlightElement"]=n=>{
-
e["before:highlightBlock"](Object.assign({block:n.el},n))
-
}),e["after:highlightBlock"]&&!e["after:highlightElement"]&&(e["after:highlightElement"]=n=>{
-
e["after:highlightBlock"](Object.assign({block:n.el},n))})})(e),i.push(e)},
-
removePlugin:e=>{const n=i.indexOf(e);-1!==n&&i.splice(n,1)}}),t.debugMode=()=>{
-
r=!1},t.safeMode=()=>{r=!0},t.versionString="11.11.1",t.regex={concat:h,
-
lookahead:d,either:b,optional:u,anyNumberOfTimes:g}
-
;for(const n in M)"object"==typeof M[n]&&e(M[n]);return Object.assign(t,M),t
-
},ne=ee({});ne.newInstance=()=>ee({})
-
;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)
-
;var de=Object.freeze({__proto__:null,grmr_bash:e=>{const n=e.regex,t={},a={
-
begin:/\$\{/,end:/\}/,contains:["self",{begin:/:-/,contains:[t]}]}
-
;Object.assign(t,{className:"variable",variants:[{
-
begin:n.concat(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},a]});const s={
-
className:"subst",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]
-
},i=e.inherit(e.COMMENT(),{match:[/(^|\s)/,/#.*$/],scope:{2:"comment"}}),r={
-
begin:/<<-?\s*(?=\w+)/,starts:{contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/,
-
end:/(\w+)/,className:"string"})]}},o={className:"string",begin:/"/,end:/"/,
-
contains:[e.BACKSLASH_ESCAPE,t,s]};s.contains.push(o);const c={begin:/\$?\(\(/,
-
end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},e.NUMBER_MODE,t]
-
},l=e.SHEBANG({binary:"(fish|bash|zsh|sh|csh|ksh|tcsh|dash|scsh)",relevance:10
-
}),d={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,
-
contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0};return{
-
name:"Bash",aliases:["sh","zsh"],keywords:{$pattern:/\b[a-z][a-z0-9._-]+\b/,
-
keyword:["if","then","else","elif","fi","time","for","while","until","in","do","done","case","esac","coproc","function","select"],
-
literal:["true","false"],
-
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"]
-
},contains:[l,e.SHEBANG(),d,c,i,r,{match:/(\/[a-z._-]+)+/},o,{match:/\\"/},{
-
className:"string",begin:/'/,end:/'/},{match:/\\'/},t]}},grmr_ini:e=>{
-
const n=e.regex,t={className:"number",relevance:0,variants:[{
-
begin:/([+-]+)?[\d]+_[\d_]+/},{begin:e.NUMBER_RE}]},a=e.COMMENT();a.variants=[{
-
begin:/;/,end:/$/},{begin:/#/,end:/$/}];const s={className:"variable",
-
variants:[{begin:/\$[\w\d"][\w\d_]*/},{begin:/\$\{(.*?)\}/}]},i={
-
className:"literal",begin:/\bon|off|true|false|yes|no\b/},r={className:"string",
-
contains:[e.BACKSLASH_ESCAPE],variants:[{begin:"'''",end:"'''",relevance:10},{
-
begin:'"""',end:'"""',relevance:10},{begin:'"',end:'"'},{begin:"'",end:"'"}]
-
},o={begin:/\[/,end:/\]/,contains:[a,i,s,r,t,"self"],relevance:0
-
},c=n.either(/[A-Za-z0-9_-]+/,/"(\\"|[^"])*"/,/'[^']*'/);return{
-
name:"TOML, also INI",aliases:["toml"],case_insensitive:!0,illegal:/\S/,
-
contains:[a,{className:"section",begin:/\[+/,end:/\]+/},{
-
begin:n.concat(c,"(\\s*\\.\\s*",c,")*",n.lookahead(/\s*=\s*[^#\s]/)),
-
className:"attr",starts:{end:/$/,contains:[a,o,i,s,r,t]}}]}},
-
grmr_javascript:e=>{const n=e.regex,t=te,a={begin:/<[A-Za-z0-9\\._:-]+/,
-
end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(e,n)=>{
-
const t=e[0].length+e.index,a=e.input[t]
-
;if("<"===a||","===a)return void n.ignoreMatch();let s
-
;">"===a&&(((e,{after:n})=>{const t="</"+e[0].slice(1)
-
;return-1!==e.input.indexOf(t,n)})(e,{after:t})||n.ignoreMatch())
-
;const i=e.input.substring(t)
-
;((s=i.match(/^\s*=/))||(s=i.match(/^\s+extends\s+/))&&0===s.index)&&n.ignoreMatch()
-
}},s={$pattern:te,keyword:ae,literal:se,built_in:le,"variable.language":ce
-
},i="[0-9](_?[0-9])*",r=`\\.(${i})`,o="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",c={
-
className:"number",variants:[{
-
begin:`(\\b(${o})((${r})|\\.)?|(${r}))[eE][+-]?(${i})\\b`},{
-
begin:`\\b(${o})\\b((${r})\\b|\\.)?|(${r})\\b`},{
-
begin:"\\b(0|[1-9](_?[0-9])*)n\\b"},{
-
begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{
-
begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{
-
begin:"\\b0[0-7]+n?\\b"}],relevance:0},l={className:"subst",begin:"\\$\\{",
-
end:"\\}",keywords:s,contains:[]},d={begin:".?html`",end:"",starts:{end:"`",
-
returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,l],subLanguage:"xml"}},g={
-
begin:".?css`",end:"",starts:{end:"`",returnEnd:!1,
-
contains:[e.BACKSLASH_ESCAPE,l],subLanguage:"css"}},u={begin:".?gql`",end:"",
-
starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,l],
-
subLanguage:"graphql"}},h={className:"string",begin:"`",end:"`",
-
contains:[e.BACKSLASH_ESCAPE,l]},b={className:"comment",
-
variants:[e.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{
-
begin:"(?=@[A-Za-z]+)",relevance:0,contains:[{className:"doctag",
-
begin:"@[A-Za-z]+"},{className:"type",begin:"\\{",end:"\\}",excludeEnd:!0,
-
excludeBegin:!0,relevance:0},{className:"variable",begin:t+"(?=\\s*(-)|$)",
-
endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]
-
}),e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE]
-
},p=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,d,g,u,h,{match:/\$\d+/},c]
-
;l.contains=p.concat({begin:/\{/,end:/\}/,keywords:s,contains:["self"].concat(p)
-
});const m=[].concat(b,l.contains),f=m.concat([{begin:/(\s*)\(/,end:/\)/,
-
keywords:s,contains:["self"].concat(m)}]),E={className:"params",begin:/(\s*)\(/,
-
end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:s,contains:f},_={variants:[{
-
match:[/class/,/\s+/,t,/\s+/,/extends/,/\s+/,n.concat(t,"(",n.concat(/\./,t),")*")],
-
scope:{1:"keyword",3:"title.class",5:"keyword",7:"title.class.inherited"}},{
-
match:[/class/,/\s+/,t],scope:{1:"keyword",3:"title.class"}}]},y={relevance:0,
-
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]*)*/),
-
className:"title.class",keywords:{_:[...ie,...re]}},w={variants:[{
-
match:[/function/,/\s+/,t,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],
-
className:{1:"keyword",3:"title.function"},label:"func.def",contains:[E],
-
illegal:/%/},N={
-
match:n.concat(/\b/,(S=[...oe,"super","import"].map((e=>e+"\\s*\\(")),
-
n.concat("(?!",S.join("|"),")")),t,n.lookahead(/\s*\(/)),
-
className:"title.function",relevance:0};var S;const v={
-
begin:n.concat(/\./,n.lookahead(n.concat(t,/(?![0-9A-Za-z$_(])/))),end:t,
-
excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},x={
-
match:[/get|set/,/\s+/,t,/(?=\()/],className:{1:"keyword",3:"title.function"},
-
contains:[{begin:/\(\)/},E]
-
},A="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+e.UNDERSCORE_IDENT_RE+")\\s*=>",k={
-
match:[/const|var|let/,/\s+/,t,/\s*/,/=\s*/,/(async\s*)?/,n.lookahead(A)],
-
keywords:"async",className:{1:"keyword",3:"title.function"},contains:[E]}
-
;return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:s,exports:{
-
PARAMS_CONTAINS:f,CLASS_REFERENCE:y},illegal:/#(?![$_A-z])/,
-
contains:[e.SHEBANG({label:"shebang",binary:"node",relevance:5}),{
-
label:"use_strict",className:"meta",relevance:10,
-
begin:/^\s*['"]use (strict|asm)['"]/
-
},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,d,g,u,h,b,{match:/\$\d+/},c,y,{
-
scope:"attr",match:t+n.lookahead(":"),relevance:0},k,{
-
begin:"("+e.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",
-
keywords:"return throw case",relevance:0,contains:[b,e.REGEXP_MODE,{
-
className:"function",begin:A,returnBegin:!0,end:"\\s*=>",contains:[{
-
className:"params",variants:[{begin:e.UNDERSCORE_IDENT_RE,relevance:0},{
-
className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/,
-
excludeBegin:!0,excludeEnd:!0,keywords:s,contains:f}]}]},{begin:/,/,relevance:0
-
},{match:/\s+/,relevance:0},{variants:[{begin:"<>",end:"</>"},{
-
match:/<[A-Za-z0-9\\._:-]+\s*\/>/},{begin:a.begin,
-
"on:begin":a.isTrulyOpeningTag,end:a.end}],subLanguage:"xml",contains:[{
-
begin:a.begin,end:a.end,skip:!0,contains:["self"]}]}]},w,{
-
beginKeywords:"while if switch catch for"},{
-
begin:"\\b(?!function)"+e.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",
-
returnBegin:!0,label:"func.def",contains:[E,e.inherit(e.TITLE_MODE,{begin:t,
-
className:"title.function"})]},{match:/\.\.\./,relevance:0},v,{match:"\\$"+t,
-
relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},
-
contains:[E]},N,{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,
-
className:"variable.constant"},_,x,{match:/\$[(.]/}]}},grmr_makefile:e=>{
-
const n={className:"variable",variants:[{
-
begin:"\\$\\("+e.UNDERSCORE_IDENT_RE+"\\)",contains:[e.BACKSLASH_ESCAPE]},{
-
begin:/\$[@%<?\^\+\*]/}]},t={className:"string",begin:/"/,end:/"/,
-
contains:[e.BACKSLASH_ESCAPE,n]},a={className:"variable",begin:/\$\([\w-]+\s/,
-
end:/\)/,keywords:{
-
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"
-
},contains:[n,t]},s={begin:"^"+e.UNDERSCORE_IDENT_RE+"\\s*(?=[:+?]?=)"},i={
-
className:"section",begin:/^[^\s]+:/,end:/$/,contains:[n]};return{
-
name:"Makefile",aliases:["mk","mak","make"],keywords:{$pattern:/[\w-]+/,
-
keyword:"define endef undefine ifdef ifndef ifeq ifneq else endif include -include sinclude override export unexport private vpath"
-
},contains:[e.HASH_COMMENT_MODE,n,t,a,s,{className:"meta",begin:/^\.PHONY:/,
-
end:/$/,keywords:{$pattern:/[\.\w]+/,keyword:".PHONY"}},i]}},grmr_nix:e=>{
-
const n=e.regex,t={
-
keyword:["assert","else","if","in","inherit","let","or","rec","then","with"],
-
literal:["true","false","null"],
-
built_in:["abort","baseNameOf","builtins","derivation","derivationStrict","dirOf","fetchGit","fetchMercurial","fetchTarball","fetchTree","fromTOML","import","isNull","map","placeholder","removeAttrs","scopedImport","throw","toString"]
-
},a={scope:"built_in",
-
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))),
-
relevance:10},s="[A-Za-z_][A-Za-z0-9_'-]*",i={scope:"symbol",
-
match:RegExp(`<${s}(/${s})*>`)},r="[A-Za-z0-9_\\+\\.-]+",o={scope:"symbol",
-
match:RegExp(`(\\.\\.|\\.|~)?/(${r})?(/${r})*(?=[\\s;])`)
-
},c=n.either("==","=","\\+\\+","\\+","<=","<\\|","<",">=",">","->","//","/","!=","!","\\|\\|","\\|>","\\?","\\*","&&"),l={
-
scope:"operator",match:n.concat(c,/(?!-)/),relevance:0},d={scope:"number",
-
match:RegExp(e.NUMBER_RE+"(?!-)"),relevance:0},g={variants:[{scope:"operator",
-
beforeMatch:/\s/,begin:/-(?!>)/},{begin:[RegExp(""+e.NUMBER_RE),/-/,/(?!>)/],
-
beginScope:{1:"number",2:"operator"}},{begin:[c,/-/,/(?!>)/],beginScope:{
-
1:"operator",2:"operator"}}],relevance:0},u={beforeMatch:/(^|\{|;)\s*/,
-
begin:RegExp(`${s}(\\.${s})*\\s*=(?!=)`),returnBegin:!0,relevance:0,contains:[{
-
scope:"attr",match:RegExp(`${s}(\\.${s})*(?=\\s*=)`),relevance:.2}]},h={
-
scope:"subst",begin:/\$\{/,end:/\}/,keywords:t},b={scope:"char.escape",
-
match:/\\(?!\$)./},p={scope:"string",variants:[{begin:"''",end:"''",contains:[{
-
scope:"char.escape",match:/''\$/},h,{scope:"char.escape",match:/'''/},b]},{
-
begin:'"',end:'"',contains:[{scope:"char.escape",match:/\\\$/},h,b]}]},m={
-
scope:"params",match:RegExp(s+"\\s*:(?=\\s)")
-
},f=[d,e.HASH_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.COMMENT(/\/\*\*(?!\/)/,/\*\//,{
-
subLanguage:"markdown",relevance:0}),a,p,i,o,m,u,g,l];return h.contains=f,{
-
name:"Nix",aliases:["nixos"],keywords:t,contains:f.concat([{scope:"meta.prompt",
-
match:/^nix-repl>(?=\s)/,relevance:10},{scope:"meta",beforeMatch:/\s+/,
-
begin:/:([a-z]+|\?)/}])}},grmr_python:e=>{
-
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={
-
$pattern:/[A-Za-z]\w+|__\w+__/,keyword:a,
-
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"],
-
literal:["__debug__","Ellipsis","False","None","NotImplemented","True"],
-
type:["Any","Callable","Coroutine","Dict","List","Literal","Generic","Optional","Sequence","Set","Tuple","Type","Union"]
-
},i={className:"meta",begin:/^(>>>|\.\.\.) /},r={className:"subst",begin:/\{/,
-
end:/\}/,keywords:s,illegal:/#/},o={begin:/\{\{/,relevance:0},c={
-
className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{
-
begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,end:/'''/,
-
contains:[e.BACKSLASH_ESCAPE,i],relevance:10},{
-
begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?"""/,end:/"""/,
-
contains:[e.BACKSLASH_ESCAPE,i],relevance:10},{
-
begin:/([fF][rR]|[rR][fF]|[fF])'''/,end:/'''/,
-
contains:[e.BACKSLASH_ESCAPE,i,o,r]},{begin:/([fF][rR]|[rR][fF]|[fF])"""/,
-
end:/"""/,contains:[e.BACKSLASH_ESCAPE,i,o,r]},{begin:/([uU]|[rR])'/,end:/'/,
-
relevance:10},{begin:/([uU]|[rR])"/,end:/"/,relevance:10},{
-
begin:/([bB]|[bB][rR]|[rR][bB])'/,end:/'/},{begin:/([bB]|[bB][rR]|[rR][bB])"/,
-
end:/"/},{begin:/([fF][rR]|[rR][fF]|[fF])'/,end:/'/,
-
contains:[e.BACKSLASH_ESCAPE,o,r]},{begin:/([fF][rR]|[rR][fF]|[fF])"/,end:/"/,
-
contains:[e.BACKSLASH_ESCAPE,o,r]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]
-
},l="[0-9](_?[0-9])*",d=`(\\b(${l}))?\\.(${l})|\\b(${l})\\.`,g="\\b|"+a.join("|"),u={
-
className:"number",relevance:0,variants:[{
-
begin:`(\\b(${l})|(${d}))[eE][+-]?(${l})[jJ]?(?=${g})`},{begin:`(${d})[jJ]?`},{
-
begin:`\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${g})`},{
-
begin:`\\b0[bB](_?[01])+[lL]?(?=${g})`},{begin:`\\b0[oO](_?[0-7])+[lL]?(?=${g})`
-
},{begin:`\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${g})`},{begin:`\\b(${l})[jJ](?=${g})`
-
}]},h={className:"comment",begin:n.lookahead(/# type:/),end:/$/,keywords:s,
-
contains:[{begin:/# type:/},{begin:/#/,end:/\b\B/,endsWithParent:!0}]},b={
-
className:"params",variants:[{className:"",begin:/\(\s*\)/,skip:!0},{begin:/\(/,
-
end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:s,
-
contains:["self",i,u,c,e.HASH_COMMENT_MODE]}]};return r.contains=[c,u,i],{
-
name:"Python",aliases:["py","gyp","ipython"],unicodeRegex:!0,keywords:s,
-
illegal:/(<\/|\?)|=>/,contains:[i,u,{scope:"variable.language",match:/\bself\b/
-
},{beginKeywords:"if",relevance:0},{match:/\bor\b/,scope:"keyword"
-
},c,h,e.HASH_COMMENT_MODE,{match:[/\bdef/,/\s+/,t],scope:{1:"keyword",
-
3:"title.function"},contains:[b]},{variants:[{
-
match:[/\bclass/,/\s+/,t,/\s*/,/\(\s*/,t,/\s*\)/]},{match:[/\bclass/,/\s+/,t]}],
-
scope:{1:"keyword",3:"title.class",6:"title.class.inherited"}},{
-
className:"meta",begin:/^[\t ]*@/,end:/(?=#)|$/,contains:[u,b,c]}]}},
-
grmr_python_repl:e=>({aliases:["pycon"],contains:[{className:"meta.prompt",
-
starts:{end:/ |$/,starts:{end:"$",subLanguage:"python"}},variants:[{
-
begin:/^>>>(?=[ ]|$)/},{begin:/^\.\.\.(?=[ ]|$)/}]}]}),grmr_rust:e=>{
-
const n=e.regex,t=/(r#)?/,a=n.concat(t,e.UNDERSCORE_IDENT_RE),s=n.concat(t,e.IDENT_RE),i={
-
className:"title.function.invoke",relevance:0,
-
begin:n.concat(/\b/,/(?!let|for|while|if|else|match\b)/,s,n.lookahead(/\s*\(/))
-
},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"]
-
;return{name:"Rust",aliases:["rs"],keywords:{$pattern:e.IDENT_RE+"!?",type:c,
-
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"],
-
literal:["true","false","Some","None","Ok","Err"],built_in:o},illegal:"</",
-
contains:[e.C_LINE_COMMENT_MODE,e.COMMENT("/\\*","\\*/",{contains:["self"]
-
}),e.inherit(e.QUOTE_STRING_MODE,{begin:/b?"/,illegal:null}),{
-
className:"symbol",begin:/'[a-zA-Z_][a-zA-Z0-9_]*(?!')/},{scope:"string",
-
variants:[{begin:/b?r(#*)"(.|\n)*?"\1(?!#)/},{begin:/b?'/,end:/'/,contains:[{
-
scope:"char.escape",match:/\\('|\w|x\w{2}|u\w{4}|U\w{8})/}]}]},{
-
className:"number",variants:[{begin:"\\b0b([01_]+)"+r},{begin:"\\b0o([0-7_]+)"+r
-
},{begin:"\\b0x([A-Fa-f0-9_]+)"+r},{
-
begin:"\\b(\\d[\\d_]*(\\.[0-9_]+)?([eE][+-]?[0-9_]+)?)"+r}],relevance:0},{
-
begin:[/fn/,/\s+/,a],className:{1:"keyword",3:"title.function"}},{
-
className:"meta",begin:"#!?\\[",end:"\\]",contains:[{className:"string",
-
begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE]}]},{
-
begin:[/let/,/\s+/,/(?:mut\s+)?/,a],className:{1:"keyword",3:"keyword",
-
4:"variable"}},{begin:[/for/,/\s+/,a,/\s+/,/in/],className:{1:"keyword",
-
3:"variable",5:"keyword"}},{begin:[/type/,/\s+/,a],className:{1:"keyword",
-
3:"title.class"}},{begin:[/(?:trait|enum|struct|union|impl|for)/,/\s+/,a],
-
className:{1:"keyword",3:"title.class"}},{begin:e.IDENT_RE+"::",keywords:{
-
keyword:"Self",built_in:o,type:c}},{className:"punctuation",begin:"->"},i]}},
-
grmr_shell:e=>({name:"Shell Session",aliases:["console","shellsession"],
-
contains:[{className:"meta.prompt",begin:/^\s{0,3}[/~\w\d[\]()@-]*[>%$#][ ]?/,
-
starts:{end:/[^\\](?=\s*$)/,subLanguage:"bash"}}]})});const ge=ne
-
;for(const e of Object.keys(de)){const n=e.replace("grmr_","").replace("_","-")
-
;ge.registerLanguage(n,de[e])}return ge}()
-
;"object"==typeof exports&&"undefined"!=typeof module&&(module.exports=hljs);
+164 -669
flake.lock
···
{
"nodes": {
-
"arion": {
+
"attic": {
"inputs": {
-
"flake-parts": "flake-parts",
-
"haskell-flake": "haskell-flake",
+
"crane": "crane",
+
"flake-compat": "flake-compat",
+
"flake-utils": "flake-utils",
"nixpkgs": [
"nixpkgs"
-
]
+
],
+
"nixpkgs-stable": "nixpkgs-stable"
},
"locked": {
-
"lastModified": 1759632323,
-
"narHash": "sha256-TzLTfXxhOkR/8oOoVEAYQWb81ADGHdKsQXGicC7kR+M=",
-
"owner": "hercules-ci",
-
"repo": "arion",
-
"rev": "24658a03be2d1a6e1e02c01524775d960a82309c",
+
"lastModified": 1692225040,
+
"narHash": "sha256-jbQNvkgWGioiC6S39dZVyn6us8p/DlEvm5hQKEYkzDU=",
+
"owner": "zhaofengli",
+
"repo": "attic",
+
"rev": "b43d12082e34bceb26038bdad0438fd68804cfcd",
"type": "github"
},
"original": {
-
"owner": "hercules-ci",
-
"repo": "arion",
+
"owner": "zhaofengli",
+
"repo": "attic",
"type": "github"
}
},
-
"catppuccin": {
+
"crane": {
"inputs": {
-
"nixpkgs": "nixpkgs"
+
"flake-compat": [
+
"attic",
+
"flake-compat"
+
],
+
"flake-utils": [
+
"attic",
+
"flake-utils"
+
],
+
"nixpkgs": [
+
"attic",
+
"nixpkgs"
+
],
+
"rust-overlay": "rust-overlay"
},
"locked": {
-
"lastModified": 1754766435,
-
"narHash": "sha256-DT8CQoqV2haX+Fo16WXAt9gKCSXOZH9ZfnV++Br+qcM=",
-
"owner": "catppuccin",
-
"repo": "nix",
-
"rev": "e339d6d822fa81c39d1ab89694b4ee2cfc830c9a",
+
"lastModified": 1677892403,
+
"narHash": "sha256-/Wi0L1spSWLFj+UQxN3j0mPYMoc7ZoAujpUF/juFVII=",
+
"owner": "ipetkov",
+
"repo": "crane",
+
"rev": "105e27adb70a9890986b6d543a67761cbc1964a2",
"type": "github"
},
"original": {
-
"owner": "catppuccin",
-
"ref": "release-25.05",
-
"repo": "nix",
+
"owner": "ipetkov",
+
"repo": "crane",
"type": "github"
}
},
-
"crane": {
+
"crane_2": {
+
"inputs": {
+
"flake-compat": [
+
"lanzaboote",
+
"flake-compat"
+
],
+
"flake-utils": [
+
"lanzaboote",
+
"flake-utils"
+
],
+
"nixpkgs": [
+
"lanzaboote",
+
"nixpkgs"
+
],
+
"rust-overlay": [
+
"lanzaboote",
+
"rust-overlay"
+
]
+
},
"locked": {
-
"lastModified": 1731098351,
-
"narHash": "sha256-HQkYvKvaLQqNa10KEFGgWHfMAbWBfFp+4cAgkut+NNE=",
+
"lastModified": 1681177078,
+
"narHash": "sha256-ZNIjBDou2GOabcpctiQykEQVkI8BDwk7TyvlWlI4myE=",
"owner": "ipetkov",
"repo": "crane",
-
"rev": "ef80ead953c1b28316cc3f8613904edc2eb90c28",
+
"rev": "0c9f468ff00576577d83f5019a66c557ede5acf6",
"type": "github"
},
"original": {
···
"flake-compat": {
"flake": false,
"locked": {
-
"lastModified": 1747046372,
-
"narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=",
+
"lastModified": 1673956053,
+
"narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=",
"owner": "edolstra",
"repo": "flake-compat",
-
"rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885",
+
"rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9",
"type": "github"
},
"original": {
···
"flake-compat_2": {
"flake": false,
"locked": {
-
"lastModified": 1696426674,
-
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
+
"lastModified": 1673956053,
+
"narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=",
"owner": "edolstra",
"repo": "flake-compat",
-
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
+
"rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9",
"type": "github"
},
"original": {
···
"flake-compat_3": {
"flake": false,
"locked": {
-
"lastModified": 1747046372,
-
"narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=",
+
"lastModified": 1673956053,
+
"narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=",
"owner": "edolstra",
"repo": "flake-compat",
-
"rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885",
+
"rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9",
"type": "github"
},
"original": {
···
"type": "github"
}
},
-
"flake-compat_4": {
-
"flake": false,
-
"locked": {
-
"lastModified": 1751685974,
-
"narHash": "sha256-NKw96t+BgHIYzHUjkTK95FqYRVKB8DHpVhefWSz/kTw=",
-
"rev": "549f2762aebeff29a2e5ece7a7dc0f955281a1d1",
-
"type": "tarball",
-
"url": "https://git.lix.systems/api/v1/repos/lix-project/flake-compat/archive/549f2762aebeff29a2e5ece7a7dc0f955281a1d1.tar.gz?rev=549f2762aebeff29a2e5ece7a7dc0f955281a1d1"
-
},
-
"original": {
-
"type": "tarball",
-
"url": "https://git.lix.systems/lix-project/flake-compat/archive/main.tar.gz"
-
}
-
},
"flake-parts": {
"inputs": {
"nixpkgs-lib": [
-
"arion",
-
"nixpkgs"
-
]
-
},
-
"locked": {
-
"lastModified": 1759362264,
-
"narHash": "sha256-wfG0S7pltlYyZTM+qqlhJ7GMw2fTF4mLKCIVhLii/4M=",
-
"owner": "hercules-ci",
-
"repo": "flake-parts",
-
"rev": "758cf7296bee11f1706a574c77d072b8a7baa881",
-
"type": "github"
-
},
-
"original": {
-
"owner": "hercules-ci",
-
"repo": "flake-parts",
-
"type": "github"
-
}
-
},
-
"flake-parts_2": {
-
"inputs": {
-
"nixpkgs-lib": [
"lanzaboote",
"nixpkgs"
]
},
"locked": {
-
"lastModified": 1730504689,
-
"narHash": "sha256-hgmguH29K2fvs9szpq2r3pz2/8cJd2LPS+b4tfNFCwE=",
-
"owner": "hercules-ci",
-
"repo": "flake-parts",
-
"rev": "506278e768c2a08bec68eb62932193e341f55c90",
-
"type": "github"
-
},
-
"original": {
-
"owner": "hercules-ci",
-
"repo": "flake-parts",
-
"type": "github"
-
}
-
},
-
"flake-parts_3": {
-
"inputs": {
-
"nixpkgs-lib": [
-
"mystia",
-
"nix-update-soopy",
-
"nixpkgs"
-
]
-
},
-
"locked": {
-
"lastModified": 1698882062,
-
"narHash": "sha256-HkhafUayIqxXyHH1X8d9RDl1M2CkFgZLjKD3MzabiEo=",
+
"lastModified": 1680392223,
+
"narHash": "sha256-n3g7QFr85lDODKt250rkZj2IFS3i4/8HBU2yKHO3tqw=",
"owner": "hercules-ci",
"repo": "flake-parts",
-
"rev": "8c9fa2545007b49a5db5f650ae91f227672c3877",
+
"rev": "dcc36e45d054d7bb554c9cdab69093debd91a0b5",
"type": "github"
},
"original": {
···
}
},
"flake-utils": {
-
"inputs": {
-
"systems": "systems"
-
},
"locked": {
-
"lastModified": 1731533236,
-
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
+
"lastModified": 1667395993,
+
"narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
"owner": "numtide",
"repo": "flake-utils",
-
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
+
"rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f",
"type": "github"
},
"original": {
···
},
"flake-utils_2": {
"inputs": {
-
"systems": "systems_2"
+
"systems": "systems"
},
"locked": {
-
"lastModified": 1694529238,
-
"narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=",
+
"lastModified": 1681202837,
+
"narHash": "sha256-H+Rh19JDwRtpVPAWp64F+rlEtxUWBAQW28eAi3SRSzg=",
"owner": "numtide",
"repo": "flake-utils",
-
"rev": "ff7b65b44d01cf9ba6a71320833626af21126384",
+
"rev": "cfacdce06f30d2b68473a46042957675eebb3401",
"type": "github"
},
"original": {
···
"type": "github"
}
},
-
"ghostty": {
-
"inputs": {
-
"flake-compat": "flake-compat",
-
"flake-utils": "flake-utils",
-
"nixpkgs": "nixpkgs_2",
-
"zig": "zig",
-
"zon2nix": "zon2nix"
-
},
-
"locked": {
-
"lastModified": 1759979870,
-
"narHash": "sha256-v9/S2BQb+ZIduNj2WGQWZfUC+4JZm/bl1oedebm6P/Y=",
-
"owner": "ghostty-org",
-
"repo": "ghostty",
-
"rev": "3b2ef4c216c2f720330aeb50c51f942fccac5156",
-
"type": "github"
-
},
-
"original": {
-
"owner": "ghostty-org",
-
"repo": "ghostty",
-
"type": "github"
-
}
-
},
"gitignore": {
"inputs": {
"nixpkgs": [
···
]
},
"locked": {
-
"lastModified": 1709087332,
-
"narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
+
"lastModified": 1660459072,
+
"narHash": "sha256-8DFJjXG8zqoONA1vXtgeKXy68KdJL5UaXR8NtVMUbx8=",
"owner": "hercules-ci",
"repo": "gitignore.nix",
-
"rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
+
"rev": "a20de23b925fd8264fd7fad6454652e142fd7f73",
"type": "github"
},
"original": {
···
"type": "github"
}
},
-
"gomod2nix": {
-
"inputs": {
-
"flake-utils": "flake-utils_2",
-
"nixpkgs": [
-
"tangled-core",
-
"nixpkgs"
-
]
-
},
-
"locked": {
-
"lastModified": 1754078208,
-
"narHash": "sha256-YVoIFDCDpYuU3riaDEJ3xiGdPOtsx4sR5eTzHTytPV8=",
-
"owner": "nix-community",
-
"repo": "gomod2nix",
-
"rev": "7f963246a71626c7fc70b431a315c4388a0c95cf",
-
"type": "github"
-
},
-
"original": {
-
"owner": "nix-community",
-
"repo": "gomod2nix",
-
"type": "github"
-
}
-
},
-
"haskell-flake": {
-
"locked": {
-
"lastModified": 1675296942,
-
"narHash": "sha256-u1X1sblozi5qYEcLp1hxcyo8FfDHnRUVX3dJ/tW19jY=",
-
"owner": "srid",
-
"repo": "haskell-flake",
-
"rev": "c2cafce9d57bfca41794dc3b99c593155006c71e",
-
"type": "github"
-
},
-
"original": {
-
"owner": "srid",
-
"ref": "0.1.0",
-
"repo": "haskell-flake",
-
"type": "github"
-
}
-
},
"home-manager": {
"inputs": {
"nixpkgs": [
···
]
},
"locked": {
-
"lastModified": 1758463745,
-
"narHash": "sha256-uhzsV0Q0I9j2y/rfweWeGif5AWe0MGrgZ/3TjpDYdGA=",
+
"lastModified": 1693208669,
+
"narHash": "sha256-hHFaaUsZ860wvppPeiu7nJn/nXZjJfnqAQEu9SPFE9I=",
"owner": "nix-community",
"repo": "home-manager",
-
"rev": "3b955f5f0a942f9f60cdc9cacb7844335d0f21c3",
+
"rev": "5bac4a1c06cd77cf8fc35a658ccb035a6c50cd2c",
"type": "github"
},
"original": {
"owner": "nix-community",
-
"ref": "release-25.05",
+
"ref": "release-23.05",
"repo": "home-manager",
"type": "github"
}
},
-
"htmx-src": {
-
"flake": false,
-
"locked": {
-
"narHash": "sha256-nm6avZuEBg67SSyyZUhjpXVNstHHgUxrtBHqJgowU08=",
-
"type": "file",
-
"url": "https://unpkg.com/htmx.org@2.0.4/dist/htmx.min.js"
-
},
-
"original": {
-
"type": "file",
-
"url": "https://unpkg.com/htmx.org@2.0.4/dist/htmx.min.js"
-
}
-
},
-
"htmx-ws-src": {
-
"flake": false,
-
"locked": {
-
"narHash": "sha256-2fg6KyEJoO24q0fQqbz9RMaYNPQrMwpZh29tkSqdqGY=",
-
"type": "file",
-
"url": "https://cdn.jsdelivr.net/npm/htmx-ext-ws@2.0.2"
-
},
-
"original": {
-
"type": "file",
-
"url": "https://cdn.jsdelivr.net/npm/htmx-ext-ws@2.0.2"
-
}
-
},
-
"hydra": {
-
"inputs": {
-
"nix": "nix",
-
"nix-eval-jobs": "nix-eval-jobs",
-
"nixpkgs": "nixpkgs_4"
-
},
-
"locked": {
-
"lastModified": 1759957625,
-
"narHash": "sha256-0pIlPP0IFP1btoCZji7SR2trfIalzC/kfnBIURRT+dA=",
-
"owner": "NixOS",
-
"repo": "hydra",
-
"rev": "94eaad22bc68c199ac1f6939b5dae65a618e550b",
-
"type": "github"
-
},
-
"original": {
-
"owner": "NixOS",
-
"repo": "hydra",
-
"type": "github"
-
}
-
},
-
"ibm-plex-mono-src": {
-
"flake": false,
-
"locked": {
-
"lastModified": 1731402384,
-
"narHash": "sha256-OwUmrPfEehLDz0fl2ChYLK8FQM2p0G1+EMrGsYEq+6g=",
-
"type": "tarball",
-
"url": "https://github.com/IBM/plex/releases/download/@ibm/plex-mono@1.1.0/ibm-plex-mono.zip"
-
},
-
"original": {
-
"type": "tarball",
-
"url": "https://github.com/IBM/plex/releases/download/@ibm/plex-mono@1.1.0/ibm-plex-mono.zip"
-
}
-
},
-
"indigo": {
-
"flake": false,
-
"locked": {
-
"lastModified": 1753693716,
-
"narHash": "sha256-DMIKnCJRODQXEHUxA+7mLzRALmnZhkkbHlFT2rCQYrE=",
-
"owner": "oppiliappan",
-
"repo": "indigo",
-
"rev": "5f170569da9360f57add450a278d73538092d8ca",
-
"type": "github"
-
},
-
"original": {
-
"owner": "oppiliappan",
-
"repo": "indigo",
-
"type": "github"
-
}
-
},
-
"inter-fonts-src": {
-
"flake": false,
-
"locked": {
-
"lastModified": 1731687360,
-
"narHash": "sha256-5vdKKvHAeZi6igrfpbOdhZlDX2/5+UvzlnCQV6DdqoQ=",
-
"type": "tarball",
-
"url": "https://github.com/rsms/inter/releases/download/v4.1/Inter-4.1.zip"
-
},
-
"original": {
-
"type": "tarball",
-
"url": "https://github.com/rsms/inter/releases/download/v4.1/Inter-4.1.zip"
-
}
-
},
-
"knotserver-module": {
-
"inputs": {
-
"nixpkgs": [
-
"nixpkgs"
-
],
-
"tangledCore": [
-
"tangled-core"
-
]
-
},
-
"locked": {
-
"lastModified": 1750698324,
-
"narHash": "sha256-yzHqS8XzYjxuygOVekjFScZf81fZvRtXZpz1xx6mRc0=",
-
"ref": "knot-fix",
-
"rev": "3eb304f66d1f5583fedfea8ec3744105f0771239",
-
"revCount": 17,
-
"type": "git",
-
"url": "https://tangled.org/@soopy.moe/knotserver-module/"
-
},
-
"original": {
-
"ref": "knot-fix",
-
"type": "git",
-
"url": "https://tangled.org/@soopy.moe/knotserver-module/"
-
}
-
},
"lanzaboote": {
"inputs": {
-
"crane": "crane",
+
"crane": "crane_2",
"flake-compat": "flake-compat_2",
-
"flake-parts": "flake-parts_2",
+
"flake-parts": "flake-parts",
+
"flake-utils": "flake-utils_2",
"nixpkgs": [
"nixpkgs"
],
"pre-commit-hooks-nix": "pre-commit-hooks-nix",
-
"rust-overlay": "rust-overlay"
+
"rust-overlay": "rust-overlay_2"
},
"locked": {
-
"lastModified": 1737639419,
-
"narHash": "sha256-AEEDktApTEZ5PZXNDkry2YV2k6t0dTgLPEmAZbnigXU=",
+
"lastModified": 1682802423,
+
"narHash": "sha256-Fb5TeRTdvUlo/5Yi2d+FC8a6KoRLk2h1VE0/peMhWPs=",
"owner": "nix-community",
"repo": "lanzaboote",
-
"rev": "a65905a09e2c43ff63be8c0e86a93712361f871e",
+
"rev": "64b903ca87d18cef2752c19c098af275c6e51d63",
"type": "github"
},
"original": {
"owner": "nix-community",
-
"ref": "v0.4.2",
+
"ref": "v0.3.0",
"repo": "lanzaboote",
"type": "github"
-
}
-
},
-
"lucide-src": {
-
"flake": false,
-
"locked": {
-
"lastModified": 1754044466,
-
"narHash": "sha256-+exBR2OToB1iv7ZQI2S4B0lXA/QRvC9n6U99UxGpJGs=",
-
"type": "tarball",
-
"url": "https://github.com/lucide-icons/lucide/releases/download/0.536.0/lucide-icons-0.536.0.zip"
-
},
-
"original": {
-
"type": "tarball",
-
"url": "https://github.com/lucide-icons/lucide/releases/download/0.536.0/lucide-icons-0.536.0.zip"
}
},
"mystia": {
"inputs": {
"flake-compat": "flake-compat_3",
-
"nix-update-soopy": "nix-update-soopy",
-
"nixpkgs": "nixpkgs_5",
-
"treefmt-nix": "treefmt-nix_2"
-
},
-
"locked": {
-
"lastModified": 1759910551,
-
"narHash": "sha256-6f5GW4WghUBgNyjCly509CRFDc5zIEQIcXEfoBdtzho=",
-
"owner": "soopyc",
-
"repo": "mystia",
-
"rev": "b2b4b84f2b670f859c2b4d175293d6fb3aa24f2c",
-
"type": "github"
-
},
-
"original": {
-
"owner": "soopyc",
-
"repo": "mystia",
-
"type": "github"
-
}
-
},
-
"nix": {
-
"flake": false,
-
"locked": {
-
"lastModified": 1759956402,
-
"narHash": "sha256-CM27YK+KMi3HLRXqjPaJwkTabmKW+CDXOE3kMMtXH3s=",
-
"owner": "NixOS",
-
"repo": "nix",
-
"rev": "3019db2c87006817b6201113ad4ceee0c53c3b62",
-
"type": "github"
-
},
-
"original": {
-
"owner": "NixOS",
-
"ref": "2.31-maintenance",
-
"repo": "nix",
-
"type": "github"
-
}
-
},
-
"nix-eval-jobs": {
-
"flake": false,
-
"locked": {
-
"lastModified": 1757626891,
-
"narHash": "sha256-VrHPtHxVIboqgnw+tlCQepgtBOhBvU5hxbMHsPo8LAc=",
-
"owner": "nix-community",
-
"repo": "nix-eval-jobs",
-
"rev": "c975efc5b2bec0c1ff93c67de4a03306af258ff7",
-
"type": "github"
-
},
-
"original": {
-
"owner": "nix-community",
-
"ref": "v2.31.0",
-
"repo": "nix-eval-jobs",
-
"type": "github"
-
}
-
},
-
"nix-index-database": {
-
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
-
"lastModified": 1759637156,
-
"narHash": "sha256-8NI1SqntLfKl6Q0Luemc3aIboezSJElofUrqipF5g78=",
-
"owner": "nix-community",
-
"repo": "nix-index-database",
-
"rev": "0ca69684091aa3a6b1fe994c4afeff305b15e915",
-
"type": "github"
-
},
-
"original": {
-
"owner": "nix-community",
-
"repo": "nix-index-database",
-
"type": "github"
-
}
-
},
-
"nix-update-soopy": {
-
"inputs": {
-
"flake-parts": "flake-parts_3",
-
"nixpkgs": [
-
"mystia",
-
"nixpkgs"
-
],
-
"treefmt-nix": "treefmt-nix"
-
},
-
"locked": {
-
"lastModified": 1713692400,
-
"narHash": "sha256-x5T4i96pbVBWm2f7RrE+Y6IOrubKOZRr9vKXpgsWfv0=",
-
"owner": "soopyc",
-
"repo": "nix-update",
-
"rev": "1aca3f7647cb528cb854e09171f7c0b65fa594d9",
-
"type": "github"
-
},
-
"original": {
-
"owner": "soopyc",
-
"repo": "nix-update",
-
"type": "github"
-
}
-
},
-
"nixos-hardware": {
-
"locked": {
-
"lastModified": 1759673993,
-
"narHash": "sha256-cXFeCPJLmENJyV6BQSG4+vWg3Bx3ajMwBq581GjQhkc=",
+
"lastModified": 1694357290,
+
"narHash": "sha256-Mai5saiiuBWlQzTreLtIeUJQJN9zMH/UBIKJPOqnasM=",
"owner": "soopyc",
-
"repo": "nixos-hardware",
-
"rev": "16e10edfd2a358accda5de7c2a91f2440d62f64f",
+
"repo": "mystia",
+
"rev": "cfe783698ccd18cb27fb2e422917f14b82f7afc4",
"type": "github"
},
"original": {
"owner": "soopyc",
-
"ref": "apple-t2-updates",
-
"repo": "nixos-hardware",
+
"repo": "mystia",
"type": "github"
}
},
"nixpkgs": {
"locked": {
-
"lastModified": 1753749649,
-
"narHash": "sha256-+jkEZxs7bfOKfBIk430K+tK9IvXlwzqQQnppC2ZKFj4=",
+
"lastModified": 1694237756,
+
"narHash": "sha256-8T29BDnqRexwVy3jhEzIH9r7ROiF9I6ESVD0QLC6VXk=",
"owner": "NixOS",
"repo": "nixpkgs",
-
"rev": "1f08a4df998e21f4e8be8fb6fbf61d11a1a5076a",
+
"rev": "1a5bda2b28ea75a96dda2c349fe6d5e7864950ee",
"type": "github"
},
"original": {
-
"owner": "NixOS",
-
"ref": "nixos-25.05",
-
"repo": "nixpkgs",
-
"type": "github"
+
"id": "nixpkgs",
+
"ref": "master",
+
"type": "indirect"
}
},
"nixpkgs-stable": {
"locked": {
-
"lastModified": 1730741070,
-
"narHash": "sha256-edm8WG19kWozJ/GqyYx2VjW99EdhjKwbY3ZwdlPAAlo=",
+
"lastModified": 1685004253,
+
"narHash": "sha256-AbVL1nN/TDicUQ5wXZ8xdLERxz/eJr7+o8lqkIOVuaE=",
"owner": "NixOS",
"repo": "nixpkgs",
-
"rev": "d063c1dd113c91ab27959ba540c0d9753409edf3",
+
"rev": "3e01645c40b92d29f3ae76344a6d654986a91a91",
"type": "github"
},
"original": {
"owner": "NixOS",
-
"ref": "nixos-24.05",
+
"ref": "nixos-23.05",
"repo": "nixpkgs",
"type": "github"
}
},
-
"nixpkgs_2": {
-
"locked": {
-
"lastModified": 315532800,
-
"narHash": "sha256-YwoXN6fthkakCFD7nXPcUK+rkNr6ZTNTuF8zdGaxZo0=",
-
"rev": "dc704e6102e76aad573f63b74c742cd96f8f1e6c",
-
"type": "tarball",
-
"url": "https://releases.nixos.org/nixpkgs/nixpkgs-25.11pre870318.dc704e6102e7/nixexprs.tar.xz"
-
},
-
"original": {
-
"type": "tarball",
-
"url": "https://channels.nixos.org/nixpkgs-unstable/nixexprs.tar.xz"
-
}
-
},
-
"nixpkgs_3": {
-
"locked": {
-
"lastModified": 1758360447,
-
"narHash": "sha256-XDY3A83bclygHDtesRoaRTafUd80Q30D/Daf9KSG6bs=",
-
"rev": "8eaee110344796db060382e15d3af0a9fc396e0e",
-
"type": "tarball",
-
"url": "https://releases.nixos.org/nixos/unstable/nixos-25.11pre864002.8eaee1103447/nixexprs.tar.xz"
-
},
-
"original": {
-
"type": "tarball",
-
"url": "https://channels.nixos.org/nixos-unstable/nixexprs.tar.xz"
-
}
-
},
-
"nixpkgs_4": {
+
"nixpkgs-stable_2": {
"locked": {
-
"lastModified": 1759652726,
-
"narHash": "sha256-2VjnimOYDRb3DZHyQ2WH2KCouFqYm9h0Rr007Al/WSA=",
+
"lastModified": 1678872516,
+
"narHash": "sha256-/E1YwtMtFAu2KUQKV/1+KFuReYPANM2Rzehk84VxVoc=",
"owner": "NixOS",
"repo": "nixpkgs",
-
"rev": "06b2985f0cc9eb4318bf607168f4b15af1e5e81d",
+
"rev": "9b8e5abb18324c7fe9f07cb100c3cd4a29cda8b8",
"type": "github"
},
"original": {
"owner": "NixOS",
-
"ref": "nixos-25.05-small",
+
"ref": "nixos-22.11",
"repo": "nixpkgs",
"type": "github"
}
},
-
"nixpkgs_5": {
+
"nixpkgs-stable_3": {
"locked": {
-
"lastModified": 1759831965,
-
"narHash": "sha256-vgPm2xjOmKdZ0xKA6yLXPJpjOtQPHfaZDRtH+47XEBo=",
+
"lastModified": 1693675694,
+
"narHash": "sha256-2pIOyQwGyy2FtFAUIb8YeKVmOCcPOTVphbAvmshudLE=",
"owner": "NixOS",
"repo": "nixpkgs",
-
"rev": "c9b6fb798541223bbb396d287d16f43520250518",
-
"type": "github"
-
},
-
"original": {
-
"id": "nixpkgs",
-
"ref": "nixos-unstable",
-
"type": "indirect"
-
}
-
},
-
"nixpkgs_6": {
-
"locked": {
-
"lastModified": 1759735786,
-
"narHash": "sha256-a0+h02lyP2KwSNrZz4wLJTu9ikujNsTWIC874Bv7IJ0=",
-
"owner": "nixos",
-
"repo": "nixpkgs",
-
"rev": "20c4598c84a671783f741e02bf05cbfaf4907cff",
+
"rev": "5601118d39ca9105f8e7b39d4c221d3388c0419d",
"type": "github"
},
"original": {
-
"owner": "nixos",
-
"ref": "nixos-25.05",
+
"owner": "NixOS",
+
"ref": "release-23.05",
"repo": "nixpkgs",
"type": "github"
}
···
"lanzaboote",
"flake-compat"
],
+
"flake-utils": [
+
"lanzaboote",
+
"flake-utils"
+
],
"gitignore": "gitignore",
"nixpkgs": [
"lanzaboote",
"nixpkgs"
],
-
"nixpkgs-stable": "nixpkgs-stable"
+
"nixpkgs-stable": "nixpkgs-stable_2"
},
"locked": {
-
"lastModified": 1731363552,
-
"narHash": "sha256-vFta1uHnD29VUY4HJOO/D6p6rxyObnf+InnSMT4jlMU=",
+
"lastModified": 1681413034,
+
"narHash": "sha256-/t7OjNQcNkeWeSq/CFLYVBfm+IEnkjoSm9iKvArnUUI=",
"owner": "cachix",
"repo": "pre-commit-hooks.nix",
-
"rev": "cd1af27aa85026ac759d5d3fccf650abe7e1bbf0",
+
"rev": "d3de8f69ca88fb6f8b09e5b598be5ac98d28ede5",
"type": "github"
},
"original": {
···
},
"root": {
"inputs": {
-
"arion": "arion",
-
"catppuccin": "catppuccin",
-
"ghostty": "ghostty",
+
"attic": "attic",
"home-manager": "home-manager",
-
"hydra": "hydra",
-
"knotserver-module": "knotserver-module",
"lanzaboote": "lanzaboote",
"mystia": "mystia",
-
"nix-index-database": "nix-index-database",
-
"nixos-hardware": "nixos-hardware",
-
"nixpkgs": "nixpkgs_6",
-
"sops-nix": "sops-nix",
-
"tangled-core": "tangled-core",
-
"treefmt-nix": "treefmt-nix_3",
-
"whitelisted-web": "whitelisted-web"
+
"nixpkgs": "nixpkgs",
+
"sops-nix": "sops-nix"
}
},
"rust-overlay": {
"inputs": {
+
"flake-utils": [
+
"attic",
+
"crane",
+
"flake-utils"
+
],
"nixpkgs": [
-
"lanzaboote",
+
"attic",
+
"crane",
"nixpkgs"
]
},
"locked": {
-
"lastModified": 1731897198,
-
"narHash": "sha256-Ou7vLETSKwmE/HRQz4cImXXJBr/k9gp4J4z/PF8LzTE=",
+
"lastModified": 1675391458,
+
"narHash": "sha256-ukDKZw922BnK5ohL9LhwtaDAdCsJL7L6ScNEyF1lO9w=",
"owner": "oxalica",
"repo": "rust-overlay",
-
"rev": "0be641045af6d8666c11c2c40e45ffc9667839b5",
+
"rev": "383a4acfd11d778d5c2efcf28376cbd845eeaedf",
"type": "github"
},
"original": {
···
"type": "github"
}
},
-
"sops-nix": {
+
"rust-overlay_2": {
"inputs": {
+
"flake-utils": [
+
"lanzaboote",
+
"flake-utils"
+
],
"nixpkgs": [
+
"lanzaboote",
"nixpkgs"
]
},
"locked": {
-
"lastModified": 1759635238,
-
"narHash": "sha256-UvzKi02LMFP74csFfwLPAZ0mrE7k6EiYaKecplyX9Qk=",
-
"owner": "Mic92",
-
"repo": "sops-nix",
-
"rev": "6e5a38e08a2c31ae687504196a230ae00ea95133",
+
"lastModified": 1682129965,
+
"narHash": "sha256-1KRPIorEL6pLpJR04FwAqqnt4Tzcm4MqD84yhlD+XSk=",
+
"owner": "oxalica",
+
"repo": "rust-overlay",
+
"rev": "2c417c0460b788328220120c698630947547ee83",
"type": "github"
},
"original": {
-
"owner": "Mic92",
-
"repo": "sops-nix",
+
"owner": "oxalica",
+
"repo": "rust-overlay",
"type": "github"
}
},
-
"sqlite-lib-src": {
-
"flake": false,
-
"locked": {
-
"lastModified": 1706631843,
-
"narHash": "sha256-bJoMjirsBjm2Qk9KPiy3yV3+8b/POlYe76/FQbciHro=",
-
"type": "tarball",
-
"url": "https://sqlite.org/2024/sqlite-amalgamation-3450100.zip"
+
"sops-nix": {
+
"inputs": {
+
"nixpkgs": [
+
"nixpkgs"
+
],
+
"nixpkgs-stable": "nixpkgs-stable_3"
},
-
"original": {
-
"type": "tarball",
-
"url": "https://sqlite.org/2024/sqlite-amalgamation-3450100.zip"
-
}
-
},
-
"systems": {
"locked": {
-
"lastModified": 1681028828,
-
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
-
"owner": "nix-systems",
-
"repo": "default",
-
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
+
"lastModified": 1693898833,
+
"narHash": "sha256-OIrMAGNYNeLs6IvBynxcXub7aSW3GEUvWNsb7zx6zuU=",
+
"owner": "Mic92",
+
"repo": "sops-nix",
+
"rev": "faf21ac162173c2deb54e5fdeed002a9bd6e8623",
"type": "github"
},
"original": {
-
"owner": "nix-systems",
-
"repo": "default",
+
"owner": "Mic92",
+
"repo": "sops-nix",
"type": "github"
}
},
-
"systems_2": {
+
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
···
"original": {
"owner": "nix-systems",
"repo": "default",
-
"type": "github"
-
}
-
},
-
"tangled-core": {
-
"inputs": {
-
"flake-compat": "flake-compat_4",
-
"gomod2nix": "gomod2nix",
-
"htmx-src": "htmx-src",
-
"htmx-ws-src": "htmx-ws-src",
-
"ibm-plex-mono-src": "ibm-plex-mono-src",
-
"indigo": "indigo",
-
"inter-fonts-src": "inter-fonts-src",
-
"lucide-src": "lucide-src",
-
"nixpkgs": [
-
"nixpkgs"
-
],
-
"sqlite-lib-src": "sqlite-lib-src"
-
},
-
"locked": {
-
"lastModified": 1760000456,
-
"narHash": "sha256-oPLeea0FTpEFwulK2I7uUyVNqDQGlB4t4rHSSinSXE4=",
-
"ref": "refs/heads/master",
-
"rev": "62a3b4738a45190cf00b3cdbfdd5bead6ec31588",
-
"revCount": 1510,
-
"type": "git",
-
"url": "https://tangled.org/@tangled.sh/core"
-
},
-
"original": {
-
"type": "git",
-
"url": "https://tangled.org/@tangled.sh/core"
-
}
-
},
-
"treefmt-nix": {
-
"inputs": {
-
"nixpkgs": [
-
"mystia",
-
"nix-update-soopy",
-
"nixpkgs"
-
]
-
},
-
"locked": {
-
"lastModified": 1698438538,
-
"narHash": "sha256-AWxaKTDL3MtxaVTVU5lYBvSnlspOS0Fjt8GxBgnU0Do=",
-
"owner": "numtide",
-
"repo": "treefmt-nix",
-
"rev": "5deb8dc125a9f83b65ca86cf0c8167c46593e0b1",
-
"type": "github"
-
},
-
"original": {
-
"owner": "numtide",
-
"repo": "treefmt-nix",
-
"type": "github"
-
}
-
},
-
"treefmt-nix_2": {
-
"inputs": {
-
"nixpkgs": [
-
"mystia",
-
"nixpkgs"
-
]
-
},
-
"locked": {
-
"lastModified": 1758728421,
-
"narHash": "sha256-ySNJ008muQAds2JemiyrWYbwbG+V7S5wg3ZVKGHSFu8=",
-
"owner": "numtide",
-
"repo": "treefmt-nix",
-
"rev": "5eda4ee8121f97b218f7cc73f5172098d458f1d1",
-
"type": "github"
-
},
-
"original": {
-
"owner": "numtide",
-
"repo": "treefmt-nix",
-
"type": "github"
-
}
-
},
-
"treefmt-nix_3": {
-
"inputs": {
-
"nixpkgs": [
-
"nixpkgs"
-
]
-
},
-
"locked": {
-
"lastModified": 1758728421,
-
"narHash": "sha256-ySNJ008muQAds2JemiyrWYbwbG+V7S5wg3ZVKGHSFu8=",
-
"owner": "numtide",
-
"repo": "treefmt-nix",
-
"rev": "5eda4ee8121f97b218f7cc73f5172098d458f1d1",
-
"type": "github"
-
},
-
"original": {
-
"owner": "numtide",
-
"repo": "treefmt-nix",
-
"type": "github"
-
}
-
},
-
"whitelisted-web": {
-
"inputs": {
-
"nixpkgs": [
-
"nixpkgs"
-
]
-
},
-
"locked": {
-
"lastModified": 1759215222,
-
"narHash": "sha256-JPKdjfRTpUBxgeaaMiacnCfgDacSixkPWb73dz6C/UA=",
-
"rev": "c512eeddce32060f8f576918b555af98cac845ad",
-
"type": "tarball",
-
"url": "https://patchy.soopy.moe/api/v1/repos/soopyc/whitelisted-web/archive/c512eeddce32060f8f576918b555af98cac845ad.tar.gz"
-
},
-
"original": {
-
"type": "tarball",
-
"url": "https://patchy.soopy.moe/soopyc/whitelisted-web/archive/main.tar.gz"
-
}
-
},
-
"zig": {
-
"inputs": {
-
"flake-compat": [
-
"ghostty",
-
"flake-compat"
-
],
-
"flake-utils": [
-
"ghostty",
-
"flake-utils"
-
],
-
"nixpkgs": [
-
"ghostty",
-
"nixpkgs"
-
]
-
},
-
"locked": {
-
"lastModified": 1759192380,
-
"narHash": "sha256-0BWJgt4OSzxCESij5oo8WLWrPZ+1qLp8KUQe32QeV4Q=",
-
"owner": "mitchellh",
-
"repo": "zig-overlay",
-
"rev": "0bcd1401ed43d10f10cbded49624206553e92f57",
-
"type": "github"
-
},
-
"original": {
-
"owner": "mitchellh",
-
"repo": "zig-overlay",
-
"type": "github"
-
}
-
},
-
"zon2nix": {
-
"inputs": {
-
"nixpkgs": "nixpkgs_3"
-
},
-
"locked": {
-
"lastModified": 1758405547,
-
"narHash": "sha256-WgaDgvIZMPvlZcZrpPMjkaalTBnGF2lTG+62znXctWM=",
-
"owner": "jcollie",
-
"repo": "zon2nix",
-
"rev": "bf983aa90ff169372b9fa8c02e57ea75e0b42245",
-
"type": "github"
-
},
-
"original": {
-
"owner": "jcollie",
-
"repo": "zon2nix",
-
"rev": "bf983aa90ff169372b9fa8c02e57ea75e0b42245",
"type": "github"
}
}
+39 -89
flake.nix
···
nixConfig = {
extra-substituters = [
-
"https://cache.soopy.moe"
+
"https://nonbunary.soopy.moe/gensokyo-global"
+
"https://nonbunary.soopy.moe/gensokyo-systems"
];
extra-trusted-public-keys = [
-
"cache.soopy.moe-1:0RZVsQeR+GOh0VQI9rvnHz55nVXkFardDqfm4+afjPo="
+
"gensokyo-global:XiCN0D2XeSxF4urFYTprR+1Nr/5hWyydcETwZtPG6Ec="
+
"gensokyo-systems:r/Wx649dPuQrCN9Pgh3Jic526zQNk3oWMqYJHnob/Ok="
];
+
fallback = true;
};
inputs = {
-
mystia.url = "github:soopyc/mystia";
-
# nixpkgs.follows = "mystia/nixpkgs";
-
nixpkgs.url = "github:nixos/nixpkgs/nixos-25.05";
-
-
nixos-hardware.url = "github:soopyc/nixos-hardware/apple-t2-updates";
-
catppuccin.url = "github:catppuccin/nix/release-25.05";
-
hydra.url = "github:NixOS/hydra";
-
ghostty.url = "github:ghostty-org/ghostty";
-
-
nix-index-database = {
-
url = "github:nix-community/nix-index-database";
-
inputs.nixpkgs.follows = "nixpkgs";
-
};
+
nixpkgs.url = "nixpkgs/master";
home-manager = {
-
# sync with nixpkgs!
-
url = "github:nix-community/home-manager/release-25.05";
+
url = "github:nix-community/home-manager/release-23.05";
inputs.nixpkgs.follows = "nixpkgs";
};
-
whitelisted-web = {
-
url = "https://patchy.soopy.moe/soopyc/whitelisted-web/archive/main.tar.gz";
+
lanzaboote = {
+
url = "github:nix-community/lanzaboote/v0.3.0";
inputs.nixpkgs.follows = "nixpkgs";
};
-
lanzaboote = {
-
url = "github:nix-community/lanzaboote/v0.4.2";
+
attic = {
+
url = "github:zhaofengli/attic";
inputs.nixpkgs.follows = "nixpkgs";
};
···
inputs.nixpkgs.follows = "nixpkgs";
};
-
arion = {
-
url = "github:hercules-ci/arion";
-
inputs.nixpkgs.follows = "nixpkgs";
-
};
-
-
tangled-core = {
-
url = "git+https://tangled.org/@tangled.sh/core";
+
mystia = {
+
url = "github:soopyc/mystia";
inputs.nixpkgs.follows = "nixpkgs";
};
+
};
-
knotserver-module = {
-
url = "git+https://tangled.org/@soopy.moe/knotserver-module/?ref=knot-fix";
-
inputs.nixpkgs.follows = "nixpkgs";
-
inputs.tangledCore.follows = "tangled-core";
-
};
+
outputs = {
+
nixpkgs,
+
home-manager,
+
...
+
} @ inputs: let
+
utils = import ./global/utils.nix;
+
lib = nixpkgs.lib;
-
treefmt-nix = {
-
url = "github:numtide/treefmt-nix";
-
inputs.nixpkgs.follows = "nixpkgs";
+
systems = [
+
"x86_64-linux"
+
"aarch64-linux"
+
"x86_64-darwin"
+
"aarch64-darwin"
+
];
+
forAllSystems = fn: lib.genAttrs systems (s: fn nixpkgs.legacyPackages.${s});
+
in {
+
nixosConfigurations = {
+
koumakan = import ./systems/koumakan {inherit utils lib inputs;};
};
-
};
-
outputs =
-
{
-
self,
-
nixpkgs,
-
treefmt-nix,
-
...
-
}@inputs:
-
let
-
lib = nixpkgs.lib;
-
-
systems = [
-
"x86_64-linux"
-
"aarch64-linux"
-
"x86_64-darwin"
-
"aarch64-darwin"
-
];
-
forAllSystems = fn: lib.genAttrs systems (system: fn nixpkgs.legacyPackages.${system});
-
treefmt = forAllSystems (pkgs: treefmt-nix.lib.evalModule pkgs ./nix/treefmt.nix);
-
in
-
{
-
lib.x86_64-linux = import ./global/utils.nix {
-
inherit inputs;
-
system = "x86_64-linux";
+
devShells = forAllSystems (pkgs: {
+
default = pkgs.mkShell {
+
packages = [
+
(pkgs.python311.withPackages (p: [p.requests]))
+
];
};
-
-
packages.x86_64-linux =
-
let
-
system = "x86_64-linux";
-
in
-
{
-
brcmfmac =
-
let
-
pkgs = import nixpkgs {
-
inherit system;
-
config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [ "brcm-mac-firmware" ];
-
};
-
in
-
pkgs.callPackage ./vendor/brcmfmac { };
-
};
-
-
nixosConfigurations = import systems/default.nix { inherit inputs lib; };
-
-
devShells = forAllSystems (pkgs: import ./nix/devshell.nix { inherit pkgs inputs; });
-
-
checks = forAllSystems (
-
pkgs:
-
(import ./nix/checks.nix { inherit pkgs inputs; })
-
// {
-
formatting = treefmt.${pkgs.system}.config.build.check self;
-
}
-
);
+
});
-
formatter = forAllSystems (pkgs: treefmt.${pkgs.system}.config.build.wrapper);
-
};
+
formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.alejandra;
+
};
}
-8
garnix.yaml
···
-
# json because yaml sucks
-
{
-
"builds": {
-
"exclude": [
-
"*.brcmfmac"
-
]
-
}
-
}
+2 -24
global/core.nix
···
-
{
-
pkgs,
-
inputs,
-
...
-
}:
-
{
+
{pkgs, ...}: {
imports = [
./upgrade-diff.nix
+
./system
];
-
# Set default i18n configuration
i18n.defaultLocale = "en_US.UTF-8";
console = {
font = "Lat2-Terminus16";
keyMap = "us";
};
-
-
# We do not like overlays but sometimes they have to be done
-
nixpkgs.overlays = import ./overlays inputs;
-
-
system.rebuild.enableNg = true;
-
-
system.configurationRevision = inputs.self.rev or inputs.self.dirtyRev or "unknown";
-
-
hardware.enableRedistributableFirmware = true;
-
services.fwupd.enable = true;
-
-
boot.tmp = {
-
useTmpfs = false; # this causes oom on kernel builds
-
cleanOnBoot = true;
-
};
-
-
boot.crashDump.enable = true;
time.timeZone = "Asia/Hong_Kong";
-23
global/default.nix
···
-
# This is a NixOS module, you cannot use this as a standalone file.
-
# Other files may be though, but things that starts with {...}: most definitely aren't.
-
{ inputs, ... }:
-
{
-
imports = [
-
./core.nix
-
./gensokyo
-
./programs
-
./sops.nix
-
-
./home.nix
-
../users
-
-
./gui
-
-
inputs.arion.nixosModules.arion
-
inputs.sops-nix.nixosModules.sops
-
inputs.catppuccin.nixosModules.catppuccin
-
inputs.lanzaboote.nixosModules.lanzaboote
-
inputs.home-manager.nixosModules.home-manager
-
inputs.nix-index-database.nixosModules.nix-index
-
];
-
}
-7
global/gensokyo/default.nix
···
-
{ ... }:
-
{
-
imports = [
-
./traits.nix
-
./presets
-
];
-
}
-37
global/gensokyo/presets/certificates.nix
···
-
{
-
_utils,
-
config,
-
lib,
-
...
-
}:
-
let
-
secrets = _utils.setupSecrets config {
-
namespace = "lego";
-
secrets = [ "cf_token" ];
-
};
-
in
-
{
-
config = lib.mkIf config.gensokyo.presets.certificates (
-
lib.mkMerge [
-
{
-
security.acme = {
-
acceptTerms = true;
-
-
defaults = {
-
# == lego Configuration ==
-
# In an ideal world we would have an ed/cv25519 algo here but oh well
-
keyType = "ec256"; # Ensure we use ec keys
-
credentialFiles.CLOUDFLARE_DNS_API_TOKEN_FILE = secrets.get "cf_token";
-
dnsProvider = "cloudflare";
-
-
# == LE Configuration ==
-
email = "me@soopy.moe";
-
# server = "https://acme-staging-v02.api.letsencrypt.org/directory";
-
server = "https://acme-v02.api.letsencrypt.org/directory";
-
};
-
};
-
}
-
secrets.generate
-
]
-
);
-
}
-16
global/gensokyo/presets/default.nix
···
-
{ lib, ... }:
-
{
-
imports = [
-
./vmetrics.nix
-
./nginx.nix
-
./certificates.nix
-
./secureboot.nix
-
];
-
-
options.gensokyo.presets = {
-
vmetrics = lib.mkEnableOption "vmetrics presets";
-
nginx = lib.mkEnableOption "nginx presets";
-
certificates = lib.mkEnableOption "boilerplate certificate issuing presets";
-
secureboot = lib.mkEnableOption "configuration of secureboot related options";
-
};
-
}
-68
global/gensokyo/presets/nginx.nix
···
-
{
-
lib,
-
pkgs,
-
config,
-
...
-
}:
-
let
-
presetConf = config.gensokyo.presets;
-
in
-
lib.mkIf presetConf.nginx (
-
lib.mkMerge [
-
{
-
services.nginx = {
-
enable = lib.mkDefault true;
-
enableReload = lib.mkDefault true;
-
package = lib.mkDefault pkgs.nginxQuic;
-
-
statusPage = true;
-
-
clientMaxBodySize = lib.mkDefault "5m";
-
recommendedTlsSettings = lib.mkDefault true;
-
recommendedProxySettings = lib.mkDefault true;
-
-
logError = "/var/log/nginx/error.log crit"; # override so we don't log to stderr.
-
commonHttpConfig = ''
-
# we already set this, hide that from proxied servers that set the header.
-
proxy_hide_header strict-transport-security;
-
-
log_format anonymized_combined '0.0.0.0 - - [$time_local] "$request" '
-
'$status $body_bytes_sent "-" '
-
'"$http_user_agent" "host=$host;timing=$request_time"';
-
access_log /var/log/nginx/access.log anonymized_combined;
-
'';
-
-
# prevent people from just being able to take the server down immediately
-
eventsConfig = ''
-
worker_connections 1024;
-
'';
-
appendConfig = ''
-
worker_processes auto;
-
'';
-
};
-
-
networking.firewall.allowedTCPPorts = [
-
80
-
443
-
];
-
}
-
-
(lib.mkIf presetConf.vmetrics {
-
services.prometheus.exporters.nginx.enable = true;
-
services.vmagent.prometheusConfig.scrape_configs = [
-
{
-
job_name = "nginx";
-
static_configs = [
-
{ targets = [ "localhost:${builtins.toString config.services.prometheus.exporters.nginx.port}" ]; }
-
];
-
relabel_configs = [
-
{
-
target_label = "instance";
-
replacement = "${config.networking.fqdnOrHostName}";
-
}
-
];
-
}
-
];
-
})
-
]
-
)
-20
global/gensokyo/presets/secureboot.nix
···
-
{
-
pkgs,
-
config,
-
lib,
-
...
-
}:
-
# see https://github.com/nix-community/lanzaboote/blob/master/docs/QUICK_START.md
-
let
-
cfg = config.gensokyo.presets;
-
in
-
lib.mkIf cfg.secureboot {
-
environment.systemPackages = [ pkgs.sbctl ];
-
-
# lanzaboote currently replaces systemd-boot, so disable that here.
-
boot.loader.systemd-boot.enable = lib.mkForce false;
-
boot.lanzaboote = {
-
enable = true;
-
pkiBundle = "/var/lib/sbctl";
-
};
-
}
-50
global/gensokyo/presets/vmetrics.nix
···
-
{
-
hostname,
-
lib,
-
config,
-
_utils,
-
...
-
}:
-
let
-
secrets = _utils.setupSecrets config {
-
namespace = "vmetrics";
-
secrets = [ "auth" ];
-
};
-
in
-
{
-
# inb4 this causes conflicts
-
config = lib.mkIf config.gensokyo.presets.vmetrics (
-
lib.mkMerge [
-
{
-
services.prometheus.exporters.node.enable = true;
-
services.vmagent.enable = true;
-
services.vmagent.remoteWrite.url = "https://panopticon.soopy.moe/api/v1/write";
-
services.vmagent.extraArgs = [ "-remoteWrite.bearerTokenFile=%d/auth_token" ];
-
services.vmagent.prometheusConfig = {
-
global.scrape_interval = "30s";
-
-
scrape_configs = [
-
{
-
job_name = "node";
-
static_configs = [
-
{ targets = [ "localhost:${builtins.toString config.services.prometheus.exporters.node.port}" ]; }
-
];
-
relabel_configs = [
-
{
-
target_label = "instance";
-
replacement = "${hostname}.d.soopy.moe";
-
}
-
];
-
}
-
];
-
};
-
-
systemd.services.vmagent.serviceConfig.LoadCredential = [
-
"auth_token:${secrets.get "auth"}"
-
];
-
}
-
-
secrets.generate
-
]
-
);
-
}
-14
global/gensokyo/traits.nix
···
-
{ lib, ... }:
-
{
-
options.gensokyo.traits = {
-
sensitive = lib.mkEnableOption "or selectively disable options specific to security-sensitive systems";
-
gui = lib.mkEnableOption "graphical programs, related packages and modules";
-
games = lib.mkEnableOption "games and etc";
-
hidpi = lib.mkEnableOption "options tailored for hidpi devices";
-
portable = lib.mkEnableOption ''
-
modules commonly found with portable devices.
-
-
This includes stuff like Wifi modules and etc
-
'';
-
};
-
}
-34
global/gui/audio.nix
···
-
{
-
pkgs,
-
lib,
-
config,
-
...
-
}:
-
lib.mkIf config.gensokyo.traits.gui {
-
services = {
-
pipewire = {
-
enable = true;
-
-
audio.enable = true;
-
jack.enable = true;
-
pulse.enable = true;
-
alsa = {
-
enable = true;
-
support32Bit = true;
-
};
-
-
wireplumber.configPackages = [
-
# why aren't these consistent
-
(pkgs.writeTextDir "share/wireplumber/wireplumber.conf.d/50-disable-alsa-suspend.conf" ''
-
monitor.alsa.rules = [{
-
matches = [{node.name = "~alsa_output.*"}]
-
actions = {
-
update-props = {session.suspend-timeout-seconds = 0}
-
}
-
}]
-
'')
-
];
-
};
-
};
-
security.rtkit.enable = true;
-
}
-12
global/gui/browser.nix
···
-
{
-
pkgs,
-
lib,
-
config,
-
...
-
}:
-
lib.mkIf config.gensokyo.traits.gui {
-
programs.firefox = {
-
enable = true;
-
package = pkgs.firefox-devedition;
-
};
-
}
-23
global/gui/default.nix
···
-
{ ... }:
-
{
-
imports = [
-
./power.nix
-
./hardware.nix
-
./input.nix
-
./audio.nix
-
-
./wine.nix
-
./locale.nix
-
-
./dm.nix
-
./wayland.nix
-
./kde.nix
-
./fonts.nix
-
-
./browser.nix
-
./development.nix
-
-
./degeneracy.nix
-
./packages.nix
-
];
-
}
-21
global/gui/degeneracy.nix
···
-
{
-
pkgs,
-
lib,
-
config,
-
...
-
}:
-
lib.mkIf config.gensokyo.traits.gui {
-
environment.systemPackages = [
-
pkgs.dosage-tracker
-
pkgs.signal-desktop
-
(pkgs.discord.override {
-
withOpenASAR = true;
-
})
-
];
-
-
# some things work better with flatpaks
-
services.flatpak.enable = true;
-
-
# this is in degeneracy because no one likes printers
-
services.printing.enable = true;
-
}
-16
global/gui/development.nix
···
-
{
-
pkgs,
-
lib,
-
config,
-
...
-
}:
-
lib.mkIf config.gensokyo.traits.gui {
-
environment.systemPackages = [
-
pkgs.sshfs
-
pkgs.vscodium
-
-
# school requirement
-
pkgs.eclipses.eclipse-java
-
pkgs.mars-mips
-
];
-
}
-20
global/gui/dm.nix
···
-
{
-
config,
-
lib,
-
pkgs,
-
...
-
}:
-
lib.mkIf config.gensokyo.traits.gui {
-
services.displayManager.sddm = {
-
enable = true;
-
autoNumlock = true;
-
wayland.enable = true;
-
theme = "catppuccin-frappe";
-
};
-
-
environment.systemPackages = [
-
(pkgs.catppuccin-sddm.override {
-
flavor = "frappe";
-
})
-
];
-
}
-45
global/gui/fonts.nix
···
-
{
-
pkgs,
-
lib,
-
config,
-
inputs,
-
...
-
}:
-
lib.mkIf config.gensokyo.traits.gui {
-
fonts.packages = [
-
pkgs.nerd-fonts.hurmit
-
pkgs.nerd-fonts.fira-mono
-
-
pkgs.cozette
-
pkgs.fira-code
-
pkgs.noto-fonts
-
pkgs.noto-fonts-cjk-sans
-
pkgs.noto-fonts-emoji-blob-bin
-
-
inputs.mystia.packages.${pkgs.system}.nishiki-teki
-
];
-
-
fonts.fontconfig = {
-
localConf = ''
-
<?xml version="1.0"?>
-
<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
-
<fontconfig>
-
<!-- XML is stupid -->
-
-
<alias binding="same">
-
<family>Nishiki-Teki</family>
-
<prefer>
-
<family>Noto Sans CJK JP</family>
-
</prefer>
-
<default><family>sans-serif</family></default>
-
</alias>
-
-
<selectfont>
-
<rejectfont>
-
<pattern><patelt name="family"><string>FreeMono</string></patelt></pattern>
-
</rejectfont>
-
</selectfont>
-
</fontconfig>
-
'';
-
};
-
}
-16
global/gui/hardware.nix
···
-
{
-
pkgs,
-
lib,
-
config,
-
...
-
}:
-
lib.mkIf config.gensokyo.traits.gui {
-
# other devices support modules
-
-
hardware.keyboard.qmk.enable = true;
-
environment.systemPackages = [
-
pkgs.via
-
];
-
-
programs.kdeconnect.enable = true;
-
}
-20
global/gui/input.nix
···
-
{
-
pkgs,
-
lib,
-
config,
-
...
-
}:
-
lib.mkIf config.gensokyo.traits.gui {
-
i18n.inputMethod = {
-
enable = true;
-
type = "fcitx5";
-
-
fcitx5 = {
-
waylandFrontend = true;
-
addons = with pkgs; [
-
fcitx5-mozc
-
fcitx5-rime
-
];
-
};
-
};
-
}
-17
global/gui/kde.nix
···
-
{
-
lib,
-
config,
-
pkgs,
-
...
-
}:
-
lib.mkIf config.gensokyo.traits.gui {
-
services.desktopManager.plasma6.enable = true;
-
-
environment.systemPackages = with pkgs.kdePackages; [
-
qtmultimedia # this fixes something but i forgot what
-
-
kalk
-
kdf
-
kmime
-
];
-
}
-8
global/gui/locale.nix
···
-
{
-
config,
-
lib,
-
...
-
}:
-
lib.mkIf config.gensokyo.traits.gui {
-
i18n.supportedLocales = [ "all" ];
-
}
-16
global/gui/packages.nix
···
-
{
-
pkgs,
-
lib,
-
config,
-
inputs,
-
...
-
}:
-
lib.mkIf config.gensokyo.traits.gui {
-
environment.systemPackages = [
-
pkgs.vlc
-
pkgs.flameshot
-
pkgs.libnotify
-
pkgs.thunderbird
-
inputs.ghostty.packages.${pkgs.system}.default
-
];
-
}
-29
global/gui/power.nix
···
-
{
-
lib,
-
config,
-
...
-
}:
-
lib.mkIf config.gensokyo.traits.gui {
-
services.logind = {
-
# settings.Login = {
-
# KillUserProcesses = false;
-
# HandleSuspendKey = "lock";
-
# HandleHibernateKey = "lock";
-
# HandleLidSwitch = "lock";
-
# IdleAction = "lock";
-
# };
-
};
-
-
# hopefully eradicate buggy shid
-
systemd.targets =
-
lib.genAttrs
-
[
-
# "sleep"
-
# "suspend"
-
"hibernate"
-
"hybrid-sleep"
-
]
-
(_: {
-
enable = false;
-
});
-
}
-12
global/gui/wayland.nix
···
-
{
-
lib,
-
config,
-
...
-
}:
-
lib.mkIf config.gensokyo.traits.gui {
-
environment.sessionVariables = {
-
# wayland crap
-
NIXOS_OZONE_WL = "1";
-
MOZ_ENABLE_WAYLAND = "1";
-
};
-
}
-16
global/gui/wine.nix
···
-
{
-
config,
-
lib,
-
pkgs,
-
...
-
}:
-
lib.mkIf config.gensokyo.traits.gui {
-
environment.systemPackages = [
-
pkgs.wineWowPackages.full
-
pkgs.winetricks
-
-
(pkgs.bottles.override {
-
removeWarningPopup = true;
-
})
-
];
-
}
-20
global/home.nix
···
-
{
-
config,
-
inputs,
-
...
-
}:
-
{
-
home-manager = {
-
useGlobalPkgs = true;
-
useUserPackages = true;
-
verbose = true;
-
-
sharedModules = [
-
inputs.catppuccin.homeModules.catppuccin
-
];
-
-
extraSpecialArgs = {
-
inherit (config.gensokyo) traits;
-
};
-
};
-
}
+4 -3
global/overlays/default.nix
···
-
inputs: [
-
# we can probably live without an overlay?
-
# inputs.mystia.overlays.default
+
inputs:
+
with inputs; [
+
mystia.overlays.default
+
attic.overlays.default
]
-4
global/programs/compat.nix
···
-
{ ... }:
-
{
-
programs.nix-ld.enable = true;
-
}
+9
global/programs/compilers.nix
···
+
{pkgs, ...}: {
+
environment.systemPackages = with pkgs; [
+
luajit
+
binutils
+
libclang
+
libgccjit
+
gnumake
+
];
+
}
+4 -8
global/programs/default.nix
···
-
{ ... }:
-
{
+
{...}: {
imports = [
-
./nix
-
+
./nix.nix
./editors.nix
./shells.nix
./multiplexers.nix
-
./compat.nix
+
./compilers.nix
-
./networking.nix
./ssh.nix
./scm.nix
-
./security
+
./gpg.nix
-
./system-manager
./misc.nix
];
}
+2 -8
global/programs/editors.nix
···
-
{ pkgs, ... }:
-
{
+
{...}: {
programs.neovim = {
enable = true;
-
defaultEditor = false;
+
defaultEditor = true;
viAlias = true;
vimAlias = true;
};
-
-
environment.systemPackages = with pkgs; [
-
helix
-
];
-
environment.variables.EDITOR = "hx";
}
+7
global/programs/gpg.nix
···
+
{pkgs, ...}: {
+
environment.systemPackages = with pkgs; [gnupg pinentry];
+
+
programs.gnupg.agent.enable = true;
+
# ideally this should be set automatically but in case that doesn't work
+
#programs.gnupg.agent.pinentryFlavor = "curses"; # we don't have a gui.
+
}
+7 -35
global/programs/misc.nix
···
-
{ pkgs, ... }:
-
{
+
{pkgs, ...}: {
# Miscellaneous packages that do not have an option.
# It is recommended to use packages.<package>.enable when possible.
+
# To search for a specific package, run this command.
+
# $ nix search wget
environment.systemPackages = with pkgs; [
-
# junk
wget
curl
-
xh
-
gh
-
nil
-
nvd
-
nix-output-monitor
-
python3
-
ffmpeg-full
-
ghostty.terminfo
-
# irc
-
catgirl
-
pounce
-
-
# basic sysadmin utils
-
jq
file
ripgrep
ack
-
du-dust
-
parallel
-
cryptsetup
-
borgbackup
-
doggo
-
libarchive
-
unar
-
man-pages
-
htop-vim
-
# security
-
openssl
-
yubikey-manager
-
sops
-
opensc
-
-
# deno
deno
-
# command runners and utilities
+
nvd
just
-
inotify-tools
+
+
attic
+
git-crypt
];
programs.mtr.enable = true;
+1 -4
global/programs/multiplexers.nix
···
-
{ pkgs, ... }:
-
{
+
{pkgs, ...}: {
programs.tmux = {
enable = true;
newSession = true;
keyMode = "vi";
-
escapeTime = 0; # why
-
terminal = "tmux-direct";
historyLimit = 10000;
# Rationale: being able to keep sessions open is more important than
-47
global/programs/networking.nix
···
-
{
-
lib,
-
config,
-
...
-
}:
-
lib.mkMerge [
-
{
-
networking.networkmanager.enable = true;
-
networking.domain = "d.soopy.moe";
-
-
services.avahi = {
-
enable = true;
-
nssmdns4 = true;
-
};
-
-
services.tailscale.enable = true;
-
services.tailscale.useRoutingFeatures = "both";
-
-
# disable broken services
-
systemd.services.NetworkManager-wait-online.enable = false;
-
-
# reduce spam
-
networking.firewall.logRefusedConnections = lib.mkDefault false;
-
-
# use tcp bbr for increased throughput
-
boot.kernel.sysctl = {
-
"net.core.default_qdisc" = "fq";
-
"net.ipv4.tcp_congestion_control" = "bbr";
-
};
-
}
-
-
(lib.mkIf config.gensokyo.traits.portable {
-
networking.networkmanager.wifi.backend = "wpa_supplicant";
-
})
-
-
(lib.mkIf (!config.gensokyo.traits.sensitive) {
-
services.avahi = {
-
publish.enable = true;
-
};
-
})
-
-
{
-
networking.hosts = {
-
"217.197.84.140" = [ "codeberg.org" ];
-
};
-
}
-
]
-68
global/programs/nix/config.nix
···
-
{
-
inputs,
-
config,
-
pkgs,
-
lib,
-
...
-
}:
-
# some items are sourced from https://jackson.dev/post/nix-reasonable-defaults/
-
lib.mkMerge [
-
{
-
nix.package = pkgs.nixVersions.latest;
-
-
nix.settings = {
-
experimental-features = [
-
"nix-command"
-
"flakes"
-
"ca-derivations"
-
];
-
-
allowed-uris = [
-
"github:"
-
"git+https://patchy.soopy.moe/"
-
"git+https://github.com/"
-
"git+ssh://github.com/"
-
];
-
-
substituters = [
-
"https://cache.soopy.moe"
-
];
-
-
trusted-substituters = [
-
"https://cache.soopy.moe"
-
];
-
-
trusted-public-keys = [
-
"cache.soopy.moe-1:0RZVsQeR+GOh0VQI9rvnHz55nVXkFardDqfm4+afjPo="
-
];
-
-
fallback = true;
-
connect-timeout = 30;
-
max-jobs = "auto";
-
auto-optimise-store = true;
-
};
-
-
nix.gc = {
-
automatic = true;
-
dates = "weekly";
-
};
-
-
nix.registry = {
-
n.flake = inputs.nixpkgs;
-
}
-
// (builtins.mapAttrs (_: flake: { inherit flake; }) (
-
lib.filterAttrs (n: _: n != "nixpkgs") inputs
-
));
-
-
# nix-index[-database]
-
programs.nix-index.enable = true;
-
programs.nix-index-database.comma.enable = true;
-
}
-
-
(lib.mkIf (!config.gensokyo.traits.sensitive) {
-
nix.settings.trusted-users = [
-
"@wheel"
-
"builder"
-
];
-
})
-
]
-7
global/programs/nix/default.nix
···
-
{ ... }:
-
{
-
imports = [
-
./config.nix
-
./dist-builds.nix
-
];
-
}
-70
global/programs/nix/dist-builds.nix
···
-
# Like distcc but not really
-
{
-
lib,
-
inputs,
-
config,
-
hostname,
-
...
-
}:
-
let
-
baselineFeatures = [
-
"big-parallel"
-
"ca-derivations"
-
];
-
-
mkBuildMachines =
-
attr:
-
let
-
cleanAttr = builtins.removeAttrs attr [ hostname ];
-
in
-
lib.mapAttrsToList (
-
name: value:
-
{
-
hostName = name + ".mist-nessie.ts.net";
-
-
protocol = "ssh"; # nevermind we need hydra
-
sshUser = "builder";
-
sshKey = config.sops.secrets.builder_key.path;
-
-
speedFactor = 1;
-
maxJobs = 2;
-
supportedFeatures = baselineFeatures;
-
-
systems = [
-
"i686-linux"
-
"x86_64-linux"
-
];
-
}
-
// value
-
) cleanAttr;
-
in
-
{
-
sops.secrets.builder_key = {
-
sopsFile = inputs.self + "/creds/sops/global/id_builder";
-
format = "binary";
-
};
-
-
nix.distributedBuilds = true;
-
nix.settings.builders-use-substitutes = true;
-
nix.buildMachines = mkBuildMachines {
-
renko = {
-
supportedFeatures = baselineFeatures ++ [
-
"kvm"
-
"nixos-test"
-
];
-
speedFactor = 5;
-
publicHostKey = "c3NoLWVkMjU1MTkgQUFBQUMzTnphQzFsWkRJMU5URTVBQUFBSUoreGNleXA4YnRVNnd0dThpRUFKMkZ4cm5rZlBsS1M3TWFJL2xLT0ZuUDEgcm9vdEByZW5rbwo=";
-
};
-
nijika = {
-
systems = [ "aarch64-linux" ];
-
publicHostKey = "c3NoLWVkMjU1MTkgQUFBQUMzTnphQzFsWkRJMU5URTVBQUFBSVBsWGZ5MnMxejRIQ05oem92Rk55UzBhcCtyMEF2ZzAzNDlKeFFjMW0xaFEK";
-
};
-
};
-
-
services.openssh.extraConfig = lib.mkAfter ''
-
Match User builder
-
Banner none
-
PasswordAuthentication no
-
KbdInteractiveAuthentication no
-
'';
-
}
+33
global/programs/nix.nix
···
+
{pkgs, ...}:
+
# some items are sourced from https://jackson.dev/post/nix-reasonable-defaults/
+
{
+
nix.settings = {
+
experimental-features = [
+
"nix-command"
+
"flakes"
+
"repl-flake"
+
];
+
+
substituters = [
+
"https://nonbunary.soopy.moe/gensokyo-systems/"
+
"https://nonbunary.soopy.moe/gensokyo-global/"
+
];
+
+
trusted-substituters = [
+
"https://nonbunary.soopy.moe/gensokyo-systems/"
+
"https://nonbunary.soopy.moe/gensokyo-global/"
+
];
+
+
trusted-public-keys = [
+
"gensokyo-systems:r/Wx649dPuQrCN9Pgh3Jic526zQNk3oWMqYJHnob/Ok="
+
"gensokyo-global:XiCN0D2XeSxF4urFYTprR+1Nr/5hWyydcETwZtPG6Ec="
+
];
+
+
fallback = true;
+
connect-timeout = 30;
+
max-jobs = "auto";
+
auto-optimise-store = true;
+
};
+
+
nix.package = pkgs.nixFlakes;
+
}
+1 -7
global/programs/scm.nix
···
-
{ pkgs, ... }:
-
{
+
{...}: {
programs.git = {
enable = true;
config = {
init.defaultBranch = "main";
push.autoSetupRemote = true;
-
gpg.ssh.allowedSignersFile = pkgs.writeText "soopyc.allowedsigners" ''
-
me@soopy.moe namespaces="git" ${builtins.readFile ../../creds/ssh/auth}
-
'';
-
-
rebase.autoStash = true;
};
};
}
-18
global/programs/security/crypto.nix
···
-
# crypto stands for cryptography, not cryptocurrency
-
{ pkgs, ... }:
-
{
-
environment.systemPackages = with pkgs; [
-
gnupg
-
pinentry
-
opensc
-
-
rage
-
age-plugin-yubikey
-
];
-
-
programs.gnupg.agent.enable = true;
-
# ideally this should be set automatically but in case that doesn't work
-
#programs.gnupg.agent.pinentryFlavor = "curses"; # we don't have a gui.
-
-
services.pcscd.enable = true;
-
}
-9
global/programs/security/default.nix
···
-
{ ... }:
-
{
-
imports = [
-
./crypto.nix
-
./sudo.nix
-
./pam.nix
-
./firewall.nix
-
];
-
}
-17
global/programs/security/firewall.nix
···
-
{ ... }:
-
{
-
imports = [
-
./ip-bans.nix
-
];
-
-
networking.firewall = {
-
enable = true;
-
-
# this was never needed because ts has been bypassing the firewall anyways. (by being higher on the list.)
-
# trustedInterfaces = [
-
# "tailscale0"
-
# ];
-
};
-
-
# services.openssh.openFirewall = false;
-
}
-32
global/programs/security/ip-bans.nix
···
-
{ lib, ... }:
-
let
-
banned = {
-
ip = [
-
"156.229.232.142" # added 2025-04-10: minecraft server scanner with 30m intervals
-
"156.146.63.199" # added 2025-04-11: minecraft server scanner, found no contact methods
-
"167.86.121.64" # added 2025-04-24: minecraft server pinger, does not properly disconnect, no contacts
-
];
-
ip6 = [ ];
-
};
-
in
-
{
-
networking.firewall.extraCommands = builtins.concatStringsSep "\n" (
-
[
-
# i'd be damned if they rename the helper, but i also cba writing it *again*, for the same util to show up
-
# 3 times in the final script.
-
"ip46tables -N gensokyo-blackhole"
-
"ip46tables -I INPUT -j gensokyo-blackhole"
-
]
-
++ lib.flatten (
-
lib.mapAttrsToList (
-
family: ips: builtins.map (ip: "${family}tables -w -I gensokyo-blackhole -s ${ip} -j DROP") ips
-
) banned
-
)
-
);
-
-
networking.firewall.extraStopCommands = ''
-
ip46tables -D INPUT -j gensokyo-blackhole || true
-
ip46tables -F gensokyo-blackhole || true
-
ip46tables -X gensokyo-blackhole || true
-
'';
-
}
-18
global/programs/security/pam.nix
···
-
{
-
lib,
-
config,
-
...
-
}:
-
lib.mkMerge [
-
(lib.mkIf (!config.gensokyo.traits.sensitive) {
-
security.pam = {
-
rssh = {
-
enable = true;
-
# not released yet :moai:
-
# settings.cue = true;
-
};
-
-
services.sudo.rssh = true;
-
};
-
})
-
]
-7
global/programs/security/sudo.nix
···
-
{ pkgs, ... }:
-
{
-
security.sudo.extraConfig = ''
-
Defaults insults
-
'';
-
security.sudo.package = pkgs.sudo.override { withInsults = true; };
-
}
+1 -10
global/programs/shells.nix
···
-
{ pkgs, ... }:
-
{
+
{pkgs, ...}: {
users.defaultUserShell = pkgs.zsh;
programs.zsh = {
enable = true;
···
enable = true;
settings = builtins.fromTOML (builtins.readFile ./starship.toml);
};
-
-
programs.direnv = {
-
enable = true;
-
nix-direnv.enable = true;
-
};
-
-
# conflicts with comma
-
programs.command-not-found.enable = false;
}
+1 -36
global/programs/ssh.nix
···
-
{ config, ... }:
-
let
-
nixos = config.system.nixos;
-
in
-
{
+
{...}: {
# Enable the OpenSSH daemon.
services.openssh = {
enable = true;
settings = {
PermitRootLogin = "no";
PasswordAuthentication = false;
-
PubkeyAcceptedAlgorithms = "sk-ssh-ed25519@openssh.com,ssh-ed25519";
};
-
-
banner = ''
-
-----BEGIN BANNER-----
-
# Welcome to ${config.system.name}
-
# ${nixos.distroName} ${nixos.codeName} (${nixos.label})
-
i Trans rights are human rights
-
-
! You are currently accessing an internal resource. Your connection
-
! information, including but not limited to your authenticating IP address,
-
! username and the user you're attempting to log into are recorded.
-
! Disconnect IMMEDIATELY if you are not part of the authorized personnel.
-
-
i Contact:
-
i [Matrix] @sophie:nue.soopy.moe
-
i [Email] me@soopy.moe
-
------END BANNER------
-
'';
-
};
-
-
programs.ssh = {
-
startAgent = true;
-
pubkeyAcceptedKeyTypes = [
-
"ssh-ed25519"
-
"sk-ssh-ed25519@openssh.com"
-
];
-
# enableAskPassword = true;
-
-
extraConfig = ''
-
ConnectTimeout 5
-
''; # if things exceed 5 seconds to connect something has gone wrong. Fail fast to not wait.
};
}
+15 -50
global/programs/starship.toml
···
# Inserts a blank line between shell prompts
add_newline = true
-
right_format = """$os $shell $direnv"""
# Replace the 'โฏ' symbol in the prompt with 'โžœ'
[character] # The name of the module we are configuring is 'character'
success_symbol = '[โžœ](bold green)' # The 'success_symbol' segment is being set to 'โžœ' with the color 'bold green'
error_symbol = '[โžœ](bold red)'
-
[os]
-
disabled = false
-
style = "bold blue"
-
format = "on [$symbol($name)]($style)"
-
-
[[battery.display]]
-
threshold = 30
-
style = "bold red"
-
-
[[battery.display]]
-
threshold = 60
-
style = "bold yellow"
-
-
[[battery.display]]
-
threshold = 80
-
style = "bold green"
-
[username]
show_always = true
···
map_symbol = true
pipestatus = true
-
sigint_symbol = '๎€‰'
-
not_executable_symbol = "๏ž"
-
not_found_symbol = '๏„จ'
-
signal_symbol = '๏ƒง'
+
sigint_symbol = '^C'
+
not_found_symbol = '?'
+
signal_symbol = 'SIG'
-
[shell]
-
disabled = false
-
format = 'with [๓ฐ† $indicator]($style)'
-
style = 'bold green'
-
-
[nix_shell]
-
symbol = "๏Œ“ "
-
format = 'via [$symbol$name$state]($style) '
-
impure_msg = ''
-
pure_msg = '(pure)'
-
unknown_msg = '(?)'
-
heuristic = true
-
-
[hostname]
-
ssh_symbol = "๓ฐ’ "
-
ssh_only = false
+
[[battery.display]]
+
threshold = 100
+
style = "bold green"
[time]
disabled = false
[cmd_duration]
min_time = 0
-
show_milliseconds = true
-
-
[direnv]
-
disabled = false
-
style = "bold orange"
-
format = "with [$symbol$allowed]($style)"
-
allowed_msg = "๏€Œ" # loaded and accepted by user
-
not_allowed_msg = "๏„จ" # loaded, user never allowed/denied
-
denied_msg = "๏ž" # loaded, user explicitly denied
[aws]
symbol = "๎Œฝ "
···
[hg_branch]
symbol = "๏˜ "
+
+
[hostname]
+
ssh_symbol = "๎ฌ "
+
ssh_only = false
+
[java]
symbol = "๎‰– "
···
[nim]
symbol = "๓ฐ†ฅ "
+
+
[nix_shell]
+
symbol = "๏Œ“ "
[nodejs]
symbol = "๎œ˜ "
···
[package]
symbol = "๓ฐ— "
-
[pijul_channel] # ????
+
[pijul_channel]
symbol = "๐Ÿชบ "
[python]
···
[spack]
symbol = "๐Ÿ…ข "
-
-
# vim:foldmethod=marker
-25
global/programs/system-manager/default.nix
···
-
{
-
pkgs,
-
config,
-
lib,
-
...
-
}:
-
let
-
types = lib.types;
-
cfg = config.gensokyo.system-manager;
-
in
-
{
-
options.gensokyo.system-manager = {
-
enable = lib.mkEnableOption "a shortcut to manage the system no matter where you are (in the system)";
-
flakeLocation = lib.mkOption {
-
type = types.path;
-
description = "The location of your system flake to manage.";
-
};
-
};
-
-
config = lib.mkIf cfg.enable {
-
environment.systemPackages = [
-
(pkgs.callPackage ./package.nix { inherit (cfg) flakeLocation; })
-
];
-
};
-
}
-25
global/programs/system-manager/package.nix
···
-
{
-
lib,
-
writeShellApplication,
-
flakeLocation,
-
}:
-
writeShellApplication {
-
name = "system";
-
meta = {
-
description = "A shortcut to run `just` in the local system flake directory.";
-
license = lib.licenses.cc0;
-
maintainers = with lib.maintainers; [ soopyc ];
-
};
-
-
# we could make this more robust by not using `just` and (hardcode?) commands in, but this is by far the easiest
-
# and the most versatile method. if it works, it works and i'm not going to overcomplicate this
-
text = ''
-
if [ ! -e ${flakeLocation} ]; then
-
echo "Could not find flake at ${flakeLocation}. Please reconfigure your system."
-
exit 1
-
fi
-
-
cd ${flakeLocation}
-
just "''${@:--l}"
-
'';
-
}
-9
global/sops.nix
···
-
{
-
hostname,
-
inputs,
-
...
-
}:
-
{
-
sops.age.sshKeyPaths = [ "/etc/ssh/ssh_host_ed25519_key" ];
-
sops.defaultSopsFile = "${inputs.self}/creds/sops/${hostname}/default.yaml";
-
}
+5
global/system/default.nix
···
+
{...}: {
+
imports = [
+
./firmware.nix
+
];
+
}
+4
global/system/firmware.nix
···
+
{...}: {
+
hardware.enableRedistributableFirmware = true;
+
services.fwupd.enable = true;
+
}
+2 -11
global/upgrade-diff.nix
···
# Thank you https://github.com/luishfonseca/dotfiles/blob/ab7625ec406b48493eda701911ad1cd017ce5bc1/modules/upgrade-diff.nix
-
{
-
lib,
-
pkgs,
-
...
-
}:
-
{
+
{pkgs, ...}: {
system.activationScripts.diff = {
supportsDryActivation = true;
text = ''
-
if [[ -e /run/current-system ]]; then
-
${lib.getExe pkgs.nvd} --color always --nix-bin-dir=${pkgs.nix}/bin diff /run/current-system "$systemConfig"
-
else
-
echo "Couldn't find /run/current-system. Are we booting? Exiting gracefully."
-
fi
+
${pkgs.nvd}/bin/nvd --nix-bin-dir=${pkgs.nix}/bin diff /run/current-system "$systemConfig"
'';
};
}
+23 -133
global/utils.nix
···
-
# Copyright (c) 2023 soopyc
-
# Permission is given to copy and use under the terms of Apache 2.0.
-
#
-
# you may copy-paste this entire file to anywhere else. just keep the comments.
-
# see /docs/src/utils/ for a usage guide
+
# see /docs/utils.md for a usage guide
{
inputs,
system,
...
-
}:
-
let
-
pkgs = inputs.nixpkgs.legacyPackages.${system};
-
lib = pkgs.lib;
-
in
-
rec {
-
mkVhost =
-
opts:
+
}: let
+
lib = inputs.nixpkgs.lib;
+
in rec {
+
mkVhost = opts:
lib.mkMerge [
{
forceSSL = lib.mkDefault true;
useACMEHost = lib.mkDefault "global.c.soopy.moe";
kTLS = lib.mkDefault true;
-
quic = lib.mkDefault true;
locations."/_cgi/error/" = {
alias = "${inputs.mystia.packages.${system}.staticly}/nginx_error_pages/";
};
-
-
# To override, mkForce {}
-
locations."= /robots.txt" = mkNginxFile {
-
filename = "robots.txt";
-
content = ''
-
# Please stop hammering and/or scraping our services.
-
User-Agent: *
-
Disallow: /
-
'';
-
};
-
extraConfig = ''
error_page 503 /_cgi/error/503.html;
error_page 502 /_cgi/error/502.html;
error_page 404 /_cgi/error/404.html;
-
add_header strict-transport-security "max-age=63072000; includeSubDomains; preload" always;
-
add_header alt-svc 'h3=":443";ma=86400' always;
'';
}
opts
];
-
mkSimpleProxy =
-
{
-
protocol ? "http",
-
host ? "localhost",
-
port ? null,
-
socketPath ? null,
-
location ? "/",
-
websockets ? false,
-
extraConfig ? { },
-
}:
-
assert lib.assertMsg (
-
port != null || socketPath != null
-
) "one of port or socketPath must be specified";
-
# i dislike logic gates
-
assert lib.assertMsg (
-
!(port != null && socketPath != null)
-
) "only one of port or socketPath may be specified at the same time";
-
assert lib.assertMsg (
-
socketPath != null -> host == "localhost"
-
) "setting host has no effect when socketPath is set";
-
assert lib.assertMsg (port != null -> builtins.isInt port) "port must be an integer if specified";
-
mkVhost (
-
lib.mkMerge [
-
extraConfig
-
{
-
locations."${location}" = {
-
proxyPass =
-
"${protocol}://"
-
+ (if (socketPath == null) then "${host}:${builtins.toString port}" else "unix:${socketPath}");
-
proxyWebsockets = websockets;
-
};
-
}
-
]
-
);
-
-
setupSecrets =
-
_config:
-
{
-
namespace ? (
-
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." ""
-
),
-
secrets,
-
config ? { },
-
}:
-
let
-
_r_ns = namespace + lib.optionalString (lib.stringLength namespace != 0) "/";
-
check =
-
path:
-
assert lib.assertMsg (lib.elem path secrets)
-
"secret path `${path}` is not defined in namespace `${namespace}`. (resolved to: ${_r_ns}${path})";
-
path;
-
getRealPath = path: _r_ns + check path;
-
in
-
builtins.addErrorContext "while setting up secrets with namespace ${namespace}" {
-
generate = {
-
sops.secrets = genSecrets namespace secrets config;
-
}; # i love trolling
-
get = path: _config.sops.secrets.${getRealPath path}.path;
-
-
placeholder = path: _config.sops.placeholder.${getRealPath path};
-
getTemplate = file: _config.sops.templates.${file}.path;
-
mkTemplate =
-
file: content:
-
builtins.addErrorContext "while generating sops template ${file}" {
-
sops.templates.${file} = {
-
inherit content;
-
}
-
// (builtins.removeAttrs config [ "content" ]);
-
# // (lib.optionalAttrs (builtins.hasAttr "owner" config) {inherit (config) owner;})
-
# // (lib.optionalAttrs (builtins.hasAttr "group" config) {inherit (config) group;});
-
};
-
};
-
-
genSecrets =
-
namespace: files: value:
-
lib.genAttrs (map (
-
x: namespace + lib.optionalString (lib.stringLength namespace != 0) "/" + x
-
) files) (_: value);
-
-
mkNginxFile =
-
{
-
filename ? "index.html",
-
content,
-
}:
-
builtins.addErrorContext "while creating a static nginx file ${filename}" (
-
let
-
contentDir =
-
assert lib.assertMsg (
-
builtins.typeOf content == "string"
-
) "content must be a string, got `${builtins.typeOf content}`";
-
builtins.toString (pkgs.writeTextDir filename content) + "/";
-
in
+
mkSimpleProxy = {
+
port,
+
protocol ? "http",
+
location ? "/",
+
websockets ? false,
+
extraConfig ? {},
+
}:
+
mkVhost (lib.mkMerge [
+
extraConfig
{
-
alias = contentDir;
-
tryFiles = "${filename} =500"; # if it can't find the file something has gone wrong.
+
locations."${location}" = {
+
proxyPass = "${protocol}://localhost:${toString port}";
+
proxyWebsockets = websockets;
+
};
}
-
);
+
]);
-
mkNginxJSON =
-
filename: attrset:
-
builtins.addErrorContext "while creating a static nginx JSON file ${filename}" (
-
assert lib.assertMsg (
-
builtins.typeOf attrset == "set"
-
) "expected argument type `set`, got `${builtins.typeOf attrset}` instead.";
-
mkNginxFile {
-
inherit filename;
-
content = builtins.toJSON attrset;
-
}
-
);
+
genSecrets = namespace: files: value:
+
lib.genAttrs (
+
map (x: namespace + lib.optionalString (lib.stringLength namespace != 0) "/" + x) files
+
) (_: value);
}
+13 -79
justfile
···
# friendship ended with Makefile
# I LOVE justFILE!!!!!!
-
# modules are unstable atm
-
# mod utils
-
-
true := "true"
-
# build the current configuration
-
build system="" +extra_args="":
-
nixos-rebuild -v -L --keep-going --accept-flake-config --log-format internal-json --flake .#{{system}} build \
-
{{extra_args}} |& nom --json
-
{{ if system == "" {"nvd diff /run/current-system result"} else {""} }}
-
-
# evaluate the configuration for a system
-
eval system:
-
nix eval .#nixosConfigurations.{{system}}.config.system.build.toplevel
+
build:
+
nixos-rebuild build --flake .#
# build and test the configuration, but don't switch
-
test system="":
-
nixos-rebuild -v -L test --flake .#{{system}} --accept-flake-config
-
-
deploy system:
-
nixos-rebuild switch --flake .#{{system}} --target-host {{system}} --use-remote-sudo -v -L --use-substitutes
-
-
dry-deploy system:
-
nixos-rebuild build --flake .#{{system}} --target-host {{system}} --use-remote-sudo -v -L --use-substitutes
+
test:
+
nixos-rebuild test --flake .#
# switch to the current configuration
-
switch system="": sudo_cache
-
sudo nixos-rebuild -v -L switch --flake .#{{system}} --accept-flake-config --keep-going
-
-
sw: switch
-
-
# literally nixos-rebuild boot with a different name
-
defer system="": sudo_cache
-
sudo nixos-rebuild -v -L boot --flake .#{{system}} --accept-flake-config
-
-
build-all: (for-all-systems 'build' 'true')
-
deploy-all: (for-all-systems 'deploy' '!system.config.gensokyo.traits.sensitive && (system.config.nixpkgs.hostPlatform.system == builtins.currentSystem)' true)
-
eval-all: (for-all-systems 'eval' 'true')
-
-
# check the flake
-
check:
-
nix flake check
-
-
# delete old nixos generations and GCs the store.
-
gc older_than="3d": sudo_cache
-
sudo nix profile wipe-history --profile /nix/var/nix/profiles/system --older-than {{older_than}}
-
sudo nix store gc -vL
+
switch:
+
nixos-rebuild switch --flake .#
# run utility programs
-
utils recipe="list" +extras="":
-
@echo "Running utils/{{recipe}}"
-
@just -d utils -f utils/justfile {{recipe}} {{extras}}
-
-
# commit ephemeral/auto-generated files
-
ephemeral:
-
git commit --gpg-sign -m "chore: update ephemeral files" users/cassie/ephemeral/
+
utils recipe="list":
+
@echo "Running utils/{{recipe}}"
+
@cd utils && just {{recipe}}
# update an input in the flake lockfile
update-input input:
-
nix flake lock --update-input {{input}}
-
-
# update everything in flake.lock and commit that
-
flake-update:
-
nix flake update --commit-lock-file
-
-
# list changes in the current config vs the system config
-
diff:
-
nvd diff /run/current-system result
-
-
# build a vm for a system
-
vm system run="true" bootloader="false":
-
nixos-rebuild -v -L build-vm{{if bootloader == "true" {"-with-bootloader"} else {""} }} --flake .#{{system}}
-
{{if run == true {"./result/bin/run-"+system+"-vm"} else {""} }}
-
-
[private]
-
sudo_cache:
-
@sudo -v
+
nix flake lock --update-input {{input}}
-
[private]
-
for-all-systems recipe filter ignore_failure="false":
-
#!/usr/bin/env bash
-
set -euxo pipefail
-
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
-
set +e
-
just {{recipe}} ${system}
-
if [ {{ if ignore_failure == true {""} else {"$? -ne 0 -o"} }} $? -eq 130 ]; then
-
exit 1;
-
fi
-
set -e
-
done
+
# build the flake on a non-nixos platform
+
ebuild system:
+
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
···
-
{
-
inputs,
-
pkgs,
-
}:
-
{
-
deadcode = pkgs.stdenvNoCC.mkDerivation {
-
name = "deadcode_check";
-
src = inputs.self;
-
dontPatch = true;
-
dontConfigure = true;
-
-
buildInputs = with pkgs; [ deadnix ];
-
buildPhase = ''
-
set -euo pipefail
-
-
deadnix -f .
-
echo "All done!"
-
'';
-
-
installPhase = "touch $out";
-
};
-
}
-17
nix/devshell.nix
···
-
{ pkgs, ... }:
-
{
-
default = pkgs.mkShellNoCC {
-
packages = [
-
pkgs.nixos-rebuild
-
pkgs.nvd
-
];
-
};
-
-
docs = pkgs.mkShellNoCC {
-
packages = with pkgs; [
-
mdbook
-
mdbook-admonish
-
mdbook-pagetoc
-
];
-
};
-
}
-5
nix/treefmt.nix
···
-
{ ... }:
-
{
-
projectRootFile = "flake.nix";
-
programs.nixfmt.enable = true;
-
}
+2 -5
nix.code-workspace
···
}
],
"settings": {
-
"deno.enable": true,
+
"deno.enable": true,
"deno.lint": true,
-
"deno.unstable": false,
-
"files.exclude": {
-
"result": true
-
}
+
"deno.unstable": false
}
}
-41
systems/default.nix
···
-
{
-
lib,
-
inputs,
-
...
-
}:
-
let
-
utils = import ../global/utils.nix;
-
-
mkSystem =
-
hostname: system:
-
lib.nixosSystem {
-
specialArgs = {
-
inherit inputs;
-
-
hostname = hostname;
-
_utils = utils { inherit inputs system; };
-
};
-
-
modules = [
-
../global
-
./${hostname}/configuration.nix
-
./${hostname}/hardware-configuration.nix
-
-
{
-
home-manager.extraSpecialArgs = { inherit inputs; };
-
networking.hostName = hostname;
-
nixpkgs.hostPlatform = lib.mkDefault system; # ensure we detect conflicts
-
}
-
];
-
};
-
in
-
{
-
koumakan = mkSystem "koumakan" "x86_64-linux";
-
satori = mkSystem "satori" "x86_64-linux";
-
renko = mkSystem "renko" "x86_64-linux";
-
-
# cloud servers
-
kita = mkSystem "kita" "x86_64-linux";
-
ryo = mkSystem "ryo" "x86_64-linux";
-
nijika = mkSystem "nijika" "aarch64-linux";
-
}
-7
systems/kita/certificates/default.nix
···
-
{ ... }:
-
{
-
imports = [
-
./mail.nix
-
./web.nix
-
];
-
}
-14
systems/kita/certificates/mail.nix
···
-
{ config, ... }:
-
{
-
security.acme.certs."kita.c.soopy.moe" = {
-
group = config.services.maddy.group;
-
extraLegoRenewFlags = [
-
"--reuse-key"
-
];
-
extraDomainNames = [
-
"mx2.soopy.moe"
-
"imap.soopy.moe"
-
"smtp.soopy.moe"
-
];
-
};
-
}
-14
systems/kita/certificates/web.nix
···
-
{ ... }:
-
{
-
security.acme.certs."kita-web.c.soopy.moe" = {
-
group = "nginx";
-
extraDomainNames = [
-
"kita.soopy.moe"
-
"webmail.soopy.moe"
-
"mta-sts.soopy.moe"
-
"dav.soopy.moe"
-
"miku.soopy.moe"
-
"status.soopy.moe"
-
];
-
};
-
}
-17
systems/kita/configuration.nix
···
-
{ ... }:
-
{
-
imports = [
-
./certificates
-
./services
-
-
./networking.nix
-
];
-
-
zramSwap.enable = true;
-
gensokyo.presets = {
-
nginx = true;
-
vmetrics = true;
-
certificates = true;
-
};
-
system.stateVersion = "24.05";
-
}
-16
systems/kita/hardware-configuration.nix
···
-
{ modulesPath, ... }:
-
{
-
imports = [ (modulesPath + "/profiles/qemu-guest.nix") ];
-
boot.loader.grub.device = "/dev/sda";
-
boot.initrd.availableKernelModules = [
-
"ata_piix"
-
"uhci_hcd"
-
"xen_blkfront"
-
"vmw_pvscsi"
-
];
-
boot.initrd.kernelModules = [ "nvme" ];
-
fileSystems."/" = {
-
device = "/dev/sda1";
-
fsType = "ext4";
-
};
-
}
-52
systems/kita/networking.nix
···
-
{ lib, ... }:
-
{
-
# This file was populated at runtime with the networking
-
# details gathered from the active system.
-
networking = {
-
nameservers = [
-
"8.8.8.8"
-
];
-
defaultGateway = "172.31.1.1";
-
defaultGateway6 = {
-
address = "fe80::1";
-
interface = "eth0";
-
};
-
dhcpcd.enable = false;
-
usePredictableInterfaceNames = lib.mkForce false;
-
interfaces = {
-
eth0 = {
-
ipv4.addresses = [
-
{
-
address = "188.245.74.198";
-
prefixLength = 32;
-
}
-
];
-
ipv6.addresses = [
-
{
-
address = "2a01:4f8:1c1c:cc9d::cafe";
-
prefixLength = 64;
-
}
-
{
-
address = "fe80::9400:3ff:fe8b:9312";
-
prefixLength = 64;
-
}
-
];
-
ipv4.routes = [
-
{
-
address = "172.31.1.1";
-
prefixLength = 32;
-
}
-
];
-
ipv6.routes = [
-
{
-
address = "fe80::1";
-
prefixLength = 128;
-
}
-
];
-
};
-
};
-
};
-
services.udev.extraRules = ''
-
ATTR{address}=="96:00:03:8b:93:12", NAME="eth0"
-
'';
-
}
-12
systems/kita/services/default.nix
···
-
{ ... }:
-
{
-
imports = [
-
./fallback_page
-
./mail
-
-
./dns.nix
-
./postgresql.nix
-
./radicale.nix
-
./gatus.nix
-
];
-
}
-21
systems/kita/services/dns.nix
···
-
{ ... }:
-
{
-
services.pdns-recursor = {
-
enable = true;
-
-
dns = {
-
allowFrom = [
-
"127.0.0.0/8"
-
"10.0.0.0/8"
-
"100.64.0.0/10"
-
"169.254.0.0/16"
-
"192.168.0.0/16"
-
"172.16.0.0/12"
-
"::1/128"
-
"fc00::/7"
-
"fe80::/10"
-
"100.64.0.0/10" # tailscale
-
];
-
};
-
};
-
}
-16
systems/kita/services/fallback_page/default.nix
···
-
{
-
pkgs,
-
_utils,
-
...
-
}:
-
{
-
services.nginx.virtualHosts."_" = _utils.mkVhost {
-
useACMEHost = "kita-web.c.soopy.moe";
-
default = true;
-
-
locations."/" = {
-
root = pkgs.callPackage ./package.nix { };
-
tryFiles = "$uri $uri/index.html $uri.html =404";
-
};
-
};
-
}
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
···
-
<!doctype html>
-
<html lang="en">
-
<head>
-
<title>bokitar</title>
-
<meta name="description" content="gay women" />
-
<style>
-
img {width: 100%; height: 100%; object-fit: contain;}
-
</style>
-
</head>
-
-
<body>
-
<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>
-
</body>
-
</html>
-10
systems/kita/services/fallback_page/package.nix
···
-
{ stdenvNoCC }:
-
stdenvNoCC.mkDerivation (final: {
-
name = "kita-landing";
-
src = ./.;
-
-
installPhase = ''
-
mkdir $out
-
cp ${final.src}/* $out/
-
'';
-
})
-76
systems/kita/services/gatus.nix
···
-
{
-
_utils,
-
config,
-
...
-
}:
-
let
-
mkHttpEndpoint = name: group: url: {
-
inherit name url group;
-
enabled = true;
-
method = "GET";
-
conditions = [
-
"[STATUS] < 300"
-
"[CONNECTED] == true"
-
];
-
};
-
in
-
{
-
services.gatus = {
-
enable = true;
-
settings = {
-
storage.type = "sqlite";
-
storage.path = "/var/lib/gatus/data.db";
-
web.port = 33234;
-
ui = {
-
title = "Vitals | Gensokyo";
-
description = "Health checking of Gensokyo services, powered by Gatus.";
-
header = "Vitals";
-
buttons = [
-
{
-
name = "Incident Reports";
-
link = "https://status.soopy.moe";
-
}
-
];
-
};
-
-
endpoints = [
-
(mkHttpEndpoint "Main Site" "core" "https://soopy.moe")
-
-
(mkHttpEndpoint "Gateway (Kanidm)" "koumakan" "https://gateway.soopy.moe" // { enabled = false; }) # TODO
-
(mkHttpEndpoint "Patchy (Forgejo)" "koumakan" "https://patchy.soopy.moe")
-
(mkHttpEndpoint "Suika (Grafana)" "koumakan" "https://suika.soopy.moe/login")
-
(mkHttpEndpoint "Nue (Synapse)" "koumakan" "https://nue.soopy.moe/health")
-
(mkHttpEndpoint "Miniflux" "koumakan" "https://flux.soopy.moe")
-
(mkHttpEndpoint "Bluesky PDS" "koumakan" "https://bsky.soopy.moe/xrpc/_health")
-
(mkHttpEndpoint "Blog (Writefreely)" "koumakan" "https://words.soopy.moe")
-
(mkHttpEndpoint "Vaultwarden" "koumakan" "https://v.soopy.moe")
-
(mkHttpEndpoint "BreezeWiki" "koumakan" "https://bw.soopy.moe")
-
-
(mkHttpEndpoint "Webmail" "kita" "https://webmail.soopy.moe")
-
(mkHttpEndpoint "Radicale" "kita" "https://dav.soopy.moe/.web/")
-
{
-
enabled = true;
-
name = "Maddy";
-
group = "kita";
-
url = "starttls://mx2.soopy.moe:587";
-
interval = "5m";
-
conditions = [
-
"[CONNECTED] == true"
-
"[CERTIFICATE_EXPIRATION] > 10d"
-
];
-
}
-
-
(mkHttpEndpoint "Hydra" "bocchi" "https://hydra.soopy.moe")
-
-
(mkHttpEndpoint "noVNC" "ryo" "https://ryo.soopy.moe/vnc_lite.html")
-
];
-
};
-
};
-
-
services.nginx.virtualHosts."miku.soopy.moe" = _utils.mkSimpleProxy {
-
port = config.services.gatus.settings.web.port;
-
extraConfig = {
-
useACMEHost = "kita-web.c.soopy.moe";
-
};
-
};
-
}
-10
systems/kita/services/mail/default.nix
···
-
{ ... }:
-
{
-
imports = [
-
./roundcube.nix
-
-
./maddy.nix
-
./rspamd.nix
-
./mta-sts.nix
-
];
-
}
-188
systems/kita/services/mail/maddy.nix
···
-
{ config, ... }:
-
{
-
services.maddy = {
-
enable = true;
-
hostname = "mx2.soopy.moe";
-
primaryDomain = "soopy.moe";
-
localDomains = [
-
"$(primary_domain)"
-
"services.soopy.moe"
-
];
-
-
tls = {
-
loader = "file";
-
certificates = [
-
{
-
certPath = config.security.acme.certs."kita.c.soopy.moe".directory + "/fullchain.pem";
-
keyPath = config.security.acme.certs."kita.c.soopy.moe".directory + "/key.pem";
-
}
-
];
-
};
-
-
config = ''
-
auth.pass_table local_authdb {
-
table sql_table {
-
driver sqlite3
-
dsn credentials.db
-
table_name passwords
-
}
-
}
-
-
storage.imapsql local_mailboxes {
-
driver sqlite3
-
dsn imapsql.db
-
}
-
-
table.chain local_rewrites {
-
optional_step regexp "(.+)\+(.+)@(.+)" "$1@$3"
-
optional_step static {
-
entry postmaster postmaster@$(primary_domain)
-
}
-
optional_step file /etc/maddy/aliases
-
}
-
-
# catchall routing - thanks:
-
# https://github.com/foxcpp/maddy/issues/243#issuecomment-1406567636
-
msgpipeline local_routing {
-
# mailing list lmtp here
-
-
check {
-
rspamd
-
}
-
-
# do the rewrite so + addressing and stuff are correctly handled
-
modify {
-
replace_rcpt &local_rewrites
-
}
-
-
# destination_in block takes priority over destinations
-
destination_in &local_mailboxes {
-
deliver_to &local_mailboxes
-
}
-
-
# deliver to final address if we handle the domain
-
destination $(local_domains) {
-
modify {
-
replace_rcpt regexp ".*" "cassie@soopy.moe"
-
}
-
deliver_to &local_mailboxes
-
}
-
-
default_destination {
-
reject 550 5.1.1 "User doesn't exist"
-
}
-
}
-
-
smtp tcp://0.0.0.0:25 {
-
limits {
-
# Up to 20 msgs/sec across max. 10 SMTP connections
-
all rate 20 1s
-
all concurrency 10
-
}
-
-
# checks
-
dmarc yes
-
check {
-
require_mx_record
-
dkim
-
spf
-
}
-
-
source $(local_domains) {
-
reject 501 5.1.8 "Use internal submission port for outgoing SMTP"
-
}
-
default_source {
-
destination postmaster $(local_domains) {
-
deliver_to &local_routing
-
}
-
default_destination {
-
reject 550 5.1.1 "User doesn't exist"
-
}
-
}
-
}
-
-
# enable port 465 implicit tls and 587 submission
-
submission tls://0.0.0.0:465 tcp://0.0.0.0:587 {
-
limits {
-
all rate 50 1s
-
}
-
auth &local_authdb
-
source $(local_domains) {
-
check {
-
authorize_sender {
-
prepare_email &local_rewrites
-
user_to_email identity
-
}
-
}
-
destination postmaster $(local_domains) {
-
deliver_to &local_routing
-
}
-
default_destination {
-
# https://maddy.email/reference/modifiers/dkim/
-
modify {
-
modify.dkim {
-
domains $(primary_domain) $(local_domains)
-
selector 240821-rsa
-
newkey_algo rsa2048
-
}
-
modify.dkim {
-
domains $(primary_domain) $(local_domains)
-
selector 240821-ed
-
newkey_algo ed25519
-
}
-
}
-
-
deliver_to &remote_queue
-
}
-
}
-
default_source {
-
reject 501 5.1.8 "Non-local sender domain"
-
}
-
}
-
-
target.remote outbound_delivery {
-
limits {
-
destination rate 20 1s
-
destination concurrency 10
-
}
-
mx_auth {
-
dane
-
mtasts {
-
cache fs
-
fs_dir mtasts_cache/
-
}
-
local_policy {
-
min_tls_level encrypted
-
min_mx_level none
-
}
-
}
-
}
-
-
target.queue remote_queue {
-
target &outbound_delivery
-
autogenerated_msg_domain $(primary_domain)
-
bounce {
-
destination postmaster $(local_domains) {
-
deliver_to &local_routing
-
}
-
default_destination {
-
reject 550 5.0.0 "Refusing to send DSNs to non-local addresses"
-
}
-
}
-
}
-
-
# implicit tls port 993 imap
-
imap tls://0.0.0.0:993 {
-
auth &local_authdb
-
storage &local_mailboxes
-
}
-
'';
-
};
-
-
networking.firewall.allowedTCPPorts = [
-
25 # smtp
-
465 # submissions
-
587 # submission (starttls)
-
993 # imaps
-
];
-
}
-17
systems/kita/services/mail/mta-sts.nix
···
-
# mail-transfer-agent strict transport security policy
-
{ _utils, ... }:
-
{
-
services.nginx.virtualHosts."mta-sts.soopy.moe" = _utils.mkVhost {
-
useACMEHost = "kita-web.c.soopy.moe";
-
-
locations."/.well-known/" = _utils.mkNginxFile {
-
content = ''
-
version: STSv1
-
mode: enforce
-
max_age: 604800
-
mx: mx2.soopy.moe
-
'';
-
filename = "mta-sts.txt";
-
};
-
};
-
}
-45
systems/kita/services/mail/roundcube.nix
···
-
{
-
pkgs,
-
_utils,
-
...
-
}:
-
{
-
services.roundcube = {
-
enable = true;
-
package = pkgs.roundcube.withPlugins (
-
plugins: with plugins; [
-
carddav
-
contextmenu
-
]
-
);
-
dicts = with pkgs.aspellDicts; [ en ];
-
hostName = "webmail.soopy.moe";
-
-
extraConfig = ''
-
// ssl means implicit tls, NOT ssl. see roundcube docs for details.
-
$config['imap_host'] = [
-
'ssl://mx2.soopy.moe:993' => 'Gensokyo Mail Exchange',
-
];
-
// TODO: setup smtp and add related stuff here
-
$config['product_name'] = 'GensoNet Webmail';
-
$config['support_url'] = 'https://soopy.moe';
-
$config['prefer_html'] = false;
-
$config['plugins'] = [
-
'archive',
-
'emoticons',
-
'filesystem_attachments',
-
'hide_blockquote',
-
'identicon',
-
'newmail_notifier',
-
'reconnect',
-
'carddav',
-
'managesieve',
-
];
-
'';
-
};
-
-
services.nginx.virtualHosts."webmail.soopy.moe" = _utils.mkVhost {
-
enableACME = false;
-
useACMEHost = "kita-web.c.soopy.moe";
-
};
-
}
-54
systems/kita/services/mail/rspamd.nix
···
-
{
-
config,
-
_utils,
-
...
-
}:
-
let
-
secrets = _utils.setupSecrets config {
-
namespace = "rspamd";
-
secrets = [ "controller_passwd" ];
-
config.owner = config.users.users.rspamd.name;
-
};
-
in
-
{
-
imports = [
-
secrets.generate
-
(secrets.mkTemplate "rspamd-controller-pwd.inc" ''
-
password = "${secrets.placeholder "controller_passwd"}";
-
'')
-
];
-
services.rspamd = {
-
enable = true;
-
locals = {
-
"redis.conf".text = ''
-
servers = "${config.services.redis.servers.rspamd.unixSocket}";
-
'';
-
-
"milter_headers.conf".text = ''
-
use = ["x-spamd-result", "x-spamd-bar", "x-spam-status"];
-
'';
-
-
# global options, which is different from sections
-
"options.inc".text = ''
-
dns {
-
nameserver = "127.0.0.1:53";
-
}
-
'';
-
};
-
workers."controller".extraConfig = ''
-
.include(try=false; priority=10) "${secrets.getTemplate "rspamd-controller-pwd.inc"}"
-
'';
-
-
workers."normal".bindSockets = [ "127.0.0.1:11333" ];
-
};
-
-
services.redis.servers.rspamd.enable = true;
-
users.groups.redis-rspamd.members = [
-
config.users.users.rspamd.name
-
];
-
-
services.nginx.virtualHosts."_".locations."/rspamd" = {
-
proxyPass = "http://localhost:11334"; # maybe expose this to tailnet instead
-
extraConfig = "rewrite /rspamd/(.*) /$1 break;";
-
};
-
}
-14
systems/kita/services/postgresql.nix
···
-
{ pkgs, ... }:
-
{
-
services.postgresql = {
-
enable = true;
-
package = pkgs.postgresql_16; # we like to specify a package so we know what we're using.
-
ensureUsers = [
-
{
-
name = "maildb";
-
ensureDBOwnership = true;
-
}
-
];
-
ensureDatabases = [ "maildb" ];
-
};
-
}
-27
systems/kita/services/radicale.nix
···
-
{ _utils, ... }:
-
{
-
services.radicale = {
-
enable = true;
-
settings = {
-
auth = {
-
type = "htpasswd";
-
htpasswd_filename = "/etc/radicale/users";
-
htpasswd_encryption = "bcrypt";
-
};
-
storage = {
-
filesystem_folder = "/var/lib/radicale/collections"; # match StateDirectory
-
};
-
rights.type = "owner_only"; # make this explicit
-
};
-
};
-
-
systemd.tmpfiles.rules = [
-
"d /etc/radicale 0700 radicale" # rest parameters can be ignored/omitted as it's the same as setting a - value.
-
# 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.
-
];
-
-
services.nginx.virtualHosts."dav.soopy.moe" = _utils.mkSimpleProxy {
-
port = 5232;
-
extraConfig.useACMEHost = "kita-web.c.soopy.moe";
-
};
-
}
-6
systems/koumakan/administration/default.nix
···
-
{ ... }:
-
{
-
imports = [
-
./telemetry.nix
-
];
-
}
-19
systems/koumakan/administration/telemetry.nix
···
-
{ ... }:
-
{
-
services.prometheus.exporters = {
-
node = {
-
enable = true;
-
listenAddress = "127.0.0.1";
-
port = 20091;
-
enabledCollectors = [
-
"systemd"
-
];
-
};
-
-
nginx = {
-
enable = true;
-
listenAddress = "127.0.0.1";
-
port = 20101;
-
};
-
};
-
}
-11
systems/koumakan/certificates/breezewiki.nix
···
-
{ ... }:
-
{
-
# Certificate for breezewiki
-
security.acme.certs."bw.c.soopy.moe" = {
-
group = "nginx";
-
extraDomainNames = [
-
"bw.soopy.moe"
-
"*.bw.soopy.moe"
-
];
-
};
-
}
-11
systems/koumakan/certificates/bsky-pds.nix
···
-
{ ... }:
-
{
-
# Certificate for fedi services
-
security.acme.certs."bsky.c.soopy.moe" = {
-
group = "nginx";
-
extraDomainNames = [
-
"bsky.soopy.moe"
-
"*.bsky.soopy.moe"
-
];
-
};
-
}
+20 -4
systems/koumakan/certificates/default.nix
···
-
{ ... }:
-
{
+
{...}: {
imports = [
./global.nix
./postgresql.nix
./fediverse.nix
-
./bsky-pds.nix
-
./breezewiki.nix
];
+
+
security.acme = {
+
defaults = {
+
# == lego Configuration ==
+
credentialsFile = "/etc/lego/desec";
+
dnsProvider = "desec";
+
# In a more ideal world we would have an eddsa algo here but oh well
+
keyType = "ec256"; # Ensure we use ec keys
+
+
dnsResolver = "8.8.8.8:53";
+
+
# == LE Configuration ==
+
email = "me@soopy.moe";
+
# server = "https://acme-staging-v02.api.letsencrypt.org/directory";
+
server = "https://acme-v02.api.letsencrypt.org/directory";
+
};
+
+
acceptTerms = true;
+
};
}
+4 -3
systems/koumakan/certificates/fediverse.nix
···
-
{ ... }:
-
{
+
{...}: {
# Certificate for fedi services
security.acme.certs."fedi.c.soopy.moe" = {
group = "nginx";
extraDomainNames = [
-
"words.soopy.moe"
+
"a.soopy.moe"
+
"m.soopy.moe"
+
"pixie.soopy.moe"
];
};
}
+1 -2
systems/koumakan/certificates/global.nix
···
-
{ ... }:
-
{
+
{...}: {
# Global certificate
security.acme.certs."global.c.soopy.moe" = {
group = "nginx";
+8 -11
systems/koumakan/certificates/postgresql.nix
···
-
{ config, ... }:
-
{
+
{config, ...}: {
# PostgreSQL only certificate
security.acme.certs."phant.soopy.moe" = {
group = "postgres";
···
# https://nixos.org/manual/nixos/stable/#module-security-acme-root-owned
systemd.services.postgresql = {
-
requires = [ "acme-finished-phant.soopy.moe.target" ];
-
serviceConfig.LoadCredential =
-
let
-
certDir = config.security.acme.certs."phant.soopy.moe".directory;
-
in
-
[
-
"cert.pem:${certDir}/cert.pem"
-
"key.pem:${certDir}/key.pem"
-
];
+
requires = ["acme-finished-phant.soopy.moe.target"];
+
serviceConfig.LoadCredential = let
+
certDir = config.security.acme.certs."phant.soopy.moe".directory;
+
in [
+
"cert.pem:${certDir}/cert.pem"
+
"key.pem:${certDir}/key.pem"
+
];
};
}
+21 -18
systems/koumakan/configuration.nix
···
-
{ inputs, ... }:
-
{
+
{inputs, ...}: {
imports = [
-
inputs.mystia.nixosModules.fixups
-
inputs.mystia.nixosModules.vmauth
-
inputs.mystia.nixosModules.bsky-pds
-
inputs.hydra.nixosModules.hydra
-
inputs.whitelisted-web.nixosModules.default
-
inputs.knotserver-module.nixosModules.default
-
+
# Include the results of the hardware scan.
./hardware-configuration.nix
+
+
../../global/core.nix
+
../../global/programs
./networking
./certificates
./security
./services
-
-
./administration
];
-
gensokyo.traits = {
-
sensitive = true;
-
};
-
gensokyo.presets.secureboot = true;
-
gensokyo.presets.certificates = true;
+
nixpkgs.overlays = import ../../global/overlays inputs;
boot.loader = {
efi = {
canTouchEfiVariables = true;
-
efiSysMountPoint = "/boot";
+
efiSysMountPoint = "/boot/efi";
};
systemd-boot = {
enable = true;
graceful = true;
-
# netbootxyz.enable = true;
+
netbootxyz.enable = true;
};
grub.enable = false;
};
+
+
# Define a user account. Don't forget to set a password with โ€˜passwdโ€™.
+
users.users.cassie = {
+
isNormalUser = true;
+
extraGroups = ["wheel"];
+
openssh = {
+
authorizedKeys.keyFiles = [../../creds/ssh/cassie];
+
};
+
# packages = with pkgs; [];
+
};
+
+
sops.age.sshKeyPaths = ["/etc/ssh/ssh_host_ed25519_key"];
+
sops.defaultSopsFile = ../../creds/sops/koumakan.yaml;
# Just don't change this :p
system.stateVersion = "23.05"; # Did you read the comment?
+27
systems/koumakan/default.nix
···
+
{
+
lib,
+
utils,
+
inputs,
+
...
+
}:
+
lib.nixosSystem {
+
system = "x86_64-linux";
+
+
# see docs/tips_n_tricks.md#extra_opts for syntax
+
# see docs/utils.md for functions
+
specialArgs = {
+
inherit inputs;
+
_utils = utils {
+
inherit inputs;
+
system = "x86_64-linux";
+
};
+
};
+
+
modules = [
+
inputs.lanzaboote.nixosModules.lanzaboote
+
inputs.attic.nixosModules.atticd
+
inputs.sops-nix.nixosModules.sops
+
+
./configuration.nix
+
];
+
}
+41 -21
systems/koumakan/hardware-configuration.nix
···
{
config,
lib,
+
pkgs,
modulesPath,
...
-
}:
-
{
+
}: {
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
];
-
boot.initrd.availableKernelModules = [
-
"xhci_pci"
-
"ehci_pci"
-
"ahci"
-
"usbhid"
-
"usb_storage"
-
"sd_mod"
-
"sr_mod"
-
];
-
boot.initrd.kernelModules = [ ];
-
boot.kernelModules = [ "kvm-intel" ];
-
boot.extraModulePackages = [ ];
+
boot.initrd.availableKernelModules = ["xhci_pci" "ahci" "usbhid" "sr_mod"];
+
boot.initrd.kernelModules = ["dm-snapshot"];
+
boot.kernelModules = ["kvm-intel"];
+
boot.extraModulePackages = [];
fileSystems."/" = {
-
device = "/dev/disk/by-uuid/738969fe-b2a0-4fa1-9ac5-69f2a25536e7";
+
device = "/dev/disk/by-uuid/0b38be0c-5365-4f02-85b8-72f37bb2ddf8";
+
fsType = "btrfs";
+
};
+
+
fileSystems."/var/log" = {
+
device = "/dev/disk/by-uuid/e6ff7c96-3bef-4a17-9114-64ef1460fc00";
+
fsType = "btrfs";
+
};
+
+
fileSystems."/var/log/audit" = {
+
device = "/dev/disk/by-uuid/a20e2995-7297-4f69-af89-b58ff314e029";
+
fsType = "btrfs";
+
};
+
+
fileSystems."/srv/osm-data" = {
+
device = "/dev/disk/by-uuid/3c1a8b58-fbe6-4522-8e27-72419b3c2d6f";
fsType = "btrfs";
};
fileSystems."/boot" = {
-
device = "/dev/disk/by-uuid/62FD-C60A";
+
device = "/dev/disk/by-uuid/9E0F-3FDE";
fsType = "vfat";
-
options = [
-
"fmask=0022"
-
"dmask=0022"
-
];
+
};
+
+
fileSystems."/boot/efi" = {
+
device = "/dev/disk/by-uuid/9EB1-FA5A";
+
fsType = "vfat";
+
};
+
+
fileSystems."/srv/www/keine" = {
+
device = "/dev/disk/by-uuid/0a0e102a-b1ac-44a2-947b-2ec505b532ad";
+
fsType = "btrfs";
+
};
+
+
fileSystems."/home" = {
+
device = "/dev/disk/by-uuid/50165105-6b82-4228-9640-2d32ce45f76e";
+
fsType = "btrfs";
};
swapDevices = [
-
{ device = "/dev/disk/by-uuid/902b902d-3486-49de-9a58-7a079c9a090d"; }
+
{device = "/dev/disk/by-uuid/efd68464-2e0c-4aaf-8264-519dd7d05ddf";}
];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
···
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
+
# networking.interfaces.br0.useDHCP = lib.mkDefault true;
# networking.interfaces.eno1.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
+
powerManagement.cpuFreqGovernor = lib.mkDefault "ondemand";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}
+4 -2
systems/koumakan/networking/default.nix
···
-
{ ... }:
-
{
+
{...}: {
imports = [
./firewall.nix
./interface.nix
];
+
+
networking.hostName = "koumakan";
+
networking.networkmanager.enable = true;
}
+2 -19
systems/koumakan/networking/firewall.nix
···
-
{ lib, ... }:
-
{
+
{...}: {
networking.firewall = {
enable = true;
allowedTCPPorts = [
+
22 # ssh
80
443 # http[s]
-
-
# sftpgo
-
21 # ftp
-
];
-
-
allowedTCPPortRanges = [
-
# ftp passive mode
-
{
-
from = 50000;
-
to = 50100;
-
}
-
];
-
allowedUDPPorts = [
-
443 # https over quic (http3)
];
};
-
-
# allow openssh
-
services.openssh.openFirewall = lib.mkForce true;
}
+1 -2
systems/koumakan/networking/interface.nix
···
-
{ ... }:
-
{
+
{...}: {
networking.networkmanager.ethernet.macAddress = "stable";
}
+3 -2
systems/koumakan/security/default.nix
···
-
{ ... }:
-
{
+
{...}: {
imports = [
./pam.nix
+
./sudo.nix
+
./secureboot.nix
];
}
+1 -2
systems/koumakan/security/pam.nix
···
-
{ ... }:
-
{
+
{...}: {
security.pam.yubico = {
enable = true;
id = "91582";
+17
systems/koumakan/security/secureboot.nix
···
+
{
+
pkgs,
+
lib,
+
...
+
}: {
+
environment.systemPackages = with pkgs; [
+
cryptsetup
+
sbctl
+
];
+
+
# lanzaboote currently replaces systemd-boot, so disable that here.
+
boot.loader.systemd-boot.enable = lib.mkForce false;
+
boot.lanzaboote = {
+
enable = true;
+
pkiBundle = "/etc/secureboot";
+
};
+
}
+6
systems/koumakan/security/sudo.nix
···
+
{pkgs, ...}: {
+
security.sudo.extraConfig = ''
+
Defaults insults
+
'';
+
security.sudo.package = pkgs.sudo.override {withInsults = true;};
+
}
-38
systems/koumakan/services/anubis.nix
···
-
{
-
lib,
-
config,
-
...
-
}:
-
{
-
assertions = lib.mapAttrsToList (k: v: {
-
# assertion = v.settings.METRICS_BIND_NETWORK == "tcp" -> !builtins.isNull (builtins.match "127.0.0.1:.*" v.settings.METRICS_BIND);
-
assertion =
-
!builtins.isNull (builtins.match "^127.0.0.1:17[[:digit:]]\{3\}$" v.settings.METRICS_BIND); # stricter
-
message = "koumakan-internal(anubis `${k}`): settings.METRICS_BIND must be in the form `127.0.0.1:17xxx`";
-
}) config.services.anubis.instances;
-
-
# neither VM nor Prom supports scraping unix domain sockets and i currently cba writing a custom scraper for it
-
# prom: https://github.com/prometheus/prometheus/issues/12024
-
# TODO: do that
-
services.anubis.defaultOptions.settings = {
-
METRICS_BIND_NETWORK = "tcp";
-
DIFFICULTY = 4;
-
};
-
-
services.vmagent.prometheusConfig.scrape_configs = lib.mapAttrsToList (k: v: {
-
job_name = "anubis";
-
static_configs = lib.singleton {
-
targets = lib.singleton v.settings.METRICS_BIND;
-
};
-
relabel_configs = [
-
{
-
target_label = "instance";
-
replacement = "koumakan";
-
}
-
{
-
target_label = "anubis_instance";
-
replacement = k;
-
}
-
];
-
}) (lib.filterAttrs (_: v: v.enable) config.services.anubis.instances);
-
}
-24
systems/koumakan/services/arion/breezewiki.nix
···
-
{ _utils, ... }:
-
{
-
virtualisation.arion.projects.breezewiki.settings = {
-
services.breezewiki = {
-
service = {
-
image = "quay.io/pussthecatorg/breezewiki";
-
ports = [ "127.0.0.1:35612:10416" ];
-
environment = {
-
bw_canonical_origin = "https://bw.soopy.moe";
-
bw_log_outgoing = "false";
-
bw_strict_proxy = "true";
-
bw_feature_search_suggestions = "true";
-
};
-
};
-
};
-
};
-
-
services.nginx.virtualHosts.".bw.soopy.moe" = _utils.mkSimpleProxy {
-
port = 35612;
-
extraConfig = {
-
useACMEHost = "bw.c.soopy.moe";
-
};
-
};
-
}
-13
systems/koumakan/services/arion/default.nix
···
-
{
-
imports = [
-
./breezewiki.nix
-
./pixivfe.nix
-
];
-
-
virtualisation.arion.backend = "podman-socket";
-
virtualisation.podman = {
-
enable = true;
-
dockerSocket.enable = true;
-
defaultNetwork.settings.dns_enabled = true;
-
};
-
}
-80
systems/koumakan/services/arion/pixivfe.nix
···
-
{
-
_utils,
-
config,
-
lib,
-
...
-
}:
-
let
-
secrets = _utils.setupSecrets config {
-
namespace = "pixivfe";
-
secrets = [ "token" ];
-
};
-
in
-
{
-
imports = [
-
secrets.generate
-
(secrets.mkTemplate "pixivfe.env" ''
-
PIXIVFE_TOKEN=${secrets.placeholder "token"}
-
'')
-
];
-
-
virtualisation.arion.projects.pixivfe.settings = {
-
services.pixivfe.service = {
-
image = "vnpower/pixivfe:latest";
-
ports = [
-
"127.0.0.1:35284:8282"
-
];
-
capabilities = {
-
ALL = false; # drop all capabilities
-
};
-
environment = {
-
PIXIVFE_PORT = 8282;
-
PIXIVFE_HOST = "0.0.0.0";
-
PIXIVFE_IMAGEPROXY = "https://pximg.soopy.moe";
-
PIXIVFE_CACHE_ENABLED = "true";
-
};
-
env_file = lib.singleton (secrets.getTemplate "pixivfe.env");
-
};
-
};
-
-
services.nginx = {
-
# cash money
-
proxyCachePath."pximg" = {
-
enable = true;
-
maxSize = "10g";
-
inactive = "30d";
-
keysZoneName = "pximg";
-
};
-
-
virtualHosts."pximg.soopy.moe" = _utils.mkVhost {
-
locations."/" = {
-
recommendedProxySettings = false;
-
proxyPass = "https://i.pximg.net";
-
extraConfig = ''
-
# bypass
-
proxy_set_header Host i.pximg.net;
-
proxy_set_header Referer "https://www.pixiv.net/";
-
proxy_set_header User-Agent "Mozilla/5.0 (Windows NT 10.0; rv:133.0) Gecko/20100101 Firefox/133.0";
-
add_header x-cache-status $upstream_cache_status;
-
-
# cache config
-
proxy_cache pximg;
-
proxy_cache_lock on;
-
proxy_cache_valid 200 30d;
-
proxy_cache_valid 404 5m;
-
proxy_cache_revalidate on;
-
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
-
'';
-
};
-
locations."= /" = _utils.mkNginxFile {
-
content = ''
-
nope (i mean yes sure but nop)
-
'';
-
};
-
};
-
-
virtualHosts."pxv.soopy.moe" = _utils.mkSimpleProxy {
-
port = 35284;
-
};
-
};
-
}
+53
systems/koumakan/services/attic.nix
···
+
{
+
_utils,
+
pkgs,
+
...
+
}: let
+
# where tf are the docs for pkgs.formats??
+
toml = pkgs.formats.toml {};
+
in {
+
services.atticd = {
+
enable = true;
+
credentialsFile = "/etc/atticd.env";
+
+
# Per https://github.com/zhaofengli/attic/blob/b43d12082e34bceb26038bdad0438fd68804cfcd/server/src/config.rs#L252
+
# we can use the env var ATTIC_SERVER_DATABASE_URL to set the database connection url,
+
# ONLY IF database.url in config is unset.
+
# Since we cannot reasonably "unset" database with the default settings block, this will have to do.
+
# Please reach out if you know a better way!
+
configFile = toml.generate "server.toml" {
+
database = {};
+
storage = {
+
type = "local";
+
path = "/var/lib/atticd/storage";
+
};
+
+
listen = "127.0.0.1:38191";
+
allowed-hosts = [
+
"nonbunary.soopy.moe"
+
];
+
chunking = {
+
# The minimum NAR size to trigger chunking
+
nar-size-threshold = 64 * 1024; # 64 KiB
+
# The preferred minimum size of a chunk, in bytes
+
min-size = 16 * 1024; # 16 KiB
+
# The preferred average size of a chunk, in bytes
+
avg-size = 64 * 1024; # 64 KiB
+
# The preferred maximum size of a chunk, in bytes
+
max-size = 256 * 1024; # 256 KiB
+
};
+
};
+
};
+
+
services.nginx.virtualHosts."nonbunary.soopy.moe" = _utils.mkSimpleProxy {
+
port = 38191;
+
extraConfig = {
+
extraConfig = ''
+
client_max_body_size 1G;
+
proxy_read_timeout 3h;
+
proxy_connect_timeout 3h;
+
proxy_send_timeout 3h;
+
'';
+
};
+
};
+
}
-6
systems/koumakan/services/ci/default.nix
···
-
{ ... }:
-
{
-
imports = [
-
./hydra
-
];
-
}
-101
systems/koumakan/services/ci/hydra/default.nix
···
-
{
-
inputs,
-
pkgs,
-
_utils,
-
config,
-
lib,
-
...
-
}:
-
let
-
secrets = _utils.setupSecrets config {
-
namespace = "hydra";
-
secrets = [
-
"s3/key_id"
-
"s3/key_secret"
-
"signing_key/v1"
-
];
-
config = {
-
owner = config.users.users.hydra-www.name;
-
group = config.users.users.hydra-www.group;
-
mode = "0440";
-
};
-
};
-
-
webhookScript = pkgs.writeShellApplication {
-
name = "hydra-webhook";
-
runtimeInputs = with pkgs; [ xh ];
-
text = ''
-
xh :8000 @"$1"
-
'';
-
};
-
in
-
{
-
imports = [
-
secrets.generate
-
(secrets.mkTemplate "hydra-s3-creds" ''
-
[default]
-
aws_access_key_id = ${secrets.placeholder "s3/key_id"}
-
aws_secret_access_key = ${secrets.placeholder "s3/key_secret"}
-
'')
-
];
-
-
sops.templates."hydra-s3-creds" = {
-
owner = lib.mkForce config.users.users.hydra-queue-runner.name;
-
path = config.users.users.hydra-queue-runner.home + "/.aws/credentials";
-
};
-
sops.secrets.builder_key.owner = config.users.users.hydra-queue-runner.name;
-
-
services.hydra-dev = {
-
enable = true;
-
package = inputs.hydra.packages.${pkgs.system}.hydra;
-
-
listenHost = "127.0.0.1";
-
hydraURL = "https://hydra.soopy.moe";
-
-
useSubstitutes = true;
-
notificationSender = "hydra+noreply@services.soopy.moe";
-
-
logo = ./hydra.png;
-
# wow so tracker
-
tracker = ''
-
<link rel="icon" type="image/png" href="/logo" />
-
<style>
-
.logo {
-
margin-top: unset !important;
-
}
-
</style>
-
'';
-
-
extraConfig = ''
-
# conflicts with upload_logs_to_binary_cache
-
# compress_build_logs 1
-
-
max_output_size = 5368709120 # 5 << 30 (5 GiB)
-
upload_logs_to_binary_cache = true
-
store_uri = s3://nix-cache?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"}
-
-
binary_cache_public_uri = https://cache.soopy.moe
-
log_prefix = https://cache.soopy.moe/
-
-
<git-input>
-
timeout = 1800
-
</git-input>
-
-
# ad hoc webhook
-
<runcommand>
-
job = *:*:*
-
#command = ${webhookScript} $HYDRA_JSON
-
command = cat $HYDRA_JSON >> /tmp/hydra-notify-runcommand.json
-
</runcommand>
-
'';
-
};
-
-
services.nginx.virtualHosts."hydra.soopy.moe" = _utils.mkSimpleProxy {
-
port = 3000;
-
extraConfig = {
-
locations."/metrics" = {
-
return = "444";
-
};
-
};
-
};
-
}
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
···
-
{ ... }:
-
{
+
{...}: {
imports = [
./postgresql.nix
./redis.nix
+22 -30
systems/koumakan/services/databases/postgresql.nix
···
-
{
-
pkgs,
-
lib,
-
...
-
}:
-
{
+
{pkgs, ...}: {
services.postgresql = {
enable = true;
package = pkgs.postgresql_15;
dataDir = "/var/lib/postgresql/15";
+
logLinePrefix = "%m [%p] %h ";
-
authentication = lib.mkForce ''
+
authentication = ''
# unix socket connection
-
local hydra all ident map=hydra-users
local all all peer
# local ipv4/6 tcp connection
host all all 127.0.0.1/32 scram-sha-256
host all all ::1/128 scram-sha-256
+
# world (encrypted) tcp traffic
+
hostssl all all all scram-sha-256
'';
-
settings =
-
let
-
credsDir = "/run/credentials/postgresql.service";
-
in
-
{
-
listen_addresses = pkgs.lib.mkForce "*";
-
max_connections = 200;
-
password_encryption = "scram-sha-256";
+
settings = let
+
credsDir = "/run/credentials/postgresql.service";
+
in {
+
listen_addresses = pkgs.lib.mkForce "*";
+
max_connections = 200;
+
password_encryption = "scram-sha-256";
-
log_line_prefix = "%m [%p] %h ";
-
ssl = "on";
-
ssl_cert_file = "${credsDir}/cert.pem";
-
ssl_key_file = "${credsDir}/key.pem";
+
ssl = "on";
+
ssl_cert_file = "${credsDir}/cert.pem";
+
ssl_key_file = "${credsDir}/key.pem";
-
log_hostname = true;
-
datestyle = "iso, dmy";
-
log_timezone = "Asia/Hong_Kong";
-
timezone = "Asia/Hong_Kong";
-
default_text_search_config = "pg_catalog.english";
+
log_hostname = true;
+
datestyle = "iso, dmy";
+
log_timezone = "Asia/Hong_Kong";
+
timezone = "Asia/Hong_Kong";
+
default_text_search_config = "pc_catalog.english";
-
max_wal_size = "2GB";
-
min_wal_size = "80MB";
-
};
+
max_wal_size = "2GB";
+
min_wal_size = "80MB";
+
};
};
-
-
users.users.postgres.useDefaultShell = lib.mkForce false;
}
+1 -2
systems/koumakan/services/databases/redis.nix
···
-
{ ... }:
-
{
+
{...}: {
services.redis.servers."" = {
enable = true;
};
+3 -16
systems/koumakan/services/default.nix
···
-
{ ... }:
-
{
+
{...}: {
imports = [
./nginx.nix
-
./anubis.nix
-
# "containers" in a burning text gif
-
./arion
+
./databases
-
# Gensokyo local stuff
-
./ftp.nix
+
./attic.nix
# fediverse
./matrix
./fediverse
-
./feeds
-
./ci
-
./databases
-
./games
-
./mirror
./proxies
-
./scm
-
./security
./static-sites
-
./storage
-
./telemetry
];
}
+150
systems/koumakan/services/fediverse/akkoma.nix
···
+
{
+
_utils,
+
pkgs,
+
config,
+
lib,
+
...
+
}: let
+
mkRaw = (pkgs.formats.elixirConf {}).lib.mkRaw;
+
# I don't know what i did but i made this abomination
+
mkSecret = file:
+
if !lib.elem file secrets
+
then throw "Provided secret file ${file} is not in the list of defined secrets."
+
else {_secret = "/run/secrets/akkoma/${file}";};
+
secrets = [
+
"joken_default_signer" # can't think of any better name spacing
+
"dist/cookie"
+
"search/meili/host_unencrypted"
+
"search/meili/key"
+
"endpoint/secret_base"
+
"endpoint/salt"
+
"endpoint/live_view/salt"
+
"vapid/pub"
+
"vapid/key"
+
"postgres/hostname"
+
"postgres/database_unencrypted"
+
"postgres/username"
+
"postgres/password"
+
"smtp/username"
+
"smtp/password"
+
"smtp/relay"
+
];
+
in {
+
# secrets definition
+
sops.secrets = _utils.genSecrets "akkoma" secrets {};
+
+
services.akkoma = {
+
enable = true;
+
initSecrets = false;
+
initDb.enable = false;
+
# TODO: figure out how to add swagger ui
+
# frontends = {
+
# swagger
+
# };
+
+
# TODO: Issue #5
+
dist.cookie = mkSecret "dist/cookie";
+
config = {
+
":joken".":default_signer" = mkSecret "joken_default_signer";
+
+
":pleroma" = {
+
":http_security" = {
+
sts = true;
+
};
+
+
":configurable_from_database" = true;
+
":instance" = {
+
name = "CassieAkko";
+
description = "You should not see this here...";
+
email = "me@soopy.moe";
+
notify_email = "noreply@a.soopy.moe";
+
limit = 5000;
+
registrations_open = true;
+
};
+
+
# TODO: add proper proxy support
+
# also refer to https://meta.akkoma.dev/t/another-vector-for-the-injection-vulnerability-found/483
+
":media_proxy" = {
+
enabled = true;
+
redirect_on_failure = true;
+
};
+
+
"Pleroma.Repo" = {
+
adapter = mkRaw "Ecto.Adapters.Postgres";
+
database = mkSecret "postgres/database_unencrypted";
+
hostname = mkSecret "postgres/hostname";
+
username = mkSecret "postgres/username";
+
password = mkSecret "postgres/password";
+
};
+
+
"Pleroma.Upload" = {
+
filters = [
+
(mkRaw "Pleroma.Upload.Filter.Exiftool")
+
(mkRaw "Pleroma.Upload.Filter.Dedupe")
+
];
+
};
+
+
"Pleroma.Web.Endpoint" = {
+
# We don't need to specify http ip/ports here because we use unix sockets
+
# ok we do because it's broken
+
http = {
+
ip = "127.0.0.1";
+
port = 35378;
+
};
+
url = {
+
host = "a.soopy.moe";
+
scheme = "https";
+
port = 443;
+
};
+
secure_cookie_flag = true;
+
+
secret_key_base = mkSecret "endpoint/secret_base";
+
signing_salt = mkSecret "endpoint/salt";
+
live_view = {
+
signing_salt = mkSecret "endpoint/live_view/salt";
+
};
+
};
+
+
"Pleroma.Emails.Mailer" = {
+
adapter = mkRaw "Swoosh.Adapters.SMTP";
+
relay = mkSecret "smtp/relay";
+
username = mkSecret "smtp/username";
+
password = mkSecret "smtp/password";
+
};
+
+
"Pleroma.Search.Meilisearch" = {
+
url = mkSecret "search/meili/host_unencrypted";
+
private_key = mkSecret "search/meili/key";
+
initial_indexing_chunk_size = 100000;
+
};
+
};
+
+
":web_push_encryption".":vapid_details" = {
+
subject = "mailto:me@soopy.moe";
+
public_key = mkSecret "vapid/pub";
+
private_key = mkSecret "vapid/key";
+
};
+
};
+
+
nginx = _utils.mkVhost {
+
useACMEHost = "fedi.c.soopy.moe";
+
extraConfig = ''
+
client_max_body_size 100M;
+
'';
+
};
+
+
extraStatic = {
+
"static/terms-of-service.html" = pkgs.writeText "terms-of-service.html" ''
+
<h1>Terms of Service</h1><p>Please refer to this ToS:
+
<a href="https://m.soopy.moe/@admin/pages/tos" rel="noopener noreferrer nofollow">
+
https://m.soopy.moe/@admin/pages/tos</a></p>
+
'';
+
# refer to https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/servers/akkoma/emoji/blobs_gg.nix#L29
+
# "emoji/Cat_girls_Emoji" = ...
+
};
+
};
+
+
systemd.services.akkoma-config = {
+
serviceConfig.SupplementaryGroups = [config.users.groups.keys.name];
+
};
+
}
-42
systems/koumakan/services/fediverse/bsky-pds.nix
···
-
{
-
inputs,
-
pkgs,
-
config,
-
_utils,
-
...
-
}:
-
let
-
secrets = _utils.setupSecrets config {
-
namespace = "pds";
-
secrets = [
-
"email/address"
-
"email/url"
-
];
-
config.owner = config.services.bsky-pds.user;
-
};
-
in
-
{
-
imports = [ secrets.generate ];
-
services.bsky-pds = {
-
enable = true;
-
package = inputs.mystia.packages.${pkgs.system}.bsky-pds;
-
-
# because sensible settings are already defined in the module, we can keep this simple :)
-
settings = {
-
PDS_HOSTNAME = "bsky.soopy.moe";
-
PDS_CONTACT_EMAIL_ADDRESS = "me@soopy.moe";
-
};
-
credentials = {
-
PDS_EMAIL_SMTP_URL = secrets.get "email/url";
-
PDS_EMAIL_FROM_ADDRESS = secrets.get "email/address";
-
};
-
};
-
-
services.nginx.virtualHosts.".bsky.soopy.moe" = _utils.mkSimpleProxy {
-
port = 2583;
-
websockets = true;
-
extraConfig = {
-
useACMEHost = "bsky.c.soopy.moe";
-
};
-
};
-
}
+2 -4
systems/koumakan/services/fediverse/default.nix
···
-
{ ... }:
-
{
+
{...}: {
imports = [
-
./writefreely.nix
-
./bsky-pds.nix
+
./akkoma.nix
];
}
-40
systems/koumakan/services/fediverse/writefreely.nix
···
-
{
-
config,
-
_utils,
-
lib,
-
# inputs,
-
# pkgs,
-
...
-
}:
-
{
-
services.writefreely = {
-
enable = true;
-
# package = inputs.nixpkgs-wf.legacyPackages.${pkgs.system}.writefreely;
-
host = "words.soopy.moe";
-
settings = {
-
server.port = 31294;
-
app = {
-
host = "https://${config.services.writefreely.host}"; # annoying
-
site_name = "Kourindou";
-
site_description = "Words of Gensokyo, sprinkled with a little bit of technology";
-
-
max_blogs = 0;
-
open_registration = false;
-
user_invites = "user";
-
default_visibility = "public";
-
-
federation = false;
-
public_stats = true;
-
min_username_len = 5;
-
local_timeline = true;
-
};
-
};
-
nginx.enable = true;
-
admin.name = "soopyc";
-
};
-
-
services.nginx.virtualHosts.${config.services.writefreely.host} = _utils.mkVhost {
-
forceSSL = lib.mkForce true;
-
useACMEHost = "fedi.c.soopy.moe";
-
};
-
}
-6
systems/koumakan/services/feeds/default.nix
···
-
{ ... }:
-
{
-
imports = [
-
./miniflux.nix
-
];
-
}
-16
systems/koumakan/services/feeds/miniflux.nix
···
-
{ _utils, ... }:
-
{
-
services.miniflux = {
-
enable = true;
-
config = {
-
LISTEN_ADDR = "127.0.0.1:34723";
-
BASE_URL = "https://flux.soopy.moe/";
-
WEBAUTHN = 1;
-
CREATE_ADMIN = 0;
-
};
-
};
-
-
services.nginx.virtualHosts."flux.soopy.moe" = _utils.mkSimpleProxy {
-
port = 34723;
-
};
-
}
-73
systems/koumakan/services/ftp.nix
···
-
# {inputs, config, hostname, ...}: {
-
{
-
config,
-
inputs,
-
...
-
}:
-
{
-
sops.secrets = {
-
"vsftpdUsers.db" = {
-
sopsFile = inputs.self + "/creds/sops/koumakan/vsftpdUsers.db";
-
owner = config.users.users.vsftpd.name;
-
format = "binary";
-
};
-
-
"webdav.scan.htpasswd" = {
-
sopsFile = inputs.self + "/creds/sops/koumakan/webdav.scan.htpasswd";
-
owner = config.users.users.vsftpd.name;
-
format = "binary";
-
};
-
};
-
-
users = {
-
users.vsftpd = {
-
uid = 3000;
-
home = "/var/www/ftp";
-
};
-
groups.vsftpd.gid = 3000;
-
};
-
-
services.vsftpd = {
-
enable = true;
-
enableVirtualUsers = true;
-
localRoot = "/var/www/ftp";
-
localUsers = true;
-
virtualUseLocalPrivs = true;
-
writeEnable = true;
-
-
userDbPath = "/run/secrets/vsftpdUsers";
-
userlistEnable = true;
-
userlist = [
-
"brother_scan"
-
];
-
-
extraConfig = ''
-
pasv_min_port=50000
-
pasv_max_port=50100
-
'';
-
};
-
-
services.webdav-server-rs = {
-
user = "vsftpd";
-
group = "vsftpd";
-
enable = true;
-
settings = {
-
server.listen = [ "100.100.16.16:38563" ];
-
accounts.auth-type = "htpasswd.default";
-
-
htpasswd.default.htpasswd = config.sops.secrets."webdav.scan.htpasswd".path;
-
unix.min-uid = 1000;
-
-
location = [
-
{
-
route = [ "/*path" ];
-
auth = "true";
-
handler = "filesystem";
-
methods = [ "webdav-rw" ];
-
-
directory = "/var/www/ftp";
-
}
-
];
-
};
-
};
-
}
-3
systems/koumakan/services/games/default.nix
···
-
{
-
imports = [ ./whitelisted-web.nix ];
-
}
-68
systems/koumakan/services/games/whitelisted-assets/tos/en.md
···
-
# server code of conduct
-
-
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`.
-
by proceeding, you accept and agree to follow this document in full.
-
-
if you do not agree, you must not click the button below to gain access.
-
-
we don't like legalese either, so we will try to keep this as short as possible.
-
please note that while this is **not** a legally binding document, you are still subject to punishments for violating this code of conduct.
-
-
## explicitly allowed actions
-
-
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.
-
-
- not indemnifying this server, server owners and server staff
-
- this means you can talk shit about the admins.
-
- 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)
-
- share derogatory memes **only about** shit world leaders and shit corporations
-
- be brilliant to each other
-
-
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.
-
-
## disallowed actions
-
-
you are not allowed to do anything in the following list, unless explicitly permitted by server admins in a gpg or ssh-signed message.
-
-
1. entice hate or violence against anyone regardless of their identity, status, anything.
-
2. partake in any form of bullying
-
3. vandalize, destroy or cause any form of damage against structures built by players without their permission
-
- 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.
-
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.)
-
- 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.
-
- we have a system tracking lag spikes. please do not think you can get away with making a lag machine.
-
5. failing to cease any action after being asked to stop.
-
- including but not limited to: (repeatedly) killing players, sending insufferable messages, etc.
-
-
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.
-
-
## moderative actions
-
-
violating any of the rules set forth above may result in the following actions.
-
-
- **temporary** removal from the server (tempban; ranging from 1 hour to 30 days)
-
- **permanent** removal from the server **for this season** (permban for one season)
-
- **permanent** removal from the server **forever** (permban)
-
-
note that this list is not exhaustive, but we hope we never have to do anything not listed here.
-
-
there is **<span style="font-size: 2em">no</span>** appeal process. you really have to be a prick to get banned.
-
-
## reserved rights
-
-
admins and moderators reserves the right to the following:
-
-
- modifying any section of this code of conduct at anytime
-
- taking [moderative] actions against any user in their own discretion
-
-
## contact
-
-
for any matter regarding the server, please contact the owner with any of the following methods (in order of preference)
-
-
- signal: @soopyc.64
-
- email: [mc+season2025@soopy.moe](mailto:mc+season2025@soopy.moe)
-
- discord: [2a01.4f8.1c1c.cc9d.0.0.0.cafe](https://discord.com/users/397273885701177347)
-
-
_last modified: `Mon, 22 Sep 2025 12:50:23 +0800`_
-
-
[moderative]: https://en.wiktionary.org/wiki/moderative#English
-52
systems/koumakan/services/games/whitelisted-web.nix
···
-
{ _utils, config, ... }:
-
let
-
secrets = _utils.setupSecrets config {
-
namespace = "whitelisted-web";
-
secrets = [
-
"entra_secret"
-
"turnstile_key"
-
"ipc_token"
-
];
-
};
-
in
-
{
-
imports = [
-
secrets.generate
-
(secrets.mkTemplate "whitelisted-web.env" ''
-
ENTRA_CLIENT_SECRET="${secrets.placeholder "entra_secret"}"
-
TURNSTILE_SECRET_KEY="${secrets.placeholder "turnstile_key"}"
-
SHARED_IPC_TOKEN="${secrets.placeholder "ipc_token"}"
-
'')
-
];
-
-
gensokyo.services.whitelisted-web = {
-
enable = true;
-
-
buildConfig = {
-
PUBLIC_STATIC_CONTACT_INFO = ''{"Email": "mailto:Sophie Cheung <me@soopy.moe>"}'';
-
};
-
-
extraAssets = ./whitelisted-assets;
-
-
settings = {
-
PORT = "30274";
-
PUBLIC_URL = "https://mc.soopy.moe";
-
PUBLIC_TOS_URI_TEMPLATE = "/tos/{LANG}.md";
-
PUBLIC_SERVER_IP = "mc.soopy.moe"; # the public minecraft server IP
-
PUBLIC_TURNSTILE_SITEID = "0x4AAAAAABifUhFToAkxeZDM";
-
PUBLIC_ENTRA_CLIENT_ID = "807b9c9e-69c9-4b9f-b020-01dbf256623b";
-
};
-
-
environmentFile = secrets.getTemplate "whitelisted-web.env";
-
};
-
-
services.nginx.virtualHosts."mc.soopy.moe" = _utils.mkVhost {
-
locations."/" = {
-
proxyPass = "http://127.0.0.1:30274";
-
};
-
-
locations."/map/" = {
-
proxyPass = "http://renko.mist-nessie.ts.net:8100/";
-
};
-
};
-
}
+1 -2
systems/koumakan/services/matrix/default.nix
···
-
{ ... }:
-
{
+
{...}: {
imports = [
./synapse.nix
];
+20 -58
systems/koumakan/services/matrix/synapse.nix
···
{
_utils,
pkgs,
-
lib,
config,
-
inputs,
...
-
}:
-
let
-
getSocket = file: "/run/matrix-synapse/${file}.sock";
-
staticly = inputs.mystia.packages.${pkgs.system}.staticly;
-
in
-
{
+
}: {
sops.secrets."synapse.yaml" = {
mode = "0400";
owner = config.users.users.matrix-synapse.name;
···
owner = config.users.users.matrix-synapse.name;
};
-
users.users.matrix-synapse.shell = lib.mkForce pkgs.shadow;
+
users.users.matrix-synapse.extraGroups = [config.users.groups.keys.name];
services.matrix-synapse = {
enable = true;
-
enableRegistrationScript = false;
-
configureRedisLocally = true; # workers support
-
withJemalloc = true;
extras = [
"jwt"
···
"/run/secrets/synapse.yaml"
];
-
workers = {
-
federation-sender-0 = { };
-
pusher-0 = { };
-
};
-
settings = {
server_name = "nue.soopy.moe";
serve_server_wellknown = true;
allow_public_rooms_over_federation = true;
federation_client_minimum_tls_version = 1.2;
-
-
listeners = [
-
{
-
path = getSocket "mistress";
-
resources = [
-
{
-
names = [
-
"client" # implies ["media" "static"]
-
"federation"
-
"keys"
-
"openid"
-
"replication"
-
];
-
}
-
];
-
}
-
];
-
-
# workers
-
instance_map.main.path = getSocket "mistress";
-
federation_sender_instances = [
-
"federation-sender-0"
-
];
-
pusher_instances = [
-
"pusher-0"
-
];
-
# TODO: Setup TURN servers
# TODO: Setup OIDC providers
# TODO: Configure email
+
# TODO: Setup opentracing
url_preview_enabled = true;
enable_registration = false;
session_lifetime = "99y";
···
system_mxid_display_name = "Server Notices";
room_name = "Server Notices";
};
-
-
allow_device_name_lookup_over_federation = true;
trusted_key_servers = [
{
···
};
services.postgresql = {
-
ensureDatabases = [ "synapse" ];
+
ensureDatabases = ["synapse"];
ensureUsers = [
{
name = "synapse";
-
ensureDBOwnership = true;
+
ensurePermissions = {
+
"database \"synapse\"" = "all privileges";
+
};
}
];
};
-
users.users.nginx.extraGroups = [ "matrix-synapse" ];
services.nginx.virtualHosts."nue.soopy.moe" = _utils.mkVhost {
-
extraConfig = ''
-
access_log off;
-
'';
+
locations."= /config.json" = {
+
alias = "${pkgs.staticly}/configs/";
+
tryFiles = "cinny.json =404";
+
extraConfig = ''
+
add_header access_control_allow_origin "*";
+
'';
+
};
-
locations."= /.well-known/matrix/server" = _utils.mkNginxJSON "server" {
-
"m.server" = "nue.soopy.moe:443";
+
locations."= /.well-known/matrix/server" = {
+
return = "200 '{\"m.server\": \"nue.soopy.moe:443\"}'";
};
-
locations."~ ^(/_matrix|/_synapse/client|/health)" = {
-
proxyPass = "http://unix:${getSocket "mistress"}";
+
locations."~ ^(/_matrix|/_synapse/client)" = {
+
proxyPass = "http://localhost:8008";
extraConfig = ''
client_max_body_size 100M;
'';
};
locations."= /.well-known/matrix/client" = {
-
alias = "${staticly}/configs/matrix/";
+
alias = "${pkgs.staticly}/configs/matrix/";
tryFiles = "stable.json =404";
};
locations."/" = {
-
root = "${staticly}/pages/matrix/landing/";
+
root = "${pkgs.staticly}/pages/matrix/landing/";
tryFiles = "$uri $uri/index.html $uri.html =404";
};
};
-36
systems/koumakan/services/mirror/archt2.nix
···
-
{ pkgs, ... }:
-
{
-
systemd = {
-
# TODO: make this a gensokyo module
-
timers."mirror-sync-t2" = {
-
after = [ "network-online.target" ];
-
wants = [ "network-online.target" ];
-
wantedBy = [ "multi-user.target" ];
-
timerConfig = {
-
OnCalendar = "*:30";
-
RandomizedDelaySec = "600s";
-
DeferReactivation = true;
-
Persistent = true;
-
};
-
};
-
-
services."mirror-sync-t2" = {
-
path = [ pkgs.rsync ];
-
script = ''
-
mkdir -p \
-
/var/lib/mirrors/arch-mact2 \
-
/var/lib/mirrors/endeavouros-t2
-
-
rsync -rlptHvh --progress --safe-links --delete-delay --delay-updates \
-
rsync://mirror.funami.tech/arch-mact2 /var/lib/mirrors/arch-mact2
-
-
rsync -rlptHvh --progress --safe-links --delete-delay --delay-updates \
-
rsync://mirror.funami.tech/endeavouros-t2 /var/lib/mirrors/endeavouros-t2
-
'';
-
-
serviceConfig = {
-
User = "mirror-worker";
-
};
-
};
-
};
-
}
-29
systems/koumakan/services/mirror/default.nix
···
-
{ _utils, config, ... }:
-
{
-
imports = [
-
./archt2.nix
-
];
-
-
users.groups."mirror-worker" = { };
-
users.users."mirror-worker" = {
-
isSystemUser = true;
-
group = "mirror-worker";
-
};
-
-
services.nginx.virtualHosts."mirror.soopy.moe" = _utils.mkVhost {
-
locations."/" = {
-
root = "/var/lib/mirrors";
-
extraConfig = "autoindex on;";
-
};
-
};
-
-
services.nginx.virtualHosts."keine.soopy.moe".globalRedirect = "mirror.soopy.moe";
-
-
# provision a directory for mirrors
-
systemd.tmpfiles.settings."10-mirrors" = {
-
"/var/lib/mirrors".d = {
-
mode = "0755";
-
user = config.users.users.mirror-worker.name;
-
};
-
};
-
}
+8 -5
systems/koumakan/services/nginx.nix
···
-
{ pkgs, ... }:
-
{
-
gensokyo.presets.nginx = true;
-
-
users.users.nginx.extraGroups = [ "anubis" ];
+
{pkgs, ...}: {
services.nginx = {
enable = true;
+
enableReload = true;
+
package = pkgs.nginxMainline;
+
clientMaxBodySize = "50m";
+
statusPage = true;
+
+
recommendedTlsSettings = true;
+
recommendedProxySettings = true;
additionalModules = with pkgs.nginxModules; [
fancyindex
brotli
+1 -4
systems/koumakan/services/proxies/default.nix
···
-
{ ... }:
-
{
+
{...}: {
imports = [
./nitter.nix
-
./searxng.nix
-
./minio.nix
];
}
-104
systems/koumakan/services/proxies/minio.nix
···
-
{
-
_utils,
-
lib,
-
config,
-
inputs,
-
...
-
}:
-
let
-
secrets = _utils.setupSecrets config {
-
namespace = "minio";
-
secrets = [
-
"root_user"
-
"root_pass"
-
"vmetrics_token"
-
];
-
};
-
in
-
{
-
imports = [
-
secrets.generate
-
(secrets.mkTemplate "minio.env" ''
-
MINIO_ROOT_USER=${secrets.placeholder "root_user"}
-
MINIO_ROOT_PASSWORD=${secrets.placeholder "root_pass"}
-
'')
-
];
-
-
services.minio = {
-
enable = true;
-
region = "ap-east-1";
-
listenAddress = "127.0.0.1:26531";
-
rootCredentialsFile = secrets.getTemplate "minio.env";
-
};
-
-
# stupid module design
-
systemd.services.minio.environment = {
-
MINIO_BROWSER_REDIRECT_URL = "https://s3.soopy.moe/_static";
-
MINIO_BROWSER_LOGIN_ANIMATION = "false";
-
};
-
-
services.nginx.virtualHosts = {
-
"s3.soopy.moe" = _utils.mkSimpleProxy {
-
port = 26531;
-
extraConfig = {
-
extraConfig = ''
-
client_max_body_size 32G;
-
'';
-
-
locations."= /_static" = _utils.mkNginxFile {
-
content = ''
-
<!doctype html>
-
<html lang="en">
-
<head>
-
<title>horrors of gensokyo</title>
-
<style>
-
:root {font-family: "monospace";}
-
</style>
-
</head>
-
<body>
-
<h1>gensokyo filedump - public buckets</h1>
-
<ul>
-
<li><a href="//cache.soopy.moe">nix-cache</a></li>
-
<li>lwjgl-nix</li>
-
</ul>
-
</body>
-
</html>
-
'';
-
};
-
};
-
};
-
-
"cache.soopy.moe" = _utils.mkVhost {
-
locations."/".proxyPass = "http://localhost:26531/nix-cache/";
-
-
locations."= /" = {
-
tryFiles = "/listing.html =500";
-
root = inputs.mystia.packages.x86_64-linux.s3-listing.override {
-
bucketName = "nix-cache";
-
bucketUrl = "https://s3.soopy.moe/nix-cache/";
-
bucketWebsiteUrl = "https://cache.soopy.moe";
-
};
-
};
-
};
-
};
-
-
systemd.services.vmagent.serviceConfig.LoadCredential = [
-
"minio_token:${secrets.get "vmetrics_token"}"
-
];
-
-
services.vmagent.prometheusConfig.scrape_configs = lib.singleton {
-
job_name = "minio-job";
-
metrics_path = "/minio/v2/metrics/cluster";
-
scheme = "http";
-
static_configs = lib.singleton { targets = lib.singleton "localhost:26531"; };
-
relabel_configs = lib.singleton {
-
target_label = "instance";
-
replacement = config.networking.fqdnOrHostName;
-
};
-
-
# https://github.com/NixOS/nixpkgs/issues/367447
-
# https://docs.victoriametrics.com/sd_configs/#scrape_configs
-
# hard coding because we can't use %{ENV_VAR} syntax (yet) when checking.
-
bearer_token_file = "/run/credentials/vmagent.service/minio_token";
-
};
-
}
+28 -3
systems/koumakan/services/proxies/nitter.nix
···
-
{ _utils, ... }:
{
-
services.nginx.virtualHosts."nitter.soopy.moe" = _utils.mkVhost {
-
locations."/".return = "301 https://twiiit.com$request_uri";
+
_utils,
+
pkgs,
+
...
+
}: {
+
services.nitter = {
+
enable = true;
+
redisCreateLocally = false; # why is the default of this `true`??
+
server = {
+
title = "NSM";
+
port = 36325;
+
https = true;
+
hostname = "nitter.soopy.moe";
+
address = "127.0.0.1";
+
};
+
package = pkgs.nitterExperimental;
+
};
+
+
systemd.services.nitter = {
+
environment = {
+
NITTER_ACCOUNTS_FILE = "/run/credentials/nitter.service/guest_accounts.json";
+
};
+
serviceConfig.LoadCredential = [
+
"guest_accounts.json:/etc/nitter/guest_accounts.json"
+
];
+
};
+
+
services.nginx.virtualHosts."nitter.soopy.moe" = _utils.mkSimpleProxy {
+
port = 36325;
};
}
-120
systems/koumakan/services/proxies/searxng.nix
···
-
{
-
_utils,
-
config,
-
lib,
-
...
-
}:
-
let
-
secrets = _utils.setupSecrets config {
-
namespace = "searxng";
-
secrets = [ "secret" ];
-
};
-
in
-
{
-
imports = [
-
secrets.generate
-
(secrets.mkTemplate "searxng.env" ''
-
SEARXNG_SECRET=${secrets.placeholder "secret"}
-
'')
-
];
-
-
users.users.nginx.extraGroups = [ config.users.groups.searx.name ];
-
-
services.searx = {
-
enable = true;
-
runInUwsgi = true;
-
environmentFile = secrets.getTemplate "searxng.env";
-
redisCreateLocally = true;
-
uwsgiConfig = {
-
http = "/run/searx/searxng.sock";
-
chmod-socket = "660";
-
disable-logging = true;
-
};
-
-
# 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
-
limiterSettings = {
-
real_ip = {
-
x_for = 1;
-
ipv4_prefix = 32;
-
ipv6_prefix = 48;
-
};
-
botdetection.ip_limit.link_token = true;
-
botdetection.ip_lists.pass_searxng_org = true;
-
};
-
-
settings = {
-
use_default_settings = true;
-
general.contact_Url = "mailto:cassie@soopy.moe";
-
-
preferences.lock = lib.singleton "infinite_scroll";
-
ui.infinite_scroll = false;
-
ui.search_on_category_select = false;
-
-
server = {
-
secret_key = "@SEARXNG_SECRET@";
-
public_instance = true;
-
base_url = "https://s.soopy.moe";
-
image_proxy = true;
-
limiter = true;
-
http_protocol_version = "1.1";
-
};
-
-
search = {
-
autocomplete = "duckduckgo";
-
favicon_resolver = "duckduckgo";
-
};
-
-
engines = [
-
{
-
name = "annas archive";
-
disabled = false;
-
}
-
{
-
name = "nixos wiki";
-
disabled = false;
-
}
-
{
-
name = "cppreference";
-
disabled = false;
-
}
-
{
-
name = "ddg definitions";
-
disabled = false;
-
}
-
{
-
name = "fdroid";
-
disabled = false;
-
}
-
{
-
name = "lobste.rs";
-
disabled = false;
-
}
-
{
-
name = "nyaa";
-
disabled = false;
-
}
-
{
-
name = "pub.dev";
-
disabled = false;
-
}
-
{
-
name = "nixos discourse";
-
engine = "discourse";
-
shortcut = "dno";
-
base_url = "https://discourse.nixos.org";
-
categories = [
-
"it"
-
"q&a"
-
];
-
}
-
];
-
};
-
};
-
-
services.nginx.virtualHosts."s.soopy.moe" = _utils.mkSimpleProxy {
-
socketPath = "/run/searx/searxng.sock";
-
extraConfig.extraConfig = ''
-
access_log off;
-
'';
-
};
-
}
-7
systems/koumakan/services/scm/default.nix
···
-
{ ... }:
-
{
-
imports = [
-
./forgejo.nix
-
./tangled-knot.nix
-
];
-
}
-242
systems/koumakan/services/scm/forgejo.nix
···
-
{
-
_utils,
-
lib,
-
config,
-
pkgs,
-
...
-
}:
-
let
-
secrets = [
-
"database/pass"
-
"turnstile/secret"
-
"turnstile/sitekey"
-
"mailing/host"
-
"mailing/protocol"
-
"mailing/from"
-
"mailing/user"
-
"mailing/pass"
-
];
-
ns = "forgejo";
-
mkSecret = file: config.sops.secrets."${ns}/${file}".path;
-
-
runConfig = config.services.forgejo.customDir + "/conf/app.ini";
-
in
-
{
-
sops.secrets = _utils.genSecrets ns secrets {
-
owner = config.services.forgejo.user;
-
};
-
services.forgejo = {
-
enable = true;
-
package = pkgs.forgejo;
-
-
repositoryRoot = "${config.services.forgejo.stateDir}/data/repositories";
-
-
secrets = {
-
service = {
-
CF_TURNSTILE_SECRET = mkSecret "turnstile/secret";
-
CF_TURNSTILE_SITEKEY = mkSecret "turnstile/sitekey";
-
};
-
-
mailer = {
-
PROTOCOL = mkSecret "mailing/protocol";
-
SMTP_ADDR = mkSecret "mailing/host";
-
FROM = mkSecret "mailing/from";
-
USER = mkSecret "mailing/user";
-
PASSWD = mkSecret "mailing/pass";
-
};
-
};
-
-
settings = {
-
DEFAULT.APP_NAME = "Patchy";
-
server = {
-
# Basic settings {{{
-
PROTOCOL = "http+unix";
-
DOMAIN = "patchy.soopy.moe";
-
ROOT_URL = "https://patchy.soopy.moe";
-
OFFLINE_MODE = false;
-
# HTTP_ADDR is defined automatically.
-
# }}}
-
-
# SSH {{{
-
DISABLE_SSH = false; # don't disable ssh access
-
START_SSH_SERVER = false; # do disable the built-in ssh server.
-
SSH_DOMAIN = "patchy.soopy.moe";
-
SSH_PORT = 22;
-
SSH_CREATE_AUTHORIZED_KEY_FILE = false;
-
SSH_CREATE_AUTHORIZED_PRINCIPALS_FILE = false;
-
# }}}
-
};
-
-
# Indexer {{{
-
indexer = {
-
REPO_INDEXER_ENABLED = true; # good bye hdd health
-
REPO_INDEXER_REPO_TYPES = "sources,forks,templates";
-
};
-
# }}}
-
-
# Service {{{
-
service = {
-
ENABLE_NOTIFY_MAIL = true;
-
REGISTER_EMAIL_CONFIRM = true;
-
-
DISABLE_REGISTRATION = false;
-
ALLOW_ONLY_EXTERNAL_REGISTRATION = true;
-
-
ENABLE_CAPTCHA = true;
-
CAPTCHA_TYPE = "cfturnstile";
-
};
-
# }}}
-
-
# Mailing {{{
-
mailer = {
-
ENABLED = true;
-
SEND_AS_PLAIN_TEXT = true;
-
};
-
# }}}
-
-
# Repository related {{{
-
repository = {
-
DEFAULT_PUSH_CREATE_PRIVATE = false;
-
ENABLE_PUSH_CREATE_USER = true;
-
ENABLE_PUSH_CREATE_ORG = true;
-
};
-
"repository.upload" = {
-
ENABLED = true;
-
FILE_MAX_SIZE = 10;
-
MAX_FILES = 10;
-
};
-
"repository.signing" = {
-
DEFAULT_TRUST_MODEL = "committer";
-
};
-
"repository.pull-request" = {
-
WORK_IN_PROGRESS_PREFIXES = "WIP:,[WIP],draft:";
-
DEFAULT_MERGE_STYLE = "rebase-merge";
-
};
-
# }}}
-
-
# Web UI {{{
-
"ui.meta" = {
-
AUTHOR = "Patchy";
-
DESCRIPTION = "Patchouli Knowledge, holder of code repos";
-
};
-
"ui.svg" = {
-
ENABLE_RENDER = true;
-
};
-
# }}}
-
-
# Security {{{
-
security = {
-
# Other relavant settings are defined automatically.
-
PASSWORD_HASH_ALGO = "argon2";
-
COOKIE_USERNAME = "I_LOVE_FORGEJO";
-
COOKIE_REMEMBER = "I_HATE_GITHUB";
-
REVERSE_PROXY_TRUSTED_PROXIES = "127.0.0.1/8,::1/128";
-
MIN_PASSWORD_LENGTH = 8;
-
PASSWORD_COMPLEXITY = "lower,digit";
-
PASSWORD_CHECK_PWN = true;
-
};
-
# }}}
-
-
# OAuth 2.0 and OpenID {{{
-
oauth2 = {
-
# JWT_SECRET defined automatically, but we don't use it lol
-
ENABLED = true;
-
JWT_SIGNING_ALGORITHM = "EdDSA";
-
JWT_SIGNING_PRIVATE_KEY_FILE = "jwt/oauth.pem";
-
# to generate, we're using: nix run n#openssl -- genpkey -algorithm ed25519 -out /var/lib/forgejo/data/jwt/oauth.pem
-
};
-
-
oauth2_client = {
-
REGISTER_EMAIL_CONFIRM = false;
-
};
-
-
openid = {
-
ENABLE_OPENID_SIGNIN = false;
-
ENABLE_OPENID_SIGNUP = false;
-
};
-
# }}}
-
-
# TODO: setup go-camo
-
-
# Logging {{{
-
log = {
-
ROOT_PATH = "/var/log/forgejo/";
-
"logger.router.MODE" = "";
-
};
-
# }}}
-
-
# Federation {{{
-
federation = {
-
ENABLED = true;
-
MAX_SIZE = 10;
-
};
-
# }}}
-
-
# Session {{{
-
session = {
-
PROVIDER = "db"; # reuse existing db config
-
COOKIE_SECURE = true;
-
COOKIE_NAME = "girls_kissing";
-
SESSION_LIFE_TIME = 604800;
-
};
-
# }}}
-
-
# Picture and Avatars {{{
-
picture = {
-
DISABLE_GRAVATAR = false;
-
ENABLE_FEDERATED_AVATAR = true;
-
AVATAR_MAX_FILE_SIZE = 5242880;
-
};
-
# }}}
-
};
-
-
# Database {{{
-
database = {
-
type = "postgres";
-
host = "127.0.0.1";
-
name = "gitea";
-
user = "gitea";
-
passwordFile = mkSecret "database/pass";
-
# just be smarter 4head
-
# TODO: setup ensure db in postgres config
-
createDatabase = false;
-
};
-
#}}}
-
-
lfs.enable = true;
-
};
-
-
# nginx vhost and anubis definition {{{
-
services.anubis.instances."forgejo".settings = {
-
TARGET = "unix://${config.services.forgejo.settings.server.HTTP_ADDR}";
-
METRICS_BIND = "127.0.0.1:17001"; # FIXME: hopefully we can eradicate tcp sockets when vm supports that.
-
};
-
services.nginx.virtualHosts."patchy.soopy.moe" = _utils.mkSimpleProxy {
-
socketPath = config.services.anubis.instances."forgejo".settings.BIND;
-
extraConfig.extraConfig = ''
-
client_max_body_size 0; # managed by forgejo already, might be useful to quickly fail a request
-
'';
-
};
-
# }}}
-
-
# SSH daemon config {{{
-
services.openssh.extraConfig = lib.mkAfter ''
-
# forgejo specific settings
-
Match User ${config.services.forgejo.user},git
-
Banner none
-
PasswordAuthentication no
-
KbdInteractiveAuthentication no
-
AuthorizedKeysCommand ${config.security.wrapperDir}/forgejo-keys keys -e forgejo -u %u -t %t -k %k -c ${runConfig}
-
AuthorizedKeysCommandUser ${config.services.forgejo.user}
-
'';
-
-
# get around openssh restrictions
-
security.wrappers.forgejo-keys = {
-
owner = "root";
-
group = config.users.groups.forgejo.name;
-
permissions = "u+rx,g+x,o-rwx";
-
source = lib.getExe config.services.forgejo.package;
-
};
-
# }}}
-
}
-
# vim:foldmethod=marker
-42
systems/koumakan/services/scm/tangled-knot.nix
···
-
{
-
_utils,
-
config,
-
...
-
}:
-
let
-
secrets = _utils.setupSecrets config {
-
namespace = "tangled";
-
secrets = [ "knot/key" ];
-
};
-
in
-
{
-
services.tangled-knotserver = {
-
enable = true;
-
user = "knot";
-
-
repo.mainBranch = "meow";
-
server = {
-
hostname = "enanan.staging.soopy.moe";
-
listenAddr = "127.0.0.1:34195";
-
internalListenAddr = "127.0.0.1:34196";
-
};
-
-
extraConfig = {
-
KNOT_SERVER_OWNER = "did:plc:jmr637khkdb2fdxxvoyj672m";
-
};
-
-
extraSshdConfig = ''
-
Banner none
-
PasswordAuthentication no
-
KbdInteractiveAuthentication no
-
'';
-
};
-
-
services.nginx.virtualHosts."enanan.staging.soopy.moe" = _utils.mkSimpleProxy {
-
port = 34195;
-
extraConfig = {
-
useACMEHost = null;
-
enableACME = true;
-
};
-
};
-
}
-6
systems/koumakan/services/security/default.nix
···
-
{ ... }:
-
{
-
imports = [
-
./vaultwarden.nix
-
];
-
}
-122
systems/koumakan/services/security/vaultwarden.nix
···
-
{
-
_utils,
-
config,
-
# lib,
-
...
-
}:
-
let
-
# mkSecrets = file:
-
# if !lib.elem file secrets
-
# then throw "Provided secret file ${file} is not in the list of defined secrets."
-
# else "/run/secrets/vaultwarden/${file}";
-
secrets = [
-
# TODO: figure out converting { smtp = ["username_encrypted"]; } to paths
-
"admin_token"
-
"smtp/username"
-
"smtp/password"
-
"smtp/host"
-
"smtp/security"
-
"smtp/port"
-
"database/username"
-
"database/password"
-
"yubico/id"
-
"yubico/secret"
-
"push/installation_id"
-
"push/installation_key"
-
];
-
in
-
{
-
sops.secrets = _utils.genSecrets "vaultwarden" secrets { };
-
sops.templates."vaultwarden.env".content =
-
let
-
ph = p: config.sops.placeholder."vaultwarden/${p}";
-
in
-
''
-
DATABASE_URL=postgresql://${ph "database/username"}:${ph "database/password"}@localhost/vaultwarden
-
ADMIN_TOKEN=${ph "admin_token"}
-
YUBICO_CLIENT_ID=${ph "yubico/id"}
-
YUBICO_SECRET_KEY=${ph "yubico/secret"}
-
SMTP_USERNAME=${ph "smtp/username"}
-
SMTP_FROM=${ph "smtp/username"}
-
SMTP_PASSWORD=${ph "smtp/password"}
-
SMTP_HOST=${ph "smtp/host"}
-
SMTP_SECURITY=${ph "smtp/security"}
-
SMTP_PORT=${ph "smtp/port"}
-
PUSH_INSTALLATION_ID=${ph "push/installation_id"}
-
PUSH_INSTALLATION_KEY=${ph "push/installation_key"}
-
'';
-
-
services.vaultwarden = {
-
enable = true;
-
config = {
-
ROCKET_ADDRESS = "::1";
-
ROCKET_PORT = 38480;
-
LOG_LEVEL = "warn";
-
DOMAIN = "https://v.soopy.moe";
-
IP_HEADER = "X-Real-IP";
-
RELOAD_TEMPLATES = false;
-
PUSH_ENABLED = true;
-
-
SIGNUPS_ALLOWED = true;
-
SIGNUPS_VERIFY = true;
-
SIGNUPS_VERIFY_RESEND_TIME = 3600;
-
SIGNUPS_VERIFY_RESEND_LIMIT = 6;
-
INVITATIONS_ALLOWED = true;
-
-
ICON_CACHE_TTL = 2592000;
-
ICON_CACHE_NEGTTL = 7200;
-
ICON_DOWNLOAD_TIMEOUT = 10;
-
ICON_BLACKLIST_NON_GLOBAL_IPS = true;
-
INVITATION_ORG_NAME = "TransGensokyobians";
-
USER_ATTACHMENT_LIMIT = 100000;
-
ORG_ATTACHMENT_LIMIT = 100000;
-
-
DISABLE_2FA_REMEMBER = false;
-
REQUIRE_DEVICE_EMAIL = true;
-
PASSWORD_ITERATIONS = 1000000;
-
PASSWORD_HINTS_ALLOWED = true;
-
SHOW_PASSWORD_HINT = false;
-
DISABLE_ADMIN_TOKEN = false;
-
EMERGENCY_ACCESS_ALLOWED = true;
-
EMAIL_TOKEN_SIZE = 12;
-
LOGIN_RATELIMIT_SECONDS = 10;
-
AUTHENTICATOR_DISABLE_TIME_DRIFT = false;
-
-
SMTP_EMBED_IMAGES = true;
-
SMTP_FROM_NAME = "Okuu (from vault at soopy.moe)";
-
SMTP_TIMEOUT = 15;
-
SMTP_ACCEPT_INVALID_CERTS = false;
-
SMTP_ACCEPT_INVALID_HOSTNAMES = false;
-
};
-
dbBackend = "postgresql";
-
environmentFile = config.sops.templates."vaultwarden.env".path;
-
};
-
-
services.nginx = {
-
virtualHosts."v.soopy.moe" = _utils.mkVhost {
-
extraConfig = ''
-
client_max_body_size 100M;
-
proxy_read_timeout 3h;
-
proxy_connect_timeout 3h;
-
proxy_send_timeout 3h;
-
'';
-
-
locations."/" = {
-
proxyPass = "http://vault-default";
-
proxyWebsockets = true; # in vw 1.30.0, the WS server is integrated into the same port.
-
};
-
};
-
-
upstreams = {
-
vault-default = {
-
servers = {
-
"[::1]:38480" = { };
-
};
-
extraConfig = ''
-
zone vaultwarden 128k; # XXX: are there any security implications if we reuse the same zone for both webvault and the ws server?
-
keepalive 2; # FIXME: should we use a higher keepalive?
-
'';
-
};
-
};
-
};
-
}
-20
systems/koumakan/services/static-sites/assets.nix
···
-
{ _utils, ... }:
-
{
-
services.nginx.virtualHosts."assets.soopy.moe" = _utils.mkVhost {
-
root = "/opt/public-assets";
-
locations = {
-
"/".extraConfig = ''
-
expires max;
-
etag on;
-
autoindex on;
-
add_header Cache-Control "public";
-
'';
-
-
"= /empty.gif".extraConfig = "empty_gif;";
-
-
"~* /\\.(?!well-known)".extraConfig = ''
-
deny all;
-
'';
-
};
-
};
-
}
+9 -7
systems/koumakan/services/static-sites/default.nix
···
-
{
+
{...}: {
imports = [
-
./assets.nix
-
./nonbunary.nix
-
./user.nix
-
./verification.nix
+
./keine.nix
];
-
# Fallback site
services.nginx.virtualHosts."_" = {
default = true;
useACMEHost = "global.c.soopy.moe";
forceSSL = true;
+
# locations."/".return = "301 https://gensokyo.soopy.moe";
+
# TODO: remove after bringing back up all the services.
locations = {
-
"/".root = "/srv/www/fallback";
+
"/".return = "503";
+
"~ ^/(index.html|splash.png)".root = "/srv/www/maintenance";
};
+
extraConfig = ''
+
error_page 503 /index.html;
+
'';
};
}
+25
systems/koumakan/services/static-sites/keine.nix
···
+
{_utils, ...}: {
+
services.nginx.virtualHosts."keine.soopy.moe" = _utils.mkVhost {
+
forceSSL = false;
+
addSSL = true; # Don't force SSL on a mirror (implications TBD)
+
+
root = "/srv/www/keine";
+
locations = {
+
"/".extraConfig = ''
+
fancyindex_header "/theme/index_header.html";
+
'';
+
"/theme/".alias = "/srv/www/misc/keine/theme/";
+
"/static/".alias = "/srv/www/misc/keine/theme/static/";
+
};
+
+
extraConfig = ''
+
fancyindex on;
+
fancyindex_header "/theme/header.html";
+
fancyindex_footer "/theme/footer.html";
+
fancyindex_show_path off;
+
fancyindex_name_length 255;
+
fancyindex_exact_size off;
+
fancyindex_localtime on;
+
'';
+
};
+
}
-21
systems/koumakan/services/static-sites/nonbunary.nix
···
-
{ _utils, ... }:
-
{
-
services.nginx.virtualHosts."nonbunary.soopy.moe" = _utils.mkVhost {
-
locations."/".return = "404";
-
locations."= /" = _utils.mkNginxFile {
-
content = ''
-
<!doctype html>
-
<html lang="en">
-
<body>
-
<svg xmlns="http://www.w3.org/2000/svg" width="300" height="200">
-
<path fill="#2D2D2D" d="m0,0h300v200H0"/>
-
<path fill="#9B59D0" d="m0,0h300v150H0"/>
-
<path fill="#FFFFFF" d="m0,0h300v100H0"/>
-
<path fill="#FFF433" d="m0,0h300v50H0"/>
-
</svg>
-
</body>
-
</html>
-
'';
-
};
-
};
-
}
-65
systems/koumakan/services/static-sites/photography.nix
···
-
{
-
config,
-
pkgs,
-
lib,
-
_utils,
-
...
-
}:
-
{
-
# TODO: we can make this better by just automating everything needed to make a h5ai site.
-
services.phpfpm.pools."photography" = {
-
user = "photography";
-
settings = {
-
"listen.owner" = config.services.nginx.user;
-
"pm" = "ondemand";
-
"pm.process_idle_timeout" = "3s";
-
"pm.max_children" = 32;
-
"pm.max_requests" = 500;
-
"pm.start_servers" = 1;
-
"pm.min_spare_servers" = 1;
-
"pm.max_spare_servers" = 3;
-
-
"php_admin_value[error_log]" = "stderr";
-
"php_admin_flag[log_errors]" = true;
-
"catch_workers_output" = true;
-
};
-
phpEnv."PATH" = lib.makeBinPath (
-
with pkgs;
-
[
-
zip
-
]
-
);
-
};
-
-
services.nginx.virtualHosts."photography.soopy.moe" = _utils.mkVhost {
-
root = "/opt/photography";
-
extraConfig = ''
-
index index.html index.php /_h5ai/public/index.php;
-
'';
-
-
locations."~ \.php$" = {
-
tryFiles = "$fastcgi_script_name =404";
-
# what's the purpose of $.fastcgiParams when it's barely even usable
-
# fastcgiParams = {
-
# DOCUMENT_ROOT = "$realpath_root";
-
# SCRIPT_FILENAME = "$realpath_root$fastcgi_script_name";
-
# };
-
-
extraConfig = ''
-
error_log /var/log/nginx/photography.error.log warn;
-
fastcgi_pass unix:${config.services.phpfpm.pools.photography.socket};
-
include ${config.services.nginx.package}/conf/fastcgi.conf;
-
'';
-
};
-
};
-
-
users.users.photography = {
-
isSystemUser = true;
-
group = "photography";
-
createHome = false;
-
};
-
users.groups.photography = { };
-
-
users.users.nginx.extraGroups = [ "photography" ];
-
users.users.cassie.extraGroups = [ "photography" ];
-
}
-31
systems/koumakan/services/static-sites/user.nix
···
-
{ _utils, ... }:
-
{
-
services.nginx.virtualHosts."users.soopy.moe" = _utils.mkVhost {
-
locations."/" = _utils.mkNginxFile {
-
content = ''
-
<!doctype html>
-
<html lang="en">
-
<head>
-
<meta charset="utf-8" />
-
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
-
<style>:root {font-family: monospace;}</style>
-
<title>~</title>
-
</head>
-
-
<body>
-
<h1>You are at ~</h1>
-
<ul>
-
<li><a href="/~soopyc" title="web hosting for soopyc">~soopyc</a></li>
-
</ul>
-
</body>
-
</html>
-
'';
-
};
-
-
locations."/~soopyc" = {
-
root = "/home/cassie/Web";
-
tryFiles = "$uri $uri/index.html $uri.html =404";
-
extraConfig = "autoindex on;";
-
};
-
};
-
}
-7
systems/koumakan/services/static-sites/verification-data/.well-known/microsoft-identity-association.json
···
-
{
-
"associatedApplications": [
-
{
-
"applicationId": "807b9c9e-69c9-4b9f-b020-01dbf256623b"
-
}
-
]
-
}
-20
systems/koumakan/services/static-sites/verification-data/index.html
···
-
<!doctype html>
-
<html lang="en">
-
<head>
-
<meta charset="utf-8" />
-
<meta name="viewport" content="width=device-width, initial-scale=1" />
-
<title>publisher verification | soopy.moe</title>
-
<style>
-
:root {
-
font-family: monospace;
-
}
-
</style>
-
</head>
-
-
<body>
-
<h1>pub.soopy.moe</h1>
-
<p>welcome to <b>pub.soopy.moe</b>.</p>
-
<p>this is a verification domain for projects created and maintained by <a href="//soopy.moe">soopyc</a>.</p>
-
<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>
-
</body>
-
</html>
-8
systems/koumakan/services/static-sites/verification.nix
···
-
{ _utils, ... }:
-
{
-
services.nginx.virtualHosts = {
-
"pub.soopy.moe" = _utils.mkVhost {
-
locations."/".root = ./verification-data;
-
};
-
};
-
}
-13
systems/koumakan/services/storage/atuin.nix
···
-
{ _utils, ... }:
-
{
-
services.atuin = {
-
enable = true;
-
database.createLocally = true;
-
port = 34892;
-
openRegistration = true;
-
};
-
-
services.nginx.virtualHosts."atuin.soopy.moe" = _utils.mkSimpleProxy {
-
port = 34892;
-
};
-
}
-7
systems/koumakan/services/storage/default.nix
···
-
{
-
imports = [
-
./atuin.nix
-
./wastebin.nix
-
./zipline.nix
-
];
-
}
-33
systems/koumakan/services/storage/wastebin.nix
···
-
{
-
_utils,
-
config,
-
...
-
}:
-
let
-
secrets = _utils.setupSecrets config {
-
namespace = "wastebasket";
-
secrets = [ "key" ];
-
};
-
in
-
{
-
# figure out a way to disable encryption, i don't trust the impl.
-
imports = [
-
secrets.generate
-
(secrets.mkTemplate "wastebin.env" ''
-
WASTEBIN_SIGNING_KEY=${secrets.placeholder "key"}
-
'')
-
];
-
services.wastebin = {
-
enable = true;
-
settings = {
-
WASTEBIN_ADDRESS_PORT = "127.0.0.1:34682";
-
WASTEBIN_BASE_URL = "https://akyuu.soopy.moe";
-
WASTEBIN_MAX_BODY_SIZE = 10240;
-
};
-
secretFile = secrets.getTemplate "wastebin.env";
-
};
-
-
services.nginx.virtualHosts."akyuu.soopy.moe" = _utils.mkSimpleProxy {
-
port = 34682;
-
};
-
}
-47
systems/koumakan/services/storage/zipline.nix
···
-
{
-
_utils,
-
lib,
-
config,
-
...
-
}:
-
let
-
secrets = _utils.setupSecrets config {
-
namespace = "zipline";
-
secrets = [
-
"core/secret"
-
"s3/access_key"
-
"s3/access_secret"
-
];
-
};
-
in
-
{
-
imports = [
-
secrets.generate
-
(secrets.mkTemplate "zipline.env" ''
-
CORE_SECRET=${secrets.placeholder "core/secret"}
-
DATASOURCE_S3_ACCESS_KEY_ID=${secrets.placeholder "s3/access_key"}
-
DATASOURCE_S3_SECRET_ACCESS_KEY=${secrets.placeholder "s3/access_secret"}
-
'')
-
];
-
-
services.zipline = {
-
enable = true;
-
environmentFiles = lib.singleton (secrets.getTemplate "zipline.env");
-
-
settings = {
-
CORE_PORT = 34638;
-
DATASOURCE_TYPE = "s3";
-
DATASOURCE_S3_BUCKET = "zipline";
-
DATASOURCE_S3_REGION = "ap-east-1";
-
DATASOURCE_S3_ENDPOINT = "https://s3.soopy.moe";
-
DATASOURCE_S3_FORCE_PATH_STYLE = "true";
-
};
-
};
-
-
services.nginx.virtualHosts."dumpster.soopy.moe" = _utils.mkSimpleProxy {
-
port = 34638;
-
extraConfig.extraConfig = ''
-
client_max_body_size 100M;
-
'';
-
};
-
}
-7
systems/koumakan/services/telemetry/default.nix
···
-
{ ... }:
-
{
-
imports = [
-
./victoriametrics.nix
-
./grafana
-
];
-
}
-16
systems/koumakan/services/telemetry/grafana/dashboards/README.md
···
-
# Grafana Dashboards
-
-
Reproducible definitions of grafana dashboards. Most of these are obtained are obtained from Grafana's site directly.
-
Please see our `utils/justfile` for more details.
-
-
## Obtaining a new dashboard
-
Run the following just recipe.
-
-
```console
-
# just utils add-grafana-dashboard <id> <name> [title]
-
# dashboard id ^ ^ ^ (visible) dashboard title
-
# dashboard json name (invisible)
-
-
$ just utils add-grafana-dashboard 1860 node "Node Metrics"
-
xh https://grafana.com/api/dashboards/1860 | jq '.json | .uid="node" | .title="Node Metrics"' -c > ../systems/koumakan/services/telemetry/grafana/dashboards/node.json
-
```
-1
systems/koumakan/services/telemetry/grafana/dashboards/minio-cluster.json
···
-
{"__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
···
-
{"__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
···
-
{"__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
···
-
{"__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
···
-
{
-
_utils,
-
config,
-
...
-
}:
-
let
-
secrets = _utils.setupSecrets config {
-
namespace = "grafana";
-
secrets = [
-
"oauth2/github/cid"
-
"oauth2/github/cse"
-
"oauth2/gateway/cid"
-
"oauth2/gateway/cse"
-
];
-
config = {
-
owner = config.users.users.grafana.name;
-
};
-
};
-
fromSecret = path: "$__file{${secrets.get path}}";
-
in
-
{
-
imports = [
-
secrets.generate
-
./provisioning.nix
-
];
-
-
users.users.grafana.extraGroups = [
-
"nginx"
-
];
-
-
services.grafana = {
-
enable = true;
-
settings = {
-
server = {
-
protocol = "socket";
-
socket_gid = config.users.groups.nginx.gid;
-
read_timeout = "1m";
-
-
domain = "suika.soopy.moe";
-
enforce_domain = true;
-
-
root_url = "https://suika.soopy.moe/";
-
router_logging = false;
-
};
-
-
security = {
-
disable_initial_admin_creation = true;
-
disable_gravatar = false;
-
cookie_secure = true;
-
cookie_samesite = "lax";
-
};
-
-
dashboards = {
-
versions_to_keep = 5;
-
min_refresh_interval = "30s";
-
};
-
-
users = {
-
allow_sign_up = false;
-
allow_org_create = false;
-
};
-
-
auth = {
-
login_cookie_name = "girls_last_stats";
-
disable_login_form = true;
-
};
-
-
snapshots = {
-
enabled = true;
-
external_enabled = true;
-
};
-
-
# "auth.generic_oauth" = {
-
# name = "GensoGateway";
-
# enabled = true;
-
-
# allow_sign_up = true;
-
-
# client_id = fromSecret "oauth2/gateway/cid";
-
# client_secret = fromSecret "oauth2/gateway/cse";
-
# scopes = "openid email profile offline_access roles";
-
-
# email_attribute_path = "email";
-
# login_attribute_path = "username";
-
# name_attribute_path = "username";
-
-
# auth_url = "https://gateway.soopy.moe/realms/gensokyo/protocol/openid-connect/auth";
-
# token_url = "https://gateway.soopy.moe/realms/gensokyo/protocol/openid-connect/token";
-
# api_url = "https://gateway.soopy.moe/realms/gensokyo/protocol/openid-connect/userinfo";
-
# };
-
-
"auth.github" = {
-
enabled = true;
-
allow_sign_up = true; # TODO: disable this when we're done with gensogateway
-
client_id = fromSecret "oauth2/github/cid";
-
client_secret = fromSecret "oauth2/github/cse";
-
scopes = "user:email,read:org";
-
};
-
};
-
};
-
-
services.nginx.virtualHosts."suika.soopy.moe" = _utils.mkSimpleProxy {
-
socketPath = config.services.grafana.settings.server.socket;
-
websockets = true;
-
};
-
}
-34
systems/koumakan/services/telemetry/grafana/provisioning.nix
···
-
{ ... }:
-
{
-
services.grafana.provision = {
-
datasources.settings = {
-
apiVersion = 1; # i am stupid. keep this as 1.
-
-
datasources = [
-
{
-
version = 2;
-
name = "panopticon";
-
type = "prometheus";
-
uid = "gs_panopticon";
-
url = "http://localhost:20090";
-
isDefault = true;
-
jsonData = {
-
prometheusVersion = "2.44.0";
-
};
-
}
-
];
-
};
-
-
dashboards.settings = {
-
apiVersion = 1; # same as above
-
-
providers = [
-
{
-
name = "flake";
-
allowUiUpdates = false;
-
options.path = ./dashboards;
-
}
-
];
-
};
-
};
-
}
-124
systems/koumakan/services/telemetry/victoriametrics.nix
···
-
{
-
config,
-
lib,
-
_utils,
-
...
-
}:
-
let
-
monitoredHosts = [
-
"satori"
-
"renko"
-
"kita"
-
"ryo"
-
"nijika"
-
];
-
secrets = _utils.setupSecrets config {
-
namespace = "vmetrics";
-
secrets = builtins.map (f: "auth/hosts/" + f) monitoredHosts;
-
};
-
in
-
{
-
imports = [
-
secrets.generate
-
-
(secrets.mkTemplate "vmauth.env" (
-
lib.concatLines (
-
builtins.map (
-
host: "AUTH_${lib.toUpper host}_TOKEN=${secrets.placeholder "auth/hosts/${host}"}"
-
) monitoredHosts
-
)
-
))
-
];
-
-
services.victoriametrics = {
-
enable = true;
-
listenAddress = "127.0.0.1:20090";
-
retentionPeriod = "5y"; # 5 years
-
};
-
-
services.vmagent = {
-
enable = true;
-
remoteWrite.url = "http://${config.services.victoriametrics.listenAddress}/api/v1/write";
-
prometheusConfig = {
-
global = {
-
scrape_interval = "30s";
-
};
-
-
scrape_configs = [
-
{
-
job_name = "victoriametrics";
-
scrape_interval = "15s";
-
static_configs = lib.singleton {
-
targets = lib.singleton "${builtins.toString config.services.victoriametrics.listenAddress}";
-
};
-
}
-
-
# node exporters
-
{
-
job_name = "node";
-
scrape_interval = "15s";
-
static_configs = lib.singleton {
-
targets = lib.singleton "localhost:${builtins.toString config.services.prometheus.exporters.node.port}";
-
};
-
relabel_configs = lib.singleton {
-
target_label = "instance";
-
replacement = "koumakan";
-
};
-
}
-
-
# external nodes uses remote write
-
# [mail, gateway]
-
-
# other services' metrics
-
{
-
job_name = "nginx";
-
static_configs = lib.singleton {
-
targets = lib.singleton "localhost:${builtins.toString config.services.prometheus.exporters.nginx.port}";
-
};
-
relabel_configs = lib.singleton {
-
target_label = "instance";
-
replacement = "koumakan";
-
};
-
}
-
];
-
};
-
};
-
-
# vmetrics docs suggests NOT to expose any vmetrics component to the public except vmauth or vmgateway, so we're not going to do that.
-
# this unfortunately requires a custom module which we have written ourselves, and might upstream to core nixpkgs when we are sure of its stability.
-
# some may wonder why we can't just use nginx directly instead of another module
-
# i mean, yeah. vmauth is honestly just another nginx. whatever, i do not care. i'm tired.
-
-
# module search: https://mystia.soopy.moe
-
services.vmauth = {
-
enable = true;
-
listenAddress = "127.0.0.1:21000";
-
authConfig = {
-
users = builtins.concatMap (
-
token:
-
lib.singleton {
-
bearer_token = token;
-
url_prefix = "http://${config.services.victoriametrics.listenAddress}"; # send directly to vm
-
}
-
) (builtins.map (host: "%{AUTH_${lib.toUpper host}_TOKEN}") monitoredHosts);
-
};
-
environmentFile = secrets.getTemplate "vmauth.env";
-
};
-
-
# expose vmauth remote write endpoint
-
services.nginx.virtualHosts."panopticon.soopy.moe" = _utils.mkVhost {
-
# Deny all routes by default
-
# This is strictly a write-only exposure so anything else can explod.
-
locations."/".return = "444";
-
-
locations."= /".extraConfig = ''
-
add_header content-type text/plain;
-
return 200 "HTTP/1.1 100 CONTINUE - big sister is watching you.";
-
'';
-
-
# Allow only the write route
-
locations."~* /api/.*/write" = {
-
proxyPass = "http://127.0.0.1:21000";
-
};
-
};
-
}
-16
systems/nijika/configuration.nix
···
-
{ ... }:
-
{
-
imports = [
-
./services
-
./networking.nix # generated at runtime by nixos-infect
-
];
-
-
gensokyo.presets = {
-
vmetrics = true;
-
certificates = true;
-
nginx = true;
-
};
-
boot.tmp.cleanOnBoot = true;
-
zramSwap.enable = true;
-
system.stateVersion = "24.11";
-
}
-23
systems/nijika/hardware-configuration.nix
···
-
{ modulesPath, ... }:
-
{
-
imports = [ (modulesPath + "/profiles/qemu-guest.nix") ];
-
boot.loader.grub = {
-
efiSupport = true;
-
efiInstallAsRemovable = true;
-
device = "nodev";
-
};
-
fileSystems."/boot" = {
-
device = "/dev/disk/by-uuid/5E93-6B15";
-
fsType = "vfat";
-
};
-
boot.initrd.availableKernelModules = [
-
"ata_piix"
-
"uhci_hcd"
-
"xen_blkfront"
-
];
-
boot.initrd.kernelModules = [ "nvme" ];
-
fileSystems."/" = {
-
device = "/dev/sda1";
-
fsType = "ext4";
-
};
-
}
-54
systems/nijika/networking.nix
···
-
{ lib, ... }:
-
{
-
# This file was populated at runtime with the networking
-
# details gathered from the active system.
-
networking = {
-
nameservers = [
-
"2a01:4ff:ff00::add:2"
-
"2a01:4ff:ff00::add:1"
-
"185.12.64.2"
-
];
-
defaultGateway = "172.31.1.1";
-
defaultGateway6 = {
-
address = "fe80::1";
-
interface = "eth0";
-
};
-
dhcpcd.enable = false;
-
usePredictableInterfaceNames = lib.mkForce false;
-
interfaces = {
-
eth0 = {
-
ipv4.addresses = [
-
{
-
address = "138.199.164.93";
-
prefixLength = 32;
-
}
-
];
-
ipv6.addresses = [
-
{
-
address = "2a01:4f8:c012:b493::b00b";
-
prefixLength = 64;
-
}
-
{
-
address = "fe80::9400:4ff:fe0e:e3d";
-
prefixLength = 64;
-
}
-
];
-
ipv4.routes = [
-
{
-
address = "172.31.1.1";
-
prefixLength = 32;
-
}
-
];
-
ipv6.routes = [
-
{
-
address = "fe80::1";
-
prefixLength = 128;
-
}
-
];
-
};
-
};
-
};
-
services.udev.extraRules = ''
-
ATTR{address}=="96:00:04:0e:0e:3d", NAME="eth0"
-
'';
-
}
-6
systems/nijika/services/default.nix
···
-
{ ... }:
-
{
-
imports = [
-
./fallback_page
-
];
-
}
-17
systems/nijika/services/fallback_page/default.nix
···
-
{
-
pkgs,
-
_utils,
-
...
-
}:
-
{
-
services.nginx.virtualHosts."nijika.soopy.moe" = _utils.mkVhost {
-
useACMEHost = null;
-
enableACME = true;
-
default = true;
-
-
locations."/" = {
-
root = pkgs.callPackage ./package.nix { };
-
tryFiles = "$uri $uri/index.html $uri.html =404";
-
};
-
};
-
}
systems/nijika/services/fallback_page/image.png

This is a binary file and will not be displayed.

-14
systems/nijika/services/fallback_page/index.html
···
-
<!doctype html>
-
<html lang="en">
-
<head>
-
<title>nijiker</title>
-
<meta name="description" content="funny triangle woman" />
-
<style>
-
img {width: 100%; height: 100%; object-fit: contain;}
-
</style>
-
</head>
-
-
<body>
-
<a href="https://www.walmart.com/ip/Doritos-Nacho-Cheese-Flavored-Tortilla-Chips-3-375-oz-Bag/20897577"><img src="image.png" alt="A bag of Doritos." /></a>
-
</body>
-
</html>
-10
systems/nijika/services/fallback_page/package.nix
···
-
{ stdenvNoCC }:
-
stdenvNoCC.mkDerivation (final: {
-
name = "nijika-landing";
-
src = ./.;
-
-
installPhase = ''
-
mkdir $out
-
cp ${final.src}/* $out/
-
'';
-
})
-71
systems/renko/configuration.nix
···
-
{
-
inputs,
-
...
-
}:
-
{
-
imports = [
-
./gui
-
./development
-
./services
-
inputs.nixos-hardware.nixosModules.common-cpu-amd-pstate
-
inputs.nixos-hardware.nixosModules.common-gpu-amd
-
];
-
-
gensokyo = {
-
traits = {
-
gui = true;
-
games = true;
-
};
-
presets = {
-
vmetrics = true;
-
secureboot = true;
-
};
-
system-manager = {
-
enable = true;
-
flakeLocation = "/home/cassie/gensokyo";
-
};
-
};
-
-
# boot.kernelPackages = pkgs.linuxPackages_latest;
-
# Use the systemd-boot EFI boot loader.
-
boot.loader.systemd-boot = {
-
enable = true;
-
consoleMode = "max";
-
};
-
boot.initrd.systemd.enable = true;
-
-
boot.loader.efi.canTouchEfiVariables = true;
-
boot.loader.efi.efiSysMountPoint = "/efi";
-
-
fileSystems."/".options = [
-
"compress=zstd:5"
-
"autodefrag"
-
];
-
-
networking.firewall = {
-
allowedTCPPorts = [ 59153 ];
-
allowedTCPPortRanges = [
-
{
-
from = 25560;
-
to = 25570;
-
}
-
];
-
allowedUDPPortRanges = [
-
{
-
from = 25560;
-
to = 25570;
-
}
-
-
# plasmo voice
-
{
-
from = 55111;
-
to = 55199;
-
}
-
];
-
};
-
-
# muh unfree software!!!!!!!!!!!!!!!!!!
-
nixpkgs.config.allowUnfree = true;
-
-
system.stateVersion = "23.11"; # Did you read the comment? Yes.
-
}
-4
systems/renko/development/adb.nix
···
-
{
-
programs.adb.enable = true;
-
users.users.cassie.extraGroups = [ "adbusers" ];
-
}
-9
systems/renko/development/default.nix
···
-
{ ... }:
-
{
-
imports = [
-
./adb.nix
-
./docker.nix
-
./jvm.nix
-
./postgresql.nix
-
];
-
}
-11
systems/renko/development/docker.nix
···
-
{ ... }:
-
{
-
virtualisation.docker = {
-
enable = true;
-
storageDriver = "btrfs";
-
};
-
-
users.groups.docker.members = [
-
"cassie"
-
];
-
}
-6
systems/renko/development/jvm.nix
···
-
{ pkgs, ... }:
-
{
-
environment.systemPackages = [
-
pkgs.jetbrains.idea-ultimate
-
];
-
}
-13
systems/renko/development/postgresql.nix
···
-
{ lib, ... }:
-
{
-
services.postgresql = {
-
enable = true;
-
enableTCPIP = true;
-
-
authentication = lib.mkForce ''
-
local all all peer
-
host all all 127.0.0.1/32 scram-sha-256
-
host all all ::1/128 scram-sha-256
-
'';
-
};
-
}
-9
systems/renko/gui/default.nix
···
-
{ ... }:
-
{
-
imports = [
-
./virt.nix
-
./finance.nix
-
-
./games
-
];
-
}
-6
systems/renko/gui/finance.nix
···
-
{ ... }:
-
{
-
environment.systemPackages = [
-
# pkgs.kmymoney
-
];
-
}
-96
systems/renko/gui/games/_osu.nix
···
-
{
-
lib,
-
stdenvNoCC,
-
fetchurl,
-
appimageTools,
-
makeWrapper,
-
nativeWayland ? false,
-
-
version,
-
hash,
-
}:
-
-
let
-
pname = "osu-lazer-bin";
-
-
src = fetchurl {
-
inherit hash;
-
url = "https://github.com/ppy/osu/releases/download/${version}/osu.AppImage";
-
};
-
-
meta = {
-
description = "Rhythm is just a *click* away (tachyon, patched drv)";
-
homepage = "https://osu.ppy.sh";
-
license = with lib.licenses; [
-
mit
-
cc-by-nc-40
-
unfreeRedistributable # osu-framework contains libbass.so in repository
-
];
-
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
-
maintainers = with lib.maintainers; [
-
gepbird
-
stepbrobd
-
Guanran928
-
soopyc
-
];
-
mainProgram = "osu!";
-
platforms = [
-
"x86_64-linux"
-
];
-
};
-
-
passthru.updateScript = ./update.sh;
-
in
-
if stdenvNoCC.hostPlatform.isDarwin then
-
stdenvNoCC.mkDerivation {
-
inherit
-
pname
-
version
-
src
-
meta
-
passthru
-
;
-
-
nativeBuildInputs = [ makeWrapper ];
-
-
installPhase = ''
-
runHook preInstall
-
OSU_WRAPPER="$out/Applications/osu!.app/Contents"
-
OSU_CONTENTS="osu!.app/Contents"
-
mkdir -p "$OSU_WRAPPER/MacOS"
-
cp -r "$OSU_CONTENTS/Info.plist" "$OSU_CONTENTS/Resources" "$OSU_WRAPPER"
-
cp -r "osu!.app" "$OSU_WRAPPER/Resources/osu-wrapped.app"
-
makeWrapper "$OSU_WRAPPER/Resources/osu-wrapped.app/Contents/MacOS/osu!" "$OSU_WRAPPER/MacOS/osu!" --set OSU_EXTERNAL_UPDATE_PROVIDER 1
-
runHook postInstall
-
'';
-
}
-
else
-
appimageTools.wrapType2 {
-
inherit
-
pname
-
version
-
src
-
meta
-
passthru
-
;
-
-
extraPkgs = pkgs: with pkgs; [ icu ];
-
-
extraInstallCommands =
-
let
-
contents = appimageTools.extract { inherit pname version src; };
-
in
-
''
-
. ${makeWrapper}/nix-support/setup-hook
-
mv -v $out/bin/${pname} $out/bin/osu!
-
-
wrapProgram $out/bin/osu! \
-
${lib.optionalString nativeWayland "--set SDL_VIDEODRIVER wayland"} \
-
--set OSU_EXTERNAL_UPDATE_PROVIDER 1
-
-
install -m 444 -D ${contents}/osu!.desktop -t $out/share/applications
-
for i in 16 32 48 64 96 128 256 512 1024; do
-
install -D ${contents}/osu.png $out/share/icons/hicolor/''${i}x$i/apps/osu.png
-
done
-
'';
-
}
-11
systems/renko/gui/games/default.nix
···
-
{ ... }:
-
{
-
imports = [
-
./osu.nix
-
./steam.nix
-
./minecraft.nix
-
./lutris.nix
-
-
./hud.nix
-
];
-
}
-11
systems/renko/gui/games/hud.nix
···
-
{
-
pkgs,
-
lib,
-
config,
-
...
-
}:
-
lib.mkIf config.gensokyo.traits.games {
-
environment.systemPackages = [
-
pkgs.mangohud
-
];
-
}
-11
systems/renko/gui/games/lutris.nix
···
-
{
-
pkgs,
-
lib,
-
config,
-
...
-
}:
-
lib.mkIf config.gensokyo.traits.games {
-
environment.systemPackages = [
-
pkgs.lutris
-
];
-
}
-11
systems/renko/gui/games/minecraft.nix
···
-
{
-
pkgs,
-
lib,
-
config,
-
...
-
}:
-
lib.mkIf config.gensokyo.traits.games {
-
environment.systemPackages = [
-
pkgs.prismlauncher
-
];
-
}
-16
systems/renko/gui/games/osu.nix
···
-
{
-
lib,
-
config,
-
pkgs,
-
...
-
}:
-
lib.mkIf config.gensokyo.traits.games {
-
environment.systemPackages = [
-
# this override is crap don't do it
-
(pkgs.callPackage ./_osu.nix {
-
version = "2025.912.0-lazer";
-
hash = "sha256-73UY3RJp0pFfbxRWX8qSnLeoZB/BRGtucmQClJP7Qwg=";
-
# nativeWayland = true; # this doesnt window properly
-
})
-
];
-
}
-17
systems/renko/gui/games/steam.nix
···
-
{
-
pkgs,
-
lib,
-
config,
-
...
-
}:
-
lib.mkIf config.gensokyo.traits.games {
-
programs.steam = {
-
enable = true;
-
-
extraCompatPackages = [
-
pkgs.proton-ge-bin
-
];
-
-
protontricks.enable = true;
-
};
-
}
-8
systems/renko/gui/graphics.nix
···
-
{
-
# enforce settings
-
hardware.opengl = {
-
enable = true;
-
driSupport = true;
-
driSupport32Bit = true;
-
};
-
}
-7
systems/renko/gui/media.nix
···
-
{ pkgs, ... }:
-
{
-
environment.systemPackages = [
-
# only renko is powerful enough to run this
-
pkgs.blender
-
];
-
}
-27
systems/renko/gui/virt.nix
···
-
{
-
programs.virt-manager.enable = true;
-
virtualisation.libvirtd = {
-
enable = true;
-
qemu.swtpm.enable = true;
-
};
-
-
# try virtualbox
-
virtualisation.virtualbox.host = {
-
enable = true;
-
enableKvm = true;
-
enableExtensionPack = false;
-
addNetworkInterface = false; # conflicts with KVM
-
};
-
-
# GPU Passthrough
-
# boot.initrd.kernelModules = [
-
# "vfio_pci" "vfio" "vfio_iommu_type1" "amdgpu"
-
# ];
-
# boot.kernelParams = lib.singleton ("vfio-pci.ids=" + lib.concatStringsSep "," [
-
# "1002:7480" # GPU video
-
# "1002:ab30" # GPU Audio
-
# ]);
-
# virtualisation.spiceUSBRedirection.enable = true;
-
-
# vm performance is still terrible after pinning
-
}
-55
systems/renko/hardware-configuration.nix
···
-
# Do not modify this file! It was generated by โ€˜nixos-generate-configโ€™
-
# and may be overwritten by future invocations. Please make changes
-
# to /etc/nixos/configuration.nix instead.
-
{
-
config,
-
lib,
-
modulesPath,
-
...
-
}:
-
{
-
imports = [
-
(modulesPath + "/installer/scan/not-detected.nix")
-
];
-
-
boot.initrd.availableKernelModules = [
-
"nvme"
-
"xhci_pci"
-
"ahci"
-
"usbhid"
-
];
-
boot.initrd.kernelModules = [ ];
-
boot.kernelModules = [ "kvm-amd" ];
-
boot.extraModulePackages = [ ];
-
-
fileSystems."/" = {
-
device = "/dev/disk/by-uuid/e6637f8a-12fc-4aa4-8335-3fad10d8f63a";
-
fsType = "btrfs";
-
};
-
-
boot.initrd.luks.devices."gock".device = "/dev/disk/by-uuid/9d57daa1-f152-443d-992c-b58cbfa57ec1";
-
-
fileSystems."/efi" = {
-
device = "/dev/disk/by-uuid/77E6-011C";
-
fsType = "vfat";
-
options = [
-
"fmask=0022"
-
"dmask=0022"
-
"umask=0077"
-
];
-
};
-
-
swapDevices = [
-
{ device = "/dev/disk/by-uuid/40a77774-ab28-45db-8f8a-845814eacba9"; }
-
];
-
-
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
-
# (the default) this is the recommended approach. When using systemd-networkd it's
-
# still possible to use this option, but it's recommended to use it in conjunction
-
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
-
networking.useDHCP = lib.mkDefault true;
-
# networking.interfaces.eno1.useDHCP = lib.mkDefault true;
-
-
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
-
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
-
}
-6
systems/renko/services/default.nix
···
-
{
-
imports = [
-
./forgejo-runner.nix
-
./proxy.nix
-
];
-
}
-29
systems/renko/services/forgejo-runner.nix
···
-
{
-
_utils,
-
config,
-
lib,
-
pkgs,
-
...
-
}:
-
let
-
secrets = _utils.setupSecrets config {
-
namespace = "forgejo";
-
secrets = [ "tokenFile" ];
-
};
-
in
-
{
-
imports = lib.singleton secrets.generate;
-
-
services.gitea-actions-runner = {
-
package = pkgs.forgejo-actions-runner;
-
instances.default = {
-
enable = true;
-
name = "renko-default";
-
url = "https://patchy.soopy.moe";
-
tokenFile = secrets.get "tokenFile";
-
labels = [
-
"debian-trixie:docker://node:24-trixie"
-
];
-
};
-
};
-
}
-19
systems/renko/services/proxy.nix
···
-
{
-
services.nginx = {
-
enable = true;
-
recommendedOptimisation = true;
-
-
virtualHosts."renko.mist-nessie.ts.net" = {
-
listen = [
-
{
-
addr = "100.86.12.107";
-
port = 80;
-
}
-
];
-
-
locations."/" = {
-
proxyPass = "http://110.40.153.242";
-
};
-
};
-
};
-
}
-21
systems/ryo/configuration.nix
···
-
# ryo because empty-headed. also btr naming scheme.
-
# DO NOT copy anything done on this host, it's insecure by design.
-
{ ... }:
-
{
-
imports = [
-
./services
-
];
-
-
gensokyo.presets = {
-
vmetrics = true;
-
certificates = true;
-
nginx = true;
-
};
-
swapDevices = [
-
{
-
device = "/Swapfile";
-
size = 2048;
-
}
-
];
-
system.stateVersion = "23.11";
-
}
-35
systems/ryo/hardware-configuration.nix
···
-
{
-
modulesPath,
-
lib,
-
...
-
}:
-
{
-
imports = [ (modulesPath + "/profiles/qemu-guest.nix") ];
-
-
boot.initrd.availableKernelModules = [
-
"ata_piix"
-
"uhci_hcd"
-
"virtio_pci"
-
"virtio_scsi"
-
"sd_mod"
-
"xen_blkfront"
-
"vmw_pvscsi"
-
];
-
boot.initrd.kernelModules = [ "nvme" ];
-
boot.loader.grub = {
-
efiSupport = true;
-
efiInstallAsRemovable = true;
-
device = "nodev";
-
};
-
-
fileSystems."/boot" = {
-
device = "/dev/disk/by-uuid/14EF-4002";
-
fsType = "vfat";
-
};
-
fileSystems."/" = {
-
device = "/dev/disk/by-uuid/88cb39be-b19e-4c4a-b544-286b2f45f003";
-
fsType = "xfs";
-
};
-
-
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
-
}
-7
systems/ryo/services/default.nix
···
-
{ ... }:
-
{
-
imports = [
-
./novnc.nix
-
./thefunny.nix
-
];
-
}
-45
systems/ryo/services/novnc.nix
···
-
{
-
_utils,
-
pkgs,
-
lib,
-
...
-
}:
-
{
-
services.nginx.virtualHosts."ryo.soopy.moe" = _utils.mkSimpleProxy {
-
port = 6080;
-
websockets = true;
-
extraConfig = {
-
locations."= /".return = "303 /vnc_lite.html";
-
enableACME = true; # don't bother with DNS-01
-
useACMEHost = null;
-
};
-
};
-
-
systemd.services."novnc" = {
-
enable = true;
-
wantedBy = [ "multi-user.target" ];
-
path = with pkgs; [ procps ];
-
serviceConfig = {
-
DynamicUser = true;
-
ExecStart = "${lib.getExe pkgs.novnc} --file-only";
-
-
# hardening
-
PrivateUsers = true;
-
LockPersonality = true;
-
ProtectHostname = true;
-
ProtectKernelTunables = true;
-
ProtectDevices = true;
-
ProtectClock = true;
-
SystemCallArchitectures = "native";
-
CapabilityBoundingSet = null;
-
RestrictAddressFamilies = [
-
"AF_INET"
-
"AF_INET6"
-
];
-
SystemCallFilter = [
-
"@system-service"
-
"~@privileged"
-
];
-
};
-
};
-
}
-86
systems/ryo/services/thefunny.nix
···
-
{
-
pkgs,
-
lib,
-
...
-
}:
-
let
-
serviceHardening = {
-
PrivateUsers = true;
-
LockPersonality = true;
-
ProtectHostname = true;
-
ProtectKernelTunables = true;
-
ProtectClock = true;
-
ProtectSystem = true;
-
ProtectProc = true;
-
ProtectHome = true;
-
PrivateTmp = true;
-
PrivateDevices = false; # cage's drmGetDevices need devices despite being headless.
-
SystemCallArchitectures = "native";
-
CapabilityBoundingSet = null;
-
NoNewPrivileges = true;
-
RestrictAddressFamilies = [
-
"AF_INET"
-
"AF_INET6"
-
"AF_UNIX"
-
];
-
SystemCallFilter = [
-
"@system-service"
-
# "~@privileged" # cage/wlroots needs setgid for some reason?
-
];
-
};
-
in
-
{
-
users.users.funny = {
-
isSystemUser = true;
-
group = "funny";
-
};
-
users.groups.funny = { };
-
-
systemd.services = {
-
cage-feh = {
-
wantedBy = [ "multi-user.target" ];
-
serviceConfig = {
-
User = "funny";
-
RuntimeDirectory = "funny";
-
Restart = "on-failure";
-
RestartSec = "1";
-
}
-
// serviceHardening;
-
path = with pkgs; [
-
cage
-
feh
-
];
-
script = ''
-
set -e
-
cage -d feh -- -.dz -D10 --draw-tinted /srv/funny
-
'';
-
environment = {
-
WLR_BACKENDS = "headless";
-
WLR_LIBINPUT_NO_DEVICES = "1";
-
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.
-
};
-
};
-
-
wayvnc-feh = {
-
wantedBy = [ "multi-user.target" ];
-
requires = [ "cage-feh.service" ];
-
after = [ "cage-feh.service" ];
-
serviceConfig = {
-
User = "funny";
-
RuntimeDirectory = "funny";
-
ExecStart = "${lib.getExe pkgs.wayvnc} -d 0.0.0.0";
-
Restart = "on-failure";
-
RestartSec = "1";
-
}
-
// serviceHardening;
-
environment = {
-
WAYLAND_DISPLAY = "wayland-0";
-
XDG_RUNTIME_DIR = "%t/funny";
-
};
-
};
-
};
-
-
networking.firewall.allowedTCPPorts = [
-
5900 # vnc; yes this is intended.
-
];
-
}
-82
systems/satori/configuration.nix
···
-
{
-
inputs,
-
pkgs,
-
lib,
-
...
-
}:
-
{
-
imports = [
-
./steam.nix
-
inputs.nixos-hardware.nixosModules.apple-t2
-
inputs.nixos-hardware.nixosModules.common-cpu-intel
-
];
-
-
gensokyo = {
-
traits = {
-
gui = true;
-
games = true;
-
portable = true;
-
hidpi = true;
-
};
-
presets = {
-
vmetrics = true;
-
};
-
system-manager = {
-
enable = true;
-
flakeLocation = "/home/cassie/gensokyo";
-
};
-
};
-
-
# Use the systemd-boot EFI boot loader.
-
boot.loader.systemd-boot.enable = true;
-
boot.loader.efi.canTouchEfiVariables = true;
-
boot.loader.efi.efiSysMountPoint = "/boot";
-
-
# development
-
# services.redis.servers."".enable = true;
-
-
boot.initrd.systemd.enable = true;
-
hardware.apple.touchBar = {
-
enable = true;
-
settings = {
-
FontTemplate = "Hurmit Nerd Font";
-
};
-
};
-
hardware.firmware = [
-
inputs.self.packages.${pkgs.system}.brcmfmac
-
];
-
-
hardware.apple-t2.kernelChannel = "stable";
-
specialisation.latest-kernel.configuration.hardware.apple-t2.kernelChannel = lib.mkForce "latest";
-
-
# experimental
-
boot.kernelParams = [ "mem_sleep_default=s2idle" ];
-
systemd = {
-
services.tiny-dfr = {
-
wantedBy = [
-
"post-resume.target"
-
"dev-tiny_dfr_display.device"
-
"dev-tiny_dfr_backlight.device"
-
"dev-tiny_dfr_display_backlight.device"
-
];
-
after = [ "post-resume.target" ];
-
};
-
};
-
-
environment.etc."systemd/timesyncd.conf.d/50-save-clock.conf".text = ''
-
[Time]
-
SaveIntervalSec=30
-
'';
-
-
environment.systemPackages = [
-
pkgs.jetbrains.idea-ultimate
-
pkgs.prismlauncher
-
];
-
-
zramSwap.enable = true;
-
-
# muh unfree software!!!!!!!!!!!!!!!!!!
-
nixpkgs.config.allowUnfree = true;
-
-
system.stateVersion = "23.05"; # Did you read the comment? Yes.
-
}
-53
systems/satori/hardware-configuration.nix
···
-
# Do not modify this file! It was generated by โ€˜nixos-generate-configโ€™
-
# and may be overwritten by future invocations. Please make changes
-
# to /etc/nixos/configuration.nix instead.
-
{
-
config,
-
lib,
-
modulesPath,
-
...
-
}:
-
{
-
imports = [
-
(modulesPath + "/installer/scan/not-detected.nix")
-
];
-
-
boot.initrd.availableKernelModules = [
-
"xhci_pci"
-
"nvme"
-
"usbhid"
-
"usb_storage"
-
"sd_mod"
-
];
-
boot.initrd.kernelModules = [ ];
-
boot.kernelModules = [ "kvm-intel" ];
-
boot.extraModulePackages = [ ];
-
-
fileSystems."/" = {
-
device = "/dev/disk/by-uuid/f4bb41e2-b477-49e7-ae96-61fd80a63b2e";
-
fsType = "btrfs";
-
};
-
-
fileSystems."/boot" = {
-
device = "/dev/disk/by-uuid/3231-A446";
-
fsType = "vfat";
-
options = [
-
"fmask=0022"
-
"dmask=0022"
-
"umask=0077"
-
];
-
};
-
-
swapDevices = [ ];
-
-
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
-
# (the default) this is the recommended approach. When using systemd-networkd it's
-
# still possible to use this option, but it's recommended to use it in conjunction
-
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
-
networking.useDHCP = lib.mkDefault true;
-
# networking.interfaces.enp0s13f0u2.useDHCP = lib.mkDefault true;
-
# networking.interfaces.enp230s0f1u1.useDHCP = lib.mkDefault true;
-
-
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
-
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
-
}
-14
systems/satori/steam.nix
···
-
{ pkgs, ... }:
-
{
-
programs.steam = {
-
enable = true;
-
-
extraCompatPackages = [
-
pkgs.proton-ge-bin
-
];
-
};
-
-
environment.systemPackages = [
-
pkgs.protontricks
-
];
-
}
-8
users/README.md
···
-
# gensokyo/users
-
-
This directory holds per-user configurations.
-
-
Note that files in `./home/` directories are **not** NixOS modules, rather
-
[Home Manager](https://github.com/nix-community/home-manager) modules. You can
-
see the available options [in the HM manual](https://nix-community.github.io/home-manager/options.xhtml)
-
or with the [option searcher](https://home-manager-options.extranix.com/).
-8
users/_tester.nix
···
-
{ ... }:
-
{
-
virtualisation.vmVariant.users.users._tester = builtins.warn "[vm] building tester user..." {
-
password = "explode";
-
isNormalUser = true;
-
extraGroups = [ "wheel" ];
-
};
-
}
-28
users/builder.nix
···
-
{
-
inputs,
-
config,
-
lib,
-
pkgs,
-
...
-
}:
-
lib.mkIf (!config.gensokyo.traits.sensitive) {
-
users.users.builder = {
-
openssh = {
-
authorizedKeys.keyFiles = [
-
(inputs.self + "/creds/ssh/users/builder")
-
];
-
};
-
isNormalUser = false;
-
isSystemUser = true;
-
# group = "nixbld";
-
# https://github.com/NixOS/nix/blob/946fd29422361e8478425d6aaf9ccae23d7ddffb/src/nix/daemon.cc#L266-L267
-
# https://discourse.nixos.org/t/strange-remote-build-issue/24387/4
-
group = "remote-builder";
-
-
# allow builders to actually access nix
-
# todo: harden this somehow
-
shell = pkgs.zsh;
-
};
-
-
users.groups.remote-builder = { };
-
}
-12
users/cassie/default.nix
···
-
{ ... }:
-
{
-
users.users.cassie = {
-
isNormalUser = true;
-
extraGroups = [ "wheel" ];
-
openssh = {
-
authorizedKeys.keyFiles = [ ../../creds/ssh/users/cassie ];
-
};
-
};
-
-
home-manager.users.cassie = import ./home;
-
}
-1
users/cassie/ephemeral/vscode/.gitignore
···
-
sync.lock
-24
users/cassie/ephemeral/vscode/extension.json
···
-
[
-
"anweber.local-sync",
-
"astro-build.astro-vscode",
-
"catppuccin.catppuccin-vsc",
-
"catppuccin.catppuccin-vsc-icons",
-
"dbaeumer.vscode-eslint",
-
"denoland.vscode-deno",
-
"editorconfig.editorconfig",
-
"esbenp.prettier-vscode",
-
"formulahendry.auto-rename-tag",
-
"gruntfuggly.todo-tree",
-
"hossaini.bootstrap-intellisense",
-
"inlang.vs-code-extension",
-
"jnoortheen.nix-ide",
-
"minecraftcommands.syntax-mcfunction",
-
"mkhl.direnv",
-
"ms-python.debugpy",
-
"ms-python.python",
-
"ms-vscode.hexeditor",
-
"redhat.vscode-yaml",
-
"svelte.svelte-vscode",
-
"usernamehw.errorlens",
-
"yoavbls.pretty-ts-errors"
-
]
-42
users/cassie/ephemeral/vscode/keybindings.json
···
-
// Place your key bindings in this file to override the defaults
-
[
-
{
-
"key": "alt+s",
-
"command": "git.stageSelectedRanges",
-
"when": "isInDiffEditor && !operationInProgress"
-
},
-
{
-
"key": "ctrl+k ctrl+alt+s",
-
"command": "-git.stageSelectedRanges",
-
"when": "isInDiffEditor && !operationInProgress"
-
},
-
{
-
"key": "ctrl+k ctrl+w",
-
"command": "-workbench.action.closeAllEditors"
-
},
-
{
-
"key": "ctrl+k ctrl+w",
-
"command": "workbench.action.openWorkspace"
-
},
-
{
-
"key": "ctrl+alt+n",
-
"command": "explorer.newFile"
-
},
-
{
-
"key": "ctrl+k shift+f",
-
"command": "workbench.explorer.fileView.focus"
-
},
-
{
-
"key": "ctrl+`",
-
"command": "workbench.action.focusActiveEditorGroup",
-
"when": "terminalFocus"
-
},
-
{
-
"key": "alt+t alt+r",
-
"command": "typescript.restartTsServer"
-
},
-
{
-
"key": "alt+'",
-
"command": "editor.emmet.action.wrapWithAbbreviation"
-
}
-
]
-97
users/cassie/ephemeral/vscode/settings.json
···
-
{
-
// reduce eye strain
-
"terminal.integrated.fontFamily": "Hurmit Nerd Font Mono",
-
"terminal.integrated.enableImages": true,
-
"terminal.integrated.enableVisualBell": true,
-
"terminal.integrated.tabs.defaultColor": "terminal.ansiBlue",
-
"terminal.integrated.cursorBlinking": true,
-
"terminal.integrated.environmentChangesIndicator": "on",
-
"git.terminalGitEditor": false,
-
// ricing
-
"workbench.colorTheme": "Catppuccin Latte",
-
"catppuccin.accentColor": "pink",
-
"catppuccin.boldKeywords": true,
-
"editor.renderWhitespace": "all",
-
"editor.cursorSmoothCaretAnimation": "on",
-
"editor.cursorBlinking": "phase",
-
"editor.fontFamily": "'Hurmit Nerd Font', 'Menlo', monospace",
-
"editor.fontSize": 17,
-
"editor.lineHeight": 1.65,
-
"editor.fontLigatures": false,
-
"errorLens.statusBarIconsEnabled": true,
-
"errorLens.gutterIconSet": "defaultOutline",
-
"errorLens.statusBarColorsEnabled": true,
-
"errorLens.statusBarIconsPriority": 1000,
-
"workbench.iconTheme": "catppuccin-latte",
-
"explorer.confirmDelete": false,
-
"files.autoSave": "onFocusChange",
-
"git.suggestSmartCommit": false,
-
"git.verboseCommit": true,
-
"editor.bracketPairColorization.independentColorPoolPerBracketType": true,
-
"workbench.preferredDarkColorTheme": "Catppuccin Mocha",
-
"workbench.preferredLightColorTheme": "Catppuccin Latte",
-
"window.autoDetectColorScheme": true,
-
"git.branchRandomName.dictionary": [
-
"adjectives",
-
"colors",
-
"animals"
-
],
-
"todo-tree.general.statusBar": "top three",
-
"window.titleBarStyle": "native",
-
"window.dialogStyle": "custom",
-
"window.customTitleBarVisibility": "never",
-
"svelte.enable-ts-plugin": true,
-
"editor.smoothScrolling": true,
-
"workbench.list.smoothScrolling": true,
-
"editor.insertSpaces": false,
-
"json.format.enable": false,
-
"editor.rulers": [
-
100
-
],
-
"todo-tree.highlights.useColourScheme": true,
-
"window.confirmBeforeClose": "keyboardOnly",
-
"prettier.useEditorConfig": false,
-
"nix.enableLanguageServer": true,
-
"nix.serverPath": "nixd",
-
"editor.unicodeHighlight.allowedLocales": {
-
"zh-hant": true
-
},
-
"[html]": {
-
"editor.defaultFormatter": "esbenp.prettier-vscode"
-
},
-
"bootstrapIntelliSense": {
-
"enable": true,
-
"bsVersion": "5.3.6",
-
"useLocalFile": false,
-
"cssFilePath": "",
-
"languageSupport": []
-
},
-
"git.closeDiffOnOperation": true,
-
"redhat.telemetry.enabled": false,
-
"update.mode": "none",
-
"[javascript]": {
-
"editor.defaultFormatter": "esbenp.prettier-vscode"
-
},
-
"python.terminal.activateEnvironment": false,
-
"git.openRepositoryInParentFolders": "never",
-
"diffEditor.ignoreTrimWhitespace": false,
-
"terminal.integrated.stickyScroll.enabled": false,
-
// shit removal
-
"chat.agent.enabled": false,
-
"chat.detectParticipant.enabled": false,
-
"chat.checkpoints.enabled": false,
-
"chat.disableAIFeatures": true,
-
// backups
-
"local-sync.autobackup": true,
-
"local-sync.autorestore": true,
-
"sherlock.userId": "6a5316dc-c799-445c-934c-34b77e148545",
-
"[dockercompose]": {
-
"editor.insertSpaces": true,
-
"editor.tabSize": 2,
-
"editor.autoIndent": "advanced",
-
"editor.defaultFormatter": "redhat.vscode-yaml"
-
},
-
"[github-actions-workflow]": {
-
"editor.defaultFormatter": "redhat.vscode-yaml"
-
}
-
}
-120
users/cassie/home/assets/cursor_smear.glsl
···
-
// from https://github.com/KroneCorylus/ghostty-shader-playground/tree/eec84ccb34564ef4b41ef494338de1d1b7098638
-
-
float getSdfRectangle(in vec2 p, in vec2 xy, in vec2 b)
-
{
-
vec2 d = abs(p - xy) - b;
-
return length(max(d, 0.0)) + min(max(d.x, d.y), 0.0);
-
}
-
-
// Based on Inigo Quilez's 2D distance functions article: https://iquilezles.org/articles/distfunctions2d/
-
// Potencially optimized by eliminating conditionals and loops to enhance performance and reduce branching
-
-
float seg(in vec2 p, in vec2 a, in vec2 b, inout float s, float d) {
-
vec2 e = b - a;
-
vec2 w = p - a;
-
vec2 proj = a + e * clamp(dot(w, e) / dot(e, e), 0.0, 1.0);
-
float segd = dot(p - proj, p - proj);
-
d = min(d, segd);
-
-
float c0 = step(0.0, p.y - a.y);
-
float c1 = 1.0 - step(0.0, p.y - b.y);
-
float c2 = 1.0 - step(0.0, e.x * w.y - e.y * w.x);
-
float allCond = c0 * c1 * c2;
-
float noneCond = (1.0 - c0) * (1.0 - c1) * (1.0 - c2);
-
float flip = mix(1.0, -1.0, step(0.5, allCond + noneCond));
-
s *= flip;
-
return d;
-
}
-
-
float getSdfParallelogram(in vec2 p, in vec2 v0, in vec2 v1, in vec2 v2, in vec2 v3) {
-
float s = 1.0;
-
float d = dot(p - v0, p - v0);
-
-
d = seg(p, v0, v3, s, d);
-
d = seg(p, v1, v0, s, d);
-
d = seg(p, v2, v1, s, d);
-
d = seg(p, v3, v2, s, d);
-
-
return s * sqrt(d);
-
}
-
-
vec2 normalize(vec2 value, float isPosition) {
-
return (value * 2.0 - (iResolution.xy * isPosition)) / iResolution.y;
-
}
-
-
float antialising(float distance) {
-
return 1. - smoothstep(0., normalize(vec2(2., 2.), 0.).x, distance);
-
}
-
-
float determineStartVertexFactor(vec2 a, vec2 b) {
-
// Conditions using step
-
float condition1 = step(b.x, a.x) * step(a.y, b.y); // a.x < b.x && a.y > b.y
-
float condition2 = step(a.x, b.x) * step(b.y, a.y); // a.x > b.x && a.y < b.y
-
-
// If neither condition is met, return 1 (else case)
-
return 1.0 - max(condition1, condition2);
-
}
-
-
vec2 getRectangleCenter(vec4 rectangle) {
-
return vec2(rectangle.x + (rectangle.z / 2.), rectangle.y - (rectangle.w / 2.));
-
}
-
float ease(float x) {
-
return pow(1.0 - x, 3.0);
-
}
-
vec4 saturate(vec4 color, float factor) {
-
float gray = dot(color, vec4(0.299, 0.587, 0.114, 0.)); // luminance
-
return mix(vec4(gray), color, factor);
-
}
-
-
vec4 TRAIL_COLOR = iCurrentCursorColor;
-
const float OPACITY = 0.6;
-
const float DURATION = 0.3; //IN SECONDS
-
-
void mainImage(out vec4 fragColor, in vec2 fragCoord)
-
{
-
-
#if !defined(WEB)
-
fragColor = texture(iChannel0, fragCoord.xy / iResolution.xy);
-
#endif
-
// Normalization for fragCoord to a space of -1 to 1;
-
vec2 vu = normalize(fragCoord, 1.);
-
vec2 offsetFactor = vec2(-.5, 0.5);
-
-
// Normalization for cursor position and size;
-
// cursor xy has the postion in a space of -1 to 1;
-
// zw has the width and height
-
vec4 currentCursor = vec4(normalize(iCurrentCursor.xy, 1.), normalize(iCurrentCursor.zw, 0.));
-
vec4 previousCursor = vec4(normalize(iPreviousCursor.xy, 1.), normalize(iPreviousCursor.zw, 0.));
-
-
// 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
-
float vertexFactor = determineStartVertexFactor(currentCursor.xy, previousCursor.xy);
-
float invertedVertexFactor = 1.0 - vertexFactor;
-
-
// Set every vertex of my parellogram
-
vec2 v0 = vec2(currentCursor.x + currentCursor.z * vertexFactor, currentCursor.y - currentCursor.w);
-
vec2 v1 = vec2(currentCursor.x + currentCursor.z * invertedVertexFactor, currentCursor.y);
-
vec2 v2 = vec2(previousCursor.x + currentCursor.z * invertedVertexFactor, previousCursor.y);
-
vec2 v3 = vec2(previousCursor.x + currentCursor.z * vertexFactor, previousCursor.y - previousCursor.w);
-
-
float sdfCurrentCursor = getSdfRectangle(vu, currentCursor.xy - (currentCursor.zw * offsetFactor), currentCursor.zw * 0.5);
-
float sdfTrail = getSdfParallelogram(vu, v0, v1, v2, v3);
-
-
float progress = clamp((iTime - iTimeCursorChange) / DURATION, 0.0, 1.0);
-
float easedProgress = ease(progress);
-
// Distance between cursors determine the total length of the parallelogram;
-
vec2 centerCC = getRectangleCenter(currentCursor);
-
vec2 centerCP = getRectangleCenter(previousCursor);
-
float lineLength = distance(centerCC, centerCP);
-
-
vec4 newColor = vec4(fragColor);
-
-
vec4 trail = TRAIL_COLOR;
-
trail = saturate(trail, 2.5);
-
// Draw trail
-
newColor = mix(newColor, trail, antialising(sdfTrail));
-
// Draw current cursor
-
newColor = mix(newColor, trail, antialising(sdfCurrentCursor));
-
newColor = mix(newColor, fragColor, step(sdfCurrentCursor, 0.));
-
// newColor = mix(fragColor, newColor, OPACITY);
-
fragColor = mix(fragColor, newColor, step(sdfCurrentCursor, easedProgress * lineLength));
-
}
-17
users/cassie/home/default.nix
···
-
{ ... }:
-
{
-
imports = [
-
./dev
-
./path.nix
-
./obs.nix
-
./virt.nix
-
./eyecandy.nix
-
./shell.nix
-
./ghostty.nix
-
./media.nix
-
./syncthing.nix
-
./extras.nix
-
];
-
-
home.stateVersion = "23.11";
-
}
-15
users/cassie/home/dev/default.nix
···
-
{ pkgs, ... }:
-
{
-
imports = [
-
./git.nix
-
./ssh.nix
-
./lazygit.nix
-
./editors.nix
-
];
-
-
home.packages = with pkgs; [
-
mdbook
-
mdbook-admonish
-
mdbook-pagetoc
-
];
-
}
-76
users/cassie/home/dev/editors.nix
···
-
{
-
traits,
-
lib,
-
...
-
}:
-
lib.mkMerge [
-
{
-
programs.helix = {
-
enable = true;
-
languages.language = [
-
{
-
name = "yaml";
-
scope = "source.yaml";
-
indent = {
-
unit = " ";
-
tab-width = 2;
-
};
-
}
-
];
-
};
-
}
-
-
(lib.mkIf traits.gui {
-
programs.zed-editor = {
-
enable = true;
-
userSettings = {
-
# crap disablement
-
agent = {
-
version = "1";
-
enabled = false;
-
};
-
features = {
-
edit_prediction_provider = "none"; # no copilot
-
};
-
telemetry = {
-
metrics = false;
-
};
-
-
# display
-
ui_font_size = 20;
-
buffer_font_size = 16;
-
buffer_font_family = "Fira Code";
-
buffer_font_weight = 500;
-
buffer_font_features.calt = false;
-
-
preferred_line_length = 120;
-
wrap_guides = [ 120 ];
-
show_whitespaces = "all";
-
indent_guides = {
-
enabled = true;
-
coloring = "indent_aware";
-
};
-
theme = {
-
mode = "system";
-
# light = "Catppuccin Latte";
-
dark = lib.mkForce "Catppuccin Mocha (pink)";
-
};
-
diagnostics.inline.enable = true;
-
-
# editing settings
-
base_keymap = "VSCode";
-
hard_tabs = true;
-
vim_mode = false;
-
autosave = "on_focus_change";
-
-
# nix stuff
-
load_direnv = "shell_hook";
-
-
# terminal
-
terminal.env = {
-
"TERM" = "xterm-256color"; # this is not set apparently
-
};
-
};
-
};
-
})
-
]
-38
users/cassie/home/dev/git.nix
···
-
{
-
lib,
-
traits,
-
inputs,
-
...
-
}:
-
{
-
programs.git = lib.mkMerge [
-
{
-
enable = true;
-
userName = "Sophie Cheung";
-
userEmail = "me@soopy.moe";
-
-
# difftastic.enable = true;
-
# delta.enable = true;
-
diff-so-fancy = {
-
enable = true;
-
stripLeadingSymbols = false;
-
};
-
}
-
-
(lib.mkIf traits.gui {
-
signing = {
-
signByDefault = true;
-
key = inputs.self + "/creds/ssh/auth";
-
};
-
-
extraConfig = {
-
gpg.format = "ssh";
-
};
-
})
-
];
-
-
home.shellAliases = {
-
# redo previous commit when something explodes, like my key died or something
-
gcmm = "git commit -eF .git/COMMIT_EDITMSG";
-
};
-
}
-10
users/cassie/home/dev/lazygit.nix
···
-
{
-
programs.lazygit = {
-
enable = true;
-
settings = {
-
# we use ssh keys as auth, and this is hyper annoying for when we want to do literally anything longer than 2 minutes.
-
# we think the concept of autofetching is kind of stupid anyways. i will fetch when i want to.
-
git.autoFetch = false;
-
};
-
};
-
}
-36
users/cassie/home/dev/ssh.nix
···
-
{ ... }:
-
{
-
programs.ssh = {
-
enable = true;
-
hashKnownHosts = true;
-
forwardAgent = true;
-
-
matchBlocks = {
-
# most intuitive design /s
-
patchy = {
-
# host is set to the match block name by default but it is not in the manual/option docs.
-
hostname = "koumakan";
-
user = "forgejo";
-
};
-
-
gh = {
-
hostname = "github.com";
-
user = "git";
-
};
-
-
backup = {
-
hostname = "koumakan";
-
user = "forgejo";
-
identitiesOnly = true;
-
identityFile = "~/.ssh/id_minecraft_backup";
-
};
-
};
-
-
# extraConfig is config for the Host * block.
-
## n.b.: identitesonly and identityfile makes bootstrapping other devices hard esp.
-
## if they're embedded or resource constrained.
-
extraConfig = ''
-
VisualHostKey yes
-
'';
-
};
-
}
-12
users/cassie/home/extras.nix
···
-
{
-
pkgs,
-
traits,
-
lib,
-
...
-
}:
-
{
-
home.packages = lib.mkIf traits.gui [
-
pkgs.wl-clipboard
-
# pkgs.logseq
-
];
-
}
-17
users/cassie/home/eyecandy.nix
···
-
{ ... }:
-
{
-
programs.eza = {
-
enable = true;
-
icons = "auto";
-
git = true;
-
};
-
-
catppuccin = {
-
enable = true;
-
accent = "pink";
-
flavor = "latte";
-
};
-
-
programs.bat.enable = true;
-
programs.zsh.enable = true;
-
}
-26
users/cassie/home/ghostty.nix
···
-
{
-
inputs,
-
traits,
-
lib,
-
pkgs,
-
...
-
}:
-
lib.mkIf traits.gui {
-
programs.ghostty = {
-
enable = true;
-
package = inputs.ghostty.packages.${pkgs.system}.ghostty;
-
settings = {
-
theme = "catppuccin-latte";
-
font-family = "CozetteVector";
-
font-size = 14;
-
window-decoration = "client";
-
-
# great feature, but breaks a bit too many things :(
-
# minimum-contrast = 1.1;
-
async-backend = "epoll"; # see if this fixes iowait "bug"
-
-
custom-shader = builtins.toString ./assets/cursor_smear.glsl;
-
custom-shader-animation = true;
-
};
-
};
-
}
-13
users/cassie/home/media.nix
···
-
{
-
traits,
-
lib,
-
pkgs,
-
...
-
}:
-
lib.mkIf traits.gui {
-
home.packages = [
-
pkgs.gimp3
-
pkgs.krita
-
pkgs.kdePackages.kdenlive
-
];
-
}
-16
users/cassie/home/obs.nix
···
-
{
-
pkgs,
-
traits,
-
lib,
-
...
-
}:
-
lib.mkIf traits.gui {
-
programs.obs-studio = {
-
enable = true;
-
plugins = with pkgs.obs-studio-plugins; [
-
obs-vaapi
-
obs-vkcapture
-
obs-pipewire-audio-capture
-
];
-
};
-
}
-6
users/cassie/home/path.nix
···
-
{ ... }:
-
{
-
home.sessionPath = [
-
"$HOME/.cargo/bin/"
-
];
-
}
-44
users/cassie/home/shell.nix
···
-
{ ... }:
-
{
-
programs.atuin = {
-
enable = true;
-
daemon.enable = true;
-
settings = {
-
search_mode = "fuzzy";
-
update_check = false;
-
workspaces = true;
-
sync_address = "https://atuin.soopy.moe";
-
search_mode_shell_up_key_binding = "prefix";
-
filter_mode_shell_up_key_binding = "session";
-
enter_accept = true;
-
inline_height = 10;
-
-
daemon.sync_frequency = 10;
-
sync.records = true;
-
-
stats.common_subcommands = [
-
","
-
"apt"
-
"cargo"
-
"composer"
-
"dnf"
-
"docker"
-
"git"
-
"go"
-
"ip"
-
"just"
-
"kubectl"
-
"nix"
-
"nmcli"
-
"npm"
-
"pecl"
-
"pnpm"
-
"podman"
-
"port"
-
"systemctl"
-
"tmux"
-
"yarn"
-
];
-
};
-
};
-
}
-41
users/cassie/home/syncthing.nix
···
-
{ lib, traits, ... }:
-
let
-
mkDevice = name: id: {
-
inherit name;
-
value = {
-
inherit id;
-
addresses = [
-
"tcp://${name}.mist-nessie.ts.net"
-
"quic://${name}.mist-nessie.ts.net"
-
];
-
};
-
};
-
devices = lib.listToAttrs [
-
(mkDevice "renko" "JSPWYCM-O76XTAY-IEP3AKI-A2IK4KX-X2NC7N4-ADMQKXY-VYM45XX-OADHHA3")
-
(mkDevice "satori" "OZ2QYJS-463IWPW-DXL6OKH-BU2D2QK-ZP577US-BYXSMAA-LAXRWV7-6PC54QF")
-
];
-
allDevices = lib.attrNames devices;
-
in
-
lib.mkIf (traits.gui) {
-
services.syncthing = {
-
enable = true;
-
settings = {
-
inherit devices;
-
options.globalAnnounceEnabled = false;
-
defaults.ignores = [
-
"(?d)**/node_modules"
-
"(?d)**/target"
-
"(?d)**/.svelte-kit"
-
"(?d)**/build"
-
"(?d)**/.gradle"
-
"(?d)**/.direnv"
-
];
-
folders = {
-
"/home/cassie/projects/synced" = {
-
id = "synced-projects";
-
devices = allDevices;
-
};
-
};
-
};
-
};
-
}
-12
users/cassie/home/virt.nix
···
-
{
-
traits,
-
lib,
-
...
-
}:
-
lib.mkIf traits.gui {
-
# this complements **/*/virt.nix in nixos modules.
-
dconf.settings."org/virt-manager/virt-manager/connections" = {
-
autoconnect = [ "qemu:///system" ];
-
uris = [ "qemu:///system" ];
-
};
-
}
-8
users/default.nix
···
-
{ ... }:
-
{
-
imports = [
-
./cassie
-
./_tester.nix
-
./builder.nix
-
];
-
}
-9
utils/build-yaml.nix
···
-
# impure alert
-
{
-
name,
-
content,
-
}:
-
let
-
pkgs = import <nixpkgs> { }; # uses builtins.currentSystem
-
in
-
pkgs.writeText name (builtins.toJSON content)
+2 -22
utils/justfile
···
python_executable := if os() == "android" { "python3" } else { "nix develop ..# -c python3" }
list:
-
just -l
+
just -l
# grab a new nitter guest account and save it
nitter-token:
-
{{python_executable}} nitter-guest-account.py tokens.json
-
-
# sync sops config with the nix file
-
update-sops-config:
-
#!/usr/bin/env bash
-
set -euxo pipefail
-
rm ../.sops.yaml || true
-
# mv ../.sops.yaml{,.bak} 2>/dev/null || true
-
OUT=$(nix-build build-yaml.nix --argstr name ".sops.yaml" --arg content "import ../.sops.nix")
-
echo -e "# WARNING: This is a generated file. DO NOT EDIT DIRECTLY!\n# See .sops.nix and utils/build-yaml.nix for more details." \
-
| cat - $OUT > ../.sops.yaml
-
-
for file in ../creds/sops/**/*; do sops updatekeys $file; done
-
-
rotate-sops-keys:
-
for file in ../creds/sops/**/*; do sops -i -r $file; done
-
-
add-grafana-dashboard id name *title="":
-
xh https://grafana.com/api/dashboards/{{id}} | \
-
jq '.json | .uid="{{name}}" {{ if title != "" {"| .title=\"" + title + "\"" } else {""} }}' \
-
-c > ../systems/koumakan/services/telemetry/grafana/dashboards/{{name}}.json
+
{{python_executable}} nitter-guest-account.py tokens.json
-9
utils/rebuild-collations.sh
···
-
#!/usr/bin/env bash
-
set -euo pipefail
-
-
for db in $(psql -Atc 'select datname from pg_database;' postgres); do
-
echo "Updating database ${db}"
-
psql -e -c "reindex (verbose) database ${db};" -c "alter database ${db} refresh collation version;" ${db} &
-
done
-
-
wait
-1
vendor/brcmfmac/.gitignore
···
-
firmware.tar.gz
-32
vendor/brcmfmac/default.nix
···
-
{
-
zstd,
-
lib,
-
fetchzip,
-
stdenvNoCC,
-
}:
-
stdenvNoCC.mkDerivation (final: {
-
name = "brcm-mac-firmware";
-
-
src = fetchzip {
-
nativeBuildInputs = [ zstd ];
-
stripRoot = false;
-
url = "https://mirror.funami.tech/arch-mact2/os/x86_64/apple-bcm-firmware-14.0-1-any.pkg.tar.zst";
-
hash = "sha256-7HFXStpTkBG8wujsO8OTm5x+h17mqRiGSrS/Srv49Yg=";
-
};
-
-
dontBuild = true;
-
dontConfigure = true; # don't do unnecessary stuff.
-
-
installPhase = ''
-
finalDir="$out/lib/firmware"
-
mkdir -p "$finalDir"
-
cp -r ${final.src}/usr/lib/firmware/brcm "$finalDir"
-
'';
-
-
meta = {
-
description = "Collection of Wi-Fi and Bluetooth firmware files for Apple Mac devices.";
-
license = lib.licenses.unfree;
-
maintainers = with lib.maintainers; [ soopyc ];
-
platforms = lib.platforms.linux;
-
};
-
})