+9
-5
.editorconfig
+9
-5
.editorconfig
···
1
root = true
2
3
[*]
4
+
indent_size = 2
5
+
indent_style = space
6
insert_final_newline = true
7
trim_trailing_whitespace = true
8
9
+
[*.py]
10
+
indent_size = 4
11
+
indent_style = tab
12
13
[*.cry]
14
insert_final_newline = false
15
+
16
+
[Makefile]
17
+
indent_style = tab
18
+
indent_size = 4
-1
.git-blame-ignore-revs
-1
.git-blame-ignore-revs
···
1
-
17333cf95859ed5eccfacd015b2e08efa1245069
···
-44
.github/workflows/build-docs.yaml
-44
.github/workflows/build-docs.yaml
···
1
-
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
2
-
name: "Build documentation"
3
-
4
-
permissions:
5
-
contents: read
6
-
pages: write
7
-
id-token: write
8
-
9
-
on:
10
-
push:
11
-
branches:
12
-
- main
13
-
paths:
14
-
- "docs/**"
15
-
16
-
jobs:
17
-
build:
18
-
runs-on: ubuntu-latest
19
-
steps:
20
-
- uses: actions/checkout@v4
21
-
- name: Install Nix
22
-
uses: DeterminateSystems/nix-installer-action@v10
23
-
with:
24
-
extra-conf: |
25
-
experimental-features = nix-command flakes
26
-
27
-
- name: Build site
28
-
run: "nix develop .#devShells.x86_64-linux.docs -c mdbook build docs"
29
-
30
-
- name: Upload built site as artifact
31
-
uses: actions/upload-pages-artifact@v3
32
-
with:
33
-
path: ./docs/dist
34
-
35
-
deploy:
36
-
environment:
37
-
name: github-pages
38
-
url: ${{ steps.deployment.outputs.page_url }}
39
-
runs-on: ubuntu-latest
40
-
needs: build
41
-
steps:
42
-
- name: Deploy to GitHub Pages
43
-
id: deployment
44
-
uses: actions/deploy-pages@v4
···
+79
.github/workflows/build.yaml
+79
.github/workflows/build.yaml
···
···
1
+
name: Check and Build configuration
2
+
3
+
on:
4
+
push:
5
+
6
+
jobs:
7
+
check:
8
+
runs-on: ubuntu-latest
9
+
steps:
10
+
- name: Checkout
11
+
uses: actions/checkout@v3
12
+
13
+
- name: Replace .cry files with some bollocks
14
+
run: find . -name "*.cry" -execdir bash -c 'echo some bollocks > {}' \;
15
+
16
+
- name: Install Nix
17
+
uses: DeterminateSystems/nix-installer-action@v4
18
+
with:
19
+
extra-conf: |
20
+
experimental-features = nix-command flakes
21
+
22
+
- name: Setup Nix cache
23
+
uses: DeterminateSystems/magic-nix-cache-action@v2
24
+
25
+
- name: Run nix flake check
26
+
run: nix flake check
27
+
28
+
- name: Check with DeterminateSystems/flake-checker-action
29
+
uses: DeterminateSystems/flake-checker-action@v5
30
+
with:
31
+
ignore-missing-flake-lock: false
32
+
33
+
build:
34
+
needs: check
35
+
runs-on: ubuntu-latest
36
+
strategy:
37
+
matrix:
38
+
host:
39
+
- koumakan
40
+
41
+
steps:
42
+
- name: Checkout
43
+
uses: actions/checkout@v3
44
+
45
+
- name: Write Nix netrc file
46
+
run: |
47
+
sudo mkdir -p /etc/nix
48
+
echo "machine nonbunary.soopy.moe password ${access_token}" | sudo tee /etc/nix/netrc > /dev/null
49
+
env:
50
+
access_token: ${{ secrets.ATTIC_ACCESS_TOKEN }}
51
+
52
+
- name: Install Nix
53
+
uses: DeterminateSystems/nix-installer-action@v4
54
+
with:
55
+
extra-conf: |
56
+
fallback = true # why is this not the default?
57
+
connect-timeout = 30
58
+
netrc-file = /etc/nix/netrc
59
+
experimental-features = nix-command flakes
60
+
extra-substituters = https://nonbunary.soopy.moe/gensokyo-systems https://nonbunary.soopy.moe/gensokyo-global
61
+
extra-trusted-public-keys = gensokyo-systems:r/Wx649dPuQrCN9Pgh3Jic526zQNk3oWMqYJHnob/Ok= gensokyo-global:XiCN0D2XeSxF4urFYTprR+1Nr/5hWyydcETwZtPG6Ec=
62
+
63
+
- name: Setup Nix cache
64
+
uses: DeterminateSystems/magic-nix-cache-action@v2
65
+
66
+
- name: Replace .cry files with some bollocks
67
+
run: find . -name "*.cry" -execdir bash -c 'echo some bollocks > {}' \;
68
+
69
+
- name: Build configuration
70
+
run: nix build .#nixosConfigurations."${{ matrix.host }}".config.system.build.toplevel
71
+
72
+
- name: Setup attic and push to cache
73
+
if: ${{ github.event_name != 'pull_request' }}
74
+
run: |
75
+
nix run github:zhaofengli/attic#default login nbsm https://nonbunary.soopy.moe ${access_token}
76
+
nix run github:zhaofengli/attic#default push gensokyo-systems result
77
+
env:
78
+
access_token: ${{ secrets.ATTIC_ACCESS_TOKEN }}
79
+
continue-on-error: true
+37
.github/workflows/update-lockfile.yaml
+37
.github/workflows/update-lockfile.yaml
···
···
1
+
name: "Update Flake Lockfile"
2
+
3
+
permissions:
4
+
pull-requests: write
5
+
contents: write
6
+
7
+
on:
8
+
workflow_dispatch:
9
+
schedule:
10
+
- cron: "0 8 * * 1,3,5"
11
+
12
+
jobs:
13
+
lockfile:
14
+
runs-on: ubuntu-latest
15
+
steps:
16
+
- name: Checkout repo
17
+
uses: actions/checkout@v3
18
+
19
+
- name: Install Nix
20
+
uses: DeterminateSystems/nix-installer-action@v4
21
+
with:
22
+
extra-conf: |
23
+
fallback = true
24
+
connect-timeout = 30
25
+
experimental-features = nix-command flakes
26
+
27
+
- name: Update flake.lock
28
+
uses: DeterminateSystems/update-flake-lock@v20
29
+
with:
30
+
pr-title: "flake: update lockfile"
31
+
pr-labels: |
32
+
dependencies
33
+
automated
34
+
git-author-name: soopyc [bot]
35
+
git-author-email: ci_signing+github@ningenkai.soopy.moe
36
+
git-committer-name: soopyc [bot]
37
+
git-committer-email: ci_signing+github@ningenkai.soopy.moe
-8
.gitignore
-8
.gitignore
-3
.ignore
-3
.ignore
-56
.sops.nix
-56
.sops.nix
···
1
-
let
2
-
# maintainers
3
-
age.soopyc_pxl7ag = "age1l3qxt6630dzesdclfm3eqgw3uuhwj09dh6typwlwr6clcv0qhfrqgtj2fk";
4
-
# age.soopyc_yub302 = "age1yubikey1qgmfcf0vddslyza7djdekjjk3t3u29d474c5xscmcdye8x3spvhlxxj23xz";
5
-
age.soopyc_mbp14 = "age1zkafenrdkkmatjh034yykpzjzzs5fx6kft23jlmsung3dwyufcksds59l2";
6
-
7
-
# hosts
8
-
age.koumakan = "age18h7hya5terghrwawgpny28swlat2nqkdrfd4clk0svujqlz9xfusd3zeqt";
9
-
age.satori = "age132qsqclmp5d6x968x5y8amdn90v64rldy3assprr8g8wjdpecvmqwryah8";
10
-
age.renko = "age1p6n5yh9fy09xspwf29klfsa4zdrhp04q22gvxkz2vvm88vt9tunsdn020s";
11
-
age.bocchi = "age1kdctxllje2rw3kwpzell0rt6t7mruc3h3j5zfjelnpmahchjlaqs9v9vm9";
12
-
age.kita = "age1qzma7prftj6d4atqcmatdl9le0tuuqzegm6f8e9gkwrp3pja0aaqs49g7n";
13
-
age.ryo = "age1tdatk0rrr6uf89g5vpq96wjcjcetkrs6yadkxv47v76q8qhtva2sn7tun2";
14
-
age.nijika = "age1rzxugsgkpnf0ns0w70swdc3sndjpktx23eucah4w47zcppz56sls2c5e6m";
15
-
16
-
everything = [
17
-
{
18
-
age = builtins.attrValues age;
19
-
}
20
-
];
21
-
22
-
mkHost =
23
-
name: identities:
24
-
assert builtins.typeOf identities == "list";
25
-
{
26
-
path_regex = "creds/sops/${name}/.*";
27
-
key_groups = [
28
-
{
29
-
age = [
30
-
# admin
31
-
age.soopyc_pxl7ag
32
-
age.soopyc_mbp14
33
-
]
34
-
++ identities;
35
-
}
36
-
];
37
-
};
38
-
in
39
-
{
40
-
# remember to run `just utils update-sops-config` and `sops updatekeys` after editing.
41
-
creation_rules = [
42
-
{
43
-
path_regex = "creds/sops/global/.*";
44
-
key_groups = everything;
45
-
}
46
-
47
-
(mkHost "koumakan" [ age.koumakan ])
48
-
(mkHost "satori" [ age.satori ])
49
-
(mkHost "renko" [ age.renko ])
50
-
51
-
(mkHost "bocchi" [ age.bocchi ])
52
-
(mkHost "kita" [ age.kita ])
53
-
(mkHost "ryo" [ age.ryo ])
54
-
(mkHost "nijika" [ age.nijika ])
55
-
];
56
-
}
···
+23
-3
.sops.yaml
+23
-3
.sops.yaml
···
1
-
# WARNING: This is a generated file. DO NOT EDIT DIRECTLY!
2
-
# See .sops.nix and utils/build-yaml.nix for more details.
3
-
{"creation_rules":[{"key_groups":[{"age":["age1kdctxllje2rw3kwpzell0rt6t7mruc3h3j5zfjelnpmahchjlaqs9v9vm9","age1qzma7prftj6d4atqcmatdl9le0tuuqzegm6f8e9gkwrp3pja0aaqs49g7n","age18h7hya5terghrwawgpny28swlat2nqkdrfd4clk0svujqlz9xfusd3zeqt","age1rzxugsgkpnf0ns0w70swdc3sndjpktx23eucah4w47zcppz56sls2c5e6m","age1p6n5yh9fy09xspwf29klfsa4zdrhp04q22gvxkz2vvm88vt9tunsdn020s","age1tdatk0rrr6uf89g5vpq96wjcjcetkrs6yadkxv47v76q8qhtva2sn7tun2","age132qsqclmp5d6x968x5y8amdn90v64rldy3assprr8g8wjdpecvmqwryah8","age1zkafenrdkkmatjh034yykpzjzzs5fx6kft23jlmsung3dwyufcksds59l2","age1l3qxt6630dzesdclfm3eqgw3uuhwj09dh6typwlwr6clcv0qhfrqgtj2fk"]}],"path_regex":"creds/sops/global/.*"},{"key_groups":[{"age":["age1l3qxt6630dzesdclfm3eqgw3uuhwj09dh6typwlwr6clcv0qhfrqgtj2fk","age1zkafenrdkkmatjh034yykpzjzzs5fx6kft23jlmsung3dwyufcksds59l2","age18h7hya5terghrwawgpny28swlat2nqkdrfd4clk0svujqlz9xfusd3zeqt"]}],"path_regex":"creds/sops/koumakan/.*"},{"key_groups":[{"age":["age1l3qxt6630dzesdclfm3eqgw3uuhwj09dh6typwlwr6clcv0qhfrqgtj2fk","age1zkafenrdkkmatjh034yykpzjzzs5fx6kft23jlmsung3dwyufcksds59l2","age132qsqclmp5d6x968x5y8amdn90v64rldy3assprr8g8wjdpecvmqwryah8"]}],"path_regex":"creds/sops/satori/.*"},{"key_groups":[{"age":["age1l3qxt6630dzesdclfm3eqgw3uuhwj09dh6typwlwr6clcv0qhfrqgtj2fk","age1zkafenrdkkmatjh034yykpzjzzs5fx6kft23jlmsung3dwyufcksds59l2","age1p6n5yh9fy09xspwf29klfsa4zdrhp04q22gvxkz2vvm88vt9tunsdn020s"]}],"path_regex":"creds/sops/renko/.*"},{"key_groups":[{"age":["age1l3qxt6630dzesdclfm3eqgw3uuhwj09dh6typwlwr6clcv0qhfrqgtj2fk","age1zkafenrdkkmatjh034yykpzjzzs5fx6kft23jlmsung3dwyufcksds59l2","age1kdctxllje2rw3kwpzell0rt6t7mruc3h3j5zfjelnpmahchjlaqs9v9vm9"]}],"path_regex":"creds/sops/bocchi/.*"},{"key_groups":[{"age":["age1l3qxt6630dzesdclfm3eqgw3uuhwj09dh6typwlwr6clcv0qhfrqgtj2fk","age1zkafenrdkkmatjh034yykpzjzzs5fx6kft23jlmsung3dwyufcksds59l2","age1qzma7prftj6d4atqcmatdl9le0tuuqzegm6f8e9gkwrp3pja0aaqs49g7n"]}],"path_regex":"creds/sops/kita/.*"},{"key_groups":[{"age":["age1l3qxt6630dzesdclfm3eqgw3uuhwj09dh6typwlwr6clcv0qhfrqgtj2fk","age1zkafenrdkkmatjh034yykpzjzzs5fx6kft23jlmsung3dwyufcksds59l2","age1tdatk0rrr6uf89g5vpq96wjcjcetkrs6yadkxv47v76q8qhtva2sn7tun2"]}],"path_regex":"creds/sops/ryo/.*"},{"key_groups":[{"age":["age1l3qxt6630dzesdclfm3eqgw3uuhwj09dh6typwlwr6clcv0qhfrqgtj2fk","age1zkafenrdkkmatjh034yykpzjzzs5fx6kft23jlmsung3dwyufcksds59l2","age1rzxugsgkpnf0ns0w70swdc3sndjpktx23eucah4w47zcppz56sls2c5e6m"]}],"path_regex":"creds/sops/nijika/.*"}]}
···
1
+
keys:
2
+
# maintainers
3
+
- &soopyc_mpxl7a age10rkyshu0lswdqyvun4cs9cekm9zt4fw5c8ssa38tn3lukgcahcvsltnqx2
4
+
- &soopyc_pgp302 8F3B277901484C6EA7E63F82D539637D518022C6
5
+
# - &soopyc_age302 age1yubikey1qgmfcf0vddslyza7djdekjjk3t3u29d474c5xscmcdye8x3spvhlxxj23xz
6
+
# failed to parse input as Bech32-encoded age public key: malformed recipient "age1yubikey1qgmfcf0vddslyza7djdekjjk3t3u29d474c5xscmcdye8x3spvhlxxj23xz": invalid type "age1yubikey"
7
+
8
+
# Hosts
9
+
- &koumakan_ssh age18h7hya5terghrwawgpny28swlat2nqkdrfd4clk0svujqlz9xfusd3zeqt
10
+
11
+
default_group: &default_group
12
+
pgp:
13
+
- *soopyc_pgp302
14
+
age:
15
+
# - *soopyc_age302
16
+
- *soopyc_mpxl7a
17
+
18
+
creation_rules:
19
+
- path_regex: creds/sops/koumakan.yaml
20
+
key_groups:
21
+
- <<: *default_group
22
+
age:
23
+
- *koumakan_ssh
+5
Makefile
+5
Makefile
+6
-12
README.md
+6
-12
README.md
···
1
[](https://github.com/soopyc/nix-on-koumakan/actions/workflows/build.yaml)
2
-
[](https://garnix.io)
3
4
# Cow
5
-

6
7
-
*Picture by [Quaritsch Photography](https://unsplash.com/@quaritsch) on Unsplash, via https://unsplash.com/photos/1_6rJHQ2Gmw*
8
9
# NixOS Configuration
10
This is a bare minimum nix configuration for koumakan.
···
20
21
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
22
23
-
## Todo
24
-
See ./TODO.md
25
-
26
-
## Tangled
27
28
-
Viewing on <https://tangled.sh>? The SSH clone URL below is not correct for our knotserver. Use this instead:
29
-
30
-
```sh
31
-
git clone knot@enanan.staging.soopy.moe:soopy.moe/gensokyo
32
-
```
···
1
[](https://github.com/soopyc/nix-on-koumakan/actions/workflows/build.yaml)
2
3
# Cow
4
+

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

3
+
4
+
*Gracefully provided by [Quaritsch Photography](https://unsplash.com/@quaritsch) on Unsplash, via https://unsplash.com/photos/1_6rJHQ2Gmw*
5
+
6
+
# NixOS Configuration
7
+
This is a bare minimum nix configuration for koumakan.
8
+
9
+
I'm still very, very new to Nix and its ecosystem so pointers to better
10
+
way of doing things are very much appreciated.
11
+
12
+
## docs
13
+
documentation and extra tips can be found [here](./docs)
14
+
15
+
couldn't find what you needed? suffer with me! see the
16
+
[How 2 Nix section in this repo.](https://github.com/hlissner/dotfiles#frequently-asked-questions)
17
+
18
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
-348
docs/mdbook-admonish.css
-348
docs/mdbook-admonish.css
···
1
-
@charset "UTF-8";
2
-
:is(.admonition) {
3
-
display: flow-root;
4
-
margin: 1.5625em 0;
5
-
padding: 0 1.2rem;
6
-
color: var(--fg);
7
-
page-break-inside: avoid;
8
-
background-color: var(--bg);
9
-
border: 0 solid black;
10
-
border-inline-start-width: 0.4rem;
11
-
border-radius: 0.2rem;
12
-
box-shadow: 0 0.2rem 1rem rgba(0, 0, 0, 0.05), 0 0 0.1rem rgba(0, 0, 0, 0.1);
13
-
}
14
-
@media print {
15
-
:is(.admonition) {
16
-
box-shadow: none;
17
-
}
18
-
}
19
-
:is(.admonition) > * {
20
-
box-sizing: border-box;
21
-
}
22
-
:is(.admonition) :is(.admonition) {
23
-
margin-top: 1em;
24
-
margin-bottom: 1em;
25
-
}
26
-
:is(.admonition) > .tabbed-set:only-child {
27
-
margin-top: 0;
28
-
}
29
-
html :is(.admonition) > :last-child {
30
-
margin-bottom: 1.2rem;
31
-
}
32
-
33
-
a.admonition-anchor-link {
34
-
display: none;
35
-
position: absolute;
36
-
left: -1.2rem;
37
-
padding-right: 1rem;
38
-
}
39
-
a.admonition-anchor-link:link, a.admonition-anchor-link:visited {
40
-
color: var(--fg);
41
-
}
42
-
a.admonition-anchor-link:link:hover, a.admonition-anchor-link:visited:hover {
43
-
text-decoration: none;
44
-
}
45
-
a.admonition-anchor-link::before {
46
-
content: "ยง";
47
-
}
48
-
49
-
:is(.admonition-title, summary.admonition-title) {
50
-
position: relative;
51
-
min-height: 4rem;
52
-
margin-block: 0;
53
-
margin-inline: -1.6rem -1.2rem;
54
-
padding-block: 0.8rem;
55
-
padding-inline: 4.4rem 1.2rem;
56
-
font-weight: 700;
57
-
background-color: rgba(68, 138, 255, 0.1);
58
-
print-color-adjust: exact;
59
-
-webkit-print-color-adjust: exact;
60
-
display: flex;
61
-
}
62
-
:is(.admonition-title, summary.admonition-title) p {
63
-
margin: 0;
64
-
}
65
-
html :is(.admonition-title, summary.admonition-title):last-child {
66
-
margin-bottom: 0;
67
-
}
68
-
:is(.admonition-title, summary.admonition-title)::before {
69
-
position: absolute;
70
-
top: 0.625em;
71
-
inset-inline-start: 1.6rem;
72
-
width: 2rem;
73
-
height: 2rem;
74
-
background-color: #448aff;
75
-
print-color-adjust: exact;
76
-
-webkit-print-color-adjust: exact;
77
-
mask-image: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"></svg>');
78
-
-webkit-mask-image: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"></svg>');
79
-
mask-repeat: no-repeat;
80
-
-webkit-mask-repeat: no-repeat;
81
-
mask-size: contain;
82
-
-webkit-mask-size: contain;
83
-
content: "";
84
-
}
85
-
:is(.admonition-title, summary.admonition-title):hover a.admonition-anchor-link {
86
-
display: initial;
87
-
}
88
-
89
-
details.admonition > summary.admonition-title::after {
90
-
position: absolute;
91
-
top: 0.625em;
92
-
inset-inline-end: 1.6rem;
93
-
height: 2rem;
94
-
width: 2rem;
95
-
background-color: currentcolor;
96
-
mask-image: var(--md-details-icon);
97
-
-webkit-mask-image: var(--md-details-icon);
98
-
mask-repeat: no-repeat;
99
-
-webkit-mask-repeat: no-repeat;
100
-
mask-size: contain;
101
-
-webkit-mask-size: contain;
102
-
content: "";
103
-
transform: rotate(0deg);
104
-
transition: transform 0.25s;
105
-
}
106
-
details[open].admonition > summary.admonition-title::after {
107
-
transform: rotate(90deg);
108
-
}
109
-
110
-
:root {
111
-
--md-details-icon: url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M8.59 16.58 13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.42Z'/></svg>");
112
-
}
113
-
114
-
:root {
115
-
--md-admonition-icon--admonish-note: url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z'/></svg>");
116
-
--md-admonition-icon--admonish-abstract: url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M17 9H7V7h10m0 6H7v-2h10m-3 6H7v-2h7M12 3a1 1 0 0 1 1 1 1 1 0 0 1-1 1 1 1 0 0 1-1-1 1 1 0 0 1 1-1m7 0h-4.18C14.4 1.84 13.3 1 12 1c-1.3 0-2.4.84-2.82 2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2z'/></svg>");
117
-
--md-admonition-icon--admonish-info: url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M13 9h-2V7h2m0 10h-2v-6h2m-1-9A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 10-10A10 10 0 0 0 12 2z'/></svg>");
118
-
--md-admonition-icon--admonish-tip: url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M17.66 11.2c-.23-.3-.51-.56-.77-.82-.67-.6-1.43-1.03-2.07-1.66C13.33 7.26 13 4.85 13.95 3c-.95.23-1.78.75-2.49 1.32-2.59 2.08-3.61 5.75-2.39 8.9.04.1.08.2.08.33 0 .22-.15.42-.35.5-.23.1-.47.04-.66-.12a.58.58 0 0 1-.14-.17c-1.13-1.43-1.31-3.48-.55-5.12C5.78 10 4.87 12.3 5 14.47c.06.5.12 1 .29 1.5.14.6.41 1.2.71 1.73 1.08 1.73 2.95 2.97 4.96 3.22 2.14.27 4.43-.12 6.07-1.6 1.83-1.66 2.47-4.32 1.53-6.6l-.13-.26c-.21-.46-.77-1.26-.77-1.26m-3.16 6.3c-.28.24-.74.5-1.1.6-1.12.4-2.24-.16-2.9-.82 1.19-.28 1.9-1.16 2.11-2.05.17-.8-.15-1.46-.28-2.23-.12-.74-.1-1.37.17-2.06.19.38.39.76.63 1.06.77 1 1.98 1.44 2.24 2.8.04.14.06.28.06.43.03.82-.33 1.72-.93 2.27z'/></svg>");
119
-
--md-admonition-icon--admonish-success: url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='m9 20.42-6.21-6.21 2.83-2.83L9 14.77l9.88-9.89 2.83 2.83L9 20.42z'/></svg>");
120
-
--md-admonition-icon--admonish-question: url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='m15.07 11.25-.9.92C13.45 12.89 13 13.5 13 15h-2v-.5c0-1.11.45-2.11 1.17-2.83l1.24-1.26c.37-.36.59-.86.59-1.41a2 2 0 0 0-2-2 2 2 0 0 0-2 2H8a4 4 0 0 1 4-4 4 4 0 0 1 4 4 3.2 3.2 0 0 1-.93 2.25M13 19h-2v-2h2M12 2A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 10-10c0-5.53-4.5-10-10-10z'/></svg>");
121
-
--md-admonition-icon--admonish-warning: url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M13 14h-2V9h2m0 9h-2v-2h2M1 21h22L12 2 1 21z'/></svg>");
122
-
--md-admonition-icon--admonish-failure: url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M20 6.91 17.09 4 12 9.09 6.91 4 4 6.91 9.09 12 4 17.09 6.91 20 12 14.91 17.09 20 20 17.09 14.91 12 20 6.91z'/></svg>");
123
-
--md-admonition-icon--admonish-danger: url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M11 15H6l7-14v8h5l-7 14v-8z'/></svg>");
124
-
--md-admonition-icon--admonish-bug: url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M14 12h-4v-2h4m0 6h-4v-2h4m6-6h-2.81a5.985 5.985 0 0 0-1.82-1.96L17 4.41 15.59 3l-2.17 2.17a6.002 6.002 0 0 0-2.83 0L8.41 3 7 4.41l1.62 1.63C7.88 6.55 7.26 7.22 6.81 8H4v2h2.09c-.05.33-.09.66-.09 1v1H4v2h2v1c0 .34.04.67.09 1H4v2h2.81c1.04 1.79 2.97 3 5.19 3s4.15-1.21 5.19-3H20v-2h-2.09c.05-.33.09-.66.09-1v-1h2v-2h-2v-1c0-.34-.04-.67-.09-1H20V8z'/></svg>");
125
-
--md-admonition-icon--admonish-example: url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M7 13v-2h14v2H7m0 6v-2h14v2H7M7 7V5h14v2H7M3 8V5H2V4h2v4H3m-1 9v-1h3v4H2v-1h2v-.5H3v-1h1V17H2m2.25-7a.75.75 0 0 1 .75.75c0 .2-.08.39-.21.52L3.12 13H5v1H2v-.92L4 11H2v-1h2.25z'/></svg>");
126
-
--md-admonition-icon--admonish-quote: url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M14 17h3l2-4V7h-6v6h3M6 17h3l2-4V7H5v6h3l-2 4z'/></svg>");
127
-
}
128
-
129
-
:is(.admonition):is(.admonish-note) {
130
-
border-color: #448aff;
131
-
}
132
-
133
-
:is(.admonish-note) > :is(.admonition-title, summary.admonition-title) {
134
-
background-color: rgba(68, 138, 255, 0.1);
135
-
}
136
-
:is(.admonish-note) > :is(.admonition-title, summary.admonition-title)::before {
137
-
background-color: #448aff;
138
-
mask-image: var(--md-admonition-icon--admonish-note);
139
-
-webkit-mask-image: var(--md-admonition-icon--admonish-note);
140
-
mask-repeat: no-repeat;
141
-
-webkit-mask-repeat: no-repeat;
142
-
mask-size: contain;
143
-
-webkit-mask-repeat: no-repeat;
144
-
}
145
-
146
-
:is(.admonition):is(.admonish-abstract, .admonish-summary, .admonish-tldr) {
147
-
border-color: #00b0ff;
148
-
}
149
-
150
-
:is(.admonish-abstract, .admonish-summary, .admonish-tldr) > :is(.admonition-title, summary.admonition-title) {
151
-
background-color: rgba(0, 176, 255, 0.1);
152
-
}
153
-
:is(.admonish-abstract, .admonish-summary, .admonish-tldr) > :is(.admonition-title, summary.admonition-title)::before {
154
-
background-color: #00b0ff;
155
-
mask-image: var(--md-admonition-icon--admonish-abstract);
156
-
-webkit-mask-image: var(--md-admonition-icon--admonish-abstract);
157
-
mask-repeat: no-repeat;
158
-
-webkit-mask-repeat: no-repeat;
159
-
mask-size: contain;
160
-
-webkit-mask-repeat: no-repeat;
161
-
}
162
-
163
-
:is(.admonition):is(.admonish-info, .admonish-todo) {
164
-
border-color: #00b8d4;
165
-
}
166
-
167
-
:is(.admonish-info, .admonish-todo) > :is(.admonition-title, summary.admonition-title) {
168
-
background-color: rgba(0, 184, 212, 0.1);
169
-
}
170
-
:is(.admonish-info, .admonish-todo) > :is(.admonition-title, summary.admonition-title)::before {
171
-
background-color: #00b8d4;
172
-
mask-image: var(--md-admonition-icon--admonish-info);
173
-
-webkit-mask-image: var(--md-admonition-icon--admonish-info);
174
-
mask-repeat: no-repeat;
175
-
-webkit-mask-repeat: no-repeat;
176
-
mask-size: contain;
177
-
-webkit-mask-repeat: no-repeat;
178
-
}
179
-
180
-
:is(.admonition):is(.admonish-tip, .admonish-hint, .admonish-important) {
181
-
border-color: #00bfa5;
182
-
}
183
-
184
-
:is(.admonish-tip, .admonish-hint, .admonish-important) > :is(.admonition-title, summary.admonition-title) {
185
-
background-color: rgba(0, 191, 165, 0.1);
186
-
}
187
-
:is(.admonish-tip, .admonish-hint, .admonish-important) > :is(.admonition-title, summary.admonition-title)::before {
188
-
background-color: #00bfa5;
189
-
mask-image: var(--md-admonition-icon--admonish-tip);
190
-
-webkit-mask-image: var(--md-admonition-icon--admonish-tip);
191
-
mask-repeat: no-repeat;
192
-
-webkit-mask-repeat: no-repeat;
193
-
mask-size: contain;
194
-
-webkit-mask-repeat: no-repeat;
195
-
}
196
-
197
-
:is(.admonition):is(.admonish-success, .admonish-check, .admonish-done) {
198
-
border-color: #00c853;
199
-
}
200
-
201
-
:is(.admonish-success, .admonish-check, .admonish-done) > :is(.admonition-title, summary.admonition-title) {
202
-
background-color: rgba(0, 200, 83, 0.1);
203
-
}
204
-
:is(.admonish-success, .admonish-check, .admonish-done) > :is(.admonition-title, summary.admonition-title)::before {
205
-
background-color: #00c853;
206
-
mask-image: var(--md-admonition-icon--admonish-success);
207
-
-webkit-mask-image: var(--md-admonition-icon--admonish-success);
208
-
mask-repeat: no-repeat;
209
-
-webkit-mask-repeat: no-repeat;
210
-
mask-size: contain;
211
-
-webkit-mask-repeat: no-repeat;
212
-
}
213
-
214
-
:is(.admonition):is(.admonish-question, .admonish-help, .admonish-faq) {
215
-
border-color: #64dd17;
216
-
}
217
-
218
-
:is(.admonish-question, .admonish-help, .admonish-faq) > :is(.admonition-title, summary.admonition-title) {
219
-
background-color: rgba(100, 221, 23, 0.1);
220
-
}
221
-
:is(.admonish-question, .admonish-help, .admonish-faq) > :is(.admonition-title, summary.admonition-title)::before {
222
-
background-color: #64dd17;
223
-
mask-image: var(--md-admonition-icon--admonish-question);
224
-
-webkit-mask-image: var(--md-admonition-icon--admonish-question);
225
-
mask-repeat: no-repeat;
226
-
-webkit-mask-repeat: no-repeat;
227
-
mask-size: contain;
228
-
-webkit-mask-repeat: no-repeat;
229
-
}
230
-
231
-
:is(.admonition):is(.admonish-warning, .admonish-caution, .admonish-attention) {
232
-
border-color: #ff9100;
233
-
}
234
-
235
-
:is(.admonish-warning, .admonish-caution, .admonish-attention) > :is(.admonition-title, summary.admonition-title) {
236
-
background-color: rgba(255, 145, 0, 0.1);
237
-
}
238
-
:is(.admonish-warning, .admonish-caution, .admonish-attention) > :is(.admonition-title, summary.admonition-title)::before {
239
-
background-color: #ff9100;
240
-
mask-image: var(--md-admonition-icon--admonish-warning);
241
-
-webkit-mask-image: var(--md-admonition-icon--admonish-warning);
242
-
mask-repeat: no-repeat;
243
-
-webkit-mask-repeat: no-repeat;
244
-
mask-size: contain;
245
-
-webkit-mask-repeat: no-repeat;
246
-
}
247
-
248
-
:is(.admonition):is(.admonish-failure, .admonish-fail, .admonish-missing) {
249
-
border-color: #ff5252;
250
-
}
251
-
252
-
:is(.admonish-failure, .admonish-fail, .admonish-missing) > :is(.admonition-title, summary.admonition-title) {
253
-
background-color: rgba(255, 82, 82, 0.1);
254
-
}
255
-
:is(.admonish-failure, .admonish-fail, .admonish-missing) > :is(.admonition-title, summary.admonition-title)::before {
256
-
background-color: #ff5252;
257
-
mask-image: var(--md-admonition-icon--admonish-failure);
258
-
-webkit-mask-image: var(--md-admonition-icon--admonish-failure);
259
-
mask-repeat: no-repeat;
260
-
-webkit-mask-repeat: no-repeat;
261
-
mask-size: contain;
262
-
-webkit-mask-repeat: no-repeat;
263
-
}
264
-
265
-
:is(.admonition):is(.admonish-danger, .admonish-error) {
266
-
border-color: #ff1744;
267
-
}
268
-
269
-
:is(.admonish-danger, .admonish-error) > :is(.admonition-title, summary.admonition-title) {
270
-
background-color: rgba(255, 23, 68, 0.1);
271
-
}
272
-
:is(.admonish-danger, .admonish-error) > :is(.admonition-title, summary.admonition-title)::before {
273
-
background-color: #ff1744;
274
-
mask-image: var(--md-admonition-icon--admonish-danger);
275
-
-webkit-mask-image: var(--md-admonition-icon--admonish-danger);
276
-
mask-repeat: no-repeat;
277
-
-webkit-mask-repeat: no-repeat;
278
-
mask-size: contain;
279
-
-webkit-mask-repeat: no-repeat;
280
-
}
281
-
282
-
:is(.admonition):is(.admonish-bug) {
283
-
border-color: #f50057;
284
-
}
285
-
286
-
:is(.admonish-bug) > :is(.admonition-title, summary.admonition-title) {
287
-
background-color: rgba(245, 0, 87, 0.1);
288
-
}
289
-
:is(.admonish-bug) > :is(.admonition-title, summary.admonition-title)::before {
290
-
background-color: #f50057;
291
-
mask-image: var(--md-admonition-icon--admonish-bug);
292
-
-webkit-mask-image: var(--md-admonition-icon--admonish-bug);
293
-
mask-repeat: no-repeat;
294
-
-webkit-mask-repeat: no-repeat;
295
-
mask-size: contain;
296
-
-webkit-mask-repeat: no-repeat;
297
-
}
298
-
299
-
:is(.admonition):is(.admonish-example) {
300
-
border-color: #7c4dff;
301
-
}
302
-
303
-
:is(.admonish-example) > :is(.admonition-title, summary.admonition-title) {
304
-
background-color: rgba(124, 77, 255, 0.1);
305
-
}
306
-
:is(.admonish-example) > :is(.admonition-title, summary.admonition-title)::before {
307
-
background-color: #7c4dff;
308
-
mask-image: var(--md-admonition-icon--admonish-example);
309
-
-webkit-mask-image: var(--md-admonition-icon--admonish-example);
310
-
mask-repeat: no-repeat;
311
-
-webkit-mask-repeat: no-repeat;
312
-
mask-size: contain;
313
-
-webkit-mask-repeat: no-repeat;
314
-
}
315
-
316
-
:is(.admonition):is(.admonish-quote, .admonish-cite) {
317
-
border-color: #9e9e9e;
318
-
}
319
-
320
-
:is(.admonish-quote, .admonish-cite) > :is(.admonition-title, summary.admonition-title) {
321
-
background-color: rgba(158, 158, 158, 0.1);
322
-
}
323
-
:is(.admonish-quote, .admonish-cite) > :is(.admonition-title, summary.admonition-title)::before {
324
-
background-color: #9e9e9e;
325
-
mask-image: var(--md-admonition-icon--admonish-quote);
326
-
-webkit-mask-image: var(--md-admonition-icon--admonish-quote);
327
-
mask-repeat: no-repeat;
328
-
-webkit-mask-repeat: no-repeat;
329
-
mask-size: contain;
330
-
-webkit-mask-repeat: no-repeat;
331
-
}
332
-
333
-
.navy :is(.admonition) {
334
-
background-color: var(--sidebar-bg);
335
-
}
336
-
337
-
.ayu :is(.admonition),
338
-
.coal :is(.admonition) {
339
-
background-color: var(--theme-hover);
340
-
}
341
-
342
-
.rust :is(.admonition) {
343
-
background-color: var(--sidebar-bg);
344
-
color: var(--sidebar-fg);
345
-
}
346
-
.rust .admonition-anchor-link:link, .rust .admonition-anchor-link:visited {
347
-
color: var(--sidebar-fg);
348
-
}
···
docs/quaritsch-photography-1_6rJHQ2Gmw-unsplash.jpg
docs/quaritsch-photography-1_6rJHQ2Gmw-unsplash.jpg
This is a binary file and will not be displayed.
-24
docs/src/README.md
-24
docs/src/README.md
···
1
-
# Cow
2
-

3
-
4
-
*Picture by [Quaritsch Photography](https://unsplash.com/@quaritsch) on Unsplash, via
5
-
https://unsplash.com/photos/1_6rJHQ2Gmw*
6
-
7
-
# NixOS Configuration
8
-
This is a bare minimum nix configuration for various gensokyo servers.
9
-
10
-
I'm still very, very new to Nix and its ecosystem so pointers to better
11
-
way of doing things are very much appreciated.
12
-
13
-
The canonical URL of this site is <https://flake.soopy.moe>.
14
-
15
-
## Documentation
16
-
Documentation and other tips can be found in this book. See the sidebar on the left for a table of contents.
17
-
18
-
couldn't find what you needed? suffer with me! see the
19
-
[How 2 Nix section in this repo.](https://github.com/hlissner/dotfiles#frequently-asked-questions)
20
-
21
-
<div class="center" style="margin: auto; text-align: center;">
22
-
<p>โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ</p>
23
-
<img src="./images/xeniatrans.gif" alt="A 88x31 pixel art button of Xenia, a proposed mascot for the Linux. On the left is a square portrait of Xenia, with the transgender flag as the background. To the right is the text Linux NOW!." title="Trans rights" />
24
-
</div>
···
-27
docs/src/SUMMARY.md
-27
docs/src/SUMMARY.md
···
1
-
# Summary
2
-
[Welcome to the Cow](README.md)
3
-
4
-
# Documentation
5
-
- [Tips and Tricks](tips/README.md)
6
-
- [Overriding packages](tips/overriding-packages.md)
7
-
- [Overlays](tips/overlays.md)
8
-
- ["Global" Options](tips/global-options.md)
9
-
- [Passing large secrets to DynamicUser=true services](tips/pass-big-secrets-to-dynamic-user.md)
10
-
- [Miscellaneous Tips](tips/misc.md)
11
-
- [Pitfalls](tips/pitfalls.md)
12
-
- [Utility Functions](utils/README.md)
13
-
- [mkVhost](utils/mkVhost.md)
14
-
- [mkSimpleProxy](utils/mkSimpleProxy.md)
15
-
- [genSecrets](utils/genSecrets.md)
16
-
- [setupSecrets](utils/setupSecrets.md)
17
-
- [mkNginxFile](utils/mkNginxFile.md)
18
-
- [mkNginxJSON](utils/mkNginxJSON.md)
19
-
20
-
# Internal documentation
21
-
- ["Private" use]()
22
-
- [Ports](internal/ports.md)
23
-
- [External Untracked Files](internal/ext-files.md)
24
-
- [Presets]()
25
-
- [`certificates`](internal/presets/certificates.md)
26
-
- [`nginx`](internal/presets/nginx.md)
27
-
- [`vmetrics`](internal/presets/vmetrics.md)
···
docs/src/images/quaritsch-photography-1_6rJHQ2Gmw-unsplash.jpg
docs/src/images/quaritsch-photography-1_6rJHQ2Gmw-unsplash.jpg
This is a binary file and will not be displayed.
docs/src/images/xeniatrans.gif
docs/src/images/xeniatrans.gif
This is a binary file and will not be displayed.
-19
docs/src/internal/ext-files.md
-19
docs/src/internal/ext-files.md
···
1
-
# External Untracked Files
2
-
3
-
due to the required secure nature of these files, we are unable to include thses
4
-
sets of files/directories in this repository.
5
-
6
-
<!-- These are coincidentally the same length. magic! -->
7
-
8
-
- `-r-------- /etc/lego/desec`: acme credentials
9
-
- `drwx------ /var/lib/sbctl`: secure boot keys
10
-
- `-r-------- /v/l/forgejo/data/jwt/oauth.pem`: forgejo oauth jwt private key
11
-
- `-r-------- kita:/etc/radicale/users`: radicale user htpasswd mappings
12
-
13
-
## changelog
14
-
15
-
This section will only list removals.
16
-
17
-
### as of commit 8501880 (`850188052ea0968e7eb96724c2027ad998cbbefb`)
18
-
19
-
- ~~`nitter/guest_tokens.json`~~ managed in-tree
···
-10
docs/src/internal/new-host.md
-10
docs/src/internal/new-host.md
-18
docs/src/internal/ports.md
-18
docs/src/internal/ports.md
···
1
-
# Ports
2
-
3
-
This section mainly focuses on our existing port definition stuff.
4
-
We try to not use ports as much and to use unix sockets, but sometimes it's just not possible.
5
-
6
-
Note: most of this document focuses on koumakan.
7
-
8
-
## Defined port ranges
9
-
10
-
- `20xxx`: Prometheus/Metrics
11
-
- `2009x`: core metrics, node metrics
12
-
- `201xx`: service metrics
13
-
- `21000`: VMAuth (special case as this is not strictly metrics but a proxy)
14
-
<!-- note: grafana uses unix sockets instead. -->
15
-
16
-
- `3xxxx`: Service ports
17
-
- `34723`: miniflux
18
-
- `35xxx`: exposed docker container ports
···
-16
docs/src/internal/presets/certificates.md
-16
docs/src/internal/presets/certificates.md
···
1
-
# Certificates presets
2
-
3
-
```nix
4
-
{...}: {
5
-
gensokyo.presets.certificates = true;
6
-
}
7
-
```
8
-
9
-
This enables and set some ACME related configurations to a common value.
10
-
11
-
This requires the following secrets to be set:
12
-
13
-
```yaml
14
-
lego:
15
-
cf_token: # generate from cloudflare
16
-
```
···
-9
docs/src/internal/presets/nginx.md
-9
docs/src/internal/presets/nginx.md
-37
docs/src/internal/presets/vmetrics.md
-37
docs/src/internal/presets/vmetrics.md
···
1
-
# VictoriaMetrics presets
2
-
3
-
```nix
4
-
{...}: {
5
-
gensokyo.presets.vmetrics = true;
6
-
}
7
-
```
8
-
9
-
This enables vmetrics and some default configurations. Afterwards, you can add new scrape configs like below.
10
-
11
-
```nix
12
-
{...}: {
13
-
services.vmagent.prometheusConfig.scrape_configs = [{
14
-
job_name = "nginx";
15
-
static_configs = [{targets = ["localhost:${builtins.toString config.services.prometheus.exporters.nginx.port}"];}];
16
-
relabel_configs = [{
17
-
target_label = "instance";
18
-
replacement = "${config.networking.fqdnOrHostName}";
19
-
}];
20
-
}];
21
-
}
22
-
```
23
-
24
-
## Prerequisites
25
-
26
-
You need to do the following things when adding a new host.
27
-
28
-
### Secrets
29
-
30
-
Include the follow secret configuration.
31
-
32
-
```yaml
33
-
vmetrics:
34
-
auth: # openssl rand 129 | base64 -w0 | tr "/=+" "-_."
35
-
```
36
-
37
-
Then add to koumakan.
···
-14
docs/src/tips/README.md
-14
docs/src/tips/README.md
···
1
-
# Tips and Tricks
2
-
*formerly known as tops and bottoms*
3
-
4
-
This section outlines things that I've learned from various sources and some pure guesswork.
5
-
6
-
> To learn Nix is to learn to suffer, and to learn the way of numbing the pain
7
-
>
8
-
> *โ Cassie circa. 2023*
9
-
10
-
There might be more undocumented things. Interesting things are usually marked with `#โ HACK:`.
11
-
12
-
Of course, I might completely miss stuff. in that case, feel free to open an issue.
13
-
14
-
To get started, look at the sidebar to the left.
···
-41
docs/src/tips/global-options.md
-41
docs/src/tips/global-options.md
···
1
-
# "Global"/Extra Options
2
-
a way of passing additional options "globally" to modules is by using extraOpts.
3
-
4
-
in nix flakes, this is accomplished by using `specialArgs` in `nixosSystem`.
5
-
6
-
for example, check out these few lines in our flake.nix: [[source]](https://github.com/soopyc/nix-on-koumakan/blob/492dfaa01808c2aa5dbb2d8223163e92bcef673b/flake.nix#L29-L34)
7
-
8
-
```nix
9
-
# note: unrelated attributes stripped and removed.
10
-
# note2: this code is now out of date from our code, but can still be referenced.
11
-
{
12
-
outputs = { ... }:{
13
-
nixosConfigurations = {
14
-
koumakan = lib.nixosSystem {
15
-
specialArgs = {
16
-
_utils = (import ./global/utils.nix) { inherit pkgs; };
17
-
18
-
someOtherArg = {thisCanBe = "LiterallyAnything";};
19
-
};
20
-
};
21
-
};
22
-
};
23
-
}
24
-
```
25
-
26
-
With this, you can now do this in other imported nixos modules.
27
-
28
-
```nix
29
-
{ someOtherArg, ... }: {
30
-
users.users.${someOtherArg} = {};
31
-
}
32
-
```
33
-
34
-
this avoids the horror of `import ../../../utils/bar.nix;` and various other things.
35
-
36
-
refer to [nixpkgs:nixos/lib/eval-config.nix] and [nixpkgs:lib/modules.nix#122] for more info
37
-
38
-
*pointers by \@natsukagami*
39
-
40
-
[nixpkgs:lib/modules.nix#122]: https://github.com/NixOS/nixpkgs/blob/6e68daefde56a7a8e6fe7c3ca9ceeb436294bb9f/lib/modules.nix#L122
41
-
[nixpkgs:nixos/lib/eval-config.nix]: https://github.com/NixOS/nixpkgs/blob/5054472759a3b0df8e18cfe4031a5eff92d4cdc3/nixos/lib/eval-config.nix
···
-10
docs/src/tips/hydra.md
-10
docs/src/tips/hydra.md
-51
docs/src/tips/misc.md
-51
docs/src/tips/misc.md
···
1
-
# Misc tips
2
-
3
-
This page contains stuff that ~~I couldn't be bothered to move to the new format~~ is probably outdated or just short tips.
4
-
5
-
*previously: tops and bottoms*
6
-
7
-
## @ (at) syntax
8
-
very simple.
9
-
10
-
```nix
11
-
args@{a, b, c, ...}: {
12
-
# args.a and a are the same
13
-
some = "value";
14
-
}
15
-
```
16
-
17
-
## nginx regex location
18
-
```nix
19
-
{
20
-
locations."~ \.php$".extraConfig = ''
21
-
# balls
22
-
'';
23
-
}
24
-
```
25
-
from [nixos wiki](https://nixos.wiki/wiki/Nginx#LEMP_stack)
26
-
27
-
## adding a package with an overlay to a package set
28
-
29
-
for package sets with a scope, you will have to do something like
30
-
```nix
31
-
final: prev: {
32
-
nimPackages = prev.nimPackages.overrideScope (final': prev': {
33
-
sha1 = final'.callPackage ./sha1.nix {};
34
-
oauth = final'.callPackage ./oauth.nix {};
35
-
});
36
-
}
37
-
```
38
-
There's an alternative method that i used to use here:
39
-
40
-
https://github.com/soopyc/nix-on-koumakan/blob/30e65402d22b000a3b5af6c9e5ea48a2b58a54e0/overlays/nim/oauth/default.nix
41
-
42
-
however i do not think that's the best way lol
43
-
44
-
## what the hell is an IFD??
45
-
IFD stands for import from derivation.
46
-
47
-
*nixos/nixpkgs really need better and significantly less scattered documentation while improving manual readability.*
48
-
49
-
# Useful links
50
-
51
-
Builtin stdlib functions search engine: https://noogle.dev/
···
-73
docs/src/tips/overlays.md
-73
docs/src/tips/overlays.md
···
1
-
# Overlays
2
-
overlays are useful when you want to refer to a package globally, or to fix a broken package locally.
3
-
4
-
you might also want to use overlays when something hasn't made it into nixos-unstable or whatever you're on yet, but you
5
-
desparately need said thing.
6
-
7
-
the gist of overlays is as thus:
8
-
9
-
> overlay is just `final: prev: {}` functions
10
-
>
11
-
> dumbed down idea is that you do `pkg = prev.pkg.override` and
12
-
> refer to everything else from `final`
13
-
>
14
-
> idea is like final = prev // overlay(prev, final)
15
-
>
16
-
> (it's a recursive definition)
17
-
18
-
(poorly made) example overlays can be found [here](https://github.com/soopyc/nixos-config/blob/master/overlays/discord-canary.nix)
19
-
20
-
~~currently in-use and slightly better overlays can be found in this repo! head over to /overlays to see them.~~
21
-
22
-
*note: replace `self: super:` with `final: prev:` for consistency*
23
-
24
-
UPDATE: we don't really use overlays anymore. If you'd like an example, please reach out and we can add some here.
25
-
26
-
*concept and quote content by @natsukagami*
27
-
28
-
```admonish info
29
-
If you write 3rd party nix modules, it is a bad idea to do overlays as the performance impact propagates to everyone
30
-
in the stream. See [this article that talks about overlays](
31
-
https://zimbatm.com/notes/1000-instances-of-nixpkgs
32
-
).
33
-
```
34
-
35
-
## Overlaying python packages
36
-
In some situations a python package may be bugged. This might have been fixed upstream by Nixpkgs devs, but has not reached `nixos-unstable` or whatever.
37
-
38
-
While overriding normal packages is relatively straightforward, doing so with python is most definitely not.
39
-
40
-
We have done this recently with the help of [Scrumplex] (thank you!) because a package was broken on nixos-unstable. Someone made a fix and it was merged, but it has yet to make it to nixos-unstable. This was blocking our systems from building so we decided to just say sod it, we're doing this.
41
-
42
-
Again, overriding simple packages that are not inside any package groups is wildly easier than this operation. Since not every package group is the same, this sample only focuses on Python because we only have experience with that.
43
-
44
-
Copy-paste the new package definiton next to the place where you're defining the overlay. We will be referencing it as `./package.nix`.
45
-
46
-
```nix
47
-
final: prev: {
48
-
# this does not work because the package uses python3Packages. this is defining standalone package.
49
-
pyscard = prev.python3Packages.callPackage ./package.nix {};
50
-
51
-
python3 = prev.python3.override {
52
-
self = final.python3;
53
-
54
-
# to their credit we do have this thing here which was already great
55
-
packageOverrides = (final': prev': {
56
-
# we cannot use final'.pkgs.callPackage here because it's missing buildPythonModule or something.
57
-
pyscard = final.python3Packages.callPackage ./package.nix {
58
-
inherit (final.darwin.apple_sdk.frameworks) PCSC; # apple carp
59
-
};
60
-
});
61
-
};
62
-
63
-
# probably some `rec` carp
64
-
# IMPORTANT: you need this! this is needed to let nix know we want to use our overrided python3 package earlier.
65
-
# if you don't add this, you will still be building the old package like nothing changed at all.
66
-
# Yes, nix is this sad.
67
-
python3Packages = final.python3.pkgs;
68
-
}
69
-
```
70
-
71
-
A full example is accessible [here](https://github.com/soopyc/gensokyo/tree/53fcb9bdeeede6e250c84a05ff8c6c1aca9b5fe6/global/overlays/temp/pyscard).
72
-
73
-
[Scrumplex]: https://github.com/scrumplex
···
-16
docs/src/tips/overriding-packages.md
-16
docs/src/tips/overriding-packages.md
···
1
-
# Overriding Packages
2
-
The nix pill confused me and i thought i had to make overlays to do overrides but no
3
-
4
-
in packages (i.e. `environment.systemPackages`), just do
5
-
```nix
6
-
{pkgs, ...}: {
7
-
environment.systemPackages = with pkgs; [
8
-
(discord.override {withOpenASAR = true;})
9
-
];
10
-
}
11
-
```
12
-
13
-
This works as well
14
-
```nix
15
-
security.sudo.package = (pkgs.sudo.override {withInsults = true;});
16
-
```
···
-78
docs/src/tips/pass-big-secrets-to-dynamic-user.md
-78
docs/src/tips/pass-big-secrets-to-dynamic-user.md
···
1
-
<!--
2
-
vim:fileencoding=utf-8:foldmethod=marker
3
-
-->
4
-
5
-
## using sops-nix or other stuff to pass big chungus files to services with DynamicUser=true
6
-
7
-
afaik this is not possible.
8
-
9
-
The option that makes the most sense, LoadCredentials only supports files up to 1 MB in size.
10
-
([relevant documentation (`systemd.exec(5)`)](https://www.freedesktop.org/software/systemd/man/systemd.exec.html#LoadCredential=ID:PATH:~:text=Currently%2C%20an,is%20enforced))
11
-
12
-
Without that option, we are only left with giving a user access to the file somehow.
13
-
14
-
Doing that directly via systemd is not possible either. We cannot get the dynamic user's id in a ExecStartPre hook with the `+` prefix to `chown` the file.
15
-
The user is ran with root privileges and there are no signs of the final ephemeral user id. the same happens with
16
-
ones prefixed with `!`.
17
-
18
-
```admonish note
19
-
While the `!` syntax do preallocate a dynamic user, we cannot use it to change any permissions. (at least per my last attempt)
20
-
```
21
-
22
-
<!--
23
-
This is a vim fold. press z+o to open, z+c to close.
24
-
Terminal output {{{
25
-
-->
26
-
~~~admonish tldr title="Terminal Output" collapsible=true
27
-
```ShellSession
28
-
cassie in marisa in ~ took 1s
29
-
โ 1 โ systemd-run -pPrivateTmp=true -pDynamicUser=true --property="SystemCallFilter=@system-service ~@privileged ~@resources" -pExecStartPre="+env" -pPrivateUsers=true -t bash
30
-
31
-
Running as unit: run-u1196.service
32
-
Press ^] three times within 1s to disconnect TTY.
33
-
LANG=en_US.UTF-8
34
-
PATH=/usr/local/sbin:/usr/local/bin:/usr/bin
35
-
LOGNAME=run-u1196
36
-
USER=run-u1196
37
-
[...]
38
-
^C%
39
-
40
-
cassie in marisa in ~ took 2s
41
-
โ systemd-run -pPrivateTmp=true -pDynamicUser=true --property="SystemCallFilter=@system-service ~@privileged ~@resources" -pExecStartPre="\!env" -pPrivateUsers=true -t bash
42
-
43
-
Running as unit: run-u1200.service
44
-
Press ^] three times within 1s to disconnect TTY.
45
-
LANG=en_US.UTF-8
46
-
PATH=/usr/local/sbin:/usr/local/bin:/usr/bin
47
-
LOGNAME=run-u1200
48
-
USER=run-u1200
49
-
[...]
50
-
^C%
51
-
52
-
cassie in marisa in ~ took 2s
53
-
โ systemd-run -pPrivateTmp=true -pDynamicUser=true -pSystemCallFilter=@system-service -pSystemCallFilter=~@privileged -pSystemCallFilter=~@resources -pExecStartPre="\!bash -c 'echo \$UID'" -pPrivateUsers=true -t bash -c "ls"
54
-
55
-
Running as unit: run-u1236.service
56
-
Press ^] three times within 1s to disconnect TTY.
57
-
0
58
-
^C%
59
-
60
-
cassie in marisa in ~ took 4s
61
-
โ systemd-run -pPrivateTmp=true -pDynamicUser=true -pSystemCallFilter=@system-service -pSystemCallFilter=~@privileged -pSystemCallFilter=~@resources -pExecStartPre="+bash -c 'echo \$UID'" -pPrivateUsers=true -t bash -c "ls"
62
-
63
-
Running as unit: run-u1241.service
64
-
Press ^] three times within 1s to disconnect TTY.
65
-
0
66
-
^C%
67
-
```
68
-
~~~
69
-
<!--
70
-
}}}
71
-
-->
72
-
73
-
So now, we are left with the only option, which is to create a non-ephemeral user, assign it to the unit and disable DynamicUser.
74
-
This step is a little involved, you will have to add a user option to the service and forcibly disable DynamicUser.
75
-
76
-
I opted to replace the entire module file with my own under a different name, as I had to fix a mistake in it anyways.
77
-
Here's the link to [the modified source file.](https://github.com/soopyc/mystia/blob/a999736/modules/fixups/nitter.nix)
78
-
For clarity's sake, [this is the diff of the changes made.](https://github.com/soopyc/mystia/compare/3be5eef..a999736)
···
-64
docs/src/tips/pitfalls.md
-64
docs/src/tips/pitfalls.md
···
1
-
# Pitfalls
2
-
3
-
"There are pitfalls in this language???!??!?"
4
-
5
-
*-- The uninitiated*
6
-
7
-
## importing nixpkgs with an empty attrset
8
-
9
-
ever had this in your flake.nix
10
-
11
-
```nix
12
-
{
13
-
outputs = { nixpkgs, ... }@inputs: let
14
-
pkgs = import nixpkgs {};
15
-
lib = nixpkgs.lib;
16
-
in {
17
-
# ...
18
-
};
19
-
}
20
-
```
21
-
22
-
... and got fucked with this?
23
-
```shell
24
-
error:
25
-
โฆ while checking flake output 'nixosConfigurations'
26
-
27
-
at /nix/store/lz2ra1180qfffmpwg41jpyg1z602qdgx-source/flake.nix:50:5:
28
-
29
-
49| in {
30
-
50| nixosConfigurations = {
31
-
| ^
32
-
51| koumakan = (import ./systems/koumakan { inherit pkgs lib inputs; });
33
-
34
-
โฆ while checking the NixOS configuration 'nixosConfigurations.koumakan'
35
-
36
-
at /nix/store/lz2ra1180qfffmpwg41jpyg1z602qdgx-source/flake.nix:51:7:
37
-
38
-
50| nixosConfigurations = {
39
-
51| koumakan = (import ./systems/koumakan { inherit pkgs lib inputs; });
40
-
| ^
41
-
52| };
42
-
43
-
(stack trace truncated; use '--show-trace' to show the full trace)
44
-
45
-
error: attribute 'currentSystem' missing
46
-
47
-
at /nix/store/5c0k827yjq7j24qaq8l2fcnsxp7nv8v1-source/pkgs/top-level/impure.nix:17:43:
48
-
49
-
16| # (build, in GNU Autotools parlance) platform.
50
-
17| localSystem ? { system = args.system or builtins.currentSystem; }
51
-
| ^
52
-
18|
53
-
```
54
-
55
-
just don't!!!11 remove the pkgs definition. (note that this only applies to `pkgs = import nixpkgs {};`)
56
-
57
-
explanation
58
-
59
-
> you shouldn't ever really import nixpkgs with an empty attrset either
60
-
>
61
-
> that causes it to fall back on guessing your system using `builtins.currentSystem`,
62
-
> which is impure and so not allowed in pure evaluation mode
63
-
>
64
-
> โ- @getchoo
···
-32
docs/src/utils/README.md
-32
docs/src/utils/README.md
···
1
-
# Utility Functions
2
-
3
-
In this section you will find various utility functions available in this flake.
4
-
5
-
You are free to use them as you wish if you find them useful.
6
-
7
-
Watch out! Here's a hint box!
8
-
9
-
```admonish hint title="Hint Box"
10
-
Please take care when using these functions. They are opinionated by nature and are designed to be used on our systems.
11
-
12
-
There is a high chance for you to be discontent with them. In which case, please feel free to copy them and adapt them
13
-
to your needs.
14
-
15
-
Also what in the world? Is that discrimination against hint boxes? I demand this be rectified immediately!
16
-
```
17
-
18
-
## Getting started
19
-
You first need to import this flake as an input.
20
-
21
-
If you don't know how to do so, you should not be here. Please refer to various Nix documentation first, then come back.
22
-
Using these utilities when you're just starting out causes unnecessary pain later on when it doesn't match your needs.
23
-
24
-
For NixOS users, it is possible to make the utils module "globally" available in your NixOS configuration modules.
25
-
To do so, please refer to [Tips/"Global" Options](../tips/global-options.md).
26
-
27
-
We are dogfooding on these functions ourselves so they should be relatively error-free. If you encounter unexpected
28
-
behavior though, do reach out and open an issue/send us a message. We won't bite. Promise.
29
-
30
-
```admonish hint title="Hint Box"
31
-
Hey! Are you even listening?
32
-
```
···
-29
docs/src/utils/genSecrets.md
-29
docs/src/utils/genSecrets.md
···
1
-
# `_utils.genSecrets`
2
-
`namespace<str> -> files<list[str]> -> value<attrset> -> attrset`
3
-
4
-
```admonish danger
5
-
This function is now an internal function. The signature is not likely to be changed, but there are better utilities to
6
-
do the job even better. Consider using [`setupSecrets`](./setupSecrets.md) instead.
7
-
```
8
-
9
-
generate an attrset to be passed into sops.secrets.
10
-
11
-
## Example
12
-
```nix
13
-
{ _utils, ... }:
14
-
let
15
-
secrets = [
16
-
"secure_secret"
17
-
# this is a directory structure, so secrets will be stored as a file in /run/secrets/service/test/secret.
18
-
"service/test/secret"
19
-
];
20
-
in {
21
-
sops.secrets = _utils.genSecrets "" secrets {}; # it's recommended to use a namespace, but having none is still fine.
22
-
# -> sops.secrets."secure_secret" = {};
23
-
# sops.secrets."service/test/secret" = {};
24
-
sops.secrets = _utils.genSecrets "balls" ["balls_secret"] {owner = "balls";};
25
-
# -> sops.secrets."balls/balls_secret" = {owner = "balls";};
26
-
}
27
-
```
28
-
29
-
See <https://github.com/soopyc/nix-on-koumakan/blob/b7983776143c15c91df69ef34ba4264a22047ec6/systems/koumakan/services/fedivese/akkoma.nix#L8-L34> for a more extensive example
···
-15
docs/src/utils/mkArionProject.md
-15
docs/src/utils/mkArionProject.md
···
1
-
# `_utils.mkArionProject`
2
-
`(lambda: freeformAttrset) -> freeformAttrset`
3
-
4
-
Flattened Arion project configuration
5
-
6
-
## Example
7
-
```nix
8
-
{_utils, ...}: {
9
-
virtualisation.arion.projects."cop" = _utils.mkArionProject (config': {
10
-
networks.main.enable_ipv6 = true;
11
-
});
12
-
}
13
-
```
14
-
15
-
See <https://docs.hercules-ci.com/arion/options> for more information.
···
-23
docs/src/utils/mkNginxFile.md
-23
docs/src/utils/mkNginxFile.md
···
1
-
# `_utils.mkNginxFile`
2
-
`{filename<str> ? "index.html", content<str>, status<int> ? 200} -> {alias<str>, tryFiles<str>}`
3
-
4
-
Helper function to generate an attrset compatible with a nginx vhost `locations` attribute that serves a single file.
5
-
6
-
## Example
7
-
8
-
### Without filename
9
-
```nix
10
-
services.nginx.virtualHosts."example.com".locations."/" = _utils.mkNginxFile {
11
-
content = ''
12
-
<!doctype html><html><body>We've been trying to reach you about your car's Extended Warranty.</body></html>
13
-
'';
14
-
};
15
-
```
16
-
17
-
### With filename
18
-
```nix
19
-
services.nginx.virtualHosts."filename.example.com".locations."/filename" = _utils.mkNginxFile {
20
-
content = "the filename doesn't really matter, but it's there to help you figure out where your things are";
21
-
filename = "random.txt";
22
-
}
23
-
```
···
-19
docs/src/utils/mkNginxJSON.md
-19
docs/src/utils/mkNginxJSON.md
···
1
-
# `_utils.mkNginxJSON`
2
-
`filename<str> -> freeformAttrset ==> attrset`
3
-
4
-
Simple wrapper around [`mkNginxFile`](./mkNginxFile.md) that takes in an attrset and formats it as JSON.
5
-
6
-
Note that the function signature is different in that it doesn't take in only one attrset.
7
-
This may change in the future.
8
-
9
-
## Example
10
-
```nix
11
-
services.nginx.virtualHosts."balls.org" = _utils.mkVhost {
12
-
locations."/" = _utils.mkNginxJSON "index.json" {
13
-
arbitraryAttribute = "arbitraryValue";
14
-
doTheyKnow = false;
15
-
};
16
-
};
17
-
```
18
-
19
-
<!-- TODO: check if Content-Type is correctly returned with this -->
···
-26
docs/src/utils/mkSimpleProxy.md
-26
docs/src/utils/mkSimpleProxy.md
···
1
-
# `_utils.mkSimpleProxy`
2
-
`attrSet -> freeformAttrset`
3
-
4
-
make a simple reverse proxy
5
-
6
-
takes a set:
7
-
```nix
8
-
{
9
-
host ? "localhost", # proxying servers on the network
10
-
port ? null,
11
-
socketPath ? null,
12
-
protocol ? "http",
13
-
location ? "/",
14
-
websockets ? false,
15
-
extraConfig ? {}
16
-
}
17
-
```
18
-
19
-
Provide either a `socketPath` to a UNIX socket or a `port` to connect to the upstream via TCP.
20
-
Note that both of these options are mutually exclusive in that only one can be specified.
21
-
22
-
It is recommended to override/add attributes with `extraConfig` to
23
-
preserve defaults.
24
-
25
-
Items in `extraConfig` are merged verbatim to the base attrset with defaults.
26
-
They are overridden based on their priority order (i.e. via `lib.mk{Default,Force,Order}`).
···
-11
docs/src/utils/mkVhost.md
-11
docs/src/utils/mkVhost.md
···
1
-
# `_utils.mkVhost`
2
-
`freeformAttrset -> freeformAttrset`
3
-
4
-
make a virtual host with sensible defaults.
5
-
6
-
pass in an attrset to override the defaults. the attrset is essentially the same as any virtual host config.
7
-
8
-
## Example
9
-
```nix
10
-
services.nginx.virtualHosts."balls.example" = _utils.mkVhost {};
11
-
```
···
-49
docs/src/utils/setupSecrets.md
-49
docs/src/utils/setupSecrets.md
···
1
-
# `_utils.setupSecrets`
2
-
`attrset<nixos config attr> -> {namespace<str> ? "", secrets[list<str>], config ? freeformAttrset} -> secretHelpers`
3
-
4
-
This is a higher-level setup that wraps around `_utils.genSecrets` and provides some additional helper functions.
5
-
Usage of this function should make more sense than just using `genSecrets`.
6
-
7
-
```admonish note
8
-
`<ReturnValue>.generate` is not actually a function. The attrset is "already" "rendered" should it be actually
9
-
resolved by not being ignored by lazy eval. This is essentially equivalent to `genSecrets`, but is now an inline module
10
-
that can be put inside an input block instead of being a random attrset.
11
-
```
12
-
13
-
NOTE: does not support overriding config for only 1 path. might implement when demand arises.
14
-
15
-
The definition of `secretHelpers` is defined as follows:
16
-
```nix
17
-
secretHelpers = {
18
-
generate = {}; # => {sops.secrets.* = <sopsConfig>} (inline module)
19
-
get = path: ""; # => actual path of the secret, usually /run/secrets/the/secret
20
-
21
-
placeholder = path: ""; # => placeholder string generated by sops-nix, for that secret path to be used in templates.
22
-
getTemplate = file: ""; # => actual path of the template, realized at activation time, similar to the get function.
23
-
mkTemplate = file: content: {}; # => {sops.templates.* = ...;}
24
-
# ^ => filename of the template. can be any arbitrary string.
25
-
}
26
-
```
27
-
28
-
## Example
29
-
```nix
30
-
{ _utils, config, ... }: let
31
-
secrets = _utils.setupSecrets config {
32
-
namespace = "balls"; # for us, the namespace is just the top level element in our secrets yaml file.
33
-
config = {
34
-
owner = "jane";
35
-
};
36
-
secrets = [ "my/definitions/gock" "my/sizes/gock" ];
37
-
};
38
-
in {
39
-
imports = [
40
-
secrets.generate
41
-
(secrets.mkTemplate "my-secret.env" ''
42
-
MY_GOCK_SIZE=${secrets.placeholder "my/sizes/gock"}
43
-
'')
44
-
];
45
-
46
-
some.service.settings.gock.file = secrets.get "my/definitions/gock"; # resolves to the path of balls/my/definitions/gock.
47
-
some.service.settings.envFile = secrets.getTemplate "my-secret.env";
48
-
}
49
-
```
···
-363
docs/theme/catppuccin-admonish.css
-363
docs/theme/catppuccin-admonish.css
···
1
-
.latte :is(.admonition):is(.admonish-hint, .admonish-important, .admonish-tip) {
2
-
border-color: #df8e1d;
3
-
}
4
-
.latte :is(.admonish-hint, .admonish-important, .admonish-tip) > :is(.admonition-title, summary.admonition-title) {
5
-
background-color: rgba(223, 142, 29, 0.2);
6
-
}
7
-
.latte :is(.admonish-hint, .admonish-important, .admonish-tip) > :is(.admonition-title, summary.admonition-title)::before {
8
-
background-color: #df8e1d;
9
-
}
10
-
.latte :is(.admonition):is(.admonish-abstract, .admonish-summary, .admonish-tldr) {
11
-
border-color: #dd7878;
12
-
}
13
-
.latte :is(.admonish-abstract, .admonish-summary, .admonish-tldr) > :is(.admonition-title, summary.admonition-title) {
14
-
background-color: rgba(221, 120, 120, 0.2);
15
-
}
16
-
.latte :is(.admonish-abstract, .admonish-summary, .admonish-tldr) > :is(.admonition-title, summary.admonition-title)::before {
17
-
background-color: #dd7878;
18
-
}
19
-
.latte :is(.admonition):is(.admonish-example) {
20
-
border-color: #8839ef;
21
-
}
22
-
.latte :is(.admonish-example) > :is(.admonition-title, summary.admonition-title) {
23
-
background-color: rgba(136, 57, 239, 0.2);
24
-
}
25
-
.latte :is(.admonish-example) > :is(.admonition-title, summary.admonition-title)::before {
26
-
background-color: #8839ef;
27
-
}
28
-
.latte :is(.admonition):is(.admonish-info, .admonish-todo) {
29
-
border-color: #04a5e5;
30
-
}
31
-
.latte :is(.admonish-info, .admonish-todo) > :is(.admonition-title, summary.admonition-title) {
32
-
background-color: rgba(4, 165, 229, 0.2);
33
-
}
34
-
.latte :is(.admonish-info, .admonish-todo) > :is(.admonition-title, summary.admonition-title)::before {
35
-
background-color: #04a5e5;
36
-
}
37
-
.latte :is(.admonition):is(.admonish-check, .admonish-done, .admonish-success) {
38
-
border-color: #40a02b;
39
-
}
40
-
.latte :is(.admonish-check, .admonish-done, .admonish-success) > :is(.admonition-title, summary.admonition-title) {
41
-
background-color: rgba(64, 160, 43, 0.2);
42
-
}
43
-
.latte :is(.admonish-check, .admonish-done, .admonish-success) > :is(.admonition-title, summary.admonition-title)::before {
44
-
background-color: #40a02b;
45
-
}
46
-
.latte :is(.admonition):is(.admonish-note) {
47
-
border-color: #1e66f5;
48
-
}
49
-
.latte :is(.admonish-note) > :is(.admonition-title, summary.admonition-title) {
50
-
background-color: rgba(30, 102, 245, 0.2);
51
-
}
52
-
.latte :is(.admonish-note) > :is(.admonition-title, summary.admonition-title)::before {
53
-
background-color: #1e66f5;
54
-
}
55
-
.latte :is(.admonition):is(.admonish-attention, .admonish-caution, .admonish-warning) {
56
-
border-color: #fe640b;
57
-
}
58
-
.latte :is(.admonish-attention, .admonish-caution, .admonish-warning) > :is(.admonition-title, summary.admonition-title) {
59
-
background-color: rgba(254, 100, 11, 0.2);
60
-
}
61
-
.latte :is(.admonish-attention, .admonish-caution, .admonish-warning) > :is(.admonition-title, summary.admonition-title)::before {
62
-
background-color: #fe640b;
63
-
}
64
-
.latte :is(.admonition):is(.admonish-faq, .admonish-help, .admonish-question) {
65
-
border-color: #179299;
66
-
}
67
-
.latte :is(.admonish-faq, .admonish-help, .admonish-question) > :is(.admonition-title, summary.admonition-title) {
68
-
background-color: rgba(23, 146, 153, 0.2);
69
-
}
70
-
.latte :is(.admonish-faq, .admonish-help, .admonish-question) > :is(.admonition-title, summary.admonition-title)::before {
71
-
background-color: #179299;
72
-
}
73
-
.latte :is(.admonition):is(.admonish-bug, .admonish-danger, .admonish-error, .admonish-fail, .admonish-failure, .admonish-missing) {
74
-
border-color: #d20f39;
75
-
}
76
-
.latte :is(.admonish-bug, .admonish-danger, .admonish-error, .admonish-fail, .admonish-failure, .admonish-missing) > :is(.admonition-title, summary.admonition-title) {
77
-
background-color: rgba(210, 15, 57, 0.2);
78
-
}
79
-
.latte :is(.admonish-bug, .admonish-danger, .admonish-error, .admonish-fail, .admonish-failure, .admonish-missing) > :is(.admonition-title, summary.admonition-title)::before {
80
-
background-color: #d20f39;
81
-
}
82
-
.latte :is(.admonition):is(.admonish-cite, .admonish-quote) {
83
-
border-color: #ea76cb;
84
-
}
85
-
.latte :is(.admonish-cite, .admonish-quote) > :is(.admonition-title, summary.admonition-title) {
86
-
background-color: rgba(234, 118, 203, 0.2);
87
-
}
88
-
.latte :is(.admonish-cite, .admonish-quote) > :is(.admonition-title, summary.admonition-title)::before {
89
-
background-color: #ea76cb;
90
-
}
91
-
92
-
.frappe :is(.admonition):is(.admonish-hint, .admonish-important, .admonish-tip) {
93
-
border-color: #e5c890;
94
-
}
95
-
.frappe :is(.admonish-hint, .admonish-important, .admonish-tip) > :is(.admonition-title, summary.admonition-title) {
96
-
background-color: rgba(229, 200, 144, 0.2);
97
-
}
98
-
.frappe :is(.admonish-hint, .admonish-important, .admonish-tip) > :is(.admonition-title, summary.admonition-title)::before {
99
-
background-color: #e5c890;
100
-
}
101
-
.frappe :is(.admonition):is(.admonish-abstract, .admonish-summary, .admonish-tldr) {
102
-
border-color: #eebebe;
103
-
}
104
-
.frappe :is(.admonish-abstract, .admonish-summary, .admonish-tldr) > :is(.admonition-title, summary.admonition-title) {
105
-
background-color: rgba(238, 190, 190, 0.2);
106
-
}
107
-
.frappe :is(.admonish-abstract, .admonish-summary, .admonish-tldr) > :is(.admonition-title, summary.admonition-title)::before {
108
-
background-color: #eebebe;
109
-
}
110
-
.frappe :is(.admonition):is(.admonish-example) {
111
-
border-color: #ca9ee6;
112
-
}
113
-
.frappe :is(.admonish-example) > :is(.admonition-title, summary.admonition-title) {
114
-
background-color: rgba(202, 158, 230, 0.2);
115
-
}
116
-
.frappe :is(.admonish-example) > :is(.admonition-title, summary.admonition-title)::before {
117
-
background-color: #ca9ee6;
118
-
}
119
-
.frappe :is(.admonition):is(.admonish-info, .admonish-todo) {
120
-
border-color: #99d1db;
121
-
}
122
-
.frappe :is(.admonish-info, .admonish-todo) > :is(.admonition-title, summary.admonition-title) {
123
-
background-color: rgba(153, 209, 219, 0.2);
124
-
}
125
-
.frappe :is(.admonish-info, .admonish-todo) > :is(.admonition-title, summary.admonition-title)::before {
126
-
background-color: #99d1db;
127
-
}
128
-
.frappe :is(.admonition):is(.admonish-check, .admonish-done, .admonish-success) {
129
-
border-color: #a6d189;
130
-
}
131
-
.frappe :is(.admonish-check, .admonish-done, .admonish-success) > :is(.admonition-title, summary.admonition-title) {
132
-
background-color: rgba(166, 209, 137, 0.2);
133
-
}
134
-
.frappe :is(.admonish-check, .admonish-done, .admonish-success) > :is(.admonition-title, summary.admonition-title)::before {
135
-
background-color: #a6d189;
136
-
}
137
-
.frappe :is(.admonition):is(.admonish-note) {
138
-
border-color: #8caaee;
139
-
}
140
-
.frappe :is(.admonish-note) > :is(.admonition-title, summary.admonition-title) {
141
-
background-color: rgba(140, 170, 238, 0.2);
142
-
}
143
-
.frappe :is(.admonish-note) > :is(.admonition-title, summary.admonition-title)::before {
144
-
background-color: #8caaee;
145
-
}
146
-
.frappe :is(.admonition):is(.admonish-attention, .admonish-caution, .admonish-warning) {
147
-
border-color: #ef9f76;
148
-
}
149
-
.frappe :is(.admonish-attention, .admonish-caution, .admonish-warning) > :is(.admonition-title, summary.admonition-title) {
150
-
background-color: rgba(239, 159, 118, 0.2);
151
-
}
152
-
.frappe :is(.admonish-attention, .admonish-caution, .admonish-warning) > :is(.admonition-title, summary.admonition-title)::before {
153
-
background-color: #ef9f76;
154
-
}
155
-
.frappe :is(.admonition):is(.admonish-faq, .admonish-help, .admonish-question) {
156
-
border-color: #81c8be;
157
-
}
158
-
.frappe :is(.admonish-faq, .admonish-help, .admonish-question) > :is(.admonition-title, summary.admonition-title) {
159
-
background-color: rgba(129, 200, 190, 0.2);
160
-
}
161
-
.frappe :is(.admonish-faq, .admonish-help, .admonish-question) > :is(.admonition-title, summary.admonition-title)::before {
162
-
background-color: #81c8be;
163
-
}
164
-
.frappe :is(.admonition):is(.admonish-bug, .admonish-danger, .admonish-error, .admonish-fail, .admonish-failure, .admonish-missing) {
165
-
border-color: #e78284;
166
-
}
167
-
.frappe :is(.admonish-bug, .admonish-danger, .admonish-error, .admonish-fail, .admonish-failure, .admonish-missing) > :is(.admonition-title, summary.admonition-title) {
168
-
background-color: rgba(231, 130, 132, 0.2);
169
-
}
170
-
.frappe :is(.admonish-bug, .admonish-danger, .admonish-error, .admonish-fail, .admonish-failure, .admonish-missing) > :is(.admonition-title, summary.admonition-title)::before {
171
-
background-color: #e78284;
172
-
}
173
-
.frappe :is(.admonition):is(.admonish-cite, .admonish-quote) {
174
-
border-color: #f4b8e4;
175
-
}
176
-
.frappe :is(.admonish-cite, .admonish-quote) > :is(.admonition-title, summary.admonition-title) {
177
-
background-color: rgba(244, 184, 228, 0.2);
178
-
}
179
-
.frappe :is(.admonish-cite, .admonish-quote) > :is(.admonition-title, summary.admonition-title)::before {
180
-
background-color: #f4b8e4;
181
-
}
182
-
183
-
.macchiato :is(.admonition):is(.admonish-hint, .admonish-important, .admonish-tip) {
184
-
border-color: #eed49f;
185
-
}
186
-
.macchiato :is(.admonish-hint, .admonish-important, .admonish-tip) > :is(.admonition-title, summary.admonition-title) {
187
-
background-color: rgba(238, 212, 159, 0.2);
188
-
}
189
-
.macchiato :is(.admonish-hint, .admonish-important, .admonish-tip) > :is(.admonition-title, summary.admonition-title)::before {
190
-
background-color: #eed49f;
191
-
}
192
-
.macchiato :is(.admonition):is(.admonish-abstract, .admonish-summary, .admonish-tldr) {
193
-
border-color: #f0c6c6;
194
-
}
195
-
.macchiato :is(.admonish-abstract, .admonish-summary, .admonish-tldr) > :is(.admonition-title, summary.admonition-title) {
196
-
background-color: rgba(240, 198, 198, 0.2);
197
-
}
198
-
.macchiato :is(.admonish-abstract, .admonish-summary, .admonish-tldr) > :is(.admonition-title, summary.admonition-title)::before {
199
-
background-color: #f0c6c6;
200
-
}
201
-
.macchiato :is(.admonition):is(.admonish-example) {
202
-
border-color: #c6a0f6;
203
-
}
204
-
.macchiato :is(.admonish-example) > :is(.admonition-title, summary.admonition-title) {
205
-
background-color: rgba(198, 160, 246, 0.2);
206
-
}
207
-
.macchiato :is(.admonish-example) > :is(.admonition-title, summary.admonition-title)::before {
208
-
background-color: #c6a0f6;
209
-
}
210
-
.macchiato :is(.admonition):is(.admonish-info, .admonish-todo) {
211
-
border-color: #91d7e3;
212
-
}
213
-
.macchiato :is(.admonish-info, .admonish-todo) > :is(.admonition-title, summary.admonition-title) {
214
-
background-color: rgba(145, 215, 227, 0.2);
215
-
}
216
-
.macchiato :is(.admonish-info, .admonish-todo) > :is(.admonition-title, summary.admonition-title)::before {
217
-
background-color: #91d7e3;
218
-
}
219
-
.macchiato :is(.admonition):is(.admonish-check, .admonish-done, .admonish-success) {
220
-
border-color: #a6da95;
221
-
}
222
-
.macchiato :is(.admonish-check, .admonish-done, .admonish-success) > :is(.admonition-title, summary.admonition-title) {
223
-
background-color: rgba(166, 218, 149, 0.2);
224
-
}
225
-
.macchiato :is(.admonish-check, .admonish-done, .admonish-success) > :is(.admonition-title, summary.admonition-title)::before {
226
-
background-color: #a6da95;
227
-
}
228
-
.macchiato :is(.admonition):is(.admonish-note) {
229
-
border-color: #8aadf4;
230
-
}
231
-
.macchiato :is(.admonish-note) > :is(.admonition-title, summary.admonition-title) {
232
-
background-color: rgba(138, 173, 244, 0.2);
233
-
}
234
-
.macchiato :is(.admonish-note) > :is(.admonition-title, summary.admonition-title)::before {
235
-
background-color: #8aadf4;
236
-
}
237
-
.macchiato :is(.admonition):is(.admonish-attention, .admonish-caution, .admonish-warning) {
238
-
border-color: #f5a97f;
239
-
}
240
-
.macchiato :is(.admonish-attention, .admonish-caution, .admonish-warning) > :is(.admonition-title, summary.admonition-title) {
241
-
background-color: rgba(245, 169, 127, 0.2);
242
-
}
243
-
.macchiato :is(.admonish-attention, .admonish-caution, .admonish-warning) > :is(.admonition-title, summary.admonition-title)::before {
244
-
background-color: #f5a97f;
245
-
}
246
-
.macchiato :is(.admonition):is(.admonish-faq, .admonish-help, .admonish-question) {
247
-
border-color: #8bd5ca;
248
-
}
249
-
.macchiato :is(.admonish-faq, .admonish-help, .admonish-question) > :is(.admonition-title, summary.admonition-title) {
250
-
background-color: rgba(139, 213, 202, 0.2);
251
-
}
252
-
.macchiato :is(.admonish-faq, .admonish-help, .admonish-question) > :is(.admonition-title, summary.admonition-title)::before {
253
-
background-color: #8bd5ca;
254
-
}
255
-
.macchiato :is(.admonition):is(.admonish-bug, .admonish-danger, .admonish-error, .admonish-fail, .admonish-failure, .admonish-missing) {
256
-
border-color: #ed8796;
257
-
}
258
-
.macchiato :is(.admonish-bug, .admonish-danger, .admonish-error, .admonish-fail, .admonish-failure, .admonish-missing) > :is(.admonition-title, summary.admonition-title) {
259
-
background-color: rgba(237, 135, 150, 0.2);
260
-
}
261
-
.macchiato :is(.admonish-bug, .admonish-danger, .admonish-error, .admonish-fail, .admonish-failure, .admonish-missing) > :is(.admonition-title, summary.admonition-title)::before {
262
-
background-color: #ed8796;
263
-
}
264
-
.macchiato :is(.admonition):is(.admonish-cite, .admonish-quote) {
265
-
border-color: #f5bde6;
266
-
}
267
-
.macchiato :is(.admonish-cite, .admonish-quote) > :is(.admonition-title, summary.admonition-title) {
268
-
background-color: rgba(245, 189, 230, 0.2);
269
-
}
270
-
.macchiato :is(.admonish-cite, .admonish-quote) > :is(.admonition-title, summary.admonition-title)::before {
271
-
background-color: #f5bde6;
272
-
}
273
-
274
-
.mocha :is(.admonition):is(.admonish-hint, .admonish-important, .admonish-tip) {
275
-
border-color: #f9e2af;
276
-
}
277
-
.mocha :is(.admonish-hint, .admonish-important, .admonish-tip) > :is(.admonition-title, summary.admonition-title) {
278
-
background-color: rgba(249, 226, 175, 0.2);
279
-
}
280
-
.mocha :is(.admonish-hint, .admonish-important, .admonish-tip) > :is(.admonition-title, summary.admonition-title)::before {
281
-
background-color: #f9e2af;
282
-
}
283
-
.mocha :is(.admonition):is(.admonish-abstract, .admonish-summary, .admonish-tldr) {
284
-
border-color: #f2cdcd;
285
-
}
286
-
.mocha :is(.admonish-abstract, .admonish-summary, .admonish-tldr) > :is(.admonition-title, summary.admonition-title) {
287
-
background-color: rgba(242, 205, 205, 0.2);
288
-
}
289
-
.mocha :is(.admonish-abstract, .admonish-summary, .admonish-tldr) > :is(.admonition-title, summary.admonition-title)::before {
290
-
background-color: #f2cdcd;
291
-
}
292
-
.mocha :is(.admonition):is(.admonish-example) {
293
-
border-color: #cba6f7;
294
-
}
295
-
.mocha :is(.admonish-example) > :is(.admonition-title, summary.admonition-title) {
296
-
background-color: rgba(203, 166, 247, 0.2);
297
-
}
298
-
.mocha :is(.admonish-example) > :is(.admonition-title, summary.admonition-title)::before {
299
-
background-color: #cba6f7;
300
-
}
301
-
.mocha :is(.admonition):is(.admonish-info, .admonish-todo) {
302
-
border-color: #89dceb;
303
-
}
304
-
.mocha :is(.admonish-info, .admonish-todo) > :is(.admonition-title, summary.admonition-title) {
305
-
background-color: rgba(137, 220, 235, 0.2);
306
-
}
307
-
.mocha :is(.admonish-info, .admonish-todo) > :is(.admonition-title, summary.admonition-title)::before {
308
-
background-color: #89dceb;
309
-
}
310
-
.mocha :is(.admonition):is(.admonish-check, .admonish-done, .admonish-success) {
311
-
border-color: #a6e3a1;
312
-
}
313
-
.mocha :is(.admonish-check, .admonish-done, .admonish-success) > :is(.admonition-title, summary.admonition-title) {
314
-
background-color: rgba(166, 227, 161, 0.2);
315
-
}
316
-
.mocha :is(.admonish-check, .admonish-done, .admonish-success) > :is(.admonition-title, summary.admonition-title)::before {
317
-
background-color: #a6e3a1;
318
-
}
319
-
.mocha :is(.admonition):is(.admonish-note) {
320
-
border-color: #89b4fa;
321
-
}
322
-
.mocha :is(.admonish-note) > :is(.admonition-title, summary.admonition-title) {
323
-
background-color: rgba(137, 180, 250, 0.2);
324
-
}
325
-
.mocha :is(.admonish-note) > :is(.admonition-title, summary.admonition-title)::before {
326
-
background-color: #89b4fa;
327
-
}
328
-
.mocha :is(.admonition):is(.admonish-attention, .admonish-caution, .admonish-warning) {
329
-
border-color: #fab387;
330
-
}
331
-
.mocha :is(.admonish-attention, .admonish-caution, .admonish-warning) > :is(.admonition-title, summary.admonition-title) {
332
-
background-color: rgba(250, 179, 135, 0.2);
333
-
}
334
-
.mocha :is(.admonish-attention, .admonish-caution, .admonish-warning) > :is(.admonition-title, summary.admonition-title)::before {
335
-
background-color: #fab387;
336
-
}
337
-
.mocha :is(.admonition):is(.admonish-faq, .admonish-help, .admonish-question) {
338
-
border-color: #94e2d5;
339
-
}
340
-
.mocha :is(.admonish-faq, .admonish-help, .admonish-question) > :is(.admonition-title, summary.admonition-title) {
341
-
background-color: rgba(148, 226, 213, 0.2);
342
-
}
343
-
.mocha :is(.admonish-faq, .admonish-help, .admonish-question) > :is(.admonition-title, summary.admonition-title)::before {
344
-
background-color: #94e2d5;
345
-
}
346
-
.mocha :is(.admonition):is(.admonish-bug, .admonish-danger, .admonish-error, .admonish-fail, .admonish-failure, .admonish-missing) {
347
-
border-color: #f38ba8;
348
-
}
349
-
.mocha :is(.admonish-bug, .admonish-danger, .admonish-error, .admonish-fail, .admonish-failure, .admonish-missing) > :is(.admonition-title, summary.admonition-title) {
350
-
background-color: rgba(243, 139, 168, 0.2);
351
-
}
352
-
.mocha :is(.admonish-bug, .admonish-danger, .admonish-error, .admonish-fail, .admonish-failure, .admonish-missing) > :is(.admonition-title, summary.admonition-title)::before {
353
-
background-color: #f38ba8;
354
-
}
355
-
.mocha :is(.admonition):is(.admonish-cite, .admonish-quote) {
356
-
border-color: #f5c2e7;
357
-
}
358
-
.mocha :is(.admonish-cite, .admonish-quote) > :is(.admonition-title, summary.admonition-title) {
359
-
background-color: rgba(245, 194, 231, 0.2);
360
-
}
361
-
.mocha :is(.admonish-cite, .admonish-quote) > :is(.admonition-title, summary.admonition-title)::before {
362
-
background-color: #f5c2e7;
363
-
}
···
-836
docs/theme/catppuccin.css
-836
docs/theme/catppuccin.css
···
1
-
/* https://highlightjs.readthedocs.io/en/latest/css-classes-reference.html */
2
-
.latte.hljs {
3
-
color: #4c4f69;
4
-
background: #eff1f5;
5
-
}
6
-
.latte .hljs-keyword {
7
-
color: #8839ef;
8
-
}
9
-
.latte .hljs-built_in {
10
-
color: #d20f39;
11
-
}
12
-
.latte .hljs-type {
13
-
color: #df8e1d;
14
-
}
15
-
.latte .hljs-literal {
16
-
color: #fe640b;
17
-
}
18
-
.latte .hljs-number {
19
-
color: #fe640b;
20
-
}
21
-
.latte .hljs-operator {
22
-
color: #04a5e5;
23
-
}
24
-
.latte .hljs-punctuation {
25
-
color: #5c5f77;
26
-
}
27
-
.latte .hljs-property {
28
-
color: #179299;
29
-
}
30
-
.latte .hljs-regexp {
31
-
color: #ea76cb;
32
-
}
33
-
.latte .hljs-string {
34
-
color: #40a02b;
35
-
}
36
-
.latte .hljs-char.escape_ {
37
-
color: #40a02b;
38
-
}
39
-
.latte .hljs-subst {
40
-
color: #6c6f85;
41
-
}
42
-
.latte .hljs-symbol {
43
-
color: #dd7878;
44
-
}
45
-
.latte .hljs-variable {
46
-
color: #8839ef;
47
-
}
48
-
.latte .hljs-variable.language_ {
49
-
color: #8839ef;
50
-
}
51
-
.latte .hljs-variable.constant_ {
52
-
color: #fe640b;
53
-
}
54
-
.latte .hljs-title {
55
-
color: #1e66f5;
56
-
}
57
-
.latte .hljs-title.class_ {
58
-
color: #df8e1d;
59
-
}
60
-
.latte .hljs-title.function_ {
61
-
color: #1e66f5;
62
-
}
63
-
.latte .hljs-params {
64
-
color: #4c4f69;
65
-
}
66
-
.latte .hljs-comment {
67
-
color: #7c7f93;
68
-
}
69
-
.latte .hljs-doctag {
70
-
color: #d20f39;
71
-
}
72
-
.latte .hljs-meta {
73
-
color: #fe640b;
74
-
}
75
-
.latte .hljs-section {
76
-
color: #1e66f5;
77
-
}
78
-
.latte .hljs-tag {
79
-
color: #179299;
80
-
}
81
-
.latte .hljs-name {
82
-
color: #8839ef;
83
-
}
84
-
.latte .hljs-attr {
85
-
color: #1e66f5;
86
-
}
87
-
.latte .hljs-attribute {
88
-
color: #40a02b;
89
-
}
90
-
.latte .hljs-bullet {
91
-
color: #179299;
92
-
}
93
-
.latte .hljs-code {
94
-
color: #40a02b;
95
-
}
96
-
.latte .hljs-emphasis {
97
-
color: #d20f39;
98
-
font-style: italic;
99
-
}
100
-
.latte .hljs-strong {
101
-
color: #d20f39;
102
-
font-weight: bold;
103
-
}
104
-
.latte .hljs-formula {
105
-
color: #179299;
106
-
}
107
-
.latte .hljs-link {
108
-
color: #209fb5;
109
-
font-style: italic;
110
-
}
111
-
.latte .hljs-quote {
112
-
color: #40a02b;
113
-
font-style: italic;
114
-
}
115
-
.latte .hljs-selector-tag {
116
-
color: #df8e1d;
117
-
}
118
-
.latte .hljs-selector-id {
119
-
color: #1e66f5;
120
-
}
121
-
.latte .hljs-selector-class {
122
-
color: #179299;
123
-
}
124
-
.latte .hljs-selector-attr {
125
-
color: #8839ef;
126
-
}
127
-
.latte .hljs-selector-pseudo {
128
-
color: #179299;
129
-
}
130
-
.latte .hljs-template-tag {
131
-
color: #dd7878;
132
-
}
133
-
.latte .hljs-template-variable {
134
-
color: #dd7878;
135
-
}
136
-
.latte .hljs-addition {
137
-
color: #40a02b;
138
-
background: rgba(64, 160, 43, 0.15);
139
-
}
140
-
.latte .hljs-deletion {
141
-
color: #d20f39;
142
-
background: rgba(210, 15, 57, 0.15);
143
-
}
144
-
.latte :is(h1, h2, h3, h4, h5, h6) a code {
145
-
color: #4c4f69;
146
-
}
147
-
.latte a code {
148
-
color: #1e66f5;
149
-
}
150
-
.latte code {
151
-
color: #4c4f69;
152
-
background: #e6e9ef;
153
-
}
154
-
.latte blockquote blockquote {
155
-
border-top: 0.1em solid #acb0be;
156
-
border-bottom: 0.1em solid #acb0be;
157
-
}
158
-
.latte hr {
159
-
border-color: #acb0be;
160
-
border-style: solid;
161
-
}
162
-
.latte del {
163
-
color: #7c7f93;
164
-
}
165
-
.latte .ace_gutter {
166
-
color: #8c8fa1;
167
-
background: #e6e9ef;
168
-
}
169
-
.latte .ace_gutter-active-line.ace_gutter-cell {
170
-
color: #ea76cb;
171
-
background: #e6e9ef;
172
-
}
173
-
.latte .tooltiptext {
174
-
background: #e6e9ef;
175
-
color: #4c4f69;
176
-
}
177
-
178
-
.frappe.hljs {
179
-
color: #c6d0f5;
180
-
background: #303446;
181
-
}
182
-
.frappe .hljs-keyword {
183
-
color: #ca9ee6;
184
-
}
185
-
.frappe .hljs-built_in {
186
-
color: #e78284;
187
-
}
188
-
.frappe .hljs-type {
189
-
color: #e5c890;
190
-
}
191
-
.frappe .hljs-literal {
192
-
color: #ef9f76;
193
-
}
194
-
.frappe .hljs-number {
195
-
color: #ef9f76;
196
-
}
197
-
.frappe .hljs-operator {
198
-
color: #99d1db;
199
-
}
200
-
.frappe .hljs-punctuation {
201
-
color: #b5bfe2;
202
-
}
203
-
.frappe .hljs-property {
204
-
color: #81c8be;
205
-
}
206
-
.frappe .hljs-regexp {
207
-
color: #f4b8e4;
208
-
}
209
-
.frappe .hljs-string {
210
-
color: #a6d189;
211
-
}
212
-
.frappe .hljs-char.escape_ {
213
-
color: #a6d189;
214
-
}
215
-
.frappe .hljs-subst {
216
-
color: #a5adce;
217
-
}
218
-
.frappe .hljs-symbol {
219
-
color: #eebebe;
220
-
}
221
-
.frappe .hljs-variable {
222
-
color: #ca9ee6;
223
-
}
224
-
.frappe .hljs-variable.language_ {
225
-
color: #ca9ee6;
226
-
}
227
-
.frappe .hljs-variable.constant_ {
228
-
color: #ef9f76;
229
-
}
230
-
.frappe .hljs-title {
231
-
color: #8caaee;
232
-
}
233
-
.frappe .hljs-title.class_ {
234
-
color: #e5c890;
235
-
}
236
-
.frappe .hljs-title.function_ {
237
-
color: #8caaee;
238
-
}
239
-
.frappe .hljs-params {
240
-
color: #c6d0f5;
241
-
}
242
-
.frappe .hljs-comment {
243
-
color: #949cbb;
244
-
}
245
-
.frappe .hljs-doctag {
246
-
color: #e78284;
247
-
}
248
-
.frappe .hljs-meta {
249
-
color: #ef9f76;
250
-
}
251
-
.frappe .hljs-section {
252
-
color: #8caaee;
253
-
}
254
-
.frappe .hljs-tag {
255
-
color: #81c8be;
256
-
}
257
-
.frappe .hljs-name {
258
-
color: #ca9ee6;
259
-
}
260
-
.frappe .hljs-attr {
261
-
color: #8caaee;
262
-
}
263
-
.frappe .hljs-attribute {
264
-
color: #a6d189;
265
-
}
266
-
.frappe .hljs-bullet {
267
-
color: #81c8be;
268
-
}
269
-
.frappe .hljs-code {
270
-
color: #a6d189;
271
-
}
272
-
.frappe .hljs-emphasis {
273
-
color: #e78284;
274
-
font-style: italic;
275
-
}
276
-
.frappe .hljs-strong {
277
-
color: #e78284;
278
-
font-weight: bold;
279
-
}
280
-
.frappe .hljs-formula {
281
-
color: #81c8be;
282
-
}
283
-
.frappe .hljs-link {
284
-
color: #85c1dc;
285
-
font-style: italic;
286
-
}
287
-
.frappe .hljs-quote {
288
-
color: #a6d189;
289
-
font-style: italic;
290
-
}
291
-
.frappe .hljs-selector-tag {
292
-
color: #e5c890;
293
-
}
294
-
.frappe .hljs-selector-id {
295
-
color: #8caaee;
296
-
}
297
-
.frappe .hljs-selector-class {
298
-
color: #81c8be;
299
-
}
300
-
.frappe .hljs-selector-attr {
301
-
color: #ca9ee6;
302
-
}
303
-
.frappe .hljs-selector-pseudo {
304
-
color: #81c8be;
305
-
}
306
-
.frappe .hljs-template-tag {
307
-
color: #eebebe;
308
-
}
309
-
.frappe .hljs-template-variable {
310
-
color: #eebebe;
311
-
}
312
-
.frappe .hljs-addition {
313
-
color: #a6d189;
314
-
background: rgba(166, 209, 137, 0.15);
315
-
}
316
-
.frappe .hljs-deletion {
317
-
color: #e78284;
318
-
background: rgba(231, 130, 132, 0.15);
319
-
}
320
-
.frappe :is(h1, h2, h3, h4, h5, h6) a code {
321
-
color: #c6d0f5;
322
-
}
323
-
.frappe a code {
324
-
color: #8caaee;
325
-
}
326
-
.frappe code {
327
-
color: #c6d0f5;
328
-
background: #292c3c;
329
-
}
330
-
.frappe blockquote blockquote {
331
-
border-top: 0.1em solid #626880;
332
-
border-bottom: 0.1em solid #626880;
333
-
}
334
-
.frappe hr {
335
-
border-color: #626880;
336
-
border-style: solid;
337
-
}
338
-
.frappe del {
339
-
color: #949cbb;
340
-
}
341
-
.frappe .ace_gutter {
342
-
color: #838ba7;
343
-
background: #292c3c;
344
-
}
345
-
.frappe .ace_gutter-active-line.ace_gutter-cell {
346
-
color: #f4b8e4;
347
-
background: #292c3c;
348
-
}
349
-
.frappe .tooltiptext {
350
-
background: #292c3c;
351
-
color: #c6d0f5;
352
-
}
353
-
354
-
.macchiato.hljs {
355
-
color: #cad3f5;
356
-
background: #24273a;
357
-
}
358
-
.macchiato .hljs-keyword {
359
-
color: #c6a0f6;
360
-
}
361
-
.macchiato .hljs-built_in {
362
-
color: #ed8796;
363
-
}
364
-
.macchiato .hljs-type {
365
-
color: #eed49f;
366
-
}
367
-
.macchiato .hljs-literal {
368
-
color: #f5a97f;
369
-
}
370
-
.macchiato .hljs-number {
371
-
color: #f5a97f;
372
-
}
373
-
.macchiato .hljs-operator {
374
-
color: #91d7e3;
375
-
}
376
-
.macchiato .hljs-punctuation {
377
-
color: #b8c0e0;
378
-
}
379
-
.macchiato .hljs-property {
380
-
color: #8bd5ca;
381
-
}
382
-
.macchiato .hljs-regexp {
383
-
color: #f5bde6;
384
-
}
385
-
.macchiato .hljs-string {
386
-
color: #a6da95;
387
-
}
388
-
.macchiato .hljs-char.escape_ {
389
-
color: #a6da95;
390
-
}
391
-
.macchiato .hljs-subst {
392
-
color: #a5adcb;
393
-
}
394
-
.macchiato .hljs-symbol {
395
-
color: #f0c6c6;
396
-
}
397
-
.macchiato .hljs-variable {
398
-
color: #c6a0f6;
399
-
}
400
-
.macchiato .hljs-variable.language_ {
401
-
color: #c6a0f6;
402
-
}
403
-
.macchiato .hljs-variable.constant_ {
404
-
color: #f5a97f;
405
-
}
406
-
.macchiato .hljs-title {
407
-
color: #8aadf4;
408
-
}
409
-
.macchiato .hljs-title.class_ {
410
-
color: #eed49f;
411
-
}
412
-
.macchiato .hljs-title.function_ {
413
-
color: #8aadf4;
414
-
}
415
-
.macchiato .hljs-params {
416
-
color: #cad3f5;
417
-
}
418
-
.macchiato .hljs-comment {
419
-
color: #939ab7;
420
-
}
421
-
.macchiato .hljs-doctag {
422
-
color: #ed8796;
423
-
}
424
-
.macchiato .hljs-meta {
425
-
color: #f5a97f;
426
-
}
427
-
.macchiato .hljs-section {
428
-
color: #8aadf4;
429
-
}
430
-
.macchiato .hljs-tag {
431
-
color: #8bd5ca;
432
-
}
433
-
.macchiato .hljs-name {
434
-
color: #c6a0f6;
435
-
}
436
-
.macchiato .hljs-attr {
437
-
color: #8aadf4;
438
-
}
439
-
.macchiato .hljs-attribute {
440
-
color: #a6da95;
441
-
}
442
-
.macchiato .hljs-bullet {
443
-
color: #8bd5ca;
444
-
}
445
-
.macchiato .hljs-code {
446
-
color: #a6da95;
447
-
}
448
-
.macchiato .hljs-emphasis {
449
-
color: #ed8796;
450
-
font-style: italic;
451
-
}
452
-
.macchiato .hljs-strong {
453
-
color: #ed8796;
454
-
font-weight: bold;
455
-
}
456
-
.macchiato .hljs-formula {
457
-
color: #8bd5ca;
458
-
}
459
-
.macchiato .hljs-link {
460
-
color: #7dc4e4;
461
-
font-style: italic;
462
-
}
463
-
.macchiato .hljs-quote {
464
-
color: #a6da95;
465
-
font-style: italic;
466
-
}
467
-
.macchiato .hljs-selector-tag {
468
-
color: #eed49f;
469
-
}
470
-
.macchiato .hljs-selector-id {
471
-
color: #8aadf4;
472
-
}
473
-
.macchiato .hljs-selector-class {
474
-
color: #8bd5ca;
475
-
}
476
-
.macchiato .hljs-selector-attr {
477
-
color: #c6a0f6;
478
-
}
479
-
.macchiato .hljs-selector-pseudo {
480
-
color: #8bd5ca;
481
-
}
482
-
.macchiato .hljs-template-tag {
483
-
color: #f0c6c6;
484
-
}
485
-
.macchiato .hljs-template-variable {
486
-
color: #f0c6c6;
487
-
}
488
-
.macchiato .hljs-addition {
489
-
color: #a6da95;
490
-
background: rgba(166, 218, 149, 0.15);
491
-
}
492
-
.macchiato .hljs-deletion {
493
-
color: #ed8796;
494
-
background: rgba(237, 135, 150, 0.15);
495
-
}
496
-
.macchiato :is(h1, h2, h3, h4, h5, h6) a code {
497
-
color: #cad3f5;
498
-
}
499
-
.macchiato a code {
500
-
color: #8aadf4;
501
-
}
502
-
.macchiato code {
503
-
color: #cad3f5;
504
-
background: #1e2030;
505
-
}
506
-
.macchiato blockquote blockquote {
507
-
border-top: 0.1em solid #5b6078;
508
-
border-bottom: 0.1em solid #5b6078;
509
-
}
510
-
.macchiato hr {
511
-
border-color: #5b6078;
512
-
border-style: solid;
513
-
}
514
-
.macchiato del {
515
-
color: #939ab7;
516
-
}
517
-
.macchiato .ace_gutter {
518
-
color: #8087a2;
519
-
background: #1e2030;
520
-
}
521
-
.macchiato .ace_gutter-active-line.ace_gutter-cell {
522
-
color: #f5bde6;
523
-
background: #1e2030;
524
-
}
525
-
.macchiato .tooltiptext {
526
-
background: #1e2030;
527
-
color: #cad3f5;
528
-
}
529
-
530
-
.mocha.hljs {
531
-
color: #cdd6f4;
532
-
background: #1e1e2e;
533
-
}
534
-
.mocha .hljs-keyword {
535
-
color: #cba6f7;
536
-
}
537
-
.mocha .hljs-built_in {
538
-
color: #f38ba8;
539
-
}
540
-
.mocha .hljs-type {
541
-
color: #f9e2af;
542
-
}
543
-
.mocha .hljs-literal {
544
-
color: #fab387;
545
-
}
546
-
.mocha .hljs-number {
547
-
color: #fab387;
548
-
}
549
-
.mocha .hljs-operator {
550
-
color: #89dceb;
551
-
}
552
-
.mocha .hljs-punctuation {
553
-
color: #bac2de;
554
-
}
555
-
.mocha .hljs-property {
556
-
color: #94e2d5;
557
-
}
558
-
.mocha .hljs-regexp {
559
-
color: #f5c2e7;
560
-
}
561
-
.mocha .hljs-string {
562
-
color: #a6e3a1;
563
-
}
564
-
.mocha .hljs-char.escape_ {
565
-
color: #a6e3a1;
566
-
}
567
-
.mocha .hljs-subst {
568
-
color: #a6adc8;
569
-
}
570
-
.mocha .hljs-symbol {
571
-
color: #f2cdcd;
572
-
}
573
-
.mocha .hljs-variable {
574
-
color: #cba6f7;
575
-
}
576
-
.mocha .hljs-variable.language_ {
577
-
color: #cba6f7;
578
-
}
579
-
.mocha .hljs-variable.constant_ {
580
-
color: #fab387;
581
-
}
582
-
.mocha .hljs-title {
583
-
color: #89b4fa;
584
-
}
585
-
.mocha .hljs-title.class_ {
586
-
color: #f9e2af;
587
-
}
588
-
.mocha .hljs-title.function_ {
589
-
color: #89b4fa;
590
-
}
591
-
.mocha .hljs-params {
592
-
color: #cdd6f4;
593
-
}
594
-
.mocha .hljs-comment {
595
-
color: #9399b2;
596
-
}
597
-
.mocha .hljs-doctag {
598
-
color: #f38ba8;
599
-
}
600
-
.mocha .hljs-meta {
601
-
color: #fab387;
602
-
}
603
-
.mocha .hljs-section {
604
-
color: #89b4fa;
605
-
}
606
-
.mocha .hljs-tag {
607
-
color: #94e2d5;
608
-
}
609
-
.mocha .hljs-name {
610
-
color: #cba6f7;
611
-
}
612
-
.mocha .hljs-attr {
613
-
color: #89b4fa;
614
-
}
615
-
.mocha .hljs-attribute {
616
-
color: #a6e3a1;
617
-
}
618
-
.mocha .hljs-bullet {
619
-
color: #94e2d5;
620
-
}
621
-
.mocha .hljs-code {
622
-
color: #a6e3a1;
623
-
}
624
-
.mocha .hljs-emphasis {
625
-
color: #f38ba8;
626
-
font-style: italic;
627
-
}
628
-
.mocha .hljs-strong {
629
-
color: #f38ba8;
630
-
font-weight: bold;
631
-
}
632
-
.mocha .hljs-formula {
633
-
color: #94e2d5;
634
-
}
635
-
.mocha .hljs-link {
636
-
color: #74c7ec;
637
-
font-style: italic;
638
-
}
639
-
.mocha .hljs-quote {
640
-
color: #a6e3a1;
641
-
font-style: italic;
642
-
}
643
-
.mocha .hljs-selector-tag {
644
-
color: #f9e2af;
645
-
}
646
-
.mocha .hljs-selector-id {
647
-
color: #89b4fa;
648
-
}
649
-
.mocha .hljs-selector-class {
650
-
color: #94e2d5;
651
-
}
652
-
.mocha .hljs-selector-attr {
653
-
color: #cba6f7;
654
-
}
655
-
.mocha .hljs-selector-pseudo {
656
-
color: #94e2d5;
657
-
}
658
-
.mocha .hljs-template-tag {
659
-
color: #f2cdcd;
660
-
}
661
-
.mocha .hljs-template-variable {
662
-
color: #f2cdcd;
663
-
}
664
-
.mocha .hljs-addition {
665
-
color: #a6e3a1;
666
-
background: rgba(166, 227, 161, 0.15);
667
-
}
668
-
.mocha .hljs-deletion {
669
-
color: #f38ba8;
670
-
background: rgba(243, 139, 168, 0.15);
671
-
}
672
-
.mocha :is(h1, h2, h3, h4, h5, h6) a code {
673
-
color: #cdd6f4;
674
-
}
675
-
.mocha a code {
676
-
color: #89b4fa;
677
-
}
678
-
.mocha code {
679
-
color: #cdd6f4;
680
-
background: #181825;
681
-
}
682
-
.mocha blockquote blockquote {
683
-
border-top: 0.1em solid #585b70;
684
-
border-bottom: 0.1em solid #585b70;
685
-
}
686
-
.mocha hr {
687
-
border-color: #585b70;
688
-
border-style: solid;
689
-
}
690
-
.mocha del {
691
-
color: #9399b2;
692
-
}
693
-
.mocha .ace_gutter {
694
-
color: #7f849c;
695
-
background: #181825;
696
-
}
697
-
.mocha .ace_gutter-active-line.ace_gutter-cell {
698
-
color: #f5c2e7;
699
-
background: #181825;
700
-
}
701
-
.mocha .tooltiptext {
702
-
background: #181825;
703
-
color: #cdd6f4;
704
-
}
705
-
706
-
.latte {
707
-
--bg: #eff1f5;
708
-
--fg: #4c4f69;
709
-
--sidebar-bg: #e6e9ef;
710
-
--sidebar-fg: #4c4f69;
711
-
--sidebar-non-existant: #9ca0b0;
712
-
--sidebar-active: #1e66f5;
713
-
--sidebar-spacer: #9ca0b0;
714
-
--scrollbar: #9ca0b0;
715
-
--icons: #9ca0b0;
716
-
--icons-hover: #7c7f93;
717
-
--links: #1e66f5;
718
-
--inline-code-color: #4c4f69;
719
-
--theme-popup-bg: #e6e9ef;
720
-
--theme-popup-border: #9ca0b0;
721
-
--theme-hover: #ccd0da;
722
-
--quote-bg: #e6e9ef;
723
-
--quote-border: #dce0e8;
724
-
--table-border-color: #ccd0da;
725
-
--table-header-bg: #e6e9ef;
726
-
--table-alternate-bg: #e6e9ef;
727
-
--searchbar-border-color: #ccd0da;
728
-
--searchbar-bg: #e6e9ef;
729
-
--searchbar-fg: #4c4f69;
730
-
--searchbar-shadow-color: #dce0e8;
731
-
--searchresults-header-fg: #4c4f69;
732
-
--searchresults-border-color: #ccd0da;
733
-
--searchresults-li-bg: #eff1f5;
734
-
--search-mark-bg: #fe640b;
735
-
--warning-border: #fe640b;
736
-
--color-scheme: light;
737
-
}
738
-
739
-
.frappe {
740
-
--bg: #303446;
741
-
--fg: #c6d0f5;
742
-
--sidebar-bg: #292c3c;
743
-
--sidebar-fg: #c6d0f5;
744
-
--sidebar-non-existant: #737994;
745
-
--sidebar-active: #8caaee;
746
-
--sidebar-spacer: #737994;
747
-
--scrollbar: #737994;
748
-
--icons: #737994;
749
-
--icons-hover: #949cbb;
750
-
--links: #8caaee;
751
-
--inline-code-color: #c6d0f5;
752
-
--theme-popup-bg: #292c3c;
753
-
--theme-popup-border: #737994;
754
-
--theme-hover: #414559;
755
-
--quote-bg: #292c3c;
756
-
--quote-border: #232634;
757
-
--table-border-color: #414559;
758
-
--table-header-bg: #292c3c;
759
-
--table-alternate-bg: #292c3c;
760
-
--searchbar-border-color: #414559;
761
-
--searchbar-bg: #292c3c;
762
-
--searchbar-fg: #c6d0f5;
763
-
--searchbar-shadow-color: #232634;
764
-
--searchresults-header-fg: #c6d0f5;
765
-
--searchresults-border-color: #414559;
766
-
--searchresults-li-bg: #303446;
767
-
--search-mark-bg: #ef9f76;
768
-
--warning-border: #ef9f76;
769
-
--color-scheme: dark;
770
-
}
771
-
772
-
.macchiato {
773
-
--bg: #24273a;
774
-
--fg: #cad3f5;
775
-
--sidebar-bg: #1e2030;
776
-
--sidebar-fg: #cad3f5;
777
-
--sidebar-non-existant: #6e738d;
778
-
--sidebar-active: #8aadf4;
779
-
--sidebar-spacer: #6e738d;
780
-
--scrollbar: #6e738d;
781
-
--icons: #6e738d;
782
-
--icons-hover: #939ab7;
783
-
--links: #8aadf4;
784
-
--inline-code-color: #cad3f5;
785
-
--theme-popup-bg: #1e2030;
786
-
--theme-popup-border: #6e738d;
787
-
--theme-hover: #363a4f;
788
-
--quote-bg: #1e2030;
789
-
--quote-border: #181926;
790
-
--table-border-color: #363a4f;
791
-
--table-header-bg: #1e2030;
792
-
--table-alternate-bg: #1e2030;
793
-
--searchbar-border-color: #363a4f;
794
-
--searchbar-bg: #1e2030;
795
-
--searchbar-fg: #cad3f5;
796
-
--searchbar-shadow-color: #181926;
797
-
--searchresults-header-fg: #cad3f5;
798
-
--searchresults-border-color: #363a4f;
799
-
--searchresults-li-bg: #24273a;
800
-
--search-mark-bg: #f5a97f;
801
-
--warning-border: #f5a97f;
802
-
--color-scheme: dark;
803
-
}
804
-
805
-
.mocha {
806
-
--bg: #1e1e2e;
807
-
--fg: #cdd6f4;
808
-
--sidebar-bg: #181825;
809
-
--sidebar-fg: #cdd6f4;
810
-
--sidebar-non-existant: #6c7086;
811
-
--sidebar-active: #89b4fa;
812
-
--sidebar-spacer: #6c7086;
813
-
--scrollbar: #6c7086;
814
-
--icons: #6c7086;
815
-
--icons-hover: #9399b2;
816
-
--links: #89b4fa;
817
-
--inline-code-color: #cdd6f4;
818
-
--theme-popup-bg: #181825;
819
-
--theme-popup-border: #6c7086;
820
-
--theme-hover: #313244;
821
-
--quote-bg: #181825;
822
-
--quote-border: #11111b;
823
-
--table-border-color: #313244;
824
-
--table-header-bg: #181825;
825
-
--table-alternate-bg: #181825;
826
-
--searchbar-border-color: #313244;
827
-
--searchbar-bg: #181825;
828
-
--searchbar-fg: #cdd6f4;
829
-
--searchbar-shadow-color: #11111b;
830
-
--searchresults-header-fg: #cdd6f4;
831
-
--searchresults-border-color: #313244;
832
-
--searchresults-li-bg: #1e1e2e;
833
-
--search-mark-bg: #fab387;
834
-
--warning-border: #fab387;
835
-
--color-scheme: dark;
836
-
}
···
docs/theme/favicon.png
docs/theme/favicon.png
This is a binary file and will not be displayed.
-1
docs/theme/highlight.js
-1
docs/theme/highlight.js
···
1
-
../vendor/highlight.min.js
···
-329
docs/theme/index.hbs
-329
docs/theme/index.hbs
···
1
-
<!DOCTYPE HTML>
2
-
<html lang="{{ language }}" class="{{ default_theme }} sidebar-visible" dir="{{ text_direction }}">
3
-
<head>
4
-
<!-- Book generated using mdBook -->
5
-
<meta charset="UTF-8">
6
-
<title>{{ title }}</title>
7
-
{{#if is_print }}
8
-
<meta name="robots" content="noindex">
9
-
{{/if}}
10
-
{{#if base_url}}
11
-
<base href="{{ base_url }}">
12
-
{{/if}}
13
-
14
-
15
-
<!-- Custom HTML head -->
16
-
{{> head}}
17
-
18
-
<meta name="description" content="{{ description }}">
19
-
<meta name="viewport" content="width=device-width, initial-scale=1">
20
-
<meta name="theme-color" content="#ffffff">
21
-
22
-
{{#if favicon_svg}}
23
-
<link rel="icon" href="{{ path_to_root }}favicon.svg">
24
-
{{/if}}
25
-
{{#if favicon_png}}
26
-
<link rel="shortcut icon" href="{{ path_to_root }}favicon.png">
27
-
{{/if}}
28
-
<link rel="stylesheet" href="{{ path_to_root }}css/variables.css">
29
-
<link rel="stylesheet" href="{{ path_to_root }}css/general.css">
30
-
<link rel="stylesheet" href="{{ path_to_root }}css/chrome.css">
31
-
{{#if print_enable}}
32
-
<link rel="stylesheet" href="{{ path_to_root }}css/print.css" media="print">
33
-
{{/if}}
34
-
35
-
<!-- Fonts -->
36
-
<link rel="stylesheet" href="{{ path_to_root }}FontAwesome/css/font-awesome.css">
37
-
{{#if copy_fonts}}
38
-
<link rel="stylesheet" href="{{ path_to_root }}fonts/fonts.css">
39
-
{{/if}}
40
-
41
-
<!-- Highlight.js Stylesheets -->
42
-
<link rel="stylesheet" href="{{ path_to_root }}highlight.css">
43
-
<link rel="stylesheet" href="{{ path_to_root }}tomorrow-night.css">
44
-
<link rel="stylesheet" href="{{ path_to_root }}ayu-highlight.css">
45
-
46
-
<!-- Custom theme stylesheets -->
47
-
{{#each additional_css}}
48
-
<link rel="stylesheet" href="{{ ../path_to_root }}{{ this }}">
49
-
{{/each}}
50
-
51
-
{{#if mathjax_support}}
52
-
<!-- MathJax -->
53
-
<script async src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
54
-
{{/if}}
55
-
56
-
<!-- Provide site root to javascript -->
57
-
<script>
58
-
var path_to_root = "{{ path_to_root }}";
59
-
var default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "{{ preferred_dark_theme }}" : "{{ default_theme }}";
60
-
</script>
61
-
<!-- Start loading toc.js asap -->
62
-
<script src="{{ path_to_root }}toc.js"></script>
63
-
</head>
64
-
<body>
65
-
<div id="body-container">
66
-
<!-- Work around some values being stored in localStorage wrapped in quotes -->
67
-
<script>
68
-
try {
69
-
var theme = localStorage.getItem('mdbook-theme');
70
-
var sidebar = localStorage.getItem('mdbook-sidebar');
71
-
72
-
if (theme.startsWith('"') && theme.endsWith('"')) {
73
-
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
74
-
}
75
-
76
-
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
77
-
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
78
-
}
79
-
} catch (e) { }
80
-
</script>
81
-
82
-
<!-- Set the theme before any content is loaded, prevents flash -->
83
-
<script>
84
-
var theme;
85
-
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
86
-
if (theme === null || theme === undefined) { theme = default_theme; }
87
-
const html = document.documentElement;
88
-
html.classList.remove('{{ default_theme }}')
89
-
html.classList.add(theme);
90
-
html.classList.add("js");
91
-
</script>
92
-
93
-
<input type="checkbox" id="sidebar-toggle-anchor" class="hidden">
94
-
95
-
<!-- Hide / unhide sidebar before it is displayed -->
96
-
<script>
97
-
var sidebar = null;
98
-
var sidebar_toggle = document.getElementById("sidebar-toggle-anchor");
99
-
if (document.body.clientWidth >= 1080) {
100
-
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
101
-
sidebar = sidebar || 'visible';
102
-
} else {
103
-
sidebar = 'hidden';
104
-
}
105
-
sidebar_toggle.checked = sidebar === 'visible';
106
-
html.classList.remove('sidebar-visible');
107
-
html.classList.add("sidebar-" + sidebar);
108
-
</script>
109
-
110
-
<nav id="sidebar" class="sidebar" aria-label="Table of contents">
111
-
<!-- populated by js -->
112
-
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
113
-
<noscript>
114
-
<iframe class="sidebar-iframe-outer" src="{{ path_to_root }}toc.html"></iframe>
115
-
</noscript>
116
-
<div id="sidebar-resize-handle" class="sidebar-resize-handle">
117
-
<div class="sidebar-resize-indicator"></div>
118
-
</div>
119
-
</nav>
120
-
121
-
<div id="page-wrapper" class="page-wrapper">
122
-
123
-
<div class="page">
124
-
{{> header}}
125
-
<div id="menu-bar-hover-placeholder"></div>
126
-
<div id="menu-bar" class="menu-bar sticky">
127
-
<div class="left-buttons">
128
-
<label id="sidebar-toggle" class="icon-button" for="sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar">
129
-
<i class="fa fa-bars"></i>
130
-
</label>
131
-
<button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list">
132
-
<i class="fa fa-paint-brush"></i>
133
-
</button>
134
-
<ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu">
135
-
<li role="none"><button role="menuitem" class="theme" id="latte">Catppuccin Latte</button></li>
136
-
<li role="none"><button role="menuitem" class="theme" id="frappe">Catppuccin Frappรฉ</button></li>
137
-
<li role="none"><button role="menuitem" class="theme" id="macchiato">Catppuccin Macchiato</button></li>
138
-
<li role="none"><button role="menuitem" class="theme" id="mocha">Catppuccin Mocha</button></li>
139
-
<li role="none"><button role="menuitem" class="theme" id="light">Light</button></li>
140
-
<li role="none"><button role="menuitem" class="theme" id="rust">Rust</button></li>
141
-
<li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li>
142
-
<li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li>
143
-
<li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button></li>
144
-
</ul>
145
-
{{#if search_enabled}}
146
-
<button id="search-toggle" class="icon-button" type="button" title="Search. (Shortkey: s)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="S" aria-controls="searchbar">
147
-
<i class="fa fa-search"></i>
148
-
</button>
149
-
{{/if}}
150
-
</div>
151
-
152
-
<h1 class="menu-title">{{ book_title }}</h1>
153
-
154
-
<div class="right-buttons">
155
-
{{#if print_enable}}
156
-
<a href="{{ path_to_root }}print.html" title="Print this book" aria-label="Print this book">
157
-
<i id="print-button" class="fa fa-print"></i>
158
-
</a>
159
-
{{/if}}
160
-
{{#if git_repository_url}}
161
-
<a href="{{git_repository_url}}" title="Git repository" aria-label="Git repository">
162
-
<i id="git-repository-button" class="fa {{git_repository_icon}}"></i>
163
-
</a>
164
-
{{/if}}
165
-
{{#if git_repository_edit_url}}
166
-
<a href="{{git_repository_edit_url}}" title="Suggest an edit" aria-label="Suggest an edit">
167
-
<i id="git-edit-button" class="fa fa-edit"></i>
168
-
</a>
169
-
{{/if}}
170
-
171
-
</div>
172
-
</div>
173
-
174
-
{{#if search_enabled}}
175
-
<div id="search-wrapper" class="hidden">
176
-
<form id="searchbar-outer" class="searchbar-outer">
177
-
<input type="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header">
178
-
</form>
179
-
<div id="searchresults-outer" class="searchresults-outer hidden">
180
-
<div id="searchresults-header" class="searchresults-header"></div>
181
-
<ul id="searchresults">
182
-
</ul>
183
-
</div>
184
-
</div>
185
-
{{/if}}
186
-
187
-
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
188
-
<script>
189
-
document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
190
-
document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
191
-
Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) {
192
-
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
193
-
});
194
-
</script>
195
-
196
-
<div id="content" class="content">
197
-
<main>
198
-
{{{ content }}}
199
-
</main>
200
-
201
-
<nav class="nav-wrapper" aria-label="Page navigation">
202
-
<!-- Mobile navigation buttons -->
203
-
{{#previous}}
204
-
<a rel="prev" href="{{ path_to_root }}{{link}}" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
205
-
<i class="fa fa-angle-left"></i>
206
-
</a>
207
-
{{/previous}}
208
-
209
-
{{#next}}
210
-
<a rel="next prefetch" href="{{ path_to_root }}{{link}}" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
211
-
<i class="fa fa-angle-right"></i>
212
-
</a>
213
-
{{/next}}
214
-
215
-
<div style="clear: both"></div>
216
-
</nav>
217
-
</div>
218
-
</div>
219
-
220
-
<nav class="nav-wide-wrapper" aria-label="Page navigation">
221
-
{{#previous}}
222
-
<a rel="prev" href="{{ path_to_root }}{{link}}" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
223
-
<i class="fa fa-angle-left"></i>
224
-
</a>
225
-
{{/previous}}
226
-
227
-
{{#next}}
228
-
<a rel="next prefetch" href="{{ path_to_root }}{{link}}" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
229
-
<i class="fa fa-angle-right"></i>
230
-
</a>
231
-
{{/next}}
232
-
</nav>
233
-
234
-
</div>
235
-
236
-
{{#if live_reload_endpoint}}
237
-
<!-- Livereload script (if served using the cli tool) -->
238
-
<script>
239
-
const wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
240
-
const wsAddress = wsProtocol + "//" + location.host + "/" + "{{{live_reload_endpoint}}}";
241
-
const socket = new WebSocket(wsAddress);
242
-
socket.onmessage = function (event) {
243
-
if (event.data === "reload") {
244
-
socket.close();
245
-
location.reload();
246
-
}
247
-
};
248
-
249
-
window.onbeforeunload = function() {
250
-
socket.close();
251
-
}
252
-
</script>
253
-
{{/if}}
254
-
255
-
{{#if google_analytics}}
256
-
<!-- Google Analytics Tag -->
257
-
<script>
258
-
var localAddrs = ["localhost", "127.0.0.1", ""];
259
-
260
-
// make sure we don't activate google analytics if the developer is
261
-
// inspecting the book locally...
262
-
if (localAddrs.indexOf(document.location.hostname) === -1) {
263
-
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
264
-
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
265
-
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
266
-
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
267
-
268
-
ga('create', '{{google_analytics}}', 'auto');
269
-
ga('send', 'pageview');
270
-
}
271
-
</script>
272
-
{{/if}}
273
-
274
-
{{#if playground_line_numbers}}
275
-
<script>
276
-
window.playground_line_numbers = true;
277
-
</script>
278
-
{{/if}}
279
-
280
-
{{#if playground_copyable}}
281
-
<script>
282
-
window.playground_copyable = true;
283
-
</script>
284
-
{{/if}}
285
-
286
-
{{#if playground_js}}
287
-
<script src="{{ path_to_root }}ace.js"></script>
288
-
<script src="{{ path_to_root }}editor.js"></script>
289
-
<script src="{{ path_to_root }}mode-rust.js"></script>
290
-
<script src="{{ path_to_root }}theme-dawn.js"></script>
291
-
<script src="{{ path_to_root }}theme-tomorrow_night.js"></script>
292
-
{{/if}}
293
-
294
-
{{#if search_js}}
295
-
<script src="{{ path_to_root }}elasticlunr.min.js"></script>
296
-
<script src="{{ path_to_root }}mark.min.js"></script>
297
-
<script src="{{ path_to_root }}searcher.js"></script>
298
-
{{/if}}
299
-
300
-
<script src="{{ path_to_root }}clipboard.min.js"></script>
301
-
<script src="{{ path_to_root }}highlight.js"></script>
302
-
<script src="{{ path_to_root }}book.js"></script>
303
-
304
-
<!-- Custom JS scripts -->
305
-
{{#each additional_js}}
306
-
<script src="{{ ../path_to_root }}{{this}}"></script>
307
-
{{/each}}
308
-
309
-
{{#if is_print}}
310
-
{{#if mathjax_support}}
311
-
<script>
312
-
window.addEventListener('load', function() {
313
-
MathJax.Hub.Register.StartupHook('End', function() {
314
-
window.setTimeout(window.print, 100);
315
-
});
316
-
});
317
-
</script>
318
-
{{else}}
319
-
<script>
320
-
window.addEventListener('load', function() {
321
-
window.setTimeout(window.print, 100);
322
-
});
323
-
</script>
324
-
{{/if}}
325
-
{{/if}}
326
-
327
-
</div>
328
-
</body>
329
-
</html>
···
-71
docs/theme/pagetoc.css
-71
docs/theme/pagetoc.css
···
1
-
@media only screen and (max-width:1439px) {
2
-
.sidetoc {
3
-
display: none;
4
-
}
5
-
}
6
-
7
-
@media only screen and (min-width:1440px) {
8
-
main {
9
-
position: relative;
10
-
}
11
-
12
-
.sidetoc {
13
-
margin-left: auto;
14
-
margin-right: auto;
15
-
left: calc(100% + (var(--content-max-width))/4 - 140px);
16
-
position: absolute;
17
-
}
18
-
19
-
.pagetoc {
20
-
position: fixed;
21
-
width: 200px;
22
-
height: calc(100vh - var(--menu-bar-height) - 0.67em * 4);
23
-
overflow: auto;
24
-
}
25
-
26
-
.pagetoc a {
27
-
border-left: 1px solid var(--sidebar-bg);
28
-
color: var(--fg) !important;
29
-
display: block;
30
-
padding-bottom: 5px;
31
-
padding-top: 5px;
32
-
padding-left: 10px;
33
-
text-align: left;
34
-
text-decoration: none;
35
-
}
36
-
37
-
.pagetoc a:hover,
38
-
.pagetoc a.active {
39
-
background: var(--sidebar-bg);
40
-
color: var(--sidebar-fg) !important;
41
-
}
42
-
43
-
.pagetoc .active {
44
-
background: var(--sidebar-bg);
45
-
color: var(--sidebar-fg);
46
-
}
47
-
48
-
.pagetoc .pagetoc-H2 {
49
-
padding-left: 20px;
50
-
}
51
-
52
-
.pagetoc .pagetoc-H3 {
53
-
padding-left: 40px;
54
-
}
55
-
56
-
.pagetoc .pagetoc-H4 {
57
-
padding-left: 60px;
58
-
}
59
-
60
-
.pagetoc .pagetoc-H5 {
61
-
display: none;
62
-
}
63
-
64
-
.pagetoc .pagetoc-H6 {
65
-
display: none;
66
-
}
67
-
}
68
-
69
-
a[class^='pagetoc-H']:only-child {
70
-
display: none;
71
-
}
···
-73
docs/theme/pagetoc.js
-73
docs/theme/pagetoc.js
···
1
-
let scrollTimeout;
2
-
3
-
const listenActive = () => {
4
-
const elems = document.querySelector(".pagetoc").children;
5
-
[...elems].forEach((el) => {
6
-
el.addEventListener("click", (event) => {
7
-
clearTimeout(scrollTimeout);
8
-
[...elems].forEach((el) => el.classList.remove("active"));
9
-
el.classList.add("active");
10
-
// Prevent scroll updates for a short period
11
-
scrollTimeout = setTimeout(() => {
12
-
scrollTimeout = null;
13
-
}, 100); // Adjust timing as needed
14
-
});
15
-
});
16
-
};
17
-
18
-
const getPagetoc = () =>
19
-
document.querySelector(".pagetoc") || autoCreatePagetoc();
20
-
21
-
const autoCreatePagetoc = () => {
22
-
const main = document.querySelector("#content > main");
23
-
const content = Object.assign(document.createElement("div"), {
24
-
className: "content-wrap",
25
-
});
26
-
content.append(...main.childNodes);
27
-
main.prepend(content);
28
-
main.insertAdjacentHTML(
29
-
"afterbegin",
30
-
'<div class="sidetoc"><nav class="pagetoc"></nav></div>',
31
-
);
32
-
return document.querySelector(".pagetoc");
33
-
};
34
-
const updateFunction = () => {
35
-
if (scrollTimeout) return; // Skip updates if within the cooldown period from a click
36
-
const headers = [...document.getElementsByClassName("header")];
37
-
const scrolledY = window.scrollY;
38
-
let lastHeader = null;
39
-
40
-
// Find the last header that is above the current scroll position
41
-
for (let i = headers.length - 1; i >= 0; i--) {
42
-
if (scrolledY >= headers[i].offsetTop) {
43
-
lastHeader = headers[i];
44
-
break;
45
-
}
46
-
}
47
-
48
-
const pagetocLinks = [...document.querySelector(".pagetoc").children];
49
-
pagetocLinks.forEach((link) => link.classList.remove("active"));
50
-
51
-
if (lastHeader) {
52
-
const activeLink = pagetocLinks.find((link) =>
53
-
lastHeader.href === link.href
54
-
);
55
-
if (activeLink) activeLink.classList.add("active");
56
-
}
57
-
};
58
-
59
-
window.addEventListener("load", () => {
60
-
const pagetoc = getPagetoc();
61
-
const headers = [...document.getElementsByClassName("header")];
62
-
headers.forEach((header) => {
63
-
const link = Object.assign(document.createElement("a"), {
64
-
textContent: header.text,
65
-
href: header.href,
66
-
className: `pagetoc-${header.parentElement.tagName}`,
67
-
});
68
-
pagetoc.appendChild(link);
69
-
});
70
-
updateFunction();
71
-
listenActive();
72
-
window.addEventListener("scroll", updateFunction);
73
-
});
···
+167
docs/tips_n_tricks.md
+167
docs/tips_n_tricks.md
···
···
1
+
# tops and bottoms
2
+
this document outlines things that i learned from various sources and some pure guesswork
3
+
4
+
> To learn Nix is to learn to suffer, and to learn the way of numbing the pain
5
+
>
6
+
> โ Cassie circa. 2023
7
+
8
+
## overriding packages
9
+
the pill confused me and i thought i had to make overlays to do overrides but no
10
+
11
+
in packages (i.e. `environment.systemPackages`), just do
12
+
```nix
13
+
#-------8<-Snip-------
14
+
environment = {
15
+
systemPackages = with pkgs; [
16
+
(discord.override {withOpenASAR = true;})
17
+
()
18
+
];
19
+
};
20
+
#-------Snip->8-------
21
+
```
22
+
23
+
This works as well
24
+
```nix
25
+
security.sudo.package = (pkgs.sudo.override {withInsults = true;});
26
+
```
27
+
28
+
## overlays
29
+
overlays are useful when you want to refer to a package globally.
30
+
31
+
the gist of overlays is as thus:
32
+
33
+
> overlay is just `final: pref: {}` functions where dumbed down idea is
34
+
> that you do pkg = prev.pkg.override and refer to everything else from
35
+
> final
36
+
>
37
+
> idea is like final = prev // overlay(prev, final)
38
+
> (it's a recursive definition)
39
+
40
+
(poorly made) example overlays can be found [here](https://github.com/soopyc/nixos-config/blob/master/overlays/discord-canary.nix)
41
+
42
+
currently in-use and slightly better overlays can be found in this repo! head over to /overlays to see them.
43
+
44
+
*note: replace `self: super:` with `final: prev:` for consistency*
45
+
46
+
*concept and content by \@natsukagami*
47
+
48
+
## extra opts
49
+
a way of passing additional options globally to modules is by using extraOpts.
50
+
51
+
in nix flakes, this is accomplished by using `specialArgs` in `nixosSystem`.
52
+
53
+
for example, check out this line in our flake.nix:
54
+
55
+
https://github.com/soopyc/nix-on-koumakan/blob/492dfaa01808c2aa5dbb2d8223163e92bcef673b/flake.nix#L22-L28
56
+
57
+
this avoids the horror of `import ../../../utils/bar.nix;`
58
+
59
+
refer to [nixpkgs:nixos/lib/eval-config.nix] and [nixpkgs:lib/modules.nix#122] for more info
60
+
61
+
*pointers by \@natsukagami*
62
+
63
+
## @ (at) syntax
64
+
very simple.
65
+
66
+
```nix
67
+
args@{a, b, c, ...}: {
68
+
# args.a and a are the same
69
+
some = "value";
70
+
}
71
+
```
72
+
73
+
## nginx regex location
74
+
```nix
75
+
{
76
+
locations."~ \.php$".extraConfig = ''
77
+
# balls
78
+
'';
79
+
}
80
+
```
81
+
from [nixos wiki](https://nixos.wiki/wiki/Nginx#LEMP_stack)
82
+
83
+
## adding a package with an overlay to a package set
84
+
85
+
for package sets with a scope, you will have to do something like
86
+
```nix
87
+
final: prev: {
88
+
nimPackages = prev.nimPackages.overrideScope (final': prev': {
89
+
sha1 = final'.callPackage ./sha1.nix {};
90
+
oauth = final'.callPackage ./oauth.nix {};
91
+
});
92
+
}
93
+
```
94
+
There's an alternative method that i used to use here:
95
+
96
+
https://github.com/soopyc/nix-on-koumakan/blob/30e65402d22b000a3b5af6c9e5ea48a2b58a54e0/overlays/nim/oauth/default.nix
97
+
98
+
however i do not think that's the best way lol
99
+
100
+
# Common pitfalls
101
+
## importing nixpkgs with an empty attrset
102
+
103
+
ever had this in your flake.nix
104
+
105
+
```nix
106
+
{
107
+
outputs = { nixpkgs, ... }@inputs: let
108
+
pkgs = import nixpkgs {};
109
+
lib = nixpkgs.lib;
110
+
in {
111
+
# ...
112
+
};
113
+
}
114
+
```
115
+
116
+
... and got fucked with this?
117
+
```shell
118
+
error:
119
+
โฆ while checking flake output 'nixosConfigurations'
120
+
121
+
at /nix/store/lz2ra1180qfffmpwg41jpyg1z602qdgx-source/flake.nix:50:5:
122
+
123
+
49| in {
124
+
50| nixosConfigurations = {
125
+
| ^
126
+
51| koumakan = (import ./systems/koumakan { inherit pkgs lib inputs; });
127
+
128
+
โฆ while checking the NixOS configuration 'nixosConfigurations.koumakan'
129
+
130
+
at /nix/store/lz2ra1180qfffmpwg41jpyg1z602qdgx-source/flake.nix:51:7:
131
+
132
+
50| nixosConfigurations = {
133
+
51| koumakan = (import ./systems/koumakan { inherit pkgs lib inputs; });
134
+
| ^
135
+
52| };
136
+
137
+
(stack trace truncated; use '--show-trace' to show the full trace)
138
+
139
+
error: attribute 'currentSystem' missing
140
+
141
+
at /nix/store/5c0k827yjq7j24qaq8l2fcnsxp7nv8v1-source/pkgs/top-level/impure.nix:17:43:
142
+
143
+
16| # (build, in GNU Autotools parlance) platform.
144
+
17| localSystem ? { system = args.system or builtins.currentSystem; }
145
+
| ^
146
+
18|
147
+
```
148
+
149
+
just don't!!!11 remove the pkgs definition. (note that this only applies to `pkgs = import nixpkgs {};`)
150
+
151
+
explanation
152
+
153
+
> you shouldn't ever really import nixpkgs with an empty attrset either
154
+
>
155
+
> that causes it to fall back on guessing your system using `builtins.currentSystem`,
156
+
> which is impure and so not allowed in pure evaluation mode
157
+
>
158
+
> โ \@getchoo
159
+
160
+
# Useful links
161
+
162
+
Builtin stdlib functions search engine: https://noogle.dev/
163
+
164
+
165
+
<!--links-->
166
+
[nixpkgs:lib/modules.nix#122]: https://github.com/NixOS/nixpkgs/blob/6e68daefde56a7a8e6fe7c3ca9ceeb436294bb9f/lib/modules.nix#L122
167
+
[nixpkgs:nixos/lib/eval-config.nix]: https://github.com/NixOS/nixpkgs/blob/5054472759a3b0df8e18cfe4031a5eff92d4cdc3/nixos/lib/eval-config.nix
+59
docs/utils.md
+59
docs/utils.md
···
···
1
+
# utility functions
2
+
3
+
## `_utils.mkVhost`
4
+
`attrset -> attrset`
5
+
make a virtual host with sensible defaults
6
+
7
+
pass in a set to override the defaults.
8
+
9
+
### Example
10
+
```nix
11
+
services.nginx.virtualHosts."balls.example" = _utils.mkVhost {};
12
+
```
13
+
14
+
## `_utils.mkSimpleProxy`
15
+
`attrset -> attrset`
16
+
17
+
make a simple reverse proxy
18
+
19
+
takes a set:
20
+
```nix
21
+
{
22
+
port,
23
+
protocol ? "http",
24
+
location ? "/",
25
+
websockets ? false,
26
+
extraConfig ? {}
27
+
}
28
+
```
29
+
30
+
It is recommended to override/add attributes with `extraConfig` to
31
+
preserve defaults.
32
+
33
+
Items in `extraConfig` are merged verbatim to the base attrset with defaults.
34
+
They are overridden based on their order.
35
+
36
+
## `_utils.genSecrets`
37
+
`namespace[str] -> files[list[str]] -> value[attrset] -> attrset`
38
+
a
39
+
generate an attrset to be passed into sops.secrets.
40
+
41
+
### Example
42
+
```nix
43
+
{ _utils, ... }:
44
+
let
45
+
secrets = [
46
+
"secure_secret"
47
+
# this is a directory structure, so secrets will be stored as a file in /run/secrets/service/test/secret.
48
+
"service/test/secret"
49
+
];
50
+
in {
51
+
sops.secrets = _utils.genSecrets "" secrets {}; # it's recommended to use a namespace, but having none is still fine.
52
+
# -> sops.secrets."secure_secret" = {};
53
+
# sops.secrets."service/test/secret" = {};
54
+
sops.secrets = _utils.genSecrets "balls" ["balls_secret"] {owner = "balls"};
55
+
# -> sops.secrets."balls/balls_secret" = {owner = "balls";};
56
+
}
57
+
```
58
+
59
+
See https://github.com/soopyc/nix-on-koumakan/blob/b7983776143c15c91df69ef34ba4264a22047ec6/systems/koumakan/services/fedivese/akkoma.nix#L8-L34 for a more extensive example
-528
docs/vendor/highlight.min.js
-528
docs/vendor/highlight.min.js
···
1
-
/*!
2
-
Highlight.js v11.11.1 (git: d301848ccf)
3
-
(c) 2006-2025 Josh Goebel <hello@joshgoebel.com> and other contributors
4
-
License: BSD-3-Clause
5
-
*/
6
-
var hljs=function(){"use strict";function e(n){
7
-
return n instanceof Map?n.clear=n.delete=n.set=()=>{
8
-
throw Error("map is read-only")}:n instanceof Set&&(n.add=n.clear=n.delete=()=>{
9
-
throw Error("set is read-only")
10
-
}),Object.freeze(n),Object.getOwnPropertyNames(n).forEach((t=>{
11
-
const a=n[t],s=typeof a;"object"!==s&&"function"!==s||Object.isFrozen(a)||e(a)
12
-
})),n}class n{constructor(e){
13
-
void 0===e.data&&(e.data={}),this.data=e.data,this.isMatchIgnored=!1}
14
-
ignoreMatch(){this.isMatchIgnored=!0}}function t(e){
15
-
return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")
16
-
}function a(e,...n){const t=Object.create(null);for(const n in e)t[n]=e[n]
17
-
;return n.forEach((e=>{for(const n in e)t[n]=e[n]})),t}const s=e=>!!e.scope
18
-
;class i{constructor(e,n){
19
-
this.buffer="",this.classPrefix=n.classPrefix,e.walk(this)}addText(e){
20
-
this.buffer+=t(e)}openNode(e){if(!s(e))return;const n=((e,{prefix:n})=>{
21
-
if(e.startsWith("language:"))return e.replace("language:","language-")
22
-
;if(e.includes(".")){const t=e.split(".")
23
-
;return[`${n}${t.shift()}`,...t.map(((e,n)=>`${e}${"_".repeat(n+1)}`))].join(" ")
24
-
}return`${n}${e}`})(e.scope,{prefix:this.classPrefix});this.span(n)}
25
-
closeNode(e){s(e)&&(this.buffer+="</span>")}value(){return this.buffer}span(e){
26
-
this.buffer+=`<span class="${e}">`}}const r=(e={})=>{const n={children:[]}
27
-
;return Object.assign(n,e),n};class o{constructor(){
28
-
this.rootNode=r(),this.stack=[this.rootNode]}get top(){
29
-
return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){
30
-
this.top.children.push(e)}openNode(e){const n=r({scope:e})
31
-
;this.add(n),this.stack.push(n)}closeNode(){
32
-
if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){
33
-
for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}
34
-
walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,n){
35
-
return"string"==typeof n?e.addText(n):n.children&&(e.openNode(n),
36
-
n.children.forEach((n=>this._walk(e,n))),e.closeNode(n)),e}static _collapse(e){
37
-
"string"!=typeof e&&e.children&&(e.children.every((e=>"string"==typeof e))?e.children=[e.children.join("")]:e.children.forEach((e=>{
38
-
o._collapse(e)})))}}class c extends o{constructor(e){super(),this.options=e}
39
-
addText(e){""!==e&&this.add(e)}startScope(e){this.openNode(e)}endScope(){
40
-
this.closeNode()}__addSublanguage(e,n){const t=e.root
41
-
;n&&(t.scope="language:"+n),this.add(t)}toHTML(){
42
-
return new i(this,this.options).value()}finalize(){
43
-
return this.closeAllNodes(),!0}}function l(e){
44
-
return e?"string"==typeof e?e:e.source:null}function d(e){return h("(?=",e,")")}
45
-
function g(e){return h("(?:",e,")*")}function u(e){return h("(?:",e,")?")}
46
-
function h(...e){return e.map((e=>l(e))).join("")}function b(...e){const n=(e=>{
47
-
const n=e[e.length-1]
48
-
;return"object"==typeof n&&n.constructor===Object?(e.splice(e.length-1,1),n):{}
49
-
})(e);return"("+(n.capture?"":"?:")+e.map((e=>l(e))).join("|")+")"}
50
-
function p(e){return RegExp(e.toString()+"|").exec("").length-1}
51
-
const m=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./
52
-
;function f(e,{joinWith:n}){let t=0;return e.map((e=>{t+=1;const n=t
53
-
;let a=l(e),s="";for(;a.length>0;){const e=m.exec(a);if(!e){s+=a;break}
54
-
s+=a.substring(0,e.index),
55
-
a=a.substring(e.index+e[0].length),"\\"===e[0][0]&&e[1]?s+="\\"+(Number(e[1])+n):(s+=e[0],
56
-
"("===e[0]&&t++)}return s})).map((e=>`(${e})`)).join(n)}
57
-
const E="[a-zA-Z]\\w*",_="[a-zA-Z_]\\w*",y="\\b\\d+(\\.\\d+)?",w="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",N="\\b(0b[01]+)",S={
58
-
begin:"\\\\[\\s\\S]",relevance:0},v={scope:"string",begin:"'",end:"'",
59
-
illegal:"\\n",contains:[S]},x={scope:"string",begin:'"',end:'"',illegal:"\\n",
60
-
contains:[S]},A=(e,n,t={})=>{const s=a({scope:"comment",begin:e,end:n,
61
-
contains:[]},t);s.contains.push({scope:"doctag",
62
-
begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",
63
-
end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0})
64
-
;const i=b("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/)
65
-
;return s.contains.push({begin:h(/[ ]+/,"(",i,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),s
66
-
},k=A("//","$"),O=A("/\\*","\\*/"),R=A("#","$");var M=Object.freeze({
67
-
__proto__:null,APOS_STRING_MODE:v,BACKSLASH_ESCAPE:S,BINARY_NUMBER_MODE:{
68
-
scope:"number",begin:N,relevance:0},BINARY_NUMBER_RE:N,COMMENT:A,
69
-
C_BLOCK_COMMENT_MODE:O,C_LINE_COMMENT_MODE:k,C_NUMBER_MODE:{scope:"number",
70
-
begin:w,relevance:0},C_NUMBER_RE:w,END_SAME_AS_BEGIN:e=>Object.assign(e,{
71
-
"on:begin":(e,n)=>{n.data._beginMatch=e[1]},"on:end":(e,n)=>{
72
-
n.data._beginMatch!==e[1]&&n.ignoreMatch()}}),HASH_COMMENT_MODE:R,IDENT_RE:E,
73
-
MATCH_NOTHING_RE:/\b\B/,METHOD_GUARD:{begin:"\\.\\s*"+_,relevance:0},
74
-
NUMBER_MODE:{scope:"number",begin:y,relevance:0},NUMBER_RE:y,
75
-
PHRASAL_WORDS_MODE:{
76
-
begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/
77
-
},QUOTE_STRING_MODE:x,REGEXP_MODE:{scope:"regexp",begin:/\/(?=[^/\n]*\/)/,
78
-
end:/\/[gimuy]*/,contains:[S,{begin:/\[/,end:/\]/,relevance:0,contains:[S]}]},
79
-
RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",
80
-
SHEBANG:(e={})=>{const n=/^#![ ]*\//
81
-
;return e.binary&&(e.begin=h(n,/.*\b/,e.binary,/\b.*/)),a({scope:"meta",begin:n,
82
-
end:/$/,relevance:0,"on:begin":(e,n)=>{0!==e.index&&n.ignoreMatch()}},e)},
83
-
TITLE_MODE:{scope:"title",begin:E,relevance:0},UNDERSCORE_IDENT_RE:_,
84
-
UNDERSCORE_TITLE_MODE:{scope:"title",begin:_,relevance:0}});function T(e,n){
85
-
"."===e.input[e.index-1]&&n.ignoreMatch()}function I(e,n){
86
-
void 0!==e.className&&(e.scope=e.className,delete e.className)}function C(e,n){
87
-
n&&e.beginKeywords&&(e.begin="\\b("+e.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",
88
-
e.__beforeBegin=T,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords,
89
-
void 0===e.relevance&&(e.relevance=0))}function B(e,n){
90
-
Array.isArray(e.illegal)&&(e.illegal=b(...e.illegal))}function $(e,n){
91
-
if(e.match){
92
-
if(e.begin||e.end)throw Error("begin & end are not supported with match")
93
-
;e.begin=e.match,delete e.match}}function L(e,n){
94
-
void 0===e.relevance&&(e.relevance=1)}const D=(e,n)=>{if(!e.beforeMatch)return
95
-
;if(e.starts)throw Error("beforeMatch cannot be used with starts")
96
-
;const t=Object.assign({},e);Object.keys(e).forEach((n=>{delete e[n]
97
-
})),e.keywords=t.keywords,e.begin=h(t.beforeMatch,d(t.begin)),e.starts={
98
-
relevance:0,contains:[Object.assign(t,{endsParent:!0})]
99
-
},e.relevance=0,delete t.beforeMatch
100
-
},j=["of","and","for","in","not","or","if","then","parent","list","value"]
101
-
;function P(e,n,t="keyword"){const a=Object.create(null)
102
-
;return"string"==typeof e?s(t,e.split(" ")):Array.isArray(e)?s(t,e):Object.keys(e).forEach((t=>{
103
-
Object.assign(a,P(e[t],n,t))})),a;function s(e,t){
104
-
n&&(t=t.map((e=>e.toLowerCase()))),t.forEach((n=>{const t=n.split("|")
105
-
;a[t[0]]=[e,z(t[0],t[1])]}))}}function z(e,n){
106
-
return n?Number(n):(e=>j.includes(e.toLowerCase()))(e)?0:1}const H={},U=e=>{
107
-
console.error(e)},F=(e,...n)=>{console.log("WARN: "+e,...n)},Z=(e,n)=>{
108
-
H[`${e}/${n}`]||(console.log(`Deprecated as of ${e}. ${n}`),H[`${e}/${n}`]=!0)
109
-
},K=Error();function G(e,n,{key:t}){let a=0;const s=e[t],i={},r={}
110
-
;for(let e=1;e<=n.length;e++)r[e+a]=s[e],i[e+a]=!0,a+=p(n[e-1])
111
-
;e[t]=r,e[t]._emit=i,e[t]._multi=!0}function q(e){(e=>{
112
-
e.scope&&"object"==typeof e.scope&&null!==e.scope&&(e.beginScope=e.scope,
113
-
delete e.scope)})(e),"string"==typeof e.beginScope&&(e.beginScope={
114
-
_wrap:e.beginScope}),"string"==typeof e.endScope&&(e.endScope={_wrap:e.endScope
115
-
}),(e=>{if(Array.isArray(e.begin)){
116
-
if(e.skip||e.excludeBegin||e.returnBegin)throw U("skip, excludeBegin, returnBegin not compatible with beginScope: {}"),
117
-
K
118
-
;if("object"!=typeof e.beginScope||null===e.beginScope)throw U("beginScope must be object"),
119
-
K;G(e,e.begin,{key:"beginScope"}),e.begin=f(e.begin,{joinWith:""})}})(e),(e=>{
120
-
if(Array.isArray(e.end)){
121
-
if(e.skip||e.excludeEnd||e.returnEnd)throw U("skip, excludeEnd, returnEnd not compatible with endScope: {}"),
122
-
K
123
-
;if("object"!=typeof e.endScope||null===e.endScope)throw U("endScope must be object"),
124
-
K;G(e,e.end,{key:"endScope"}),e.end=f(e.end,{joinWith:""})}})(e)}function W(e){
125
-
function n(n,t){
126
-
return RegExp(l(n),"m"+(e.case_insensitive?"i":"")+(e.unicodeRegex?"u":"")+(t?"g":""))
127
-
}class t{constructor(){
128
-
this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}
129
-
addRule(e,n){
130
-
n.position=this.position++,this.matchIndexes[this.matchAt]=n,this.regexes.push([n,e]),
131
-
this.matchAt+=p(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null)
132
-
;const e=this.regexes.map((e=>e[1]));this.matcherRe=n(f(e,{joinWith:"|"
133
-
}),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex
134
-
;const n=this.matcherRe.exec(e);if(!n)return null
135
-
;const t=n.findIndex(((e,n)=>n>0&&void 0!==e)),a=this.matchIndexes[t]
136
-
;return n.splice(0,t),Object.assign(n,a)}}class s{constructor(){
137
-
this.rules=[],this.multiRegexes=[],
138
-
this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){
139
-
if(this.multiRegexes[e])return this.multiRegexes[e];const n=new t
140
-
;return this.rules.slice(e).forEach((([e,t])=>n.addRule(e,t))),
141
-
n.compile(),this.multiRegexes[e]=n,n}resumingScanAtSamePosition(){
142
-
return 0!==this.regexIndex}considerAll(){this.regexIndex=0}addRule(e,n){
143
-
this.rules.push([e,n]),"begin"===n.type&&this.count++}exec(e){
144
-
const n=this.getMatcher(this.regexIndex);n.lastIndex=this.lastIndex
145
-
;let t=n.exec(e)
146
-
;if(this.resumingScanAtSamePosition())if(t&&t.index===this.lastIndex);else{
147
-
const n=this.getMatcher(0);n.lastIndex=this.lastIndex+1,t=n.exec(e)}
148
-
return t&&(this.regexIndex+=t.position+1,
149
-
this.regexIndex===this.count&&this.considerAll()),t}}
150
-
if(e.compilerExtensions||(e.compilerExtensions=[]),
151
-
e.contains&&e.contains.includes("self"))throw Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.")
152
-
;return e.classNameAliases=a(e.classNameAliases||{}),function t(i,r){const o=i
153
-
;if(i.isCompiled)return o
154
-
;[I,$,q,D].forEach((e=>e(i,r))),e.compilerExtensions.forEach((e=>e(i,r))),
155
-
i.__beforeBegin=null,[C,B,L].forEach((e=>e(i,r))),i.isCompiled=!0;let c=null
156
-
;return"object"==typeof i.keywords&&i.keywords.$pattern&&(i.keywords=Object.assign({},i.keywords),
157
-
c=i.keywords.$pattern,
158
-
delete i.keywords.$pattern),c=c||/\w+/,i.keywords&&(i.keywords=P(i.keywords,e.case_insensitive)),
159
-
o.keywordPatternRe=n(c,!0),
160
-
r&&(i.begin||(i.begin=/\B|\b/),o.beginRe=n(o.begin),i.end||i.endsWithParent||(i.end=/\B|\b/),
161
-
i.end&&(o.endRe=n(o.end)),
162
-
o.terminatorEnd=l(o.end)||"",i.endsWithParent&&r.terminatorEnd&&(o.terminatorEnd+=(i.end?"|":"")+r.terminatorEnd)),
163
-
i.illegal&&(o.illegalRe=n(i.illegal)),
164
-
i.contains||(i.contains=[]),i.contains=[].concat(...i.contains.map((e=>(e=>(e.variants&&!e.cachedVariants&&(e.cachedVariants=e.variants.map((n=>a(e,{
165
-
variants:null},n)))),e.cachedVariants?e.cachedVariants:X(e)?a(e,{
166
-
starts:e.starts?a(e.starts):null
167
-
}):Object.isFrozen(e)?a(e):e))("self"===e?i:e)))),i.contains.forEach((e=>{t(e,o)
168
-
})),i.starts&&t(i.starts,r),o.matcher=(e=>{const n=new s
169
-
;return e.contains.forEach((e=>n.addRule(e.begin,{rule:e,type:"begin"
170
-
}))),e.terminatorEnd&&n.addRule(e.terminatorEnd,{type:"end"
171
-
}),e.illegal&&n.addRule(e.illegal,{type:"illegal"}),n})(o),o}(e)}function X(e){
172
-
return!!e&&(e.endsWithParent||X(e.starts))}class V extends Error{
173
-
constructor(e,n){super(e),this.name="HTMLInjectionError",this.html=n}}
174
-
const J=t,Q=a,Y=Symbol("nomatch"),ee=t=>{
175
-
const a=Object.create(null),s=Object.create(null),i=[];let r=!0
176
-
;const o="Could not find the language '{}', did you forget to load/include a language module?",l={
177
-
disableAutodetect:!0,name:"Plain text",contains:[]};let p={
178
-
ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i,
179
-
languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",
180
-
cssSelector:"pre code",languages:null,__emitter:c};function m(e){
181
-
return p.noHighlightRe.test(e)}function f(e,n,t){let a="",s=""
182
-
;"object"==typeof n?(a=e,
183
-
t=n.ignoreIllegals,s=n.language):(Z("10.7.0","highlight(lang, code, ...args) has been deprecated."),
184
-
Z("10.7.0","Please use highlight(code, options) instead.\nhttps://github.com/highlightjs/highlight.js/issues/2277"),
185
-
s=e,a=n),void 0===t&&(t=!0);const i={code:a,language:s};A("before:highlight",i)
186
-
;const r=i.result?i.result:E(i.language,i.code,t)
187
-
;return r.code=i.code,A("after:highlight",r),r}function E(e,t,s,i){
188
-
const c=Object.create(null);function l(){if(!A.keywords)return void O.addText(R)
189
-
;let e=0;A.keywordPatternRe.lastIndex=0;let n=A.keywordPatternRe.exec(R),t=""
190
-
;for(;n;){t+=R.substring(e,n.index)
191
-
;const s=N.case_insensitive?n[0].toLowerCase():n[0],i=(a=s,A.keywords[a]);if(i){
192
-
const[e,a]=i
193
-
;if(O.addText(t),t="",c[s]=(c[s]||0)+1,c[s]<=7&&(M+=a),e.startsWith("_"))t+=n[0];else{
194
-
const t=N.classNameAliases[e]||e;g(n[0],t)}}else t+=n[0]
195
-
;e=A.keywordPatternRe.lastIndex,n=A.keywordPatternRe.exec(R)}var a
196
-
;t+=R.substring(e),O.addText(t)}function d(){null!=A.subLanguage?(()=>{
197
-
if(""===R)return;let e=null;if("string"==typeof A.subLanguage){
198
-
if(!a[A.subLanguage])return void O.addText(R)
199
-
;e=E(A.subLanguage,R,!0,k[A.subLanguage]),k[A.subLanguage]=e._top
200
-
}else e=_(R,A.subLanguage.length?A.subLanguage:null)
201
-
;A.relevance>0&&(M+=e.relevance),O.__addSublanguage(e._emitter,e.language)
202
-
})():l(),R=""}function g(e,n){
203
-
""!==e&&(O.startScope(n),O.addText(e),O.endScope())}function u(e,n){let t=1
204
-
;const a=n.length-1;for(;t<=a;){if(!e._emit[t]){t++;continue}
205
-
const a=N.classNameAliases[e[t]]||e[t],s=n[t];a?g(s,a):(R=s,l(),R=""),t++}}
206
-
function h(e,n){
207
-
return e.scope&&"string"==typeof e.scope&&O.openNode(N.classNameAliases[e.scope]||e.scope),
208
-
e.beginScope&&(e.beginScope._wrap?(g(R,N.classNameAliases[e.beginScope._wrap]||e.beginScope._wrap),
209
-
R=""):e.beginScope._multi&&(u(e.beginScope,n),R="")),A=Object.create(e,{parent:{
210
-
value:A}}),A}function b(e,t,a){let s=((e,n)=>{const t=e&&e.exec(n)
211
-
;return t&&0===t.index})(e.endRe,a);if(s){if(e["on:end"]){const a=new n(e)
212
-
;e["on:end"](t,a),a.isMatchIgnored&&(s=!1)}if(s){
213
-
for(;e.endsParent&&e.parent;)e=e.parent;return e}}
214
-
if(e.endsWithParent)return b(e.parent,t,a)}function m(e){
215
-
return 0===A.matcher.regexIndex?(R+=e[0],1):(C=!0,0)}function f(e){
216
-
const n=e[0],a=t.substring(e.index),s=b(A,e,a);if(!s)return Y;const i=A
217
-
;A.endScope&&A.endScope._wrap?(d(),
218
-
g(n,A.endScope._wrap)):A.endScope&&A.endScope._multi?(d(),
219
-
u(A.endScope,e)):i.skip?R+=n:(i.returnEnd||i.excludeEnd||(R+=n),
220
-
d(),i.excludeEnd&&(R=n));do{
221
-
A.scope&&O.closeNode(),A.skip||A.subLanguage||(M+=A.relevance),A=A.parent
222
-
}while(A!==s.parent);return s.starts&&h(s.starts,e),i.returnEnd?0:n.length}
223
-
let y={};function w(a,i){const o=i&&i[0];if(R+=a,null==o)return d(),0
224
-
;if("begin"===y.type&&"end"===i.type&&y.index===i.index&&""===o){
225
-
if(R+=t.slice(i.index,i.index+1),!r){const n=Error(`0 width match regex (${e})`)
226
-
;throw n.languageName=e,n.badRule=y.rule,n}return 1}
227
-
if(y=i,"begin"===i.type)return(e=>{
228
-
const t=e[0],a=e.rule,s=new n(a),i=[a.__beforeBegin,a["on:begin"]]
229
-
;for(const n of i)if(n&&(n(e,s),s.isMatchIgnored))return m(t)
230
-
;return a.skip?R+=t:(a.excludeBegin&&(R+=t),
231
-
d(),a.returnBegin||a.excludeBegin||(R=t)),h(a,e),a.returnBegin?0:t.length})(i)
232
-
;if("illegal"===i.type&&!s){
233
-
const e=Error('Illegal lexeme "'+o+'" for mode "'+(A.scope||"<unnamed>")+'"')
234
-
;throw e.mode=A,e}if("end"===i.type){const e=f(i);if(e!==Y)return e}
235
-
if("illegal"===i.type&&""===o)return i.index===t.length||(R+="\n"),1
236
-
;if(I>1e5&&I>3*i.index)throw Error("potential infinite loop, way more iterations than matches")
237
-
;return R+=o,o.length}const N=S(e)
238
-
;if(!N)throw U(o.replace("{}",e)),Error('Unknown language: "'+e+'"')
239
-
;const v=W(N);let x="",A=i||v;const k={},O=new p.__emitter(p);(()=>{const e=[]
240
-
;for(let n=A;n!==N;n=n.parent)n.scope&&e.unshift(n.scope)
241
-
;e.forEach((e=>O.openNode(e)))})();let R="",M=0,T=0,I=0,C=!1;try{
242
-
if(N.__emitTokens)N.__emitTokens(t,O);else{for(A.matcher.considerAll();;){
243
-
I++,C?C=!1:A.matcher.considerAll(),A.matcher.lastIndex=T
244
-
;const e=A.matcher.exec(t);if(!e)break;const n=w(t.substring(T,e.index),e)
245
-
;T=e.index+n}w(t.substring(T))}return O.finalize(),x=O.toHTML(),{language:e,
246
-
value:x,relevance:M,illegal:!1,_emitter:O,_top:A}}catch(n){
247
-
if(n.message&&n.message.includes("Illegal"))return{language:e,value:J(t),
248
-
illegal:!0,relevance:0,_illegalBy:{message:n.message,index:T,
249
-
context:t.slice(T-100,T+100),mode:n.mode,resultSoFar:x},_emitter:O};if(r)return{
250
-
language:e,value:J(t),illegal:!1,relevance:0,errorRaised:n,_emitter:O,_top:A}
251
-
;throw n}}function _(e,n){n=n||p.languages||Object.keys(a);const t=(e=>{
252
-
const n={value:J(e),illegal:!1,relevance:0,_top:l,_emitter:new p.__emitter(p)}
253
-
;return n._emitter.addText(e),n})(e),s=n.filter(S).filter(x).map((n=>E(n,e,!1)))
254
-
;s.unshift(t);const i=s.sort(((e,n)=>{
255
-
if(e.relevance!==n.relevance)return n.relevance-e.relevance
256
-
;if(e.language&&n.language){if(S(e.language).supersetOf===n.language)return 1
257
-
;if(S(n.language).supersetOf===e.language)return-1}return 0})),[r,o]=i,c=r
258
-
;return c.secondBest=o,c}function y(e){let n=null;const t=(e=>{
259
-
let n=e.className+" ";n+=e.parentNode?e.parentNode.className:""
260
-
;const t=p.languageDetectRe.exec(n);if(t){const n=S(t[1])
261
-
;return n||(F(o.replace("{}",t[1])),
262
-
F("Falling back to no-highlight mode for this block.",e)),n?t[1]:"no-highlight"}
263
-
return n.split(/\s+/).find((e=>m(e)||S(e)))})(e);if(m(t))return
264
-
;if(A("before:highlightElement",{el:e,language:t
265
-
}),e.dataset.highlighted)return void console.log("Element previously highlighted. To highlight again, first unset `dataset.highlighted`.",e)
266
-
;if(e.children.length>0&&(p.ignoreUnescapedHTML||(console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."),
267
-
console.warn("https://github.com/highlightjs/highlight.js/wiki/security"),
268
-
console.warn("The element with unescaped HTML:"),
269
-
console.warn(e)),p.throwUnescapedHTML))throw new V("One of your code blocks includes unescaped HTML.",e.innerHTML)
270
-
;n=e;const a=n.textContent,i=t?f(a,{language:t,ignoreIllegals:!0}):_(a)
271
-
;e.innerHTML=i.value,e.dataset.highlighted="yes",((e,n,t)=>{const a=n&&s[n]||t
272
-
;e.classList.add("hljs"),e.classList.add("language-"+a)
273
-
})(e,t,i.language),e.result={language:i.language,re:i.relevance,
274
-
relevance:i.relevance},i.secondBest&&(e.secondBest={
275
-
language:i.secondBest.language,relevance:i.secondBest.relevance
276
-
}),A("after:highlightElement",{el:e,result:i,text:a})}let w=!1;function N(){
277
-
if("loading"===document.readyState)return w||window.addEventListener("DOMContentLoaded",(()=>{
278
-
N()}),!1),void(w=!0);document.querySelectorAll(p.cssSelector).forEach(y)}
279
-
function S(e){return e=(e||"").toLowerCase(),a[e]||a[s[e]]}
280
-
function v(e,{languageName:n}){"string"==typeof e&&(e=[e]),e.forEach((e=>{
281
-
s[e.toLowerCase()]=n}))}function x(e){const n=S(e)
282
-
;return n&&!n.disableAutodetect}function A(e,n){const t=e;i.forEach((e=>{
283
-
e[t]&&e[t](n)}))}Object.assign(t,{highlight:f,highlightAuto:_,highlightAll:N,
284
-
highlightElement:y,
285
-
highlightBlock:e=>(Z("10.7.0","highlightBlock will be removed entirely in v12.0"),
286
-
Z("10.7.0","Please use highlightElement now."),y(e)),configure:e=>{p=Q(p,e)},
287
-
initHighlighting:()=>{
288
-
N(),Z("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")},
289
-
initHighlightingOnLoad:()=>{
290
-
N(),Z("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.")
291
-
},registerLanguage:(e,n)=>{let s=null;try{s=n(t)}catch(n){
292
-
if(U("Language definition for '{}' could not be registered.".replace("{}",e)),
293
-
!r)throw n;U(n),s=l}
294
-
s.name||(s.name=e),a[e]=s,s.rawDefinition=n.bind(null,t),s.aliases&&v(s.aliases,{
295
-
languageName:e})},unregisterLanguage:e=>{delete a[e]
296
-
;for(const n of Object.keys(s))s[n]===e&&delete s[n]},
297
-
listLanguages:()=>Object.keys(a),getLanguage:S,registerAliases:v,
298
-
autoDetection:x,inherit:Q,addPlugin:e=>{(e=>{
299
-
e["before:highlightBlock"]&&!e["before:highlightElement"]&&(e["before:highlightElement"]=n=>{
300
-
e["before:highlightBlock"](Object.assign({block:n.el},n))
301
-
}),e["after:highlightBlock"]&&!e["after:highlightElement"]&&(e["after:highlightElement"]=n=>{
302
-
e["after:highlightBlock"](Object.assign({block:n.el},n))})})(e),i.push(e)},
303
-
removePlugin:e=>{const n=i.indexOf(e);-1!==n&&i.splice(n,1)}}),t.debugMode=()=>{
304
-
r=!1},t.safeMode=()=>{r=!0},t.versionString="11.11.1",t.regex={concat:h,
305
-
lookahead:d,either:b,optional:u,anyNumberOfTimes:g}
306
-
;for(const n in M)"object"==typeof M[n]&&e(M[n]);return Object.assign(t,M),t
307
-
},ne=ee({});ne.newInstance=()=>ee({})
308
-
;const te="[A-Za-z$_][0-9A-Za-z$_]*",ae=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends","using"],se=["true","false","null","undefined","NaN","Infinity"],ie=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],re=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],oe=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],ce=["arguments","this","super","console","window","document","localStorage","sessionStorage","module","global"],le=[].concat(oe,ie,re)
309
-
;var de=Object.freeze({__proto__:null,grmr_bash:e=>{const n=e.regex,t={},a={
310
-
begin:/\$\{/,end:/\}/,contains:["self",{begin:/:-/,contains:[t]}]}
311
-
;Object.assign(t,{className:"variable",variants:[{
312
-
begin:n.concat(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},a]});const s={
313
-
className:"subst",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]
314
-
},i=e.inherit(e.COMMENT(),{match:[/(^|\s)/,/#.*$/],scope:{2:"comment"}}),r={
315
-
begin:/<<-?\s*(?=\w+)/,starts:{contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/,
316
-
end:/(\w+)/,className:"string"})]}},o={className:"string",begin:/"/,end:/"/,
317
-
contains:[e.BACKSLASH_ESCAPE,t,s]};s.contains.push(o);const c={begin:/\$?\(\(/,
318
-
end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},e.NUMBER_MODE,t]
319
-
},l=e.SHEBANG({binary:"(fish|bash|zsh|sh|csh|ksh|tcsh|dash|scsh)",relevance:10
320
-
}),d={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,
321
-
contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0};return{
322
-
name:"Bash",aliases:["sh","zsh"],keywords:{$pattern:/\b[a-z][a-z0-9._-]+\b/,
323
-
keyword:["if","then","else","elif","fi","time","for","while","until","in","do","done","case","esac","coproc","function","select"],
324
-
literal:["true","false"],
325
-
built_in:["break","cd","continue","eval","exec","exit","export","getopts","hash","pwd","readonly","return","shift","test","times","trap","umask","unset","alias","bind","builtin","caller","command","declare","echo","enable","help","let","local","logout","mapfile","printf","read","readarray","source","sudo","type","typeset","ulimit","unalias","set","shopt","autoload","bg","bindkey","bye","cap","chdir","clone","comparguments","compcall","compctl","compdescribe","compfiles","compgroups","compquote","comptags","comptry","compvalues","dirs","disable","disown","echotc","echoti","emulate","fc","fg","float","functions","getcap","getln","history","integer","jobs","kill","limit","log","noglob","popd","print","pushd","pushln","rehash","sched","setcap","setopt","stat","suspend","ttyctl","unfunction","unhash","unlimit","unsetopt","vared","wait","whence","where","which","zcompile","zformat","zftp","zle","zmodload","zparseopts","zprof","zpty","zregexparse","zsocket","zstyle","ztcp","chcon","chgrp","chown","chmod","cp","dd","df","dir","dircolors","ln","ls","mkdir","mkfifo","mknod","mktemp","mv","realpath","rm","rmdir","shred","sync","touch","truncate","vdir","b2sum","base32","base64","cat","cksum","comm","csplit","cut","expand","fmt","fold","head","join","md5sum","nl","numfmt","od","paste","ptx","pr","sha1sum","sha224sum","sha256sum","sha384sum","sha512sum","shuf","sort","split","sum","tac","tail","tr","tsort","unexpand","uniq","wc","arch","basename","chroot","date","dirname","du","echo","env","expr","factor","groups","hostid","id","link","logname","nice","nohup","nproc","pathchk","pinky","printenv","printf","pwd","readlink","runcon","seq","sleep","stat","stdbuf","stty","tee","test","timeout","tty","uname","unlink","uptime","users","who","whoami","yes"]
326
-
},contains:[l,e.SHEBANG(),d,c,i,r,{match:/(\/[a-z._-]+)+/},o,{match:/\\"/},{
327
-
className:"string",begin:/'/,end:/'/},{match:/\\'/},t]}},grmr_ini:e=>{
328
-
const n=e.regex,t={className:"number",relevance:0,variants:[{
329
-
begin:/([+-]+)?[\d]+_[\d_]+/},{begin:e.NUMBER_RE}]},a=e.COMMENT();a.variants=[{
330
-
begin:/;/,end:/$/},{begin:/#/,end:/$/}];const s={className:"variable",
331
-
variants:[{begin:/\$[\w\d"][\w\d_]*/},{begin:/\$\{(.*?)\}/}]},i={
332
-
className:"literal",begin:/\bon|off|true|false|yes|no\b/},r={className:"string",
333
-
contains:[e.BACKSLASH_ESCAPE],variants:[{begin:"'''",end:"'''",relevance:10},{
334
-
begin:'"""',end:'"""',relevance:10},{begin:'"',end:'"'},{begin:"'",end:"'"}]
335
-
},o={begin:/\[/,end:/\]/,contains:[a,i,s,r,t,"self"],relevance:0
336
-
},c=n.either(/[A-Za-z0-9_-]+/,/"(\\"|[^"])*"/,/'[^']*'/);return{
337
-
name:"TOML, also INI",aliases:["toml"],case_insensitive:!0,illegal:/\S/,
338
-
contains:[a,{className:"section",begin:/\[+/,end:/\]+/},{
339
-
begin:n.concat(c,"(\\s*\\.\\s*",c,")*",n.lookahead(/\s*=\s*[^#\s]/)),
340
-
className:"attr",starts:{end:/$/,contains:[a,o,i,s,r,t]}}]}},
341
-
grmr_javascript:e=>{const n=e.regex,t=te,a={begin:/<[A-Za-z0-9\\._:-]+/,
342
-
end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(e,n)=>{
343
-
const t=e[0].length+e.index,a=e.input[t]
344
-
;if("<"===a||","===a)return void n.ignoreMatch();let s
345
-
;">"===a&&(((e,{after:n})=>{const t="</"+e[0].slice(1)
346
-
;return-1!==e.input.indexOf(t,n)})(e,{after:t})||n.ignoreMatch())
347
-
;const i=e.input.substring(t)
348
-
;((s=i.match(/^\s*=/))||(s=i.match(/^\s+extends\s+/))&&0===s.index)&&n.ignoreMatch()
349
-
}},s={$pattern:te,keyword:ae,literal:se,built_in:le,"variable.language":ce
350
-
},i="[0-9](_?[0-9])*",r=`\\.(${i})`,o="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",c={
351
-
className:"number",variants:[{
352
-
begin:`(\\b(${o})((${r})|\\.)?|(${r}))[eE][+-]?(${i})\\b`},{
353
-
begin:`\\b(${o})\\b((${r})\\b|\\.)?|(${r})\\b`},{
354
-
begin:"\\b(0|[1-9](_?[0-9])*)n\\b"},{
355
-
begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{
356
-
begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{
357
-
begin:"\\b0[0-7]+n?\\b"}],relevance:0},l={className:"subst",begin:"\\$\\{",
358
-
end:"\\}",keywords:s,contains:[]},d={begin:".?html`",end:"",starts:{end:"`",
359
-
returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,l],subLanguage:"xml"}},g={
360
-
begin:".?css`",end:"",starts:{end:"`",returnEnd:!1,
361
-
contains:[e.BACKSLASH_ESCAPE,l],subLanguage:"css"}},u={begin:".?gql`",end:"",
362
-
starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,l],
363
-
subLanguage:"graphql"}},h={className:"string",begin:"`",end:"`",
364
-
contains:[e.BACKSLASH_ESCAPE,l]},b={className:"comment",
365
-
variants:[e.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{
366
-
begin:"(?=@[A-Za-z]+)",relevance:0,contains:[{className:"doctag",
367
-
begin:"@[A-Za-z]+"},{className:"type",begin:"\\{",end:"\\}",excludeEnd:!0,
368
-
excludeBegin:!0,relevance:0},{className:"variable",begin:t+"(?=\\s*(-)|$)",
369
-
endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]
370
-
}),e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE]
371
-
},p=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,d,g,u,h,{match:/\$\d+/},c]
372
-
;l.contains=p.concat({begin:/\{/,end:/\}/,keywords:s,contains:["self"].concat(p)
373
-
});const m=[].concat(b,l.contains),f=m.concat([{begin:/(\s*)\(/,end:/\)/,
374
-
keywords:s,contains:["self"].concat(m)}]),E={className:"params",begin:/(\s*)\(/,
375
-
end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:s,contains:f},_={variants:[{
376
-
match:[/class/,/\s+/,t,/\s+/,/extends/,/\s+/,n.concat(t,"(",n.concat(/\./,t),")*")],
377
-
scope:{1:"keyword",3:"title.class",5:"keyword",7:"title.class.inherited"}},{
378
-
match:[/class/,/\s+/,t],scope:{1:"keyword",3:"title.class"}}]},y={relevance:0,
379
-
match:n.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,/\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/),
380
-
className:"title.class",keywords:{_:[...ie,...re]}},w={variants:[{
381
-
match:[/function/,/\s+/,t,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],
382
-
className:{1:"keyword",3:"title.function"},label:"func.def",contains:[E],
383
-
illegal:/%/},N={
384
-
match:n.concat(/\b/,(S=[...oe,"super","import"].map((e=>e+"\\s*\\(")),
385
-
n.concat("(?!",S.join("|"),")")),t,n.lookahead(/\s*\(/)),
386
-
className:"title.function",relevance:0};var S;const v={
387
-
begin:n.concat(/\./,n.lookahead(n.concat(t,/(?![0-9A-Za-z$_(])/))),end:t,
388
-
excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},x={
389
-
match:[/get|set/,/\s+/,t,/(?=\()/],className:{1:"keyword",3:"title.function"},
390
-
contains:[{begin:/\(\)/},E]
391
-
},A="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+e.UNDERSCORE_IDENT_RE+")\\s*=>",k={
392
-
match:[/const|var|let/,/\s+/,t,/\s*/,/=\s*/,/(async\s*)?/,n.lookahead(A)],
393
-
keywords:"async",className:{1:"keyword",3:"title.function"},contains:[E]}
394
-
;return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:s,exports:{
395
-
PARAMS_CONTAINS:f,CLASS_REFERENCE:y},illegal:/#(?![$_A-z])/,
396
-
contains:[e.SHEBANG({label:"shebang",binary:"node",relevance:5}),{
397
-
label:"use_strict",className:"meta",relevance:10,
398
-
begin:/^\s*['"]use (strict|asm)['"]/
399
-
},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,d,g,u,h,b,{match:/\$\d+/},c,y,{
400
-
scope:"attr",match:t+n.lookahead(":"),relevance:0},k,{
401
-
begin:"("+e.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",
402
-
keywords:"return throw case",relevance:0,contains:[b,e.REGEXP_MODE,{
403
-
className:"function",begin:A,returnBegin:!0,end:"\\s*=>",contains:[{
404
-
className:"params",variants:[{begin:e.UNDERSCORE_IDENT_RE,relevance:0},{
405
-
className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/,
406
-
excludeBegin:!0,excludeEnd:!0,keywords:s,contains:f}]}]},{begin:/,/,relevance:0
407
-
},{match:/\s+/,relevance:0},{variants:[{begin:"<>",end:"</>"},{
408
-
match:/<[A-Za-z0-9\\._:-]+\s*\/>/},{begin:a.begin,
409
-
"on:begin":a.isTrulyOpeningTag,end:a.end}],subLanguage:"xml",contains:[{
410
-
begin:a.begin,end:a.end,skip:!0,contains:["self"]}]}]},w,{
411
-
beginKeywords:"while if switch catch for"},{
412
-
begin:"\\b(?!function)"+e.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",
413
-
returnBegin:!0,label:"func.def",contains:[E,e.inherit(e.TITLE_MODE,{begin:t,
414
-
className:"title.function"})]},{match:/\.\.\./,relevance:0},v,{match:"\\$"+t,
415
-
relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},
416
-
contains:[E]},N,{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,
417
-
className:"variable.constant"},_,x,{match:/\$[(.]/}]}},grmr_makefile:e=>{
418
-
const n={className:"variable",variants:[{
419
-
begin:"\\$\\("+e.UNDERSCORE_IDENT_RE+"\\)",contains:[e.BACKSLASH_ESCAPE]},{
420
-
begin:/\$[@%<?\^\+\*]/}]},t={className:"string",begin:/"/,end:/"/,
421
-
contains:[e.BACKSLASH_ESCAPE,n]},a={className:"variable",begin:/\$\([\w-]+\s/,
422
-
end:/\)/,keywords:{
423
-
built_in:"subst patsubst strip findstring filter filter-out sort word wordlist firstword lastword dir notdir suffix basename addsuffix addprefix join wildcard realpath abspath error warning shell origin flavor foreach if or and call eval file value"
424
-
},contains:[n,t]},s={begin:"^"+e.UNDERSCORE_IDENT_RE+"\\s*(?=[:+?]?=)"},i={
425
-
className:"section",begin:/^[^\s]+:/,end:/$/,contains:[n]};return{
426
-
name:"Makefile",aliases:["mk","mak","make"],keywords:{$pattern:/[\w-]+/,
427
-
keyword:"define endef undefine ifdef ifndef ifeq ifneq else endif include -include sinclude override export unexport private vpath"
428
-
},contains:[e.HASH_COMMENT_MODE,n,t,a,s,{className:"meta",begin:/^\.PHONY:/,
429
-
end:/$/,keywords:{$pattern:/[\.\w]+/,keyword:".PHONY"}},i]}},grmr_nix:e=>{
430
-
const n=e.regex,t={
431
-
keyword:["assert","else","if","in","inherit","let","or","rec","then","with"],
432
-
literal:["true","false","null"],
433
-
built_in:["abort","baseNameOf","builtins","derivation","derivationStrict","dirOf","fetchGit","fetchMercurial","fetchTarball","fetchTree","fromTOML","import","isNull","map","placeholder","removeAttrs","scopedImport","throw","toString"]
434
-
},a={scope:"built_in",
435
-
match:n.either(...["abort","add","addDrvOutputDependencies","addErrorContext","all","any","appendContext","attrNames","attrValues","baseNameOf","bitAnd","bitOr","bitXor","break","builtins","catAttrs","ceil","compareVersions","concatLists","concatMap","concatStringsSep","convertHash","currentSystem","currentTime","deepSeq","derivation","derivationStrict","dirOf","div","elem","elemAt","false","fetchGit","fetchMercurial","fetchTarball","fetchTree","fetchurl","filter","filterSource","findFile","flakeRefToString","floor","foldl'","fromJSON","fromTOML","functionArgs","genList","genericClosure","getAttr","getContext","getEnv","getFlake","groupBy","hasAttr","hasContext","hashFile","hashString","head","import","intersectAttrs","isAttrs","isBool","isFloat","isFunction","isInt","isList","isNull","isPath","isString","langVersion","length","lessThan","listToAttrs","map","mapAttrs","match","mul","nixPath","nixVersion","null","parseDrvName","parseFlakeRef","partition","path","pathExists","placeholder","readDir","readFile","readFileType","removeAttrs","replaceStrings","scopedImport","seq","sort","split","splitVersion","storeDir","storePath","stringLength","sub","substring","tail","throw","toFile","toJSON","toPath","toString","toXML","trace","traceVerbose","true","tryEval","typeOf","unsafeDiscardOutputDependency","unsafeDiscardStringContext","unsafeGetAttrPos","warn","zipAttrsWith"].map((e=>"builtins\\."+e))),
436
-
relevance:10},s="[A-Za-z_][A-Za-z0-9_'-]*",i={scope:"symbol",
437
-
match:RegExp(`<${s}(/${s})*>`)},r="[A-Za-z0-9_\\+\\.-]+",o={scope:"symbol",
438
-
match:RegExp(`(\\.\\.|\\.|~)?/(${r})?(/${r})*(?=[\\s;])`)
439
-
},c=n.either("==","=","\\+\\+","\\+","<=","<\\|","<",">=",">","->","//","/","!=","!","\\|\\|","\\|>","\\?","\\*","&&"),l={
440
-
scope:"operator",match:n.concat(c,/(?!-)/),relevance:0},d={scope:"number",
441
-
match:RegExp(e.NUMBER_RE+"(?!-)"),relevance:0},g={variants:[{scope:"operator",
442
-
beforeMatch:/\s/,begin:/-(?!>)/},{begin:[RegExp(""+e.NUMBER_RE),/-/,/(?!>)/],
443
-
beginScope:{1:"number",2:"operator"}},{begin:[c,/-/,/(?!>)/],beginScope:{
444
-
1:"operator",2:"operator"}}],relevance:0},u={beforeMatch:/(^|\{|;)\s*/,
445
-
begin:RegExp(`${s}(\\.${s})*\\s*=(?!=)`),returnBegin:!0,relevance:0,contains:[{
446
-
scope:"attr",match:RegExp(`${s}(\\.${s})*(?=\\s*=)`),relevance:.2}]},h={
447
-
scope:"subst",begin:/\$\{/,end:/\}/,keywords:t},b={scope:"char.escape",
448
-
match:/\\(?!\$)./},p={scope:"string",variants:[{begin:"''",end:"''",contains:[{
449
-
scope:"char.escape",match:/''\$/},h,{scope:"char.escape",match:/'''/},b]},{
450
-
begin:'"',end:'"',contains:[{scope:"char.escape",match:/\\\$/},h,b]}]},m={
451
-
scope:"params",match:RegExp(s+"\\s*:(?=\\s)")
452
-
},f=[d,e.HASH_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.COMMENT(/\/\*\*(?!\/)/,/\*\//,{
453
-
subLanguage:"markdown",relevance:0}),a,p,i,o,m,u,g,l];return h.contains=f,{
454
-
name:"Nix",aliases:["nixos"],keywords:t,contains:f.concat([{scope:"meta.prompt",
455
-
match:/^nix-repl>(?=\s)/,relevance:10},{scope:"meta",beforeMatch:/\s+/,
456
-
begin:/:([a-z]+|\?)/}])}},grmr_python:e=>{
457
-
const n=e.regex,t=/[\p{XID_Start}_]\p{XID_Continue}*/u,a=["and","as","assert","async","await","break","case","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","in","is","lambda","match","nonlocal|10","not","or","pass","raise","return","try","while","with","yield"],s={
458
-
$pattern:/[A-Za-z]\w+|__\w+__/,keyword:a,
459
-
built_in:["__import__","abs","all","any","ascii","bin","bool","breakpoint","bytearray","bytes","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","exec","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","print","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip"],
460
-
literal:["__debug__","Ellipsis","False","None","NotImplemented","True"],
461
-
type:["Any","Callable","Coroutine","Dict","List","Literal","Generic","Optional","Sequence","Set","Tuple","Type","Union"]
462
-
},i={className:"meta",begin:/^(>>>|\.\.\.) /},r={className:"subst",begin:/\{/,
463
-
end:/\}/,keywords:s,illegal:/#/},o={begin:/\{\{/,relevance:0},c={
464
-
className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{
465
-
begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,end:/'''/,
466
-
contains:[e.BACKSLASH_ESCAPE,i],relevance:10},{
467
-
begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?"""/,end:/"""/,
468
-
contains:[e.BACKSLASH_ESCAPE,i],relevance:10},{
469
-
begin:/([fF][rR]|[rR][fF]|[fF])'''/,end:/'''/,
470
-
contains:[e.BACKSLASH_ESCAPE,i,o,r]},{begin:/([fF][rR]|[rR][fF]|[fF])"""/,
471
-
end:/"""/,contains:[e.BACKSLASH_ESCAPE,i,o,r]},{begin:/([uU]|[rR])'/,end:/'/,
472
-
relevance:10},{begin:/([uU]|[rR])"/,end:/"/,relevance:10},{
473
-
begin:/([bB]|[bB][rR]|[rR][bB])'/,end:/'/},{begin:/([bB]|[bB][rR]|[rR][bB])"/,
474
-
end:/"/},{begin:/([fF][rR]|[rR][fF]|[fF])'/,end:/'/,
475
-
contains:[e.BACKSLASH_ESCAPE,o,r]},{begin:/([fF][rR]|[rR][fF]|[fF])"/,end:/"/,
476
-
contains:[e.BACKSLASH_ESCAPE,o,r]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]
477
-
},l="[0-9](_?[0-9])*",d=`(\\b(${l}))?\\.(${l})|\\b(${l})\\.`,g="\\b|"+a.join("|"),u={
478
-
className:"number",relevance:0,variants:[{
479
-
begin:`(\\b(${l})|(${d}))[eE][+-]?(${l})[jJ]?(?=${g})`},{begin:`(${d})[jJ]?`},{
480
-
begin:`\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${g})`},{
481
-
begin:`\\b0[bB](_?[01])+[lL]?(?=${g})`},{begin:`\\b0[oO](_?[0-7])+[lL]?(?=${g})`
482
-
},{begin:`\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${g})`},{begin:`\\b(${l})[jJ](?=${g})`
483
-
}]},h={className:"comment",begin:n.lookahead(/# type:/),end:/$/,keywords:s,
484
-
contains:[{begin:/# type:/},{begin:/#/,end:/\b\B/,endsWithParent:!0}]},b={
485
-
className:"params",variants:[{className:"",begin:/\(\s*\)/,skip:!0},{begin:/\(/,
486
-
end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:s,
487
-
contains:["self",i,u,c,e.HASH_COMMENT_MODE]}]};return r.contains=[c,u,i],{
488
-
name:"Python",aliases:["py","gyp","ipython"],unicodeRegex:!0,keywords:s,
489
-
illegal:/(<\/|\?)|=>/,contains:[i,u,{scope:"variable.language",match:/\bself\b/
490
-
},{beginKeywords:"if",relevance:0},{match:/\bor\b/,scope:"keyword"
491
-
},c,h,e.HASH_COMMENT_MODE,{match:[/\bdef/,/\s+/,t],scope:{1:"keyword",
492
-
3:"title.function"},contains:[b]},{variants:[{
493
-
match:[/\bclass/,/\s+/,t,/\s*/,/\(\s*/,t,/\s*\)/]},{match:[/\bclass/,/\s+/,t]}],
494
-
scope:{1:"keyword",3:"title.class",6:"title.class.inherited"}},{
495
-
className:"meta",begin:/^[\t ]*@/,end:/(?=#)|$/,contains:[u,b,c]}]}},
496
-
grmr_python_repl:e=>({aliases:["pycon"],contains:[{className:"meta.prompt",
497
-
starts:{end:/ |$/,starts:{end:"$",subLanguage:"python"}},variants:[{
498
-
begin:/^>>>(?=[ ]|$)/},{begin:/^\.\.\.(?=[ ]|$)/}]}]}),grmr_rust:e=>{
499
-
const n=e.regex,t=/(r#)?/,a=n.concat(t,e.UNDERSCORE_IDENT_RE),s=n.concat(t,e.IDENT_RE),i={
500
-
className:"title.function.invoke",relevance:0,
501
-
begin:n.concat(/\b/,/(?!let|for|while|if|else|match\b)/,s,n.lookahead(/\s*\(/))
502
-
},r="([ui](8|16|32|64|128|size)|f(32|64))?",o=["drop ","Copy","Send","Sized","Sync","Drop","Fn","FnMut","FnOnce","ToOwned","Clone","Debug","PartialEq","PartialOrd","Eq","Ord","AsRef","AsMut","Into","From","Default","Iterator","Extend","IntoIterator","DoubleEndedIterator","ExactSizeIterator","SliceConcatExt","ToString","assert!","assert_eq!","bitflags!","bytes!","cfg!","col!","concat!","concat_idents!","debug_assert!","debug_assert_eq!","env!","eprintln!","panic!","file!","format!","format_args!","include_bytes!","include_str!","line!","local_data_key!","module_path!","option_env!","print!","println!","select!","stringify!","try!","unimplemented!","unreachable!","vec!","write!","writeln!","macro_rules!","assert_ne!","debug_assert_ne!"],c=["i8","i16","i32","i64","i128","isize","u8","u16","u32","u64","u128","usize","f32","f64","str","char","bool","Box","Option","Result","String","Vec"]
503
-
;return{name:"Rust",aliases:["rs"],keywords:{$pattern:e.IDENT_RE+"!?",type:c,
504
-
keyword:["abstract","as","async","await","become","box","break","const","continue","crate","do","dyn","else","enum","extern","false","final","fn","for","if","impl","in","let","loop","macro","match","mod","move","mut","override","priv","pub","ref","return","self","Self","static","struct","super","trait","true","try","type","typeof","union","unsafe","unsized","use","virtual","where","while","yield"],
505
-
literal:["true","false","Some","None","Ok","Err"],built_in:o},illegal:"</",
506
-
contains:[e.C_LINE_COMMENT_MODE,e.COMMENT("/\\*","\\*/",{contains:["self"]
507
-
}),e.inherit(e.QUOTE_STRING_MODE,{begin:/b?"/,illegal:null}),{
508
-
className:"symbol",begin:/'[a-zA-Z_][a-zA-Z0-9_]*(?!')/},{scope:"string",
509
-
variants:[{begin:/b?r(#*)"(.|\n)*?"\1(?!#)/},{begin:/b?'/,end:/'/,contains:[{
510
-
scope:"char.escape",match:/\\('|\w|x\w{2}|u\w{4}|U\w{8})/}]}]},{
511
-
className:"number",variants:[{begin:"\\b0b([01_]+)"+r},{begin:"\\b0o([0-7_]+)"+r
512
-
},{begin:"\\b0x([A-Fa-f0-9_]+)"+r},{
513
-
begin:"\\b(\\d[\\d_]*(\\.[0-9_]+)?([eE][+-]?[0-9_]+)?)"+r}],relevance:0},{
514
-
begin:[/fn/,/\s+/,a],className:{1:"keyword",3:"title.function"}},{
515
-
className:"meta",begin:"#!?\\[",end:"\\]",contains:[{className:"string",
516
-
begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE]}]},{
517
-
begin:[/let/,/\s+/,/(?:mut\s+)?/,a],className:{1:"keyword",3:"keyword",
518
-
4:"variable"}},{begin:[/for/,/\s+/,a,/\s+/,/in/],className:{1:"keyword",
519
-
3:"variable",5:"keyword"}},{begin:[/type/,/\s+/,a],className:{1:"keyword",
520
-
3:"title.class"}},{begin:[/(?:trait|enum|struct|union|impl|for)/,/\s+/,a],
521
-
className:{1:"keyword",3:"title.class"}},{begin:e.IDENT_RE+"::",keywords:{
522
-
keyword:"Self",built_in:o,type:c}},{className:"punctuation",begin:"->"},i]}},
523
-
grmr_shell:e=>({name:"Shell Session",aliases:["console","shellsession"],
524
-
contains:[{className:"meta.prompt",begin:/^\s{0,3}[/~\w\d[\]()@-]*[>%$#][ ]?/,
525
-
starts:{end:/[^\\](?=\s*$)/,subLanguage:"bash"}}]})});const ge=ne
526
-
;for(const e of Object.keys(de)){const n=e.replace("grmr_","").replace("_","-")
527
-
;ge.registerLanguage(n,de[e])}return ge}()
528
-
;"object"==typeof exports&&"undefined"!=typeof module&&(module.exports=hljs);
···
+181
-670
flake.lock
+181
-670
flake.lock
···
1
{
2
"nodes": {
3
-
"actor-typeahead-src": {
4
-
"flake": false,
5
-
"locked": {
6
-
"lastModified": 1762835797,
7
-
"narHash": "sha256-heizoWUKDdar6ymfZTnj3ytcEv/L4d4fzSmtr0HlXsQ=",
8
-
"ref": "refs/heads/main",
9
-
"rev": "677fe7f743050a4e7f09d4a6f87bbf1325a06f6b",
10
-
"revCount": 6,
11
-
"type": "git",
12
-
"url": "https://tangled.org/@jakelazaroff.com/actor-typeahead"
13
-
},
14
-
"original": {
15
-
"type": "git",
16
-
"url": "https://tangled.org/@jakelazaroff.com/actor-typeahead"
17
-
}
18
-
},
19
-
"arion": {
20
"inputs": {
21
-
"flake-parts": "flake-parts",
22
-
"haskell-flake": "haskell-flake",
23
"nixpkgs": [
24
"nixpkgs"
25
-
]
26
},
27
"locked": {
28
-
"lastModified": 1767581175,
29
-
"narHash": "sha256-d9ztdDD4EIbsGbERzXhg6Vlo7zMChjpZci4IrS0hSAY=",
30
-
"owner": "hercules-ci",
31
-
"repo": "arion",
32
-
"rev": "3534dd9d0f32c7dbee4f87378d4c95ffcd8838c5",
33
"type": "github"
34
},
35
"original": {
36
-
"owner": "hercules-ci",
37
-
"repo": "arion",
38
"type": "github"
39
}
40
},
41
-
"catppuccin": {
42
"inputs": {
43
-
"nixpkgs": "nixpkgs"
44
},
45
"locked": {
46
-
"lastModified": 1763111355,
47
-
"narHash": "sha256-iUTS8wV7tCo7A456Ro6ZOJ6Bbk0V5Is3zPd+BmJHJ/Q=",
48
-
"owner": "catppuccin",
49
-
"repo": "nix",
50
-
"rev": "5375a9d80c4b2a835c7203920f997f3ea4224423",
51
"type": "github"
52
},
53
"original": {
54
-
"owner": "catppuccin",
55
-
"ref": "release-25.05",
56
-
"repo": "nix",
57
"type": "github"
58
}
59
},
60
-
"crane": {
61
"locked": {
62
-
"lastModified": 1765145449,
63
-
"narHash": "sha256-aBVHGWWRzSpfL++LubA0CwOOQ64WNLegrYHwsVuVN7A=",
64
"owner": "ipetkov",
65
"repo": "crane",
66
-
"rev": "69f538cdce5955fcd47abfed4395dc6d5194c1c5",
67
"type": "github"
68
},
69
"original": {
···
75
"flake-compat": {
76
"flake": false,
77
"locked": {
78
-
"lastModified": 1761588595,
79
-
"narHash": "sha256-XKUZz9zewJNUj46b4AJdiRZJAvSZ0Dqj2BNfXvFlJC4=",
80
"owner": "edolstra",
81
"repo": "flake-compat",
82
-
"rev": "f387cd2afec9419c8ee37694406ca490c3f34ee5",
83
"type": "github"
84
},
85
"original": {
···
91
"flake-compat_2": {
92
"flake": false,
93
"locked": {
94
-
"lastModified": 1761588595,
95
-
"narHash": "sha256-XKUZz9zewJNUj46b4AJdiRZJAvSZ0Dqj2BNfXvFlJC4=",
96
"owner": "edolstra",
97
"repo": "flake-compat",
98
-
"rev": "f387cd2afec9419c8ee37694406ca490c3f34ee5",
99
"type": "github"
100
},
101
"original": {
···
107
"flake-compat_3": {
108
"flake": false,
109
"locked": {
110
-
"lastModified": 1761588595,
111
-
"narHash": "sha256-XKUZz9zewJNUj46b4AJdiRZJAvSZ0Dqj2BNfXvFlJC4=",
112
"owner": "edolstra",
113
"repo": "flake-compat",
114
-
"rev": "f387cd2afec9419c8ee37694406ca490c3f34ee5",
115
"type": "github"
116
},
117
"original": {
···
120
"type": "github"
121
}
122
},
123
-
"flake-compat_4": {
124
-
"flake": false,
125
-
"locked": {
126
-
"lastModified": 1751685974,
127
-
"narHash": "sha256-NKw96t+BgHIYzHUjkTK95FqYRVKB8DHpVhefWSz/kTw=",
128
-
"rev": "549f2762aebeff29a2e5ece7a7dc0f955281a1d1",
129
-
"type": "tarball",
130
-
"url": "https://git.lix.systems/api/v1/repos/lix-project/flake-compat/archive/549f2762aebeff29a2e5ece7a7dc0f955281a1d1.tar.gz?rev=549f2762aebeff29a2e5ece7a7dc0f955281a1d1"
131
-
},
132
-
"original": {
133
-
"type": "tarball",
134
-
"url": "https://git.lix.systems/lix-project/flake-compat/archive/main.tar.gz"
135
-
}
136
-
},
137
"flake-parts": {
138
"inputs": {
139
"nixpkgs-lib": [
140
-
"arion",
141
"nixpkgs"
142
]
143
},
144
"locked": {
145
-
"lastModified": 1765835352,
146
-
"narHash": "sha256-XswHlK/Qtjasvhd1nOa1e8MgZ8GS//jBoTqWtrS1Giw=",
147
"owner": "hercules-ci",
148
"repo": "flake-parts",
149
-
"rev": "a34fae9c08a15ad73f295041fec82323541400a9",
150
-
"type": "github"
151
-
},
152
-
"original": {
153
-
"owner": "hercules-ci",
154
-
"repo": "flake-parts",
155
-
"type": "github"
156
-
}
157
-
},
158
-
"flake-parts_2": {
159
-
"inputs": {
160
-
"nixpkgs-lib": [
161
-
"mystia",
162
-
"nix-update-soopy",
163
-
"nixpkgs"
164
-
]
165
-
},
166
-
"locked": {
167
-
"lastModified": 1698882062,
168
-
"narHash": "sha256-HkhafUayIqxXyHH1X8d9RDl1M2CkFgZLjKD3MzabiEo=",
169
-
"owner": "hercules-ci",
170
-
"repo": "flake-parts",
171
-
"rev": "8c9fa2545007b49a5db5f650ae91f227672c3877",
172
"type": "github"
173
},
174
"original": {
···
178
}
179
},
180
"flake-utils": {
181
-
"inputs": {
182
-
"systems": "systems"
183
-
},
184
"locked": {
185
-
"lastModified": 1731533236,
186
-
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
187
"owner": "numtide",
188
"repo": "flake-utils",
189
-
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
190
"type": "github"
191
},
192
"original": {
···
197
},
198
"flake-utils_2": {
199
"inputs": {
200
-
"systems": "systems_2"
201
},
202
"locked": {
203
-
"lastModified": 1731533236,
204
-
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
205
"owner": "numtide",
206
"repo": "flake-utils",
207
-
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
208
"type": "github"
209
},
210
"original": {
···
213
"type": "github"
214
}
215
},
216
-
"ghostty": {
217
-
"inputs": {
218
-
"flake-compat": "flake-compat",
219
-
"flake-utils": "flake-utils",
220
-
"home-manager": "home-manager",
221
-
"nixpkgs": "nixpkgs_2",
222
-
"zig": "zig",
223
-
"zon2nix": "zon2nix"
224
-
},
225
-
"locked": {
226
-
"lastModified": 1767798180,
227
-
"narHash": "sha256-rCwl7URLoGr/YDkJifsbLYPDreFwyshhVKPjdNufOUw=",
228
-
"owner": "ghostty-org",
229
-
"repo": "ghostty",
230
-
"rev": "ba1952c8c289d46be89c9a888c3c9aae97cf725b",
231
-
"type": "github"
232
-
},
233
-
"original": {
234
-
"owner": "ghostty-org",
235
-
"repo": "ghostty",
236
-
"type": "github"
237
-
}
238
-
},
239
"gitignore": {
240
"inputs": {
241
"nixpkgs": [
242
"lanzaboote",
243
-
"pre-commit",
244
"nixpkgs"
245
]
246
},
247
"locked": {
248
-
"lastModified": 1709087332,
249
-
"narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
250
"owner": "hercules-ci",
251
"repo": "gitignore.nix",
252
-
"rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
253
"type": "github"
254
},
255
"original": {
···
258
"type": "github"
259
}
260
},
261
-
"gomod2nix": {
262
-
"inputs": {
263
-
"flake-utils": "flake-utils_2",
264
-
"nixpkgs": [
265
-
"tangled-core",
266
-
"nixpkgs"
267
-
]
268
-
},
269
-
"locked": {
270
-
"lastModified": 1763982521,
271
-
"narHash": "sha256-ur4QIAHwgFc0vXiaxn5No/FuZicxBr2p0gmT54xZkUQ=",
272
-
"owner": "nix-community",
273
-
"repo": "gomod2nix",
274
-
"rev": "02e63a239d6eabd595db56852535992c898eba72",
275
-
"type": "github"
276
-
},
277
-
"original": {
278
-
"owner": "nix-community",
279
-
"repo": "gomod2nix",
280
-
"type": "github"
281
-
}
282
-
},
283
-
"haskell-flake": {
284
-
"locked": {
285
-
"lastModified": 1675296942,
286
-
"narHash": "sha256-u1X1sblozi5qYEcLp1hxcyo8FfDHnRUVX3dJ/tW19jY=",
287
-
"owner": "srid",
288
-
"repo": "haskell-flake",
289
-
"rev": "c2cafce9d57bfca41794dc3b99c593155006c71e",
290
-
"type": "github"
291
-
},
292
-
"original": {
293
-
"owner": "srid",
294
-
"ref": "0.1.0",
295
-
"repo": "haskell-flake",
296
-
"type": "github"
297
-
}
298
-
},
299
"home-manager": {
300
"inputs": {
301
"nixpkgs": [
302
-
"ghostty",
303
"nixpkgs"
304
]
305
},
306
"locked": {
307
-
"lastModified": 1755776884,
308
-
"narHash": "sha256-CPM7zm6csUx7vSfKvzMDIjepEJv1u/usmaT7zydzbuI=",
309
"owner": "nix-community",
310
"repo": "home-manager",
311
-
"rev": "4fb695d10890e9fc6a19deadf85ff79ffb78da86",
312
"type": "github"
313
},
314
"original": {
315
"owner": "nix-community",
316
-
"ref": "release-25.05",
317
"repo": "home-manager",
318
"type": "github"
319
}
320
},
321
-
"home-manager_2": {
322
-
"inputs": {
323
-
"nixpkgs": [
324
-
"nixpkgs"
325
-
]
326
-
},
327
-
"locked": {
328
-
"lastModified": 1767780135,
329
-
"narHash": "sha256-5SbmsLMgxzPd9YMbFR4IHfOXv6bjWs+dfl6IbSq3r7s=",
330
-
"owner": "nix-community",
331
-
"repo": "home-manager",
332
-
"rev": "c08430923ed417abc653884328a39e98496cfd0f",
333
-
"type": "github"
334
-
},
335
-
"original": {
336
-
"owner": "nix-community",
337
-
"ref": "release-25.11",
338
-
"repo": "home-manager",
339
-
"type": "github"
340
-
}
341
-
},
342
-
"htmx-src": {
343
-
"flake": false,
344
-
"locked": {
345
-
"narHash": "sha256-nm6avZuEBg67SSyyZUhjpXVNstHHgUxrtBHqJgowU08=",
346
-
"type": "file",
347
-
"url": "https://unpkg.com/htmx.org@2.0.4/dist/htmx.min.js"
348
-
},
349
-
"original": {
350
-
"type": "file",
351
-
"url": "https://unpkg.com/htmx.org@2.0.4/dist/htmx.min.js"
352
-
}
353
-
},
354
-
"htmx-ws-src": {
355
-
"flake": false,
356
-
"locked": {
357
-
"narHash": "sha256-2fg6KyEJoO24q0fQqbz9RMaYNPQrMwpZh29tkSqdqGY=",
358
-
"type": "file",
359
-
"url": "https://cdn.jsdelivr.net/npm/htmx-ext-ws@2.0.2"
360
-
},
361
-
"original": {
362
-
"type": "file",
363
-
"url": "https://cdn.jsdelivr.net/npm/htmx-ext-ws@2.0.2"
364
-
}
365
-
},
366
-
"hydra": {
367
-
"inputs": {
368
-
"nix": "nix",
369
-
"nix-eval-jobs": "nix-eval-jobs",
370
-
"nixpkgs": "nixpkgs_3"
371
-
},
372
-
"locked": {
373
-
"lastModified": 1767626752,
374
-
"narHash": "sha256-VKBXQV3sWJB4DMm8xCMBsyp9HLe5isb+dduWrzPRj7A=",
375
-
"owner": "NixOS",
376
-
"repo": "hydra",
377
-
"rev": "41daeb3cc94077c42395bf1e9f1698e3e1bf5532",
378
-
"type": "github"
379
-
},
380
-
"original": {
381
-
"owner": "NixOS",
382
-
"repo": "hydra",
383
-
"type": "github"
384
-
}
385
-
},
386
-
"ibm-plex-mono-src": {
387
-
"flake": false,
388
-
"locked": {
389
-
"lastModified": 1731402384,
390
-
"narHash": "sha256-OwUmrPfEehLDz0fl2ChYLK8FQM2p0G1+EMrGsYEq+6g=",
391
-
"type": "tarball",
392
-
"url": "https://github.com/IBM/plex/releases/download/@ibm%2Fplex-mono@1.1.0/ibm-plex-mono.zip"
393
-
},
394
-
"original": {
395
-
"type": "tarball",
396
-
"url": "https://github.com/IBM/plex/releases/download/@ibm%2Fplex-mono@1.1.0/ibm-plex-mono.zip"
397
-
}
398
-
},
399
-
"indigo": {
400
-
"flake": false,
401
-
"locked": {
402
-
"lastModified": 1753693716,
403
-
"narHash": "sha256-DMIKnCJRODQXEHUxA+7mLzRALmnZhkkbHlFT2rCQYrE=",
404
-
"owner": "oppiliappan",
405
-
"repo": "indigo",
406
-
"rev": "5f170569da9360f57add450a278d73538092d8ca",
407
-
"type": "github"
408
-
},
409
-
"original": {
410
-
"owner": "oppiliappan",
411
-
"repo": "indigo",
412
-
"type": "github"
413
-
}
414
-
},
415
-
"inter-fonts-src": {
416
-
"flake": false,
417
-
"locked": {
418
-
"lastModified": 1731687360,
419
-
"narHash": "sha256-5vdKKvHAeZi6igrfpbOdhZlDX2/5+UvzlnCQV6DdqoQ=",
420
-
"type": "tarball",
421
-
"url": "https://github.com/rsms/inter/releases/download/v4.1/Inter-4.1.zip"
422
-
},
423
-
"original": {
424
-
"type": "tarball",
425
-
"url": "https://github.com/rsms/inter/releases/download/v4.1/Inter-4.1.zip"
426
-
}
427
-
},
428
-
"knotserver-module": {
429
-
"inputs": {
430
-
"nixpkgs": [
431
-
"nixpkgs"
432
-
],
433
-
"tangledCore": [
434
-
"tangled-core"
435
-
]
436
-
},
437
-
"locked": {
438
-
"lastModified": 1750698324,
439
-
"narHash": "sha256-yzHqS8XzYjxuygOVekjFScZf81fZvRtXZpz1xx6mRc0=",
440
-
"ref": "knot-fix",
441
-
"rev": "3eb304f66d1f5583fedfea8ec3744105f0771239",
442
-
"revCount": 17,
443
-
"type": "git",
444
-
"url": "https://tangled.org/soopy.moe/knotserver-module/"
445
-
},
446
-
"original": {
447
-
"ref": "knot-fix",
448
-
"type": "git",
449
-
"url": "https://tangled.org/soopy.moe/knotserver-module/"
450
-
}
451
-
},
452
"lanzaboote": {
453
"inputs": {
454
-
"crane": "crane",
455
"nixpkgs": [
456
"nixpkgs"
457
],
458
-
"pre-commit": "pre-commit",
459
-
"rust-overlay": "rust-overlay"
460
},
461
"locked": {
462
-
"lastModified": 1765382359,
463
-
"narHash": "sha256-RJmgVDzjRI18BWVogG6wpsl1UCuV6ui8qr4DJ1LfWZ8=",
464
"owner": "nix-community",
465
"repo": "lanzaboote",
466
-
"rev": "e8c096ade12ec9130ff931b0f0e25d2f1bc63607",
467
"type": "github"
468
},
469
"original": {
470
"owner": "nix-community",
471
-
"ref": "v1.0.0",
472
"repo": "lanzaboote",
473
"type": "github"
474
}
475
},
476
-
"lucide-src": {
477
-
"flake": false,
478
-
"locked": {
479
-
"lastModified": 1754044466,
480
-
"narHash": "sha256-+exBR2OToB1iv7ZQI2S4B0lXA/QRvC9n6U99UxGpJGs=",
481
-
"type": "tarball",
482
-
"url": "https://github.com/lucide-icons/lucide/releases/download/0.536.0/lucide-icons-0.536.0.zip"
483
-
},
484
-
"original": {
485
-
"type": "tarball",
486
-
"url": "https://github.com/lucide-icons/lucide/releases/download/0.536.0/lucide-icons-0.536.0.zip"
487
-
}
488
-
},
489
"mystia": {
490
"inputs": {
491
"flake-compat": "flake-compat_3",
492
-
"nix-update-soopy": "nix-update-soopy",
493
-
"nixpkgs": "nixpkgs_4",
494
-
"treefmt-nix": "treefmt-nix_2"
495
},
496
"locked": {
497
-
"lastModified": 1765558006,
498
-
"narHash": "sha256-8o8J6YJgx7ZLZJfXlKL/upDyGuRFoTOTKeaLT4ZgUHw=",
499
"owner": "soopyc",
500
"repo": "mystia",
501
-
"rev": "5b177c1b32e2f671c1b4b92f0d71ec2a6a55fa9a",
502
"type": "github"
503
},
504
"original": {
···
507
"type": "github"
508
}
509
},
510
-
"nix": {
511
-
"flake": false,
512
"locked": {
513
-
"lastModified": 1767367029,
514
-
"narHash": "sha256-RsVlkBkxvPPePEo59AVolBFdayxny9FFv8X4aNq9qFc=",
515
-
"owner": "NixOS",
516
-
"repo": "nix",
517
-
"rev": "394a8da9dd9c046de715e451a96b70e64ce4aa7a",
518
-
"type": "github"
519
-
},
520
-
"original": {
521
"owner": "NixOS",
522
-
"ref": "2.32-maintenance",
523
-
"repo": "nix",
524
-
"type": "github"
525
-
}
526
-
},
527
-
"nix-eval-jobs": {
528
-
"flake": false,
529
-
"locked": {
530
-
"lastModified": 1760478325,
531
-
"narHash": "sha256-hA+NOH8KDcsuvH7vJqSwk74PyZP3MtvI/l+CggZcnTc=",
532
-
"owner": "nix-community",
533
-
"repo": "nix-eval-jobs",
534
-
"rev": "daa42f9e9c84aeff1e325dd50fda321f53dfd02c",
535
"type": "github"
536
},
537
"original": {
538
-
"owner": "nix-community",
539
-
"ref": "v2.32.1",
540
-
"repo": "nix-eval-jobs",
541
-
"type": "github"
542
}
543
},
544
-
"nix-index-database": {
545
-
"inputs": {
546
-
"nixpkgs": [
547
-
"nixpkgs"
548
-
]
549
-
},
550
"locked": {
551
-
"lastModified": 1765267181,
552
-
"narHash": "sha256-d3NBA9zEtBu2JFMnTBqWj7Tmi7R5OikoU2ycrdhQEws=",
553
-
"owner": "nix-community",
554
-
"repo": "nix-index-database",
555
-
"rev": "82befcf7dc77c909b0f2a09f5da910ec95c5b78f",
556
-
"type": "github"
557
-
},
558
-
"original": {
559
-
"owner": "nix-community",
560
-
"repo": "nix-index-database",
561
-
"type": "github"
562
-
}
563
-
},
564
-
"nix-update-soopy": {
565
-
"inputs": {
566
-
"flake-parts": "flake-parts_2",
567
-
"nixpkgs": [
568
-
"mystia",
569
-
"nixpkgs"
570
-
],
571
-
"treefmt-nix": "treefmt-nix"
572
-
},
573
-
"locked": {
574
-
"lastModified": 1713692400,
575
-
"narHash": "sha256-x5T4i96pbVBWm2f7RrE+Y6IOrubKOZRr9vKXpgsWfv0=",
576
-
"owner": "soopyc",
577
-
"repo": "nix-update",
578
-
"rev": "1aca3f7647cb528cb854e09171f7c0b65fa594d9",
579
-
"type": "github"
580
-
},
581
-
"original": {
582
-
"owner": "soopyc",
583
-
"repo": "nix-update",
584
-
"type": "github"
585
-
}
586
-
},
587
-
"nixos-hardware": {
588
-
"locked": {
589
-
"lastModified": 1767105924,
590
-
"narHash": "sha256-Sr2uqrc5VVFm5zIqJw87MtB2skLcIQGMywmtjFecWn0=",
591
-
"owner": "soopyc",
592
-
"repo": "nixos-hardware",
593
-
"rev": "cd2b93bdcf720c6b68522eafd5aa1347a25a41b0",
594
-
"type": "github"
595
-
},
596
-
"original": {
597
-
"owner": "soopyc",
598
-
"ref": "apple-t2-updates",
599
-
"repo": "nixos-hardware",
600
-
"type": "github"
601
-
}
602
-
},
603
-
"nixpkgs": {
604
-
"locked": {
605
-
"lastModified": 1753749649,
606
-
"narHash": "sha256-+jkEZxs7bfOKfBIk430K+tK9IvXlwzqQQnppC2ZKFj4=",
607
"owner": "NixOS",
608
"repo": "nixpkgs",
609
-
"rev": "1f08a4df998e21f4e8be8fb6fbf61d11a1a5076a",
610
"type": "github"
611
},
612
"original": {
613
"owner": "NixOS",
614
-
"ref": "nixos-25.05",
615
"repo": "nixpkgs",
616
"type": "github"
617
}
618
},
619
-
"nixpkgs_2": {
620
"locked": {
621
-
"lastModified": 1763191728,
622
-
"narHash": "sha256-gI9PpaoX4/f28HkjcTbFVpFhtOxSDtOEdFaHZrdETe0=",
623
-
"rev": "1d4c88323ac36805d09657d13a5273aea1b34f0c",
624
-
"type": "tarball",
625
-
"url": "https://releases.nixos.org/nixpkgs/nixpkgs-25.11pre896415.1d4c88323ac3/nixexprs.tar.xz"
626
-
},
627
-
"original": {
628
-
"type": "tarball",
629
-
"url": "https://channels.nixos.org/nixpkgs-unstable/nixexprs.tar.xz"
630
-
}
631
-
},
632
-
"nixpkgs_3": {
633
-
"locked": {
634
-
"lastModified": 1767475907,
635
-
"narHash": "sha256-w10AFfl20h5MSBCsCegD4xtmcgDlQQeoFsOaIFwHOrE=",
636
"owner": "NixOS",
637
"repo": "nixpkgs",
638
-
"rev": "7a0d60a03534a2d14b0805616aa1fd403fccfa55",
639
"type": "github"
640
},
641
"original": {
642
"owner": "NixOS",
643
-
"ref": "nixos-25.11-small",
644
"repo": "nixpkgs",
645
"type": "github"
646
}
647
},
648
-
"nixpkgs_4": {
649
"locked": {
650
-
"lastModified": 1763966396,
651
-
"narHash": "sha256-6eeL1YPcY1MV3DDStIDIdy/zZCDKgHdkCmsrLJFiZf0=",
652
"owner": "NixOS",
653
"repo": "nixpkgs",
654
-
"rev": "5ae3b07d8d6527c42f17c876e404993199144b6a",
655
"type": "github"
656
},
657
"original": {
658
-
"id": "nixpkgs",
659
-
"ref": "nixos-unstable",
660
-
"type": "indirect"
661
-
}
662
-
},
663
-
"nixpkgs_5": {
664
-
"locked": {
665
-
"lastModified": 1767634882,
666
-
"narHash": "sha256-BroLZHVDysnh4EdOKKFVVu44/9LYjwZnDdpcQEd6g68=",
667
-
"rev": "3c9db02515ef1d9b6b709fc60ba9a540957f661c",
668
-
"type": "tarball",
669
-
"url": "https://releases.nixos.org/nixos/25.11/nixos-25.11.3265.3c9db02515ef/nixexprs.tar.xz"
670
-
},
671
-
"original": {
672
-
"type": "tarball",
673
-
"url": "https://nixpkgs.dev/channel/nixos-25.11"
674
}
675
},
676
-
"pre-commit": {
677
"inputs": {
678
-
"flake-compat": "flake-compat_2",
679
"gitignore": "gitignore",
680
"nixpkgs": [
681
"lanzaboote",
682
"nixpkgs"
683
-
]
684
},
685
"locked": {
686
-
"lastModified": 1765016596,
687
-
"narHash": "sha256-rhSqPNxDVow7OQKi4qS5H8Au0P4S3AYbawBSmJNUtBQ=",
688
"owner": "cachix",
689
"repo": "pre-commit-hooks.nix",
690
-
"rev": "548fc44fca28a5e81c5d6b846e555e6b9c2a5a3c",
691
"type": "github"
692
},
693
"original": {
···
698
},
699
"root": {
700
"inputs": {
701
-
"arion": "arion",
702
-
"catppuccin": "catppuccin",
703
-
"ghostty": "ghostty",
704
-
"home-manager": "home-manager_2",
705
-
"hydra": "hydra",
706
-
"knotserver-module": "knotserver-module",
707
"lanzaboote": "lanzaboote",
708
"mystia": "mystia",
709
-
"nix-index-database": "nix-index-database",
710
-
"nixos-hardware": "nixos-hardware",
711
-
"nixpkgs": "nixpkgs_5",
712
-
"sops-nix": "sops-nix",
713
-
"tangled-core": "tangled-core",
714
-
"treefmt-nix": "treefmt-nix_3",
715
-
"whitelisted-web": "whitelisted-web"
716
}
717
},
718
"rust-overlay": {
719
"inputs": {
720
"nixpkgs": [
721
-
"lanzaboote",
722
"nixpkgs"
723
]
724
},
725
"locked": {
726
-
"lastModified": 1765075567,
727
-
"narHash": "sha256-KFDCdQcHJ0hE3Nt5Gm5enRIhmtEifAjpxgUQ3mzSJpA=",
728
"owner": "oxalica",
729
"repo": "rust-overlay",
730
-
"rev": "769156779b41e8787a46ca3d7d76443aaf68be6f",
731
"type": "github"
732
},
733
"original": {
···
736
"type": "github"
737
}
738
},
739
-
"sops-nix": {
740
"inputs": {
741
"nixpkgs": [
742
"nixpkgs"
743
]
744
},
745
"locked": {
746
-
"lastModified": 1767499857,
747
-
"narHash": "sha256-0zUU/PW09d6oBaR8x8vMHcAhg1MOvo3CwoXgHijzzNE=",
748
-
"owner": "Mic92",
749
-
"repo": "sops-nix",
750
-
"rev": "ecc41505948ec2ab0325f14c9862a4329c2b4190",
751
"type": "github"
752
},
753
"original": {
754
-
"owner": "Mic92",
755
-
"repo": "sops-nix",
756
"type": "github"
757
}
758
},
759
-
"sqlite-lib-src": {
760
-
"flake": false,
761
-
"locked": {
762
-
"lastModified": 1706631843,
763
-
"narHash": "sha256-bJoMjirsBjm2Qk9KPiy3yV3+8b/POlYe76/FQbciHro=",
764
-
"type": "tarball",
765
-
"url": "https://sqlite.org/2024/sqlite-amalgamation-3450100.zip"
766
},
767
-
"original": {
768
-
"type": "tarball",
769
-
"url": "https://sqlite.org/2024/sqlite-amalgamation-3450100.zip"
770
-
}
771
-
},
772
-
"systems": {
773
"locked": {
774
-
"lastModified": 1681028828,
775
-
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
776
-
"owner": "nix-systems",
777
-
"repo": "default",
778
-
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
779
"type": "github"
780
},
781
"original": {
782
-
"owner": "nix-systems",
783
-
"repo": "default",
784
"type": "github"
785
}
786
},
787
-
"systems_2": {
788
"locked": {
789
"lastModified": 1681028828,
790
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
···
796
"original": {
797
"owner": "nix-systems",
798
"repo": "default",
799
-
"type": "github"
800
-
}
801
-
},
802
-
"tangled-core": {
803
-
"inputs": {
804
-
"actor-typeahead-src": "actor-typeahead-src",
805
-
"flake-compat": "flake-compat_4",
806
-
"gomod2nix": "gomod2nix",
807
-
"htmx-src": "htmx-src",
808
-
"htmx-ws-src": "htmx-ws-src",
809
-
"ibm-plex-mono-src": "ibm-plex-mono-src",
810
-
"indigo": "indigo",
811
-
"inter-fonts-src": "inter-fonts-src",
812
-
"lucide-src": "lucide-src",
813
-
"nixpkgs": [
814
-
"nixpkgs"
815
-
],
816
-
"sqlite-lib-src": "sqlite-lib-src"
817
-
},
818
-
"locked": {
819
-
"lastModified": 1767767073,
820
-
"narHash": "sha256-BSZJ1TY5lGt7xNgFRtcKwYcSOI6VC2CHLfm7y/GgHwU=",
821
-
"ref": "refs/heads/master",
822
-
"rev": "6dc86ffbed5a290ca6a4890caa2dadea5c8b8a81",
823
-
"revCount": 1792,
824
-
"type": "git",
825
-
"url": "https://tangled.org/tangled.sh/core"
826
-
},
827
-
"original": {
828
-
"type": "git",
829
-
"url": "https://tangled.org/tangled.sh/core"
830
-
}
831
-
},
832
-
"treefmt-nix": {
833
-
"inputs": {
834
-
"nixpkgs": [
835
-
"mystia",
836
-
"nix-update-soopy",
837
-
"nixpkgs"
838
-
]
839
-
},
840
-
"locked": {
841
-
"lastModified": 1698438538,
842
-
"narHash": "sha256-AWxaKTDL3MtxaVTVU5lYBvSnlspOS0Fjt8GxBgnU0Do=",
843
-
"owner": "numtide",
844
-
"repo": "treefmt-nix",
845
-
"rev": "5deb8dc125a9f83b65ca86cf0c8167c46593e0b1",
846
-
"type": "github"
847
-
},
848
-
"original": {
849
-
"owner": "numtide",
850
-
"repo": "treefmt-nix",
851
-
"type": "github"
852
-
}
853
-
},
854
-
"treefmt-nix_2": {
855
-
"inputs": {
856
-
"nixpkgs": [
857
-
"mystia",
858
-
"nixpkgs"
859
-
]
860
-
},
861
-
"locked": {
862
-
"lastModified": 1762938485,
863
-
"narHash": "sha256-AlEObg0syDl+Spi4LsZIBrjw+snSVU4T8MOeuZJUJjM=",
864
-
"owner": "numtide",
865
-
"repo": "treefmt-nix",
866
-
"rev": "5b4ee75aeefd1e2d5a1cc43cf6ba65eba75e83e4",
867
-
"type": "github"
868
-
},
869
-
"original": {
870
-
"owner": "numtide",
871
-
"repo": "treefmt-nix",
872
-
"type": "github"
873
-
}
874
-
},
875
-
"treefmt-nix_3": {
876
-
"inputs": {
877
-
"nixpkgs": [
878
-
"nixpkgs"
879
-
]
880
-
},
881
-
"locked": {
882
-
"lastModified": 1767738726,
883
-
"narHash": "sha256-bHATlMr42JABTJgi4Wc8SJCK8Cv9AnR6HCl3k8eTwEs=",
884
-
"owner": "numtide",
885
-
"repo": "treefmt-nix",
886
-
"rev": "4db0238d79254c6d14f251808dc5264b8fc81b73",
887
-
"type": "github"
888
-
},
889
-
"original": {
890
-
"owner": "numtide",
891
-
"repo": "treefmt-nix",
892
-
"type": "github"
893
-
}
894
-
},
895
-
"whitelisted-web": {
896
-
"inputs": {
897
-
"nixpkgs": [
898
-
"nixpkgs"
899
-
]
900
-
},
901
-
"locked": {
902
-
"lastModified": 1759215222,
903
-
"narHash": "sha256-JPKdjfRTpUBxgeaaMiacnCfgDacSixkPWb73dz6C/UA=",
904
-
"rev": "c512eeddce32060f8f576918b555af98cac845ad",
905
-
"type": "tarball",
906
-
"url": "https://patchy.soopy.moe/api/v1/repos/soopyc/whitelisted-web/archive/c512eeddce32060f8f576918b555af98cac845ad.tar.gz"
907
-
},
908
-
"original": {
909
-
"type": "tarball",
910
-
"url": "https://patchy.soopy.moe/soopyc/whitelisted-web/archive/main.tar.gz"
911
-
}
912
-
},
913
-
"zig": {
914
-
"inputs": {
915
-
"flake-compat": [
916
-
"ghostty",
917
-
"flake-compat"
918
-
],
919
-
"flake-utils": [
920
-
"ghostty",
921
-
"flake-utils"
922
-
],
923
-
"nixpkgs": [
924
-
"ghostty",
925
-
"nixpkgs"
926
-
]
927
-
},
928
-
"locked": {
929
-
"lastModified": 1763295135,
930
-
"narHash": "sha256-sGv/NHCmEnJivguGwB5w8LRmVqr1P72OjS+NzcJsssE=",
931
-
"owner": "mitchellh",
932
-
"repo": "zig-overlay",
933
-
"rev": "64f8b42cfc615b2cf99144adf2b7728c7847c72a",
934
-
"type": "github"
935
-
},
936
-
"original": {
937
-
"owner": "mitchellh",
938
-
"repo": "zig-overlay",
939
-
"type": "github"
940
-
}
941
-
},
942
-
"zon2nix": {
943
-
"inputs": {
944
-
"nixpkgs": [
945
-
"ghostty",
946
-
"nixpkgs"
947
-
]
948
-
},
949
-
"locked": {
950
-
"lastModified": 1758405547,
951
-
"narHash": "sha256-WgaDgvIZMPvlZcZrpPMjkaalTBnGF2lTG+62znXctWM=",
952
-
"owner": "jcollie",
953
-
"repo": "zon2nix",
954
-
"rev": "bf983aa90ff169372b9fa8c02e57ea75e0b42245",
955
-
"type": "github"
956
-
},
957
-
"original": {
958
-
"owner": "jcollie",
959
-
"repo": "zon2nix",
960
-
"rev": "bf983aa90ff169372b9fa8c02e57ea75e0b42245",
961
"type": "github"
962
}
963
}
···
1
{
2
"nodes": {
3
+
"attic": {
4
"inputs": {
5
+
"crane": "crane",
6
+
"flake-compat": "flake-compat",
7
+
"flake-utils": "flake-utils",
8
"nixpkgs": [
9
"nixpkgs"
10
+
],
11
+
"nixpkgs-stable": "nixpkgs-stable"
12
},
13
"locked": {
14
+
"lastModified": 1692225040,
15
+
"narHash": "sha256-jbQNvkgWGioiC6S39dZVyn6us8p/DlEvm5hQKEYkzDU=",
16
+
"owner": "zhaofengli",
17
+
"repo": "attic",
18
+
"rev": "b43d12082e34bceb26038bdad0438fd68804cfcd",
19
"type": "github"
20
},
21
"original": {
22
+
"owner": "zhaofengli",
23
+
"repo": "attic",
24
"type": "github"
25
}
26
},
27
+
"crane": {
28
"inputs": {
29
+
"flake-compat": [
30
+
"attic",
31
+
"flake-compat"
32
+
],
33
+
"flake-utils": [
34
+
"attic",
35
+
"flake-utils"
36
+
],
37
+
"nixpkgs": [
38
+
"attic",
39
+
"nixpkgs"
40
+
],
41
+
"rust-overlay": "rust-overlay"
42
},
43
"locked": {
44
+
"lastModified": 1677892403,
45
+
"narHash": "sha256-/Wi0L1spSWLFj+UQxN3j0mPYMoc7ZoAujpUF/juFVII=",
46
+
"owner": "ipetkov",
47
+
"repo": "crane",
48
+
"rev": "105e27adb70a9890986b6d543a67761cbc1964a2",
49
"type": "github"
50
},
51
"original": {
52
+
"owner": "ipetkov",
53
+
"repo": "crane",
54
"type": "github"
55
}
56
},
57
+
"crane_2": {
58
+
"inputs": {
59
+
"flake-compat": [
60
+
"lanzaboote",
61
+
"flake-compat"
62
+
],
63
+
"flake-utils": [
64
+
"lanzaboote",
65
+
"flake-utils"
66
+
],
67
+
"nixpkgs": [
68
+
"lanzaboote",
69
+
"nixpkgs"
70
+
],
71
+
"rust-overlay": [
72
+
"lanzaboote",
73
+
"rust-overlay"
74
+
]
75
+
},
76
"locked": {
77
+
"lastModified": 1681177078,
78
+
"narHash": "sha256-ZNIjBDou2GOabcpctiQykEQVkI8BDwk7TyvlWlI4myE=",
79
"owner": "ipetkov",
80
"repo": "crane",
81
+
"rev": "0c9f468ff00576577d83f5019a66c557ede5acf6",
82
"type": "github"
83
},
84
"original": {
···
90
"flake-compat": {
91
"flake": false,
92
"locked": {
93
+
"lastModified": 1673956053,
94
+
"narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=",
95
"owner": "edolstra",
96
"repo": "flake-compat",
97
+
"rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9",
98
"type": "github"
99
},
100
"original": {
···
106
"flake-compat_2": {
107
"flake": false,
108
"locked": {
109
+
"lastModified": 1673956053,
110
+
"narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=",
111
"owner": "edolstra",
112
"repo": "flake-compat",
113
+
"rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9",
114
"type": "github"
115
},
116
"original": {
···
122
"flake-compat_3": {
123
"flake": false,
124
"locked": {
125
+
"lastModified": 1673956053,
126
+
"narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=",
127
"owner": "edolstra",
128
"repo": "flake-compat",
129
+
"rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9",
130
"type": "github"
131
},
132
"original": {
···
135
"type": "github"
136
}
137
},
138
"flake-parts": {
139
"inputs": {
140
"nixpkgs-lib": [
141
+
"lanzaboote",
142
"nixpkgs"
143
]
144
},
145
"locked": {
146
+
"lastModified": 1680392223,
147
+
"narHash": "sha256-n3g7QFr85lDODKt250rkZj2IFS3i4/8HBU2yKHO3tqw=",
148
"owner": "hercules-ci",
149
"repo": "flake-parts",
150
+
"rev": "dcc36e45d054d7bb554c9cdab69093debd91a0b5",
151
"type": "github"
152
},
153
"original": {
···
157
}
158
},
159
"flake-utils": {
160
"locked": {
161
+
"lastModified": 1667395993,
162
+
"narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
163
"owner": "numtide",
164
"repo": "flake-utils",
165
+
"rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f",
166
"type": "github"
167
},
168
"original": {
···
173
},
174
"flake-utils_2": {
175
"inputs": {
176
+
"systems": "systems"
177
},
178
"locked": {
179
+
"lastModified": 1681202837,
180
+
"narHash": "sha256-H+Rh19JDwRtpVPAWp64F+rlEtxUWBAQW28eAi3SRSzg=",
181
"owner": "numtide",
182
"repo": "flake-utils",
183
+
"rev": "cfacdce06f30d2b68473a46042957675eebb3401",
184
"type": "github"
185
},
186
"original": {
···
189
"type": "github"
190
}
191
},
192
"gitignore": {
193
"inputs": {
194
"nixpkgs": [
195
"lanzaboote",
196
+
"pre-commit-hooks-nix",
197
"nixpkgs"
198
]
199
},
200
"locked": {
201
+
"lastModified": 1660459072,
202
+
"narHash": "sha256-8DFJjXG8zqoONA1vXtgeKXy68KdJL5UaXR8NtVMUbx8=",
203
"owner": "hercules-ci",
204
"repo": "gitignore.nix",
205
+
"rev": "a20de23b925fd8264fd7fad6454652e142fd7f73",
206
"type": "github"
207
},
208
"original": {
···
211
"type": "github"
212
}
213
},
214
"home-manager": {
215
"inputs": {
216
"nixpkgs": [
217
"nixpkgs"
218
]
219
},
220
"locked": {
221
+
"lastModified": 1693208669,
222
+
"narHash": "sha256-hHFaaUsZ860wvppPeiu7nJn/nXZjJfnqAQEu9SPFE9I=",
223
"owner": "nix-community",
224
"repo": "home-manager",
225
+
"rev": "5bac4a1c06cd77cf8fc35a658ccb035a6c50cd2c",
226
"type": "github"
227
},
228
"original": {
229
"owner": "nix-community",
230
+
"ref": "release-23.05",
231
"repo": "home-manager",
232
"type": "github"
233
}
234
},
235
"lanzaboote": {
236
"inputs": {
237
+
"crane": "crane_2",
238
+
"flake-compat": "flake-compat_2",
239
+
"flake-parts": "flake-parts",
240
+
"flake-utils": "flake-utils_2",
241
"nixpkgs": [
242
"nixpkgs"
243
],
244
+
"pre-commit-hooks-nix": "pre-commit-hooks-nix",
245
+
"rust-overlay": "rust-overlay_2"
246
},
247
"locked": {
248
+
"lastModified": 1682802423,
249
+
"narHash": "sha256-Fb5TeRTdvUlo/5Yi2d+FC8a6KoRLk2h1VE0/peMhWPs=",
250
"owner": "nix-community",
251
"repo": "lanzaboote",
252
+
"rev": "64b903ca87d18cef2752c19c098af275c6e51d63",
253
"type": "github"
254
},
255
"original": {
256
"owner": "nix-community",
257
+
"ref": "v0.3.0",
258
"repo": "lanzaboote",
259
"type": "github"
260
}
261
},
262
"mystia": {
263
"inputs": {
264
"flake-compat": "flake-compat_3",
265
+
"nixpkgs": [
266
+
"nixpkgs"
267
+
]
268
},
269
"locked": {
270
+
"lastModified": 1694357290,
271
+
"narHash": "sha256-Mai5saiiuBWlQzTreLtIeUJQJN9zMH/UBIKJPOqnasM=",
272
"owner": "soopyc",
273
"repo": "mystia",
274
+
"rev": "cfe783698ccd18cb27fb2e422917f14b82f7afc4",
275
"type": "github"
276
},
277
"original": {
···
280
"type": "github"
281
}
282
},
283
+
"nixpkgs": {
284
"locked": {
285
+
"lastModified": 1694237756,
286
+
"narHash": "sha256-8T29BDnqRexwVy3jhEzIH9r7ROiF9I6ESVD0QLC6VXk=",
287
"owner": "NixOS",
288
+
"repo": "nixpkgs",
289
+
"rev": "1a5bda2b28ea75a96dda2c349fe6d5e7864950ee",
290
"type": "github"
291
},
292
"original": {
293
+
"id": "nixpkgs",
294
+
"ref": "master",
295
+
"type": "indirect"
296
}
297
},
298
+
"nixpkgs-stable": {
299
"locked": {
300
+
"lastModified": 1685004253,
301
+
"narHash": "sha256-AbVL1nN/TDicUQ5wXZ8xdLERxz/eJr7+o8lqkIOVuaE=",
302
"owner": "NixOS",
303
"repo": "nixpkgs",
304
+
"rev": "3e01645c40b92d29f3ae76344a6d654986a91a91",
305
"type": "github"
306
},
307
"original": {
308
"owner": "NixOS",
309
+
"ref": "nixos-23.05",
310
"repo": "nixpkgs",
311
"type": "github"
312
}
313
},
314
+
"nixpkgs-stable_2": {
315
"locked": {
316
+
"lastModified": 1678872516,
317
+
"narHash": "sha256-/E1YwtMtFAu2KUQKV/1+KFuReYPANM2Rzehk84VxVoc=",
318
"owner": "NixOS",
319
"repo": "nixpkgs",
320
+
"rev": "9b8e5abb18324c7fe9f07cb100c3cd4a29cda8b8",
321
"type": "github"
322
},
323
"original": {
324
"owner": "NixOS",
325
+
"ref": "nixos-22.11",
326
"repo": "nixpkgs",
327
"type": "github"
328
}
329
},
330
+
"nixpkgs-stable_3": {
331
"locked": {
332
+
"lastModified": 1693675694,
333
+
"narHash": "sha256-2pIOyQwGyy2FtFAUIb8YeKVmOCcPOTVphbAvmshudLE=",
334
"owner": "NixOS",
335
"repo": "nixpkgs",
336
+
"rev": "5601118d39ca9105f8e7b39d4c221d3388c0419d",
337
"type": "github"
338
},
339
"original": {
340
+
"owner": "NixOS",
341
+
"ref": "release-23.05",
342
+
"repo": "nixpkgs",
343
+
"type": "github"
344
}
345
},
346
+
"pre-commit-hooks-nix": {
347
"inputs": {
348
+
"flake-compat": [
349
+
"lanzaboote",
350
+
"flake-compat"
351
+
],
352
+
"flake-utils": [
353
+
"lanzaboote",
354
+
"flake-utils"
355
+
],
356
"gitignore": "gitignore",
357
"nixpkgs": [
358
"lanzaboote",
359
"nixpkgs"
360
+
],
361
+
"nixpkgs-stable": "nixpkgs-stable_2"
362
},
363
"locked": {
364
+
"lastModified": 1681413034,
365
+
"narHash": "sha256-/t7OjNQcNkeWeSq/CFLYVBfm+IEnkjoSm9iKvArnUUI=",
366
"owner": "cachix",
367
"repo": "pre-commit-hooks.nix",
368
+
"rev": "d3de8f69ca88fb6f8b09e5b598be5ac98d28ede5",
369
"type": "github"
370
},
371
"original": {
···
376
},
377
"root": {
378
"inputs": {
379
+
"attic": "attic",
380
+
"home-manager": "home-manager",
381
"lanzaboote": "lanzaboote",
382
"mystia": "mystia",
383
+
"nixpkgs": "nixpkgs",
384
+
"sops-nix": "sops-nix"
385
}
386
},
387
"rust-overlay": {
388
"inputs": {
389
+
"flake-utils": [
390
+
"attic",
391
+
"crane",
392
+
"flake-utils"
393
+
],
394
"nixpkgs": [
395
+
"attic",
396
+
"crane",
397
"nixpkgs"
398
]
399
},
400
"locked": {
401
+
"lastModified": 1675391458,
402
+
"narHash": "sha256-ukDKZw922BnK5ohL9LhwtaDAdCsJL7L6ScNEyF1lO9w=",
403
"owner": "oxalica",
404
"repo": "rust-overlay",
405
+
"rev": "383a4acfd11d778d5c2efcf28376cbd845eeaedf",
406
"type": "github"
407
},
408
"original": {
···
411
"type": "github"
412
}
413
},
414
+
"rust-overlay_2": {
415
"inputs": {
416
+
"flake-utils": [
417
+
"lanzaboote",
418
+
"flake-utils"
419
+
],
420
"nixpkgs": [
421
+
"lanzaboote",
422
"nixpkgs"
423
]
424
},
425
"locked": {
426
+
"lastModified": 1682129965,
427
+
"narHash": "sha256-1KRPIorEL6pLpJR04FwAqqnt4Tzcm4MqD84yhlD+XSk=",
428
+
"owner": "oxalica",
429
+
"repo": "rust-overlay",
430
+
"rev": "2c417c0460b788328220120c698630947547ee83",
431
"type": "github"
432
},
433
"original": {
434
+
"owner": "oxalica",
435
+
"repo": "rust-overlay",
436
"type": "github"
437
}
438
},
439
+
"sops-nix": {
440
+
"inputs": {
441
+
"nixpkgs": [
442
+
"nixpkgs"
443
+
],
444
+
"nixpkgs-stable": "nixpkgs-stable_3"
445
},
446
"locked": {
447
+
"lastModified": 1693898833,
448
+
"narHash": "sha256-OIrMAGNYNeLs6IvBynxcXub7aSW3GEUvWNsb7zx6zuU=",
449
+
"owner": "Mic92",
450
+
"repo": "sops-nix",
451
+
"rev": "faf21ac162173c2deb54e5fdeed002a9bd6e8623",
452
"type": "github"
453
},
454
"original": {
455
+
"owner": "Mic92",
456
+
"repo": "sops-nix",
457
"type": "github"
458
}
459
},
460
+
"systems": {
461
"locked": {
462
"lastModified": 1681028828,
463
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
···
469
"original": {
470
"owner": "nix-systems",
471
"repo": "default",
472
"type": "github"
473
}
474
}
+39
-93
flake.nix
+39
-93
flake.nix
···
3
4
nixConfig = {
5
extra-substituters = [
6
-
"https://cache.soopy.moe"
7
];
8
9
extra-trusted-public-keys = [
10
-
"cache.soopy.moe-1:0RZVsQeR+GOh0VQI9rvnHz55nVXkFardDqfm4+afjPo="
11
];
12
fallback = true;
13
};
14
15
inputs = {
16
-
mystia.url = "github:soopyc/mystia";
17
-
# nixpkgs.follows = "mystia/nixpkgs";
18
-
nixpkgs.url = "https://nixpkgs.dev/channel/nixos-25.11";
19
-
20
-
nixos-hardware.url = "github:soopyc/nixos-hardware/apple-t2-updates";
21
-
catppuccin.url = "github:catppuccin/nix/release-25.05"; # TODO
22
-
hydra.url = "github:NixOS/hydra";
23
-
ghostty.url = "github:ghostty-org/ghostty";
24
-
25
-
nix-index-database = {
26
-
url = "github:nix-community/nix-index-database";
27
-
inputs.nixpkgs.follows = "nixpkgs";
28
-
};
29
30
home-manager = {
31
-
# sync with nixpkgs!
32
-
url = "github:nix-community/home-manager/release-25.11";
33
inputs.nixpkgs.follows = "nixpkgs";
34
};
35
36
-
whitelisted-web = {
37
-
url = "https://patchy.soopy.moe/soopyc/whitelisted-web/archive/main.tar.gz";
38
inputs.nixpkgs.follows = "nixpkgs";
39
};
40
41
-
lanzaboote = {
42
-
url = "github:nix-community/lanzaboote/v1.0.0";
43
inputs.nixpkgs.follows = "nixpkgs";
44
};
45
···
48
inputs.nixpkgs.follows = "nixpkgs";
49
};
50
51
-
arion = {
52
-
url = "github:hercules-ci/arion";
53
inputs.nixpkgs.follows = "nixpkgs";
54
};
55
56
-
tangled-core = {
57
-
url = "git+https://tangled.org/tangled.sh/core";
58
-
inputs.nixpkgs.follows = "nixpkgs";
59
-
};
60
61
-
knotserver-module = {
62
-
url = "git+https://tangled.org/soopy.moe/knotserver-module/?ref=knot-fix";
63
-
inputs.nixpkgs.follows = "nixpkgs";
64
-
inputs.tangledCore.follows = "tangled-core";
65
-
};
66
-
67
-
treefmt-nix = {
68
-
url = "github:numtide/treefmt-nix";
69
-
inputs.nixpkgs.follows = "nixpkgs";
70
};
71
-
};
72
73
-
outputs =
74
-
{
75
-
self,
76
-
nixpkgs,
77
-
treefmt-nix,
78
-
...
79
-
}@inputs:
80
-
let
81
-
lib = nixpkgs.lib;
82
-
83
-
systems = [
84
-
"x86_64-linux"
85
-
"aarch64-linux"
86
-
"x86_64-darwin"
87
-
"aarch64-darwin"
88
-
];
89
-
forAllSystems = fn: lib.genAttrs systems (system: fn nixpkgs.legacyPackages.${system});
90
-
treefmt = forAllSystems (pkgs: treefmt-nix.lib.evalModule pkgs ./nix/treefmt.nix);
91
-
in
92
-
{
93
-
lib.x86_64-linux = import ./global/utils.nix {
94
-
inherit inputs;
95
-
system = "x86_64-linux";
96
};
97
-
98
-
packages.x86_64-linux =
99
-
let
100
-
system = "x86_64-linux";
101
-
in
102
-
{
103
-
brcmfmac =
104
-
let
105
-
pkgs = import nixpkgs {
106
-
inherit system;
107
-
config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [ "brcm-mac-firmware" ];
108
-
};
109
-
in
110
-
pkgs.callPackage ./vendor/brcmfmac { };
111
-
};
112
113
-
nixosConfigurations = import systems/default.nix { inherit inputs lib; };
114
-
115
-
devShells = forAllSystems (pkgs: import ./nix/devshell.nix { inherit pkgs inputs; });
116
-
117
-
checks = forAllSystems (
118
-
pkgs:
119
-
(import ./nix/checks.nix { inherit pkgs inputs; })
120
-
// {
121
-
formatting = treefmt.${pkgs.system}.config.build.check self;
122
-
}
123
-
);
124
-
125
-
formatter = forAllSystems (pkgs: treefmt.${pkgs.system}.config.build.wrapper);
126
-
127
-
_debug = {
128
-
inherit inputs;
129
-
};
130
-
};
131
}
···
3
4
nixConfig = {
5
extra-substituters = [
6
+
"https://nonbunary.soopy.moe/gensokyo-global"
7
+
"https://nonbunary.soopy.moe/gensokyo-systems"
8
];
9
10
extra-trusted-public-keys = [
11
+
"gensokyo-global:XiCN0D2XeSxF4urFYTprR+1Nr/5hWyydcETwZtPG6Ec="
12
+
"gensokyo-systems:r/Wx649dPuQrCN9Pgh3Jic526zQNk3oWMqYJHnob/Ok="
13
];
14
+
15
fallback = true;
16
};
17
18
inputs = {
19
+
nixpkgs.url = "nixpkgs/master";
20
21
home-manager = {
22
+
url = "github:nix-community/home-manager/release-23.05";
23
inputs.nixpkgs.follows = "nixpkgs";
24
};
25
26
+
lanzaboote = {
27
+
url = "github:nix-community/lanzaboote/v0.3.0";
28
inputs.nixpkgs.follows = "nixpkgs";
29
};
30
31
+
attic = {
32
+
url = "github:zhaofengli/attic";
33
inputs.nixpkgs.follows = "nixpkgs";
34
};
35
···
38
inputs.nixpkgs.follows = "nixpkgs";
39
};
40
41
+
mystia = {
42
+
url = "github:soopyc/mystia";
43
inputs.nixpkgs.follows = "nixpkgs";
44
};
45
+
};
46
47
+
outputs = {
48
+
nixpkgs,
49
+
home-manager,
50
+
...
51
+
} @ inputs: let
52
+
utils = import ./global/utils.nix;
53
+
lib = nixpkgs.lib;
54
55
+
systems = [
56
+
"x86_64-linux"
57
+
"aarch64-linux"
58
+
"x86_64-darwin"
59
+
"aarch64-darwin"
60
+
];
61
+
forAllSystems = fn: lib.genAttrs systems (s: fn nixpkgs.legacyPackages.${s});
62
+
in {
63
+
nixosConfigurations = {
64
+
koumakan = import ./systems/koumakan {inherit utils lib inputs;};
65
};
66
67
+
devShells = forAllSystems (pkgs: {
68
+
default = pkgs.mkShell {
69
+
packages = [
70
+
(pkgs.python311.withPackages (p: [p.requests]))
71
+
];
72
};
73
+
});
74
75
+
formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.alejandra;
76
+
};
77
}
-8
garnix.yaml
-8
garnix.yaml
+2
-24
global/core.nix
+2
-24
global/core.nix
···
1
-
{
2
-
pkgs,
3
-
inputs,
4
-
...
5
-
}:
6
-
{
7
imports = [
8
./upgrade-diff.nix
9
];
10
-
11
# Set default i18n configuration
12
i18n.defaultLocale = "en_US.UTF-8";
13
console = {
14
font = "Lat2-Terminus16";
15
keyMap = "us";
16
};
17
-
18
-
# We do not like overlays but sometimes they have to be done
19
-
nixpkgs.overlays = import ./overlays inputs;
20
-
21
-
system.rebuild.enableNg = true;
22
-
23
-
system.configurationRevision = inputs.self.rev or inputs.self.dirtyRev or "unknown";
24
-
25
-
hardware.enableRedistributableFirmware = true;
26
-
services.fwupd.enable = true;
27
-
28
-
boot.tmp = {
29
-
useTmpfs = false; # this causes oom on kernel builds
30
-
cleanOnBoot = true;
31
-
};
32
-
33
-
boot.crashDump.enable = true;
34
35
time.timeZone = "Asia/Hong_Kong";
36
-23
global/default.nix
-23
global/default.nix
···
1
-
# This is a NixOS module, you cannot use this as a standalone file.
2
-
# Other files may be though, but things that starts with {...}: most definitely aren't.
3
-
{ inputs, ... }:
4
-
{
5
-
imports = [
6
-
./core.nix
7
-
./gensokyo
8
-
./programs
9
-
./sops.nix
10
-
11
-
./home.nix
12
-
../users
13
-
14
-
./gui
15
-
16
-
inputs.arion.nixosModules.arion
17
-
inputs.sops-nix.nixosModules.sops
18
-
inputs.catppuccin.nixosModules.catppuccin
19
-
inputs.lanzaboote.nixosModules.lanzaboote
20
-
inputs.home-manager.nixosModules.home-manager
21
-
inputs.nix-index-database.nixosModules.nix-index
22
-
];
23
-
}
···
-7
global/gensokyo/default.nix
-7
global/gensokyo/default.nix
-37
global/gensokyo/presets/certificates.nix
-37
global/gensokyo/presets/certificates.nix
···
1
-
{
2
-
_utils,
3
-
config,
4
-
lib,
5
-
...
6
-
}:
7
-
let
8
-
secrets = _utils.setupSecrets config {
9
-
namespace = "lego";
10
-
secrets = [ "cf_token" ];
11
-
};
12
-
in
13
-
{
14
-
config = lib.mkIf config.gensokyo.presets.certificates (
15
-
lib.mkMerge [
16
-
{
17
-
security.acme = {
18
-
acceptTerms = true;
19
-
20
-
defaults = {
21
-
# == lego Configuration ==
22
-
# In an ideal world we would have an ed/cv25519 algo here but oh well
23
-
keyType = "ec256"; # Ensure we use ec keys
24
-
credentialFiles.CLOUDFLARE_DNS_API_TOKEN_FILE = secrets.get "cf_token";
25
-
dnsProvider = "cloudflare";
26
-
27
-
# == LE Configuration ==
28
-
email = "me@soopy.moe";
29
-
# server = "https://acme-staging-v02.api.letsencrypt.org/directory";
30
-
server = "https://acme-v02.api.letsencrypt.org/directory";
31
-
};
32
-
};
33
-
}
34
-
secrets.generate
35
-
]
36
-
);
37
-
}
···
-16
global/gensokyo/presets/default.nix
-16
global/gensokyo/presets/default.nix
···
1
-
{ lib, ... }:
2
-
{
3
-
imports = [
4
-
./vmetrics.nix
5
-
./nginx.nix
6
-
./certificates.nix
7
-
./secureboot.nix
8
-
];
9
-
10
-
options.gensokyo.presets = {
11
-
vmetrics = lib.mkEnableOption "vmetrics presets";
12
-
nginx = lib.mkEnableOption "nginx presets";
13
-
certificates = lib.mkEnableOption "boilerplate certificate issuing presets";
14
-
secureboot = lib.mkEnableOption "configuration of secureboot related options";
15
-
};
16
-
}
···
-66
global/gensokyo/presets/nginx.nix
-66
global/gensokyo/presets/nginx.nix
···
1
-
{
2
-
lib,
3
-
config,
4
-
...
5
-
}:
6
-
let
7
-
presetConf = config.gensokyo.presets;
8
-
in
9
-
lib.mkIf presetConf.nginx (
10
-
lib.mkMerge [
11
-
{
12
-
services.nginx = {
13
-
enable = lib.mkDefault true;
14
-
enableReload = lib.mkDefault true;
15
-
16
-
statusPage = true;
17
-
18
-
clientMaxBodySize = lib.mkDefault "5m";
19
-
recommendedTlsSettings = lib.mkDefault true;
20
-
recommendedProxySettings = lib.mkDefault true;
21
-
22
-
logError = "/var/log/nginx/error.log crit"; # override so we don't log to stderr.
23
-
commonHttpConfig = ''
24
-
# we already set this, hide that from proxied servers that set the header.
25
-
proxy_hide_header strict-transport-security;
26
-
27
-
log_format anonymized_combined '0.0.0.0 - - [$time_local] "$request" '
28
-
'$status $body_bytes_sent "-" '
29
-
'"$http_user_agent" "host=$host;timing=$request_time"';
30
-
access_log /var/log/nginx/access.log anonymized_combined;
31
-
'';
32
-
33
-
# prevent people from just being able to take the server down immediately
34
-
eventsConfig = ''
35
-
worker_connections 1024;
36
-
'';
37
-
appendConfig = ''
38
-
worker_processes auto;
39
-
'';
40
-
};
41
-
42
-
networking.firewall.allowedTCPPorts = [
43
-
80
44
-
443
45
-
];
46
-
}
47
-
48
-
(lib.mkIf presetConf.vmetrics {
49
-
services.prometheus.exporters.nginx.enable = true;
50
-
services.vmagent.prometheusConfig.scrape_configs = [
51
-
{
52
-
job_name = "nginx";
53
-
static_configs = [
54
-
{ targets = [ "localhost:${builtins.toString config.services.prometheus.exporters.nginx.port}" ]; }
55
-
];
56
-
relabel_configs = [
57
-
{
58
-
target_label = "instance";
59
-
replacement = "${config.networking.fqdnOrHostName}";
60
-
}
61
-
];
62
-
}
63
-
];
64
-
})
65
-
]
66
-
)
···
-20
global/gensokyo/presets/secureboot.nix
-20
global/gensokyo/presets/secureboot.nix
···
1
-
{
2
-
pkgs,
3
-
config,
4
-
lib,
5
-
...
6
-
}:
7
-
# see https://github.com/nix-community/lanzaboote/blob/master/docs/QUICK_START.md
8
-
let
9
-
cfg = config.gensokyo.presets;
10
-
in
11
-
lib.mkIf cfg.secureboot {
12
-
environment.systemPackages = [ pkgs.sbctl ];
13
-
14
-
# lanzaboote currently replaces systemd-boot, so disable that here.
15
-
boot.loader.systemd-boot.enable = lib.mkForce false;
16
-
boot.lanzaboote = {
17
-
enable = true;
18
-
pkiBundle = "/var/lib/sbctl";
19
-
};
20
-
}
···
-50
global/gensokyo/presets/vmetrics.nix
-50
global/gensokyo/presets/vmetrics.nix
···
1
-
{
2
-
hostname,
3
-
lib,
4
-
config,
5
-
_utils,
6
-
...
7
-
}:
8
-
let
9
-
secrets = _utils.setupSecrets config {
10
-
namespace = "vmetrics";
11
-
secrets = [ "auth" ];
12
-
};
13
-
in
14
-
{
15
-
# inb4 this causes conflicts
16
-
config = lib.mkIf config.gensokyo.presets.vmetrics (
17
-
lib.mkMerge [
18
-
{
19
-
services.prometheus.exporters.node.enable = true;
20
-
services.vmagent.enable = true;
21
-
services.vmagent.remoteWrite.url = "https://panopticon.soopy.moe/api/v1/write";
22
-
services.vmagent.extraArgs = [ "-remoteWrite.bearerTokenFile=%d/auth_token" ];
23
-
services.vmagent.prometheusConfig = {
24
-
global.scrape_interval = "30s";
25
-
26
-
scrape_configs = [
27
-
{
28
-
job_name = "node";
29
-
static_configs = [
30
-
{ targets = [ "localhost:${builtins.toString config.services.prometheus.exporters.node.port}" ]; }
31
-
];
32
-
relabel_configs = [
33
-
{
34
-
target_label = "instance";
35
-
replacement = "${hostname}.d.soopy.moe";
36
-
}
37
-
];
38
-
}
39
-
];
40
-
};
41
-
42
-
systemd.services.vmagent.serviceConfig.LoadCredential = [
43
-
"auth_token:${secrets.get "auth"}"
44
-
];
45
-
}
46
-
47
-
secrets.generate
48
-
]
49
-
);
50
-
}
···
-14
global/gensokyo/traits.nix
-14
global/gensokyo/traits.nix
···
1
-
{ lib, ... }:
2
-
{
3
-
options.gensokyo.traits = {
4
-
sensitive = lib.mkEnableOption "or selectively disable options specific to security-sensitive systems";
5
-
gui = lib.mkEnableOption "graphical programs, related packages and modules";
6
-
games = lib.mkEnableOption "games and etc";
7
-
hidpi = lib.mkEnableOption "options tailored for hidpi devices";
8
-
portable = lib.mkEnableOption ''
9
-
modules commonly found with portable devices.
10
-
11
-
This includes stuff like Wifi modules and etc
12
-
'';
13
-
};
14
-
}
···
-34
global/gui/audio.nix
-34
global/gui/audio.nix
···
1
-
{
2
-
pkgs,
3
-
lib,
4
-
config,
5
-
...
6
-
}:
7
-
lib.mkIf config.gensokyo.traits.gui {
8
-
services = {
9
-
pipewire = {
10
-
enable = true;
11
-
12
-
audio.enable = true;
13
-
jack.enable = true;
14
-
pulse.enable = true;
15
-
alsa = {
16
-
enable = true;
17
-
support32Bit = true;
18
-
};
19
-
20
-
wireplumber.configPackages = [
21
-
# why aren't these consistent
22
-
(pkgs.writeTextDir "share/wireplumber/wireplumber.conf.d/50-disable-alsa-suspend.conf" ''
23
-
monitor.alsa.rules = [{
24
-
matches = [{node.name = "~alsa_output.*"}]
25
-
actions = {
26
-
update-props = {session.suspend-timeout-seconds = 0}
27
-
}
28
-
}]
29
-
'')
30
-
];
31
-
};
32
-
};
33
-
security.rtkit.enable = true;
34
-
}
···
-11
global/gui/browser.nix
-11
global/gui/browser.nix
-24
global/gui/default.nix
-24
global/gui/default.nix
···
1
-
{ ... }:
2
-
{
3
-
imports = [
4
-
./power.nix
5
-
./hardware.nix
6
-
./input.nix
7
-
./audio.nix
8
-
9
-
./wine.nix
10
-
./locale.nix
11
-
12
-
./dm.nix
13
-
./wayland.nix
14
-
./niri.nix
15
-
./kde.nix
16
-
./fonts.nix
17
-
18
-
./browser.nix
19
-
./development.nix
20
-
21
-
./degeneracy.nix
22
-
./packages.nix
23
-
];
24
-
}
···
-21
global/gui/degeneracy.nix
-21
global/gui/degeneracy.nix
···
1
-
{
2
-
pkgs,
3
-
lib,
4
-
config,
5
-
...
6
-
}:
7
-
lib.mkIf config.gensokyo.traits.gui {
8
-
environment.systemPackages = [
9
-
pkgs.dosage-tracker
10
-
pkgs.signal-desktop
11
-
(pkgs.discord.override {
12
-
withOpenASAR = true;
13
-
})
14
-
];
15
-
16
-
# some things work better with flatpaks
17
-
services.flatpak.enable = true;
18
-
19
-
# this is in degeneracy because no one likes printers
20
-
services.printing.enable = true;
21
-
}
···
-16
global/gui/development.nix
-16
global/gui/development.nix
-20
global/gui/dm.nix
-20
global/gui/dm.nix
···
1
-
{
2
-
config,
3
-
lib,
4
-
# pkgs,
5
-
...
6
-
}:
7
-
lib.mkIf config.gensokyo.traits.gui {
8
-
services.displayManager.sddm = {
9
-
enable = true;
10
-
autoNumlock = true;
11
-
wayland.enable = true;
12
-
# theme = "catppuccin-frappe";
13
-
};
14
-
15
-
# environment.systemPackages = [
16
-
# (pkgs.catppuccin-sddm.override {
17
-
# flavor = "frappe";
18
-
# })
19
-
# ];
20
-
}
···
-46
global/gui/fonts.nix
-46
global/gui/fonts.nix
···
1
-
{
2
-
pkgs,
3
-
lib,
4
-
config,
5
-
# inputs,
6
-
...
7
-
}:
8
-
lib.mkIf config.gensokyo.traits.gui {
9
-
fonts.packages = with pkgs; [
10
-
nerd-fonts.hurmit
11
-
nerd-fonts.fira-mono
12
-
13
-
cozette
14
-
fira-code
15
-
noto-fonts
16
-
noto-fonts-cjk-sans
17
-
noto-fonts-emoji-blob-bin
18
-
19
-
last-resort
20
-
# inputs.mystia.packages.${pkgs.system}.nishiki-teki
21
-
];
22
-
23
-
fonts.fontconfig = {
24
-
localConf = ''
25
-
<?xml version="1.0"?>
26
-
<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
27
-
<fontconfig>
28
-
<!-- XML is stupid -->
29
-
30
-
<alias binding="same">
31
-
<family>Nishiki-Teki</family>
32
-
<prefer>
33
-
<family>Noto Sans CJK JP</family>
34
-
</prefer>
35
-
<default><family>sans-serif</family></default>
36
-
</alias>
37
-
38
-
<selectfont>
39
-
<rejectfont>
40
-
<pattern><patelt name="family"><string>FreeMono</string></patelt></pattern>
41
-
</rejectfont>
42
-
</selectfont>
43
-
</fontconfig>
44
-
'';
45
-
};
46
-
}
···
-16
global/gui/hardware.nix
-16
global/gui/hardware.nix
-24
global/gui/input.nix
-24
global/gui/input.nix
···
1
-
{
2
-
pkgs,
3
-
lib,
4
-
config,
5
-
...
6
-
}:
7
-
lib.mkIf config.gensokyo.traits.gui {
8
-
i18n.inputMethod = {
9
-
enable = true;
10
-
type = "fcitx5";
11
-
12
-
fcitx5 = {
13
-
waylandFrontend = true;
14
-
addons = with pkgs; [
15
-
fcitx5-mozc
16
-
fcitx5-rime
17
-
];
18
-
};
19
-
};
20
-
21
-
environment.systemPackages = [
22
-
pkgs.showmethekey
23
-
];
24
-
}
···
-17
global/gui/kde.nix
-17
global/gui/kde.nix
···
1
-
{
2
-
lib,
3
-
config,
4
-
pkgs,
5
-
...
6
-
}:
7
-
lib.mkIf config.gensokyo.traits.gui {
8
-
services.desktopManager.plasma6.enable = true;
9
-
10
-
environment.systemPackages = with pkgs.kdePackages; [
11
-
qtmultimedia # this fixes something but i forgot what
12
-
13
-
kalk
14
-
kdf
15
-
kmime
16
-
];
17
-
}
···
-8
global/gui/locale.nix
-8
global/gui/locale.nix
-4
global/gui/niri.nix
-4
global/gui/niri.nix
-17
global/gui/packages.nix
-17
global/gui/packages.nix
-29
global/gui/power.nix
-29
global/gui/power.nix
···
1
-
{
2
-
lib,
3
-
config,
4
-
...
5
-
}:
6
-
lib.mkIf config.gensokyo.traits.gui {
7
-
services.logind = {
8
-
# settings.Login = {
9
-
# KillUserProcesses = false;
10
-
# HandleSuspendKey = "lock";
11
-
# HandleHibernateKey = "lock";
12
-
# HandleLidSwitch = "lock";
13
-
# IdleAction = "lock";
14
-
# };
15
-
};
16
-
17
-
# hopefully eradicate buggy shid
18
-
systemd.targets =
19
-
lib.genAttrs
20
-
[
21
-
# "sleep"
22
-
# "suspend"
23
-
"hibernate"
24
-
"hybrid-sleep"
25
-
]
26
-
(_: {
27
-
enable = false;
28
-
});
29
-
}
···
-12
global/gui/wayland.nix
-12
global/gui/wayland.nix
-18
global/gui/wine.nix
-18
global/gui/wine.nix
···
1
-
{
2
-
config,
3
-
lib,
4
-
pkgs,
5
-
...
6
-
}:
7
-
lib.mkIf config.gensokyo.traits.gui {
8
-
environment.systemPackages = [
9
-
pkgs.wineWowPackages.full
10
-
pkgs.winetricks
11
-
12
-
pkgs.umu-launcher
13
-
14
-
(pkgs.bottles.override {
15
-
removeWarningPopup = true;
16
-
})
17
-
];
18
-
}
···
-20
global/home.nix
-20
global/home.nix
···
1
-
{
2
-
config,
3
-
inputs,
4
-
...
5
-
}:
6
-
{
7
-
home-manager = {
8
-
useGlobalPkgs = true;
9
-
useUserPackages = true;
10
-
verbose = true;
11
-
12
-
sharedModules = [
13
-
inputs.catppuccin.homeModules.catppuccin
14
-
];
15
-
16
-
extraSpecialArgs = {
17
-
inherit (config.gensokyo) traits;
18
-
};
19
-
};
20
-
}
···
+5
-5
global/overlays/default.nix
+5
-5
global/overlays/default.nix
+9
global/programs/compilers.nix
+9
global/programs/compilers.nix
+4
-8
global/programs/default.nix
+4
-8
global/programs/default.nix
+2
-8
global/programs/editors.nix
+2
-8
global/programs/editors.nix
+7
global/programs/gpg.nix
+7
global/programs/gpg.nix
+7
-35
global/programs/misc.nix
+7
-35
global/programs/misc.nix
···
1
-
{ pkgs, ... }:
2
-
{
3
# Miscellaneous packages that do not have an option.
4
# It is recommended to use packages.<package>.enable when possible.
5
6
environment.systemPackages = with pkgs; [
7
-
# junk
8
wget
9
curl
10
-
xh
11
-
gh
12
-
nil
13
-
nvd
14
-
nix-output-monitor
15
-
python3
16
-
ffmpeg-full
17
-
ghostty.terminfo
18
19
-
# irc
20
-
catgirl
21
-
pounce
22
-
23
-
# basic sysadmin utils
24
-
jq
25
file
26
ripgrep
27
ack
28
-
dust
29
-
parallel
30
-
cryptsetup
31
-
borgbackup
32
-
doggo
33
-
libarchive
34
-
unar
35
-
man-pages
36
-
htop-vim
37
38
-
# security
39
-
openssl
40
-
yubikey-manager
41
-
sops
42
-
opensc
43
-
44
-
# deno
45
deno
46
47
-
# command runners and utilities
48
just
49
-
inotify-tools
50
];
51
52
programs.mtr.enable = true;
···
1
+
{pkgs, ...}: {
2
# Miscellaneous packages that do not have an option.
3
# It is recommended to use packages.<package>.enable when possible.
4
5
+
# To search for a specific package, run this command.
6
+
# $ nix search wget
7
environment.systemPackages = with pkgs; [
8
wget
9
curl
10
11
file
12
ripgrep
13
ack
14
15
deno
16
17
+
nvd
18
just
19
+
20
+
attic
21
+
git-crypt
22
];
23
24
programs.mtr.enable = true;
+1
-4
global/programs/multiplexers.nix
+1
-4
global/programs/multiplexers.nix
-55
global/programs/networking.nix
-55
global/programs/networking.nix
···
1
-
{
2
-
lib,
3
-
config,
4
-
pkgs,
5
-
...
6
-
}:
7
-
lib.mkMerge [
8
-
{
9
-
networking.networkmanager.enable = true;
10
-
networking.domain = "d.soopy.moe";
11
-
12
-
services.avahi = {
13
-
enable = true;
14
-
nssmdns4 = true;
15
-
};
16
-
17
-
services.tailscale.enable = true;
18
-
services.tailscale.useRoutingFeatures = "both";
19
-
20
-
# disable broken services
21
-
systemd.services.NetworkManager-wait-online.enable = false;
22
-
23
-
# reduce spam
24
-
networking.firewall.logRefusedConnections = lib.mkDefault false;
25
-
26
-
# use tcp bbr for increased throughput
27
-
boot.kernel.sysctl = {
28
-
"net.core.default_qdisc" = "fq";
29
-
"net.ipv4.tcp_congestion_control" = "bbr";
30
-
};
31
-
}
32
-
33
-
(lib.mkIf config.gensokyo.traits.portable {
34
-
networking.networkmanager.wifi.backend = "wpa_supplicant";
35
-
})
36
-
37
-
# TODO: maybe we should move these to /global/gui?
38
-
(lib.mkIf config.gensokyo.traits.gui {
39
-
networking.networkmanager.plugins = with pkgs; [
40
-
networkmanager-openconnect
41
-
];
42
-
})
43
-
44
-
(lib.mkIf (!config.gensokyo.traits.sensitive) {
45
-
services.avahi = {
46
-
publish.enable = true;
47
-
};
48
-
})
49
-
50
-
{
51
-
networking.hosts = {
52
-
"217.197.84.140" = [ "codeberg.org" ];
53
-
};
54
-
}
55
-
]
···
-71
global/programs/nix/config.nix
-71
global/programs/nix/config.nix
···
1
-
{
2
-
inputs,
3
-
config,
4
-
pkgs,
5
-
lib,
6
-
...
7
-
}:
8
-
# some items are sourced from https://jackson.dev/post/nix-reasonable-defaults/
9
-
lib.mkMerge [
10
-
{
11
-
nix.package = pkgs.nixVersions.latest;
12
-
13
-
nix.settings = {
14
-
experimental-features = [
15
-
"nix-command"
16
-
"flakes"
17
-
"ca-derivations"
18
-
];
19
-
20
-
allowed-uris = [
21
-
"github:"
22
-
"git+https://patchy.soopy.moe/"
23
-
"git+https://github.com/"
24
-
"git+ssh://github.com/"
25
-
];
26
-
27
-
substituters = [
28
-
"https://cache.soopy.moe"
29
-
];
30
-
31
-
trusted-substituters = [
32
-
"https://cache.soopy.moe"
33
-
];
34
-
35
-
trusted-public-keys = [
36
-
"cache.soopy.moe-1:0RZVsQeR+GOh0VQI9rvnHz55nVXkFardDqfm4+afjPo="
37
-
];
38
-
39
-
fallback = true;
40
-
connect-timeout = 30;
41
-
max-jobs = "auto";
42
-
auto-optimise-store = true;
43
-
download-buffer-size = 268435456; # 256 MiB
44
-
45
-
trace-import-from-derivation = true;
46
-
};
47
-
48
-
nix.gc = {
49
-
automatic = true;
50
-
dates = "weekly";
51
-
};
52
-
53
-
nix.registry = {
54
-
n.flake = inputs.nixpkgs;
55
-
}
56
-
// (builtins.mapAttrs (_: flake: { inherit flake; }) (
57
-
lib.filterAttrs (n: _: n != "nixpkgs") inputs
58
-
));
59
-
60
-
# nix-index[-database]
61
-
programs.nix-index.enable = true;
62
-
programs.nix-index-database.comma.enable = true;
63
-
}
64
-
65
-
(lib.mkIf (!config.gensokyo.traits.sensitive) {
66
-
nix.settings.trusted-users = [
67
-
"@wheel"
68
-
"builder"
69
-
];
70
-
})
71
-
]
···
-7
global/programs/nix/default.nix
-7
global/programs/nix/default.nix
-70
global/programs/nix/dist-builds.nix
-70
global/programs/nix/dist-builds.nix
···
1
-
# Like distcc but not really
2
-
{
3
-
lib,
4
-
inputs,
5
-
config,
6
-
hostname,
7
-
...
8
-
}:
9
-
let
10
-
baselineFeatures = [
11
-
"big-parallel"
12
-
"ca-derivations"
13
-
];
14
-
15
-
mkBuildMachines =
16
-
attr:
17
-
let
18
-
cleanAttr = builtins.removeAttrs attr [ hostname ];
19
-
in
20
-
lib.mapAttrsToList (
21
-
name: value:
22
-
{
23
-
hostName = name + ".mist-nessie.ts.net";
24
-
25
-
protocol = "ssh"; # nevermind we need hydra
26
-
sshUser = "builder";
27
-
sshKey = config.sops.secrets.builder_key.path;
28
-
29
-
speedFactor = 1;
30
-
maxJobs = 2;
31
-
supportedFeatures = baselineFeatures;
32
-
33
-
systems = [
34
-
"i686-linux"
35
-
"x86_64-linux"
36
-
];
37
-
}
38
-
// value
39
-
) cleanAttr;
40
-
in
41
-
{
42
-
sops.secrets.builder_key = {
43
-
sopsFile = inputs.self + "/creds/sops/global/id_builder";
44
-
format = "binary";
45
-
};
46
-
47
-
nix.distributedBuilds = true;
48
-
nix.settings.builders-use-substitutes = true;
49
-
nix.buildMachines = mkBuildMachines {
50
-
renko = {
51
-
supportedFeatures = baselineFeatures ++ [
52
-
"kvm"
53
-
"nixos-test"
54
-
];
55
-
speedFactor = 5;
56
-
publicHostKey = "c3NoLWVkMjU1MTkgQUFBQUMzTnphQzFsWkRJMU5URTVBQUFBSUoreGNleXA4YnRVNnd0dThpRUFKMkZ4cm5rZlBsS1M3TWFJL2xLT0ZuUDEgcm9vdEByZW5rbwo=";
57
-
};
58
-
nijika = {
59
-
systems = [ "aarch64-linux" ];
60
-
publicHostKey = "c3NoLWVkMjU1MTkgQUFBQUMzTnphQzFsWkRJMU5URTVBQUFBSVBsWGZ5MnMxejRIQ05oem92Rk55UzBhcCtyMEF2ZzAzNDlKeFFjMW0xaFEK";
61
-
};
62
-
};
63
-
64
-
services.openssh.extraConfig = lib.mkAfter ''
65
-
Match User builder
66
-
Banner none
67
-
PasswordAuthentication no
68
-
KbdInteractiveAuthentication no
69
-
'';
70
-
}
···
+33
global/programs/nix.nix
+33
global/programs/nix.nix
···
···
1
+
{pkgs, ...}:
2
+
# some items are sourced from https://jackson.dev/post/nix-reasonable-defaults/
3
+
{
4
+
nix.settings = {
5
+
experimental-features = [
6
+
"nix-command"
7
+
"flakes"
8
+
"repl-flake"
9
+
];
10
+
11
+
substituters = [
12
+
"https://nonbunary.soopy.moe/gensokyo-systems/"
13
+
"https://nonbunary.soopy.moe/gensokyo-global/"
14
+
];
15
+
16
+
trusted-substituters = [
17
+
"https://nonbunary.soopy.moe/gensokyo-systems/"
18
+
"https://nonbunary.soopy.moe/gensokyo-global/"
19
+
];
20
+
21
+
trusted-public-keys = [
22
+
"gensokyo-systems:r/Wx649dPuQrCN9Pgh3Jic526zQNk3oWMqYJHnob/Ok="
23
+
"gensokyo-global:XiCN0D2XeSxF4urFYTprR+1Nr/5hWyydcETwZtPG6Ec="
24
+
];
25
+
26
+
fallback = true;
27
+
connect-timeout = 30;
28
+
max-jobs = "auto";
29
+
auto-optimise-store = true;
30
+
};
31
+
32
+
nix.package = pkgs.nixFlakes;
33
+
}
+1
-8
global/programs/scm.nix
+1
-8
global/programs/scm.nix
···
1
-
{ pkgs, ... }:
2
-
{
3
programs.git = {
4
enable = true;
5
config = {
6
init.defaultBranch = "main";
7
push.autoSetupRemote = true;
8
-
gpg.ssh.allowedSignersFile = pkgs.writeText "soopyc.allowedsigners" ''
9
-
me@soopy.moe namespaces="git" ${builtins.readFile ../../creds/ssh/auth}
10
-
git@soopy.moe namespaces="git" ${builtins.readFile ../../creds/ssh/auth}
11
-
'';
12
-
13
-
rebase.autoStash = true;
14
};
15
};
16
}
-19
global/programs/security/crypto.nix
-19
global/programs/security/crypto.nix
···
1
-
# crypto stands for cryptography, not cryptocurrency
2
-
{ pkgs, ... }:
3
-
{
4
-
environment.systemPackages = with pkgs; [
5
-
gnupg
6
-
pinentry-curses
7
-
pinentry-qt
8
-
opensc
9
-
10
-
rage
11
-
age-plugin-yubikey
12
-
];
13
-
14
-
programs.gnupg.agent.enable = true;
15
-
# ideally this should be set automatically but in case that doesn't work
16
-
#programs.gnupg.agent.pinentryFlavor = "curses"; # we don't have a gui.
17
-
18
-
services.pcscd.enable = true;
19
-
}
···
-9
global/programs/security/default.nix
-9
global/programs/security/default.nix
-17
global/programs/security/firewall.nix
-17
global/programs/security/firewall.nix
···
1
-
{ ... }:
2
-
{
3
-
imports = [
4
-
./ip-bans.nix
5
-
];
6
-
7
-
networking.firewall = {
8
-
enable = true;
9
-
10
-
# this was never needed because ts has been bypassing the firewall anyways. (by being higher on the list.)
11
-
# trustedInterfaces = [
12
-
# "tailscale0"
13
-
# ];
14
-
};
15
-
16
-
# services.openssh.openFirewall = false;
17
-
}
···
-32
global/programs/security/ip-bans.nix
-32
global/programs/security/ip-bans.nix
···
1
-
{ lib, ... }:
2
-
let
3
-
banned = {
4
-
ip = [
5
-
"156.229.232.142" # added 2025-04-10: minecraft server scanner with 30m intervals
6
-
"156.146.63.199" # added 2025-04-11: minecraft server scanner, found no contact methods
7
-
"167.86.121.64" # added 2025-04-24: minecraft server pinger, does not properly disconnect, no contacts
8
-
];
9
-
ip6 = [ ];
10
-
};
11
-
in
12
-
{
13
-
networking.firewall.extraCommands = builtins.concatStringsSep "\n" (
14
-
[
15
-
# i'd be damned if they rename the helper, but i also cba writing it *again*, for the same util to show up
16
-
# 3 times in the final script.
17
-
"ip46tables -N gensokyo-blackhole"
18
-
"ip46tables -I INPUT -j gensokyo-blackhole"
19
-
]
20
-
++ lib.flatten (
21
-
lib.mapAttrsToList (
22
-
family: ips: builtins.map (ip: "${family}tables -w -I gensokyo-blackhole -s ${ip} -j DROP") ips
23
-
) banned
24
-
)
25
-
);
26
-
27
-
networking.firewall.extraStopCommands = ''
28
-
ip46tables -D INPUT -j gensokyo-blackhole || true
29
-
ip46tables -F gensokyo-blackhole || true
30
-
ip46tables -X gensokyo-blackhole || true
31
-
'';
32
-
}
···
-10
global/programs/security/kanidm.nix
-10
global/programs/security/kanidm.nix
-18
global/programs/security/pam.nix
-18
global/programs/security/pam.nix
···
-7
global/programs/security/sudo.nix
-7
global/programs/security/sudo.nix
+1
-16
global/programs/shells.nix
+1
-16
global/programs/shells.nix
···
1
-
{ pkgs, lib, ... }:
2
-
{
3
users.defaultUserShell = pkgs.zsh;
4
programs.zsh = {
5
enable = true;
···
23
enable = true;
24
settings = builtins.fromTOML (builtins.readFile ./starship.toml);
25
};
26
-
27
-
programs.direnv = {
28
-
enable = true;
29
-
nix-direnv.enable = true;
30
-
};
31
-
32
-
programs.pay-respects = {
33
-
enable = true;
34
-
alias = "fuck";
35
-
aiIntegration = lib.mkForce false;
36
-
};
37
-
38
-
# conflicts with comma
39
-
programs.command-not-found.enable = false;
40
}
+1
-39
global/programs/ssh.nix
+1
-39
global/programs/ssh.nix
···
1
-
{ config, ... }:
2
-
let
3
-
nixos = config.system.nixos;
4
-
in
5
-
{
6
# Enable the OpenSSH daemon.
7
services.openssh = {
8
enable = true;
9
settings = {
10
PermitRootLogin = "no";
11
PasswordAuthentication = false;
12
-
PubkeyAcceptedAlgorithms = "sk-ssh-ed25519@openssh.com,ssh-ed25519";
13
};
14
-
15
-
banner = ''
16
-
-----BEGIN BANNER-----
17
-
# Welcome to ${config.system.name}
18
-
# ${nixos.distroName} ${nixos.codeName} (${nixos.label})
19
-
i Trans rights are human rights
20
-
21
-
! You are currently accessing an internal resource. Your connection
22
-
! information, including but not limited to your authenticating IP address,
23
-
! username and the user you're attempting to log into are recorded.
24
-
! Disconnect IMMEDIATELY if you are not part of the authorized personnel.
25
-
26
-
i Contact:
27
-
i [Matrix] @sophie:nue.soopy.moe
28
-
i [Email] me@soopy.moe
29
-
------END BANNER------
30
-
'';
31
};
32
-
33
-
programs.ssh = {
34
-
startAgent = true;
35
-
pubkeyAcceptedKeyTypes = [
36
-
"ssh-ed25519"
37
-
"sk-ssh-ed25519@openssh.com"
38
-
];
39
-
# enableAskPassword = true;
40
-
41
-
extraConfig = ''
42
-
ConnectTimeout 5
43
-
''; # if things exceed 5 seconds to connect something has gone wrong. Fail fast to not wait.
44
-
};
45
-
46
-
# i did not consent to having this automatically enabled
47
-
services.gnome.gcr-ssh-agent.enable = false;
48
}
+15
-50
global/programs/starship.toml
+15
-50
global/programs/starship.toml
···
3
4
# Inserts a blank line between shell prompts
5
add_newline = true
6
-
right_format = """$os $shell $direnv"""
7
8
# Replace the 'โฏ' symbol in the prompt with 'โ'
9
[character] # The name of the module we are configuring is 'character'
10
success_symbol = '[โ](bold green)' # The 'success_symbol' segment is being set to 'โ' with the color 'bold green'
11
error_symbol = '[โ](bold red)'
12
13
-
[os]
14
-
disabled = false
15
-
style = "bold blue"
16
-
format = "on [$symbol($name)]($style)"
17
-
18
-
[[battery.display]]
19
-
threshold = 30
20
-
style = "bold red"
21
-
22
-
[[battery.display]]
23
-
threshold = 60
24
-
style = "bold yellow"
25
-
26
-
[[battery.display]]
27
-
threshold = 80
28
-
style = "bold green"
29
-
30
[username]
31
show_always = true
32
···
37
map_symbol = true
38
pipestatus = true
39
40
-
sigint_symbol = '๎'
41
-
not_executable_symbol = "๏"
42
-
not_found_symbol = '๏จ'
43
-
signal_symbol = '๏ง'
44
45
-
[shell]
46
-
disabled = false
47
-
format = 'with [๓ฐ $indicator]($style)'
48
-
style = 'bold green'
49
-
50
-
[nix_shell]
51
-
symbol = "๏ "
52
-
format = 'via [$symbol$name$state]($style) '
53
-
impure_msg = ''
54
-
pure_msg = '(pure)'
55
-
unknown_msg = '(?)'
56
-
heuristic = true
57
-
58
-
[hostname]
59
-
ssh_symbol = "๓ฐ "
60
-
ssh_only = false
61
62
[time]
63
disabled = false
64
65
[cmd_duration]
66
min_time = 0
67
-
show_milliseconds = true
68
-
69
-
[direnv]
70
-
disabled = false
71
-
style = "bold orange"
72
-
format = "with [$symbol$allowed]($style)"
73
-
allowed_msg = "๏" # loaded and accepted by user
74
-
not_allowed_msg = "๏จ" # loaded, user never allowed/denied
75
-
denied_msg = "๏" # loaded, user explicitly denied
76
77
[aws]
78
symbol = "๎ฝ "
···
121
122
[hg_branch]
123
symbol = "๏ "
124
[java]
125
symbol = "๎ "
126
···
138
139
[nim]
140
symbol = "๓ฐฅ "
141
142
[nodejs]
143
symbol = "๎ "
···
186
[package]
187
symbol = "๓ฐ "
188
189
-
[pijul_channel] # ????
190
symbol = "๐ชบ "
191
192
[python]
···
206
207
[spack]
208
symbol = "๐
ข "
209
-
210
-
# vim:foldmethod=marker
···
3
4
# Inserts a blank line between shell prompts
5
add_newline = true
6
7
# Replace the 'โฏ' symbol in the prompt with 'โ'
8
[character] # The name of the module we are configuring is 'character'
9
success_symbol = '[โ](bold green)' # The 'success_symbol' segment is being set to 'โ' with the color 'bold green'
10
error_symbol = '[โ](bold red)'
11
12
[username]
13
show_always = true
14
···
19
map_symbol = true
20
pipestatus = true
21
22
+
sigint_symbol = '^C'
23
+
not_found_symbol = '?'
24
+
signal_symbol = 'SIG'
25
26
+
[[battery.display]]
27
+
threshold = 100
28
+
style = "bold green"
29
30
[time]
31
disabled = false
32
33
[cmd_duration]
34
min_time = 0
35
36
[aws]
37
symbol = "๎ฝ "
···
80
81
[hg_branch]
82
symbol = "๏ "
83
+
84
+
[hostname]
85
+
ssh_symbol = "๎ฌ "
86
+
ssh_only = false
87
+
88
[java]
89
symbol = "๎ "
90
···
102
103
[nim]
104
symbol = "๓ฐฅ "
105
+
106
+
[nix_shell]
107
+
symbol = "๏ "
108
109
[nodejs]
110
symbol = "๎ "
···
153
[package]
154
symbol = "๓ฐ "
155
156
+
[pijul_channel]
157
symbol = "๐ชบ "
158
159
[python]
···
173
174
[spack]
175
symbol = "๐
ข "
-25
global/programs/system-manager/default.nix
-25
global/programs/system-manager/default.nix
···
1
-
{
2
-
pkgs,
3
-
config,
4
-
lib,
5
-
...
6
-
}:
7
-
let
8
-
types = lib.types;
9
-
cfg = config.gensokyo.system-manager;
10
-
in
11
-
{
12
-
options.gensokyo.system-manager = {
13
-
enable = lib.mkEnableOption "a shortcut to manage the system no matter where you are (in the system)";
14
-
flakeLocation = lib.mkOption {
15
-
type = types.path;
16
-
description = "The location of your system flake to manage.";
17
-
};
18
-
};
19
-
20
-
config = lib.mkIf cfg.enable {
21
-
environment.systemPackages = [
22
-
(pkgs.callPackage ./package.nix { inherit (cfg) flakeLocation; })
23
-
];
24
-
};
25
-
}
···
-25
global/programs/system-manager/package.nix
-25
global/programs/system-manager/package.nix
···
1
-
{
2
-
lib,
3
-
writeShellApplication,
4
-
flakeLocation,
5
-
}:
6
-
writeShellApplication {
7
-
name = "system";
8
-
meta = {
9
-
description = "A shortcut to run `just` in the local system flake directory.";
10
-
license = lib.licenses.cc0;
11
-
maintainers = with lib.maintainers; [ soopyc ];
12
-
};
13
-
14
-
# we could make this more robust by not using `just` and (hardcode?) commands in, but this is by far the easiest
15
-
# and the most versatile method. if it works, it works and i'm not going to overcomplicate this
16
-
text = ''
17
-
if [ ! -e ${flakeLocation} ]; then
18
-
echo "Could not find flake at ${flakeLocation}. Please reconfigure your system."
19
-
exit 1
20
-
fi
21
-
22
-
cd ${flakeLocation}
23
-
just "''${@:--l}"
24
-
'';
25
-
}
···
-9
global/sops.nix
-9
global/sops.nix
+4
global/system/firmware.nix
+4
global/system/firmware.nix
+2
-11
global/upgrade-diff.nix
+2
-11
global/upgrade-diff.nix
···
1
# Thank you https://github.com/luishfonseca/dotfiles/blob/ab7625ec406b48493eda701911ad1cd017ce5bc1/modules/upgrade-diff.nix
2
-
{
3
-
lib,
4
-
pkgs,
5
-
...
6
-
}:
7
-
{
8
system.activationScripts.diff = {
9
supportsDryActivation = true;
10
text = ''
11
-
if [[ -e /run/current-system ]]; then
12
-
${lib.getExe pkgs.nvd} --color always --nix-bin-dir=${pkgs.nix}/bin diff /run/current-system "$systemConfig"
13
-
else
14
-
echo "Couldn't find /run/current-system. Are we booting? Exiting gracefully."
15
-
fi
16
'';
17
};
18
}
···
1
# Thank you https://github.com/luishfonseca/dotfiles/blob/ab7625ec406b48493eda701911ad1cd017ce5bc1/modules/upgrade-diff.nix
2
+
{pkgs, ...}: {
3
system.activationScripts.diff = {
4
supportsDryActivation = true;
5
text = ''
6
+
${pkgs.nvd}/bin/nvd --nix-bin-dir=${pkgs.nix}/bin diff /run/current-system "$systemConfig"
7
'';
8
};
9
}
+23
-133
global/utils.nix
+23
-133
global/utils.nix
···
1
-
# Copyright (c) 2023 soopyc
2
-
# Permission is given to copy and use under the terms of Apache 2.0.
3
-
#
4
-
# you may copy-paste this entire file to anywhere else. just keep the comments.
5
-
# see /docs/src/utils/ for a usage guide
6
{
7
inputs,
8
system,
9
...
10
-
}:
11
-
let
12
-
pkgs = inputs.nixpkgs.legacyPackages.${system};
13
-
lib = pkgs.lib;
14
-
in
15
-
rec {
16
-
mkVhost =
17
-
opts:
18
lib.mkMerge [
19
{
20
forceSSL = lib.mkDefault true;
21
useACMEHost = lib.mkDefault "global.c.soopy.moe";
22
kTLS = lib.mkDefault true;
23
-
quic = lib.mkDefault true;
24
25
locations."/_cgi/error/" = {
26
alias = "${inputs.mystia.packages.${system}.staticly}/nginx_error_pages/";
27
};
28
-
29
-
# To override, mkForce {}
30
-
locations."= /robots.txt" = mkNginxFile {
31
-
filename = "robots.txt";
32
-
content = ''
33
-
# Please stop hammering and/or scraping our services.
34
-
User-Agent: *
35
-
Disallow: /
36
-
'';
37
-
};
38
-
39
extraConfig = ''
40
error_page 503 /_cgi/error/503.html;
41
error_page 502 /_cgi/error/502.html;
42
error_page 404 /_cgi/error/404.html;
43
-
add_header strict-transport-security "max-age=63072000; includeSubDomains; preload" always;
44
-
add_header alt-svc 'h3=":443";ma=86400' always;
45
'';
46
}
47
opts
48
];
49
50
-
mkSimpleProxy =
51
-
{
52
-
protocol ? "http",
53
-
host ? "localhost",
54
-
port ? null,
55
-
socketPath ? null,
56
-
location ? "/",
57
-
websockets ? false,
58
-
extraConfig ? { },
59
-
}:
60
-
assert lib.assertMsg (
61
-
port != null || socketPath != null
62
-
) "one of port or socketPath must be specified";
63
-
# i dislike logic gates
64
-
assert lib.assertMsg (
65
-
!(port != null && socketPath != null)
66
-
) "only one of port or socketPath may be specified at the same time";
67
-
assert lib.assertMsg (
68
-
socketPath != null -> host == "localhost"
69
-
) "setting host has no effect when socketPath is set";
70
-
assert lib.assertMsg (port != null -> builtins.isInt port) "port must be an integer if specified";
71
-
mkVhost (
72
-
lib.mkMerge [
73
-
extraConfig
74
-
{
75
-
locations."${location}" = {
76
-
proxyPass =
77
-
"${protocol}://"
78
-
+ (if (socketPath == null) then "${host}:${builtins.toString port}" else "unix:${socketPath}");
79
-
proxyWebsockets = websockets;
80
-
};
81
-
}
82
-
]
83
-
);
84
-
85
-
setupSecrets =
86
-
_config:
87
-
{
88
-
namespace ? (
89
-
lib.warn "secret namespace left as default, which is empty. it is encouraged to set a namespace for easier secret management. to override, explicitly set this to an empty value." ""
90
-
),
91
-
secrets,
92
-
config ? { },
93
-
}:
94
-
let
95
-
_r_ns = namespace + lib.optionalString (lib.stringLength namespace != 0) "/";
96
-
check =
97
-
path:
98
-
assert lib.assertMsg (lib.elem path secrets)
99
-
"secret path `${path}` is not defined in namespace `${namespace}`. (resolved to: ${_r_ns}${path})";
100
-
path;
101
-
getRealPath = path: _r_ns + check path;
102
-
in
103
-
builtins.addErrorContext "while setting up secrets with namespace ${namespace}" {
104
-
generate = {
105
-
sops.secrets = genSecrets namespace secrets config;
106
-
}; # i love trolling
107
-
get = path: _config.sops.secrets.${getRealPath path}.path;
108
-
109
-
placeholder = path: _config.sops.placeholder.${getRealPath path};
110
-
getTemplate = file: _config.sops.templates.${file}.path;
111
-
mkTemplate =
112
-
file: content:
113
-
builtins.addErrorContext "while generating sops template ${file}" {
114
-
sops.templates.${file} = {
115
-
inherit content;
116
-
}
117
-
// (builtins.removeAttrs config [ "content" ]);
118
-
# // (lib.optionalAttrs (builtins.hasAttr "owner" config) {inherit (config) owner;})
119
-
# // (lib.optionalAttrs (builtins.hasAttr "group" config) {inherit (config) group;});
120
-
};
121
-
};
122
-
123
-
genSecrets =
124
-
namespace: files: value:
125
-
lib.genAttrs (map (
126
-
x: namespace + lib.optionalString (lib.stringLength namespace != 0) "/" + x
127
-
) files) (_: value);
128
-
129
-
mkNginxFile =
130
-
{
131
-
filename ? "index.html",
132
-
content,
133
-
}:
134
-
builtins.addErrorContext "while creating a static nginx file ${filename}" (
135
-
let
136
-
contentDir =
137
-
assert lib.assertMsg (
138
-
builtins.typeOf content == "string"
139
-
) "content must be a string, got `${builtins.typeOf content}`";
140
-
builtins.toString (pkgs.writeTextDir filename content) + "/";
141
-
in
142
{
143
-
alias = contentDir;
144
-
tryFiles = "${filename} =500"; # if it can't find the file something has gone wrong.
145
}
146
-
);
147
148
-
mkNginxJSON =
149
-
filename: attrset:
150
-
builtins.addErrorContext "while creating a static nginx JSON file ${filename}" (
151
-
assert lib.assertMsg (
152
-
builtins.typeOf attrset == "set"
153
-
) "expected argument type `set`, got `${builtins.typeOf attrset}` instead.";
154
-
mkNginxFile {
155
-
inherit filename;
156
-
content = builtins.toJSON attrset;
157
-
}
158
-
);
159
}
···
1
+
# see /docs/utils.md for a usage guide
2
{
3
inputs,
4
system,
5
...
6
+
}: let
7
+
lib = inputs.nixpkgs.lib;
8
+
in rec {
9
+
mkVhost = opts:
10
lib.mkMerge [
11
{
12
forceSSL = lib.mkDefault true;
13
useACMEHost = lib.mkDefault "global.c.soopy.moe";
14
kTLS = lib.mkDefault true;
15
16
locations."/_cgi/error/" = {
17
alias = "${inputs.mystia.packages.${system}.staticly}/nginx_error_pages/";
18
};
19
extraConfig = ''
20
error_page 503 /_cgi/error/503.html;
21
error_page 502 /_cgi/error/502.html;
22
error_page 404 /_cgi/error/404.html;
23
'';
24
}
25
opts
26
];
27
28
+
mkSimpleProxy = {
29
+
port,
30
+
protocol ? "http",
31
+
location ? "/",
32
+
websockets ? false,
33
+
extraConfig ? {},
34
+
}:
35
+
mkVhost (lib.mkMerge [
36
+
extraConfig
37
{
38
+
locations."${location}" = {
39
+
proxyPass = "${protocol}://localhost:${toString port}";
40
+
proxyWebsockets = websockets;
41
+
};
42
}
43
+
]);
44
45
+
genSecrets = namespace: files: value:
46
+
lib.genAttrs (
47
+
map (x: namespace + lib.optionalString (lib.stringLength namespace != 0) "/" + x) files
48
+
) (_: value);
49
}
+13
-79
justfile
+13
-79
justfile
···
1
# friendship ended with Makefile
2
# I LOVE justFILE!!!!!!
3
4
-
# modules are unstable atm
5
-
# mod utils
6
-
7
-
true := "true"
8
-
9
# build the current configuration
10
-
build system="" +extra_args="":
11
-
nixos-rebuild -v -L --keep-going --accept-flake-config --log-format internal-json --flake .#{{system}} build \
12
-
{{extra_args}} |& nom --json
13
-
{{ if system == "" {"nvd diff /run/current-system result"} else {""} }}
14
-
15
-
# evaluate the configuration for a system
16
-
eval system:
17
-
nix eval .#nixosConfigurations.{{system}}.config.system.build.toplevel
18
19
# build and test the configuration, but don't switch
20
-
test system="":
21
-
nixos-rebuild -v -L test --flake .#{{system}} --accept-flake-config
22
-
23
-
deploy system:
24
-
nixos-rebuild switch --flake .#{{system}} --target-host {{system}} --use-remote-sudo -v -L --use-substitutes
25
-
26
-
dry-deploy system:
27
-
nixos-rebuild build --flake .#{{system}} --target-host {{system}} --use-remote-sudo -v -L --use-substitutes
28
29
# switch to the current configuration
30
-
switch system="": sudo_cache
31
-
sudo nixos-rebuild -v -L switch --flake .#{{system}} --accept-flake-config --keep-going
32
-
33
-
sw: switch
34
-
35
-
# literally nixos-rebuild boot with a different name
36
-
defer system="": sudo_cache
37
-
sudo nixos-rebuild -v -L boot --flake .#{{system}} --accept-flake-config
38
-
39
-
build-all: (for-all-systems 'build' 'true')
40
-
deploy-all: (for-all-systems 'deploy' '!system.config.gensokyo.traits.sensitive && (system.config.nixpkgs.hostPlatform.system == builtins.currentSystem)' true)
41
-
eval-all: (for-all-systems 'eval' 'true')
42
-
43
-
# check the flake
44
-
check:
45
-
nix flake check
46
-
47
-
# delete old nixos generations and GCs the store.
48
-
gc older_than="3d": sudo_cache
49
-
sudo nix profile wipe-history --profile /nix/var/nix/profiles/system --older-than {{older_than}}
50
-
sudo nix store gc -vL
51
52
# run utility programs
53
-
utils recipe="list" +extras="":
54
-
@echo "Running utils/{{recipe}}"
55
-
@just -d utils -f utils/justfile {{recipe}} {{extras}}
56
-
57
-
# commit ephemeral/auto-generated files
58
-
ephemeral:
59
-
git commit --gpg-sign -m "chore: update ephemeral files" users/cassie/ephemeral/
60
61
# update an input in the flake lockfile
62
update-input input:
63
-
nix flake lock --update-input {{input}}
64
-
65
-
# update everything in flake.lock and commit that
66
-
flake-update:
67
-
nix flake update --commit-lock-file
68
-
69
-
# list changes in the current config vs the system config
70
-
diff:
71
-
nvd diff /run/current-system result
72
-
73
-
# build a vm for a system
74
-
vm system run="true" bootloader="false":
75
-
nixos-rebuild -v -L build-vm{{if bootloader == "true" {"-with-bootloader"} else {""} }} --flake .#{{system}}
76
-
{{if run == true {"./result/bin/run-"+system+"-vm"} else {""} }}
77
-
78
-
[private]
79
-
sudo_cache:
80
-
@sudo -v
81
82
-
[private]
83
-
for-all-systems recipe filter ignore_failure="false":
84
-
#!/usr/bin/env bash
85
-
set -euxo pipefail
86
-
for system in $(nix eval --impure --apply 'configs: builtins.map (system: system.config.networking.hostName) (builtins.filter (system: {{filter}}) (builtins.attrValues configs))' .#nixosConfigurations --json | jq '.[]' | xargs); do
87
-
set +e
88
-
just {{recipe}} ${system}
89
-
if [ {{ if ignore_failure == true {""} else {"$? -ne 0 -o"} }} $? -eq 130 ]; then
90
-
exit 1;
91
-
fi
92
-
set -e
93
-
done
···
1
# friendship ended with Makefile
2
# I LOVE justFILE!!!!!!
3
4
# build the current configuration
5
+
build:
6
+
nixos-rebuild build --flake .#
7
8
# build and test the configuration, but don't switch
9
+
test:
10
+
nixos-rebuild test --flake .#
11
12
# switch to the current configuration
13
+
switch:
14
+
nixos-rebuild switch --flake .#
15
16
# run utility programs
17
+
utils recipe="list":
18
+
@echo "Running utils/{{recipe}}"
19
+
@cd utils && just {{recipe}}
20
21
# update an input in the flake lockfile
22
update-input input:
23
+
nix flake lock --update-input {{input}}
24
25
+
# build the flake on a non-nixos platform
26
+
ebuild system:
27
+
nix build -j8 .#nixosConfigurations."{{system}}".config.system.build.toplevel
modules/.gitkeep
modules/.gitkeep
This is a binary file and will not be displayed.
-22
nix/checks.nix
-22
nix/checks.nix
···
1
-
{
2
-
inputs,
3
-
pkgs,
4
-
}:
5
-
{
6
-
deadcode = pkgs.stdenvNoCC.mkDerivation {
7
-
name = "deadcode_check";
8
-
src = inputs.self;
9
-
dontPatch = true;
10
-
dontConfigure = true;
11
-
12
-
buildInputs = with pkgs; [ deadnix ];
13
-
buildPhase = ''
14
-
set -euo pipefail
15
-
16
-
deadnix -f .
17
-
echo "All done!"
18
-
'';
19
-
20
-
installPhase = "touch $out";
21
-
};
22
-
}
···
-17
nix/devshell.nix
-17
nix/devshell.nix
-5
nix/treefmt.nix
-5
nix/treefmt.nix
+2
-5
nix.code-workspace
+2
-5
nix.code-workspace
-41
systems/default.nix
-41
systems/default.nix
···
1
-
{
2
-
lib,
3
-
inputs,
4
-
...
5
-
}:
6
-
let
7
-
utils = import ../global/utils.nix;
8
-
9
-
mkSystem =
10
-
hostname: system:
11
-
lib.nixosSystem {
12
-
specialArgs = {
13
-
inherit inputs;
14
-
15
-
hostname = hostname;
16
-
_utils = utils { inherit inputs system; };
17
-
};
18
-
19
-
modules = [
20
-
../global
21
-
./${hostname}/configuration.nix
22
-
./${hostname}/hardware-configuration.nix
23
-
24
-
{
25
-
home-manager.extraSpecialArgs = { inherit inputs; };
26
-
networking.hostName = hostname;
27
-
nixpkgs.hostPlatform = lib.mkDefault system; # ensure we detect conflicts
28
-
}
29
-
];
30
-
};
31
-
in
32
-
{
33
-
koumakan = mkSystem "koumakan" "x86_64-linux";
34
-
satori = mkSystem "satori" "x86_64-linux";
35
-
renko = mkSystem "renko" "x86_64-linux";
36
-
37
-
# cloud servers
38
-
kita = mkSystem "kita" "x86_64-linux";
39
-
ryo = mkSystem "ryo" "x86_64-linux";
40
-
# nijika = mkSystem "nijika" "aarch64-linux";
41
-
}
···
-7
systems/kita/certificates/default.nix
-7
systems/kita/certificates/default.nix
-14
systems/kita/certificates/mail.nix
-14
systems/kita/certificates/mail.nix
-14
systems/kita/certificates/web.nix
-14
systems/kita/certificates/web.nix
-17
systems/kita/configuration.nix
-17
systems/kita/configuration.nix
-16
systems/kita/hardware-configuration.nix
-16
systems/kita/hardware-configuration.nix
···
1
-
{ modulesPath, ... }:
2
-
{
3
-
imports = [ (modulesPath + "/profiles/qemu-guest.nix") ];
4
-
boot.loader.grub.device = "/dev/sda";
5
-
boot.initrd.availableKernelModules = [
6
-
"ata_piix"
7
-
"uhci_hcd"
8
-
"xen_blkfront"
9
-
"vmw_pvscsi"
10
-
];
11
-
boot.initrd.kernelModules = [ "nvme" ];
12
-
fileSystems."/" = {
13
-
device = "/dev/sda1";
14
-
fsType = "ext4";
15
-
};
16
-
}
···
-52
systems/kita/networking.nix
-52
systems/kita/networking.nix
···
1
-
{ lib, ... }:
2
-
{
3
-
# This file was populated at runtime with the networking
4
-
# details gathered from the active system.
5
-
networking = {
6
-
nameservers = [
7
-
"8.8.8.8"
8
-
];
9
-
defaultGateway = "172.31.1.1";
10
-
defaultGateway6 = {
11
-
address = "fe80::1";
12
-
interface = "eth0";
13
-
};
14
-
dhcpcd.enable = false;
15
-
usePredictableInterfaceNames = lib.mkForce false;
16
-
interfaces = {
17
-
eth0 = {
18
-
ipv4.addresses = [
19
-
{
20
-
address = "188.245.74.198";
21
-
prefixLength = 32;
22
-
}
23
-
];
24
-
ipv6.addresses = [
25
-
{
26
-
address = "2a01:4f8:1c1c:cc9d::cafe";
27
-
prefixLength = 64;
28
-
}
29
-
{
30
-
address = "fe80::9400:3ff:fe8b:9312";
31
-
prefixLength = 64;
32
-
}
33
-
];
34
-
ipv4.routes = [
35
-
{
36
-
address = "172.31.1.1";
37
-
prefixLength = 32;
38
-
}
39
-
];
40
-
ipv6.routes = [
41
-
{
42
-
address = "fe80::1";
43
-
prefixLength = 128;
44
-
}
45
-
];
46
-
};
47
-
};
48
-
};
49
-
services.udev.extraRules = ''
50
-
ATTR{address}=="96:00:03:8b:93:12", NAME="eth0"
51
-
'';
52
-
}
···
-12
systems/kita/services/default.nix
-12
systems/kita/services/default.nix
-21
systems/kita/services/dns.nix
-21
systems/kita/services/dns.nix
···
1
-
{ ... }:
2
-
{
3
-
services.pdns-recursor = {
4
-
enable = true;
5
-
6
-
dns = {
7
-
allowFrom = [
8
-
"127.0.0.0/8"
9
-
"10.0.0.0/8"
10
-
"100.64.0.0/10"
11
-
"169.254.0.0/16"
12
-
"192.168.0.0/16"
13
-
"172.16.0.0/12"
14
-
"::1/128"
15
-
"fc00::/7"
16
-
"fe80::/10"
17
-
"100.64.0.0/10" # tailscale
18
-
];
19
-
};
20
-
};
21
-
}
···
-16
systems/kita/services/fallback_page/default.nix
-16
systems/kita/services/fallback_page/default.nix
···
1
-
{
2
-
pkgs,
3
-
_utils,
4
-
...
5
-
}:
6
-
{
7
-
services.nginx.virtualHosts."_" = _utils.mkVhost {
8
-
useACMEHost = "kita-web.c.soopy.moe";
9
-
default = true;
10
-
11
-
locations."/" = {
12
-
root = pkgs.callPackage ./package.nix { };
13
-
tryFiles = "$uri $uri/index.html $uri.html =404";
14
-
};
15
-
};
16
-
}
···
systems/kita/services/fallback_page/image.png
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
-14
systems/kita/services/fallback_page/index.html
···
1
-
<!doctype html>
2
-
<html lang="en">
3
-
<head>
4
-
<title>bokitar</title>
5
-
<meta name="description" content="gay women" />
6
-
<style>
7
-
img {width: 100%; height: 100%; object-fit: contain;}
8
-
</style>
9
-
</head>
10
-
11
-
<body>
12
-
<a href="https://www.pixiv.net/en/artworks/115773010"><img src="image.png" alt="Bocchi and Kita from the anime Bocchi the Rock sitting on some bench of a train." /></a>
13
-
</body>
14
-
</html>
···
-10
systems/kita/services/fallback_page/package.nix
-10
systems/kita/services/fallback_page/package.nix
-76
systems/kita/services/gatus.nix
-76
systems/kita/services/gatus.nix
···
1
-
{
2
-
_utils,
3
-
config,
4
-
...
5
-
}:
6
-
let
7
-
mkHttpEndpoint = name: group: url: {
8
-
inherit name url group;
9
-
enabled = true;
10
-
method = "GET";
11
-
conditions = [
12
-
"[STATUS] < 300"
13
-
"[CONNECTED] == true"
14
-
];
15
-
};
16
-
in
17
-
{
18
-
services.gatus = {
19
-
enable = true;
20
-
settings = {
21
-
storage.type = "sqlite";
22
-
storage.path = "/var/lib/gatus/data.db";
23
-
web.port = 33234;
24
-
ui = {
25
-
title = "Vitals | Gensokyo";
26
-
description = "Health checking of Gensokyo services, powered by Gatus.";
27
-
header = "Vitals";
28
-
buttons = [
29
-
{
30
-
name = "Incident Reports";
31
-
link = "https://status.soopy.moe";
32
-
}
33
-
];
34
-
};
35
-
36
-
endpoints = [
37
-
(mkHttpEndpoint "Main Site" "core" "https://soopy.moe")
38
-
39
-
(mkHttpEndpoint "Gateway (Kanidm)" "koumakan" "https://gateway.soopy.moe" // { enabled = false; }) # TODO
40
-
(mkHttpEndpoint "Patchy (Forgejo)" "koumakan" "https://patchy.soopy.moe")
41
-
(mkHttpEndpoint "Suika (Grafana)" "koumakan" "https://suika.soopy.moe/login")
42
-
(mkHttpEndpoint "Nue (Synapse)" "koumakan" "https://nue.soopy.moe/health")
43
-
(mkHttpEndpoint "Miniflux" "koumakan" "https://flux.soopy.moe")
44
-
(mkHttpEndpoint "Bluesky PDS" "koumakan" "https://bsky.soopy.moe/xrpc/_health")
45
-
(mkHttpEndpoint "Blog (Writefreely)" "koumakan" "https://words.soopy.moe")
46
-
(mkHttpEndpoint "Vaultwarden" "koumakan" "https://v.soopy.moe")
47
-
(mkHttpEndpoint "BreezeWiki" "koumakan" "https://bw.soopy.moe")
48
-
49
-
(mkHttpEndpoint "Webmail" "kita" "https://webmail.soopy.moe")
50
-
(mkHttpEndpoint "Radicale" "kita" "https://dav.soopy.moe/.web/")
51
-
{
52
-
enabled = true;
53
-
name = "Maddy";
54
-
group = "kita";
55
-
url = "starttls://mx2.soopy.moe:587";
56
-
interval = "5m";
57
-
conditions = [
58
-
"[CONNECTED] == true"
59
-
"[CERTIFICATE_EXPIRATION] > 10d"
60
-
];
61
-
}
62
-
63
-
(mkHttpEndpoint "Hydra" "bocchi" "https://hydra.soopy.moe")
64
-
65
-
(mkHttpEndpoint "noVNC" "ryo" "https://ryo.soopy.moe/vnc_lite.html")
66
-
];
67
-
};
68
-
};
69
-
70
-
services.nginx.virtualHosts."miku.soopy.moe" = _utils.mkSimpleProxy {
71
-
port = config.services.gatus.settings.web.port;
72
-
extraConfig = {
73
-
useACMEHost = "kita-web.c.soopy.moe";
74
-
};
75
-
};
76
-
}
···
-10
systems/kita/services/mail/default.nix
-10
systems/kita/services/mail/default.nix
-188
systems/kita/services/mail/maddy.nix
-188
systems/kita/services/mail/maddy.nix
···
1
-
{ config, ... }:
2
-
{
3
-
services.maddy = {
4
-
enable = true;
5
-
hostname = "mx2.soopy.moe";
6
-
primaryDomain = "soopy.moe";
7
-
localDomains = [
8
-
"$(primary_domain)"
9
-
"services.soopy.moe"
10
-
];
11
-
12
-
tls = {
13
-
loader = "file";
14
-
certificates = [
15
-
{
16
-
certPath = config.security.acme.certs."kita.c.soopy.moe".directory + "/fullchain.pem";
17
-
keyPath = config.security.acme.certs."kita.c.soopy.moe".directory + "/key.pem";
18
-
}
19
-
];
20
-
};
21
-
22
-
config = ''
23
-
auth.pass_table local_authdb {
24
-
table sql_table {
25
-
driver sqlite3
26
-
dsn credentials.db
27
-
table_name passwords
28
-
}
29
-
}
30
-
31
-
storage.imapsql local_mailboxes {
32
-
driver sqlite3
33
-
dsn imapsql.db
34
-
}
35
-
36
-
table.chain local_rewrites {
37
-
optional_step regexp "(.+)\+(.+)@(.+)" "$1@$3"
38
-
optional_step static {
39
-
entry postmaster postmaster@$(primary_domain)
40
-
}
41
-
optional_step file /etc/maddy/aliases
42
-
}
43
-
44
-
# catchall routing - thanks:
45
-
# https://github.com/foxcpp/maddy/issues/243#issuecomment-1406567636
46
-
msgpipeline local_routing {
47
-
# mailing list lmtp here
48
-
49
-
check {
50
-
rspamd
51
-
}
52
-
53
-
# do the rewrite so + addressing and stuff are correctly handled
54
-
modify {
55
-
replace_rcpt &local_rewrites
56
-
}
57
-
58
-
# destination_in block takes priority over destinations
59
-
destination_in &local_mailboxes {
60
-
deliver_to &local_mailboxes
61
-
}
62
-
63
-
# deliver to final address if we handle the domain
64
-
destination $(local_domains) {
65
-
modify {
66
-
replace_rcpt regexp ".*" "cassie@soopy.moe"
67
-
}
68
-
deliver_to &local_mailboxes
69
-
}
70
-
71
-
default_destination {
72
-
reject 550 5.1.1 "User doesn't exist"
73
-
}
74
-
}
75
-
76
-
smtp tcp://0.0.0.0:25 {
77
-
limits {
78
-
# Up to 20 msgs/sec across max. 10 SMTP connections
79
-
all rate 20 1s
80
-
all concurrency 10
81
-
}
82
-
83
-
# checks
84
-
dmarc yes
85
-
check {
86
-
require_mx_record
87
-
dkim
88
-
spf
89
-
}
90
-
91
-
source $(local_domains) {
92
-
reject 501 5.1.8 "Use internal submission port for outgoing SMTP"
93
-
}
94
-
default_source {
95
-
destination postmaster $(local_domains) {
96
-
deliver_to &local_routing
97
-
}
98
-
default_destination {
99
-
reject 550 5.1.1 "User doesn't exist"
100
-
}
101
-
}
102
-
}
103
-
104
-
# enable port 465 implicit tls and 587 submission
105
-
submission tls://0.0.0.0:465 tcp://0.0.0.0:587 {
106
-
limits {
107
-
all rate 50 1s
108
-
}
109
-
auth &local_authdb
110
-
source $(local_domains) {
111
-
check {
112
-
authorize_sender {
113
-
prepare_email &local_rewrites
114
-
user_to_email identity
115
-
}
116
-
}
117
-
destination postmaster $(local_domains) {
118
-
deliver_to &local_routing
119
-
}
120
-
default_destination {
121
-
# https://maddy.email/reference/modifiers/dkim/
122
-
modify {
123
-
modify.dkim {
124
-
domains $(primary_domain) $(local_domains)
125
-
selector 240821-rsa
126
-
newkey_algo rsa2048
127
-
}
128
-
modify.dkim {
129
-
domains $(primary_domain) $(local_domains)
130
-
selector 240821-ed
131
-
newkey_algo ed25519
132
-
}
133
-
}
134
-
135
-
deliver_to &remote_queue
136
-
}
137
-
}
138
-
default_source {
139
-
reject 501 5.1.8 "Non-local sender domain"
140
-
}
141
-
}
142
-
143
-
target.remote outbound_delivery {
144
-
limits {
145
-
destination rate 20 1s
146
-
destination concurrency 10
147
-
}
148
-
mx_auth {
149
-
dane
150
-
mtasts {
151
-
cache fs
152
-
fs_dir mtasts_cache/
153
-
}
154
-
local_policy {
155
-
min_tls_level encrypted
156
-
min_mx_level none
157
-
}
158
-
}
159
-
}
160
-
161
-
target.queue remote_queue {
162
-
target &outbound_delivery
163
-
autogenerated_msg_domain $(primary_domain)
164
-
bounce {
165
-
destination postmaster $(local_domains) {
166
-
deliver_to &local_routing
167
-
}
168
-
default_destination {
169
-
reject 550 5.0.0 "Refusing to send DSNs to non-local addresses"
170
-
}
171
-
}
172
-
}
173
-
174
-
# implicit tls port 993 imap
175
-
imap tls://0.0.0.0:993 {
176
-
auth &local_authdb
177
-
storage &local_mailboxes
178
-
}
179
-
'';
180
-
};
181
-
182
-
networking.firewall.allowedTCPPorts = [
183
-
25 # smtp
184
-
465 # submissions
185
-
587 # submission (starttls)
186
-
993 # imaps
187
-
];
188
-
}
···
-17
systems/kita/services/mail/mta-sts.nix
-17
systems/kita/services/mail/mta-sts.nix
···
1
-
# mail-transfer-agent strict transport security policy
2
-
{ _utils, ... }:
3
-
{
4
-
services.nginx.virtualHosts."mta-sts.soopy.moe" = _utils.mkVhost {
5
-
useACMEHost = "kita-web.c.soopy.moe";
6
-
7
-
locations."/.well-known/" = _utils.mkNginxFile {
8
-
content = ''
9
-
version: STSv1
10
-
mode: enforce
11
-
max_age: 604800
12
-
mx: mx2.soopy.moe
13
-
'';
14
-
filename = "mta-sts.txt";
15
-
};
16
-
};
17
-
}
···
-45
systems/kita/services/mail/roundcube.nix
-45
systems/kita/services/mail/roundcube.nix
···
1
-
{
2
-
pkgs,
3
-
_utils,
4
-
...
5
-
}:
6
-
{
7
-
services.roundcube = {
8
-
enable = true;
9
-
package = pkgs.roundcube.withPlugins (
10
-
plugins: with plugins; [
11
-
carddav
12
-
contextmenu
13
-
]
14
-
);
15
-
dicts = with pkgs.aspellDicts; [ en ];
16
-
hostName = "webmail.soopy.moe";
17
-
18
-
extraConfig = ''
19
-
// ssl means implicit tls, NOT ssl. see roundcube docs for details.
20
-
$config['imap_host'] = [
21
-
'ssl://mx2.soopy.moe:993' => 'Gensokyo Mail Exchange',
22
-
];
23
-
// TODO: setup smtp and add related stuff here
24
-
$config['product_name'] = 'GensoNet Webmail';
25
-
$config['support_url'] = 'https://soopy.moe';
26
-
$config['prefer_html'] = false;
27
-
$config['plugins'] = [
28
-
'archive',
29
-
'emoticons',
30
-
'filesystem_attachments',
31
-
'hide_blockquote',
32
-
'identicon',
33
-
'newmail_notifier',
34
-
'reconnect',
35
-
'carddav',
36
-
'managesieve',
37
-
];
38
-
'';
39
-
};
40
-
41
-
services.nginx.virtualHosts."webmail.soopy.moe" = _utils.mkVhost {
42
-
enableACME = false;
43
-
useACMEHost = "kita-web.c.soopy.moe";
44
-
};
45
-
}
···
-54
systems/kita/services/mail/rspamd.nix
-54
systems/kita/services/mail/rspamd.nix
···
1
-
{
2
-
config,
3
-
_utils,
4
-
...
5
-
}:
6
-
let
7
-
secrets = _utils.setupSecrets config {
8
-
namespace = "rspamd";
9
-
secrets = [ "controller_passwd" ];
10
-
config.owner = config.users.users.rspamd.name;
11
-
};
12
-
in
13
-
{
14
-
imports = [
15
-
secrets.generate
16
-
(secrets.mkTemplate "rspamd-controller-pwd.inc" ''
17
-
password = "${secrets.placeholder "controller_passwd"}";
18
-
'')
19
-
];
20
-
services.rspamd = {
21
-
enable = true;
22
-
locals = {
23
-
"redis.conf".text = ''
24
-
servers = "${config.services.redis.servers.rspamd.unixSocket}";
25
-
'';
26
-
27
-
"milter_headers.conf".text = ''
28
-
use = ["x-spamd-result", "x-spamd-bar", "x-spam-status"];
29
-
'';
30
-
31
-
# global options, which is different from sections
32
-
"options.inc".text = ''
33
-
dns {
34
-
nameserver = "127.0.0.1:53";
35
-
}
36
-
'';
37
-
};
38
-
workers."controller".extraConfig = ''
39
-
.include(try=false; priority=10) "${secrets.getTemplate "rspamd-controller-pwd.inc"}"
40
-
'';
41
-
42
-
workers."normal".bindSockets = [ "127.0.0.1:11333" ];
43
-
};
44
-
45
-
services.redis.servers.rspamd.enable = true;
46
-
users.groups.redis-rspamd.members = [
47
-
config.users.users.rspamd.name
48
-
];
49
-
50
-
services.nginx.virtualHosts."_".locations."/rspamd" = {
51
-
proxyPass = "http://localhost:11334"; # maybe expose this to tailnet instead
52
-
extraConfig = "rewrite /rspamd/(.*) /$1 break;";
53
-
};
54
-
}
···
-14
systems/kita/services/postgresql.nix
-14
systems/kita/services/postgresql.nix
···
1
-
{ pkgs, ... }:
2
-
{
3
-
services.postgresql = {
4
-
enable = true;
5
-
package = pkgs.postgresql_16; # we like to specify a package so we know what we're using.
6
-
ensureUsers = [
7
-
{
8
-
name = "maildb";
9
-
ensureDBOwnership = true;
10
-
}
11
-
];
12
-
ensureDatabases = [ "maildb" ];
13
-
};
14
-
}
···
-27
systems/kita/services/radicale.nix
-27
systems/kita/services/radicale.nix
···
1
-
{ _utils, ... }:
2
-
{
3
-
services.radicale = {
4
-
enable = true;
5
-
settings = {
6
-
auth = {
7
-
type = "htpasswd";
8
-
htpasswd_filename = "/etc/radicale/users";
9
-
htpasswd_encryption = "bcrypt";
10
-
};
11
-
storage = {
12
-
filesystem_folder = "/var/lib/radicale/collections"; # match StateDirectory
13
-
};
14
-
rights.type = "owner_only"; # make this explicit
15
-
};
16
-
};
17
-
18
-
systemd.tmpfiles.rules = [
19
-
"d /etc/radicale 0700 radicale" # rest parameters can be ignored/omitted as it's the same as setting a - value.
20
-
# will need to manually create a htpasswd file there but it should be fine. best case scenario is to use sops but i'm tired of dealing with it.
21
-
];
22
-
23
-
services.nginx.virtualHosts."dav.soopy.moe" = _utils.mkSimpleProxy {
24
-
port = 5232;
25
-
extraConfig.useACMEHost = "kita-web.c.soopy.moe";
26
-
};
27
-
}
···
-6
systems/koumakan/administration/default.nix
-6
systems/koumakan/administration/default.nix
-19
systems/koumakan/administration/telemetry.nix
-19
systems/koumakan/administration/telemetry.nix
···
1
-
{ ... }:
2
-
{
3
-
services.prometheus.exporters = {
4
-
node = {
5
-
enable = true;
6
-
listenAddress = "127.0.0.1";
7
-
port = 20091;
8
-
enabledCollectors = [
9
-
"systemd"
10
-
];
11
-
};
12
-
13
-
nginx = {
14
-
enable = true;
15
-
listenAddress = "127.0.0.1";
16
-
port = 20101;
17
-
};
18
-
};
19
-
}
···
-11
systems/koumakan/certificates/breezewiki.nix
-11
systems/koumakan/certificates/breezewiki.nix
-11
systems/koumakan/certificates/bsky-pds.nix
-11
systems/koumakan/certificates/bsky-pds.nix
+21
-5
systems/koumakan/certificates/default.nix
+21
-5
systems/koumakan/certificates/default.nix
···
1
+
{...}: {
2
imports = [
3
./global.nix
4
+
./postgresql.nix
5
./fediverse.nix
6
];
7
+
8
+
security.acme = {
9
+
defaults = {
10
+
# == lego Configuration ==
11
+
credentialsFile = "/etc/lego/desec";
12
+
dnsProvider = "desec";
13
+
# In a more ideal world we would have an eddsa algo here but oh well
14
+
keyType = "ec256"; # Ensure we use ec keys
15
+
16
+
dnsResolver = "8.8.8.8:53";
17
+
18
+
# == LE Configuration ==
19
+
email = "me@soopy.moe";
20
+
# server = "https://acme-staging-v02.api.letsencrypt.org/directory";
21
+
server = "https://acme-v02.api.letsencrypt.org/directory";
22
+
};
23
+
24
+
acceptTerms = true;
25
+
};
26
}
+4
-3
systems/koumakan/certificates/fediverse.nix
+4
-3
systems/koumakan/certificates/fediverse.nix
-10
systems/koumakan/certificates/garage-s3.nix
-10
systems/koumakan/certificates/garage-s3.nix
+1
-2
systems/koumakan/certificates/global.nix
+1
-2
systems/koumakan/certificates/global.nix
+8
-13
systems/koumakan/certificates/postgresql.nix
+8
-13
systems/koumakan/certificates/postgresql.nix
···
1
-
# WARN: unused. see default.nix
2
-
3
-
{ config, ... }:
4
-
{
5
# PostgreSQL only certificate
6
security.acme.certs."phant.soopy.moe" = {
7
group = "postgres";
···
12
13
# https://nixos.org/manual/nixos/stable/#module-security-acme-root-owned
14
systemd.services.postgresql = {
15
-
requires = [ "acme-finished-phant.soopy.moe.target" ];
16
-
serviceConfig.LoadCredential =
17
-
let
18
-
certDir = config.security.acme.certs."phant.soopy.moe".directory;
19
-
in
20
-
[
21
-
"cert.pem:${certDir}/cert.pem"
22
-
"key.pem:${certDir}/key.pem"
23
-
];
24
};
25
}
···
1
+
{config, ...}: {
2
# PostgreSQL only certificate
3
security.acme.certs."phant.soopy.moe" = {
4
group = "postgres";
···
9
10
# https://nixos.org/manual/nixos/stable/#module-security-acme-root-owned
11
systemd.services.postgresql = {
12
+
requires = ["acme-finished-phant.soopy.moe.target"];
13
+
serviceConfig.LoadCredential = let
14
+
certDir = config.security.acme.certs."phant.soopy.moe".directory;
15
+
in [
16
+
"cert.pem:${certDir}/cert.pem"
17
+
"key.pem:${certDir}/key.pem"
18
+
];
19
};
20
}
+21
-18
systems/koumakan/configuration.nix
+21
-18
systems/koumakan/configuration.nix
···
1
-
{ inputs, ... }:
2
-
{
3
imports = [
4
-
inputs.mystia.nixosModules.fixups
5
-
inputs.mystia.nixosModules.vmauth
6
-
inputs.mystia.nixosModules.bsky-pds
7
-
inputs.hydra.nixosModules.hydra
8
-
inputs.whitelisted-web.nixosModules.default
9
-
inputs.knotserver-module.nixosModules.default
10
-
11
./hardware-configuration.nix
12
13
./networking
14
./certificates
15
./security
16
./services
17
-
18
-
./administration
19
];
20
21
-
gensokyo.traits = {
22
-
sensitive = true;
23
-
};
24
-
gensokyo.presets.secureboot = true;
25
-
gensokyo.presets.certificates = true;
26
27
boot.loader = {
28
efi = {
29
canTouchEfiVariables = true;
30
-
efiSysMountPoint = "/boot";
31
};
32
systemd-boot = {
33
enable = true;
34
graceful = true;
35
-
# netbootxyz.enable = true;
36
};
37
grub.enable = false;
38
};
39
40
# Just don't change this :p
41
system.stateVersion = "23.05"; # Did you read the comment?
···
1
+
{inputs, ...}: {
2
imports = [
3
+
# Include the results of the hardware scan.
4
./hardware-configuration.nix
5
+
6
+
../../global/core.nix
7
+
../../global/programs
8
9
./networking
10
./certificates
11
./security
12
./services
13
];
14
15
+
nixpkgs.overlays = import ../../global/overlays inputs;
16
17
boot.loader = {
18
efi = {
19
canTouchEfiVariables = true;
20
+
efiSysMountPoint = "/boot/efi";
21
};
22
systemd-boot = {
23
enable = true;
24
graceful = true;
25
+
netbootxyz.enable = true;
26
};
27
grub.enable = false;
28
};
29
+
30
+
# Define a user account. Don't forget to set a password with โpasswdโ.
31
+
users.users.cassie = {
32
+
isNormalUser = true;
33
+
extraGroups = ["wheel"];
34
+
openssh = {
35
+
authorizedKeys.keyFiles = [../../creds/ssh/cassie];
36
+
};
37
+
# packages = with pkgs; [];
38
+
};
39
+
40
+
sops.age.sshKeyPaths = ["/etc/ssh/ssh_host_ed25519_key"];
41
+
sops.defaultSopsFile = ../../creds/sops/koumakan.yaml;
42
43
# Just don't change this :p
44
system.stateVersion = "23.05"; # Did you read the comment?
+27
systems/koumakan/default.nix
+27
systems/koumakan/default.nix
···
···
1
+
{
2
+
lib,
3
+
utils,
4
+
inputs,
5
+
...
6
+
}:
7
+
lib.nixosSystem {
8
+
system = "x86_64-linux";
9
+
10
+
# see docs/tips_n_tricks.md#extra_opts for syntax
11
+
# see docs/utils.md for functions
12
+
specialArgs = {
13
+
inherit inputs;
14
+
_utils = utils {
15
+
inherit inputs;
16
+
system = "x86_64-linux";
17
+
};
18
+
};
19
+
20
+
modules = [
21
+
inputs.lanzaboote.nixosModules.lanzaboote
22
+
inputs.attic.nixosModules.atticd
23
+
inputs.sops-nix.nixosModules.sops
24
+
25
+
./configuration.nix
26
+
];
27
+
}
+39
-24
systems/koumakan/hardware-configuration.nix
+39
-24
systems/koumakan/hardware-configuration.nix
···
4
{
5
config,
6
lib,
7
modulesPath,
8
...
9
-
}:
10
-
{
11
imports = [
12
(modulesPath + "/installer/scan/not-detected.nix")
13
];
14
15
-
boot.initrd.availableKernelModules = [
16
-
"xhci_pci"
17
-
"ehci_pci"
18
-
"ahci"
19
-
"usbhid"
20
-
"usb_storage"
21
-
"sd_mod"
22
-
"sr_mod"
23
-
];
24
-
boot.initrd.kernelModules = [ ];
25
-
boot.kernelModules = [ "kvm-intel" ];
26
-
boot.extraModulePackages = [ ];
27
28
fileSystems."/" = {
29
-
device = "/dev/disk/by-uuid/738969fe-b2a0-4fa1-9ac5-69f2a25536e7";
30
fsType = "btrfs";
31
};
32
33
fileSystems."/boot" = {
34
-
device = "/dev/disk/by-uuid/62FD-C60A";
35
fsType = "vfat";
36
-
options = [
37
-
"fmask=0022"
38
-
"dmask=0022"
39
-
];
40
};
41
42
-
fileSystems."/var/lib/garage/data" = {
43
-
device = "/dev/disk/by-uuid/99607c97-0dc6-403e-b09a-7b40735f9176";
44
-
fsType = "xfs";
45
};
46
47
swapDevices = [
48
-
{ device = "/dev/disk/by-uuid/902b902d-3486-49de-9a58-7a079c9a090d"; }
49
];
50
51
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
···
53
# still possible to use this option, but it's recommended to use it in conjunction
54
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
55
networking.useDHCP = lib.mkDefault true;
56
# networking.interfaces.eno1.useDHCP = lib.mkDefault true;
57
58
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
59
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
60
}
···
4
{
5
config,
6
lib,
7
+
pkgs,
8
modulesPath,
9
...
10
+
}: {
11
imports = [
12
(modulesPath + "/installer/scan/not-detected.nix")
13
];
14
15
+
boot.initrd.availableKernelModules = ["xhci_pci" "ahci" "usbhid" "sr_mod"];
16
+
boot.initrd.kernelModules = ["dm-snapshot"];
17
+
boot.kernelModules = ["kvm-intel"];
18
+
boot.extraModulePackages = [];
19
20
fileSystems."/" = {
21
+
device = "/dev/disk/by-uuid/0b38be0c-5365-4f02-85b8-72f37bb2ddf8";
22
+
fsType = "btrfs";
23
+
};
24
+
25
+
fileSystems."/var/log" = {
26
+
device = "/dev/disk/by-uuid/e6ff7c96-3bef-4a17-9114-64ef1460fc00";
27
+
fsType = "btrfs";
28
+
};
29
+
30
+
fileSystems."/var/log/audit" = {
31
+
device = "/dev/disk/by-uuid/a20e2995-7297-4f69-af89-b58ff314e029";
32
+
fsType = "btrfs";
33
+
};
34
+
35
+
fileSystems."/srv/osm-data" = {
36
+
device = "/dev/disk/by-uuid/3c1a8b58-fbe6-4522-8e27-72419b3c2d6f";
37
fsType = "btrfs";
38
};
39
40
fileSystems."/boot" = {
41
+
device = "/dev/disk/by-uuid/9E0F-3FDE";
42
fsType = "vfat";
43
+
};
44
+
45
+
fileSystems."/boot/efi" = {
46
+
device = "/dev/disk/by-uuid/9EB1-FA5A";
47
+
fsType = "vfat";
48
+
};
49
+
50
+
fileSystems."/srv/www/keine" = {
51
+
device = "/dev/disk/by-uuid/0a0e102a-b1ac-44a2-947b-2ec505b532ad";
52
+
fsType = "btrfs";
53
};
54
55
+
fileSystems."/home" = {
56
+
device = "/dev/disk/by-uuid/50165105-6b82-4228-9640-2d32ce45f76e";
57
+
fsType = "btrfs";
58
};
59
60
swapDevices = [
61
+
{device = "/dev/disk/by-uuid/efd68464-2e0c-4aaf-8264-519dd7d05ddf";}
62
];
63
64
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
···
66
# still possible to use this option, but it's recommended to use it in conjunction
67
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
68
networking.useDHCP = lib.mkDefault true;
69
+
# networking.interfaces.br0.useDHCP = lib.mkDefault true;
70
# networking.interfaces.eno1.useDHCP = lib.mkDefault true;
71
72
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
73
+
powerManagement.cpuFreqGovernor = lib.mkDefault "ondemand";
74
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
75
}
+4
-2
systems/koumakan/networking/default.nix
+4
-2
systems/koumakan/networking/default.nix
+2
-39
systems/koumakan/networking/firewall.nix
+2
-39
systems/koumakan/networking/firewall.nix
···
1
-
{ lib, ... }:
2
-
{
3
networking.firewall = {
4
enable = true;
5
allowedTCPPorts = [
6
80
7
443 # http[s]
8
-
9
-
# sftpgo
10
-
21 # ftp
11
-
];
12
-
13
-
allowedTCPPortRanges = [
14
-
# ftp passive mode
15
-
{
16
-
from = 50000;
17
-
to = 50100;
18
-
}
19
-
20
-
# minecraft
21
-
{
22
-
from = 25560;
23
-
to = 25599;
24
-
}
25
-
];
26
-
allowedUDPPorts = [
27
-
443 # https over quic (http3)
28
-
];
29
-
30
-
allowedUDPPortRanges = [
31
-
# more minecraft
32
-
{
33
-
from = 25560;
34
-
to = 25599;
35
-
}
36
-
37
-
# plasmo voice
38
-
{
39
-
from = 55111;
40
-
to = 55199;
41
-
}
42
];
43
};
44
-
45
-
# allow openssh
46
-
services.openssh.openFirewall = lib.mkForce true;
47
}
+1
-2
systems/koumakan/networking/interface.nix
+1
-2
systems/koumakan/networking/interface.nix
+3
-2
systems/koumakan/security/default.nix
+3
-2
systems/koumakan/security/default.nix
+1
-2
systems/koumakan/security/pam.nix
+1
-2
systems/koumakan/security/pam.nix
+17
systems/koumakan/security/secureboot.nix
+17
systems/koumakan/security/secureboot.nix
···
···
1
+
{
2
+
pkgs,
3
+
lib,
4
+
...
5
+
}: {
6
+
environment.systemPackages = with pkgs; [
7
+
cryptsetup
8
+
sbctl
9
+
];
10
+
11
+
# lanzaboote currently replaces systemd-boot, so disable that here.
12
+
boot.loader.systemd-boot.enable = lib.mkForce false;
13
+
boot.lanzaboote = {
14
+
enable = true;
15
+
pkiBundle = "/etc/secureboot";
16
+
};
17
+
}
+6
systems/koumakan/security/sudo.nix
+6
systems/koumakan/security/sudo.nix
-38
systems/koumakan/services/anubis.nix
-38
systems/koumakan/services/anubis.nix
···
1
-
{
2
-
lib,
3
-
config,
4
-
...
5
-
}:
6
-
{
7
-
assertions = lib.mapAttrsToList (k: v: {
8
-
# assertion = v.settings.METRICS_BIND_NETWORK == "tcp" -> !builtins.isNull (builtins.match "127.0.0.1:.*" v.settings.METRICS_BIND);
9
-
assertion =
10
-
!builtins.isNull (builtins.match "^127.0.0.1:17[[:digit:]]\{3\}$" v.settings.METRICS_BIND); # stricter
11
-
message = "koumakan-internal(anubis `${k}`): settings.METRICS_BIND must be in the form `127.0.0.1:17xxx`";
12
-
}) config.services.anubis.instances;
13
-
14
-
# neither VM nor Prom supports scraping unix domain sockets and i currently cba writing a custom scraper for it
15
-
# prom: https://github.com/prometheus/prometheus/issues/12024
16
-
# TODO: do that
17
-
services.anubis.defaultOptions.settings = {
18
-
METRICS_BIND_NETWORK = "tcp";
19
-
DIFFICULTY = 4;
20
-
};
21
-
22
-
services.vmagent.prometheusConfig.scrape_configs = lib.mapAttrsToList (k: v: {
23
-
job_name = "anubis";
24
-
static_configs = lib.singleton {
25
-
targets = lib.singleton v.settings.METRICS_BIND;
26
-
};
27
-
relabel_configs = [
28
-
{
29
-
target_label = "instance";
30
-
replacement = "koumakan";
31
-
}
32
-
{
33
-
target_label = "anubis_instance";
34
-
replacement = k;
35
-
}
36
-
];
37
-
}) (lib.filterAttrs (_: v: v.enable) config.services.anubis.instances);
38
-
}
···
-24
systems/koumakan/services/arion/breezewiki.nix
-24
systems/koumakan/services/arion/breezewiki.nix
···
1
-
{ _utils, ... }:
2
-
{
3
-
virtualisation.arion.projects.breezewiki.settings = {
4
-
services.breezewiki = {
5
-
service = {
6
-
image = "quay.io/pussthecatorg/breezewiki";
7
-
ports = [ "127.0.0.1:35612:10416" ];
8
-
environment = {
9
-
bw_canonical_origin = "https://bw.soopy.moe";
10
-
bw_log_outgoing = "false";
11
-
bw_strict_proxy = "true";
12
-
bw_feature_search_suggestions = "true";
13
-
};
14
-
};
15
-
};
16
-
};
17
-
18
-
services.nginx.virtualHosts.".bw.soopy.moe" = _utils.mkSimpleProxy {
19
-
port = 35612;
20
-
extraConfig = {
21
-
useACMEHost = "bw.c.soopy.moe";
22
-
};
23
-
};
24
-
}
···
-13
systems/koumakan/services/arion/default.nix
-13
systems/koumakan/services/arion/default.nix
-80
systems/koumakan/services/arion/pixivfe.nix
-80
systems/koumakan/services/arion/pixivfe.nix
···
1
-
{
2
-
_utils,
3
-
config,
4
-
lib,
5
-
...
6
-
}:
7
-
let
8
-
secrets = _utils.setupSecrets config {
9
-
namespace = "pixivfe";
10
-
secrets = [ "token" ];
11
-
};
12
-
in
13
-
{
14
-
imports = [
15
-
secrets.generate
16
-
(secrets.mkTemplate "pixivfe.env" ''
17
-
PIXIVFE_TOKEN=${secrets.placeholder "token"}
18
-
'')
19
-
];
20
-
21
-
virtualisation.arion.projects.pixivfe.settings = {
22
-
services.pixivfe.service = {
23
-
image = "vnpower/pixivfe:latest";
24
-
ports = [
25
-
"127.0.0.1:35284:8282"
26
-
];
27
-
capabilities = {
28
-
ALL = false; # drop all capabilities
29
-
};
30
-
environment = {
31
-
PIXIVFE_PORT = 8282;
32
-
PIXIVFE_HOST = "0.0.0.0";
33
-
PIXIVFE_IMAGEPROXY = "https://pximg.soopy.moe";
34
-
PIXIVFE_CACHE_ENABLED = "true";
35
-
};
36
-
env_file = lib.singleton (secrets.getTemplate "pixivfe.env");
37
-
};
38
-
};
39
-
40
-
services.nginx = {
41
-
# cash money
42
-
proxyCachePath."pximg" = {
43
-
enable = true;
44
-
maxSize = "10g";
45
-
inactive = "30d";
46
-
keysZoneName = "pximg";
47
-
};
48
-
49
-
virtualHosts."pximg.soopy.moe" = _utils.mkVhost {
50
-
locations."/" = {
51
-
recommendedProxySettings = false;
52
-
proxyPass = "https://i.pximg.net";
53
-
extraConfig = ''
54
-
# bypass
55
-
proxy_set_header Host i.pximg.net;
56
-
proxy_set_header Referer "https://www.pixiv.net/";
57
-
proxy_set_header User-Agent "Mozilla/5.0 (Windows NT 10.0; rv:133.0) Gecko/20100101 Firefox/133.0";
58
-
add_header x-cache-status $upstream_cache_status;
59
-
60
-
# cache config
61
-
proxy_cache pximg;
62
-
proxy_cache_lock on;
63
-
proxy_cache_valid 200 30d;
64
-
proxy_cache_valid 404 5m;
65
-
proxy_cache_revalidate on;
66
-
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
67
-
'';
68
-
};
69
-
locations."= /" = _utils.mkNginxFile {
70
-
content = ''
71
-
nope (i mean yes sure but nop)
72
-
'';
73
-
};
74
-
};
75
-
76
-
virtualHosts."pxv.soopy.moe" = _utils.mkSimpleProxy {
77
-
port = 35284;
78
-
};
79
-
};
80
-
}
···
+53
systems/koumakan/services/attic.nix
+53
systems/koumakan/services/attic.nix
···
···
1
+
{
2
+
_utils,
3
+
pkgs,
4
+
...
5
+
}: let
6
+
# where tf are the docs for pkgs.formats??
7
+
toml = pkgs.formats.toml {};
8
+
in {
9
+
services.atticd = {
10
+
enable = true;
11
+
credentialsFile = "/etc/atticd.env";
12
+
13
+
# Per https://github.com/zhaofengli/attic/blob/b43d12082e34bceb26038bdad0438fd68804cfcd/server/src/config.rs#L252
14
+
# we can use the env var ATTIC_SERVER_DATABASE_URL to set the database connection url,
15
+
# ONLY IF database.url in config is unset.
16
+
# Since we cannot reasonably "unset" database with the default settings block, this will have to do.
17
+
# Please reach out if you know a better way!
18
+
configFile = toml.generate "server.toml" {
19
+
database = {};
20
+
storage = {
21
+
type = "local";
22
+
path = "/var/lib/atticd/storage";
23
+
};
24
+
25
+
listen = "127.0.0.1:38191";
26
+
allowed-hosts = [
27
+
"nonbunary.soopy.moe"
28
+
];
29
+
chunking = {
30
+
# The minimum NAR size to trigger chunking
31
+
nar-size-threshold = 64 * 1024; # 64 KiB
32
+
# The preferred minimum size of a chunk, in bytes
33
+
min-size = 16 * 1024; # 16 KiB
34
+
# The preferred average size of a chunk, in bytes
35
+
avg-size = 64 * 1024; # 64 KiB
36
+
# The preferred maximum size of a chunk, in bytes
37
+
max-size = 256 * 1024; # 256 KiB
38
+
};
39
+
};
40
+
};
41
+
42
+
services.nginx.virtualHosts."nonbunary.soopy.moe" = _utils.mkSimpleProxy {
43
+
port = 38191;
44
+
extraConfig = {
45
+
extraConfig = ''
46
+
client_max_body_size 1G;
47
+
proxy_read_timeout 3h;
48
+
proxy_connect_timeout 3h;
49
+
proxy_send_timeout 3h;
50
+
'';
51
+
};
52
+
};
53
+
}
-6
systems/koumakan/services/ci/default.nix
-6
systems/koumakan/services/ci/default.nix
-101
systems/koumakan/services/ci/hydra/default.nix
-101
systems/koumakan/services/ci/hydra/default.nix
···
1
-
{
2
-
inputs,
3
-
pkgs,
4
-
_utils,
5
-
config,
6
-
lib,
7
-
...
8
-
}:
9
-
let
10
-
secrets = _utils.setupSecrets config {
11
-
namespace = "hydra";
12
-
secrets = [
13
-
"s3/key_id"
14
-
"s3/key_secret"
15
-
"signing_key/v1"
16
-
];
17
-
config = {
18
-
owner = config.users.users.hydra-www.name;
19
-
group = config.users.users.hydra-www.group;
20
-
mode = "0440";
21
-
};
22
-
};
23
-
24
-
webhookScript = pkgs.writeShellApplication {
25
-
name = "hydra-webhook";
26
-
runtimeInputs = with pkgs; [ xh ];
27
-
text = ''
28
-
xh :8000 @"$1"
29
-
'';
30
-
};
31
-
in
32
-
{
33
-
imports = [
34
-
secrets.generate
35
-
(secrets.mkTemplate "hydra-s3-creds" ''
36
-
[default]
37
-
aws_access_key_id = ${secrets.placeholder "s3/key_id"}
38
-
aws_secret_access_key = ${secrets.placeholder "s3/key_secret"}
39
-
'')
40
-
];
41
-
42
-
sops.templates."hydra-s3-creds" = {
43
-
owner = lib.mkForce config.users.users.hydra-queue-runner.name;
44
-
path = config.users.users.hydra-queue-runner.home + "/.aws/credentials";
45
-
};
46
-
sops.secrets.builder_key.owner = config.users.users.hydra-queue-runner.name;
47
-
48
-
services.hydra-dev = {
49
-
enable = true;
50
-
package = inputs.hydra.packages.${pkgs.system}.hydra;
51
-
52
-
listenHost = "127.0.0.1";
53
-
hydraURL = "https://hydra.soopy.moe";
54
-
55
-
useSubstitutes = true;
56
-
notificationSender = "hydra+noreply@services.soopy.moe";
57
-
58
-
logo = ./hydra.png;
59
-
# wow so tracker
60
-
tracker = ''
61
-
<link rel="icon" type="image/png" href="/logo" />
62
-
<style>
63
-
.logo {
64
-
margin-top: unset !important;
65
-
}
66
-
</style>
67
-
'';
68
-
69
-
extraConfig = ''
70
-
# conflicts with upload_logs_to_binary_cache
71
-
# compress_build_logs 1
72
-
73
-
max_output_size = 5368709120 # 5 << 30 (5 GiB)
74
-
upload_logs_to_binary_cache = true
75
-
store_uri = s3://cache.soopy.moe?scheme=https&endpoint=s3.soopy.moe&compression=zstd¶llel-compression=true&write-nar-listing=true&ls-compression=br&log-compression=br®ion=ap-east-1&secret-key=${secrets.get "signing_key/v1"}
76
-
77
-
binary_cache_public_uri = https://cache.soopy.moe
78
-
log_prefix = https://cache.soopy.moe/
79
-
80
-
<git-input>
81
-
timeout = 1800
82
-
</git-input>
83
-
84
-
# ad hoc webhook
85
-
<runcommand>
86
-
job = *:*:*
87
-
#command = ${webhookScript} $HYDRA_JSON
88
-
command = cat $HYDRA_JSON >> /tmp/hydra-notify-runcommand.json
89
-
</runcommand>
90
-
'';
91
-
};
92
-
93
-
services.nginx.virtualHosts."hydra.soopy.moe" = _utils.mkSimpleProxy {
94
-
port = 3000;
95
-
extraConfig = {
96
-
locations."/metrics" = {
97
-
return = "444";
98
-
};
99
-
};
100
-
};
101
-
}
···
systems/koumakan/services/ci/hydra/hydra.png
systems/koumakan/services/ci/hydra/hydra.png
This is a binary file and will not be displayed.
+1
-2
systems/koumakan/services/databases/default.nix
+1
-2
systems/koumakan/services/databases/default.nix
+12
-16
systems/koumakan/services/databases/postgresql.nix
+12
-16
systems/koumakan/services/databases/postgresql.nix
···
1
-
{
2
-
pkgs,
3
-
lib,
4
-
...
5
-
}:
6
-
{
7
services.postgresql = {
8
enable = true;
9
10
package = pkgs.postgresql_15;
11
dataDir = "/var/lib/postgresql/15";
12
13
-
authentication = lib.mkForce ''
14
# unix socket connection
15
-
local hydra all ident map=hydra-users
16
local all all peer
17
# local ipv4/6 tcp connection
18
host all all 127.0.0.1/32 scram-sha-256
19
host all all ::1/128 scram-sha-256
20
'';
21
22
-
settings = {
23
listen_addresses = pkgs.lib.mkForce "*";
24
max_connections = 200;
25
password_encryption = "scram-sha-256";
26
27
-
log_line_prefix = "%m [%p] %h ";
28
-
# ssl = "on";
29
-
# ssl_cert_file = "${credsDir}/cert.pem";
30
-
# ssl_key_file = "${credsDir}/key.pem";
31
32
log_hostname = true;
33
datestyle = "iso, dmy";
34
log_timezone = "Asia/Hong_Kong";
35
timezone = "Asia/Hong_Kong";
36
-
default_text_search_config = "pg_catalog.english";
37
38
max_wal_size = "2GB";
39
min_wal_size = "80MB";
40
};
41
};
42
-
43
-
users.users.postgres.useDefaultShell = lib.mkForce false;
44
}
···
1
+
{pkgs, ...}: {
2
services.postgresql = {
3
enable = true;
4
5
package = pkgs.postgresql_15;
6
dataDir = "/var/lib/postgresql/15";
7
+
logLinePrefix = "%m [%p] %h ";
8
9
+
authentication = ''
10
# unix socket connection
11
local all all peer
12
# local ipv4/6 tcp connection
13
host all all 127.0.0.1/32 scram-sha-256
14
host all all ::1/128 scram-sha-256
15
+
# world (encrypted) tcp traffic
16
+
hostssl all all all scram-sha-256
17
'';
18
19
+
settings = let
20
+
credsDir = "/run/credentials/postgresql.service";
21
+
in {
22
listen_addresses = pkgs.lib.mkForce "*";
23
max_connections = 200;
24
password_encryption = "scram-sha-256";
25
26
+
ssl = "on";
27
+
ssl_cert_file = "${credsDir}/cert.pem";
28
+
ssl_key_file = "${credsDir}/key.pem";
29
30
log_hostname = true;
31
datestyle = "iso, dmy";
32
log_timezone = "Asia/Hong_Kong";
33
timezone = "Asia/Hong_Kong";
34
+
default_text_search_config = "pc_catalog.english";
35
36
max_wal_size = "2GB";
37
min_wal_size = "80MB";
38
};
39
};
40
}
+1
-2
systems/koumakan/services/databases/redis.nix
+1
-2
systems/koumakan/services/databases/redis.nix
+3
-17
systems/koumakan/services/default.nix
+3
-17
systems/koumakan/services/default.nix
···
1
-
{ ... }:
2
-
{
3
imports = [
4
./nginx.nix
5
-
./anubis.nix
6
7
-
# "containers" in a burning text gif
8
-
./arion
9
10
-
# Gensokyo local stuff
11
-
./ftp.nix
12
13
# fediverse
14
./matrix
15
./fediverse
16
-
./feeds
17
18
-
./ci
19
-
./databases
20
-
./games
21
-
./mirror
22
-
# ./notifications
23
./proxies
24
-
./scm
25
-
./security
26
./static-sites
27
-
./storage
28
-
./telemetry
29
];
30
}
+150
systems/koumakan/services/fediverse/akkoma.nix
+150
systems/koumakan/services/fediverse/akkoma.nix
···
···
1
+
{
2
+
_utils,
3
+
pkgs,
4
+
config,
5
+
lib,
6
+
...
7
+
}: let
8
+
mkRaw = (pkgs.formats.elixirConf {}).lib.mkRaw;
9
+
# I don't know what i did but i made this abomination
10
+
mkSecret = file:
11
+
if !lib.elem file secrets
12
+
then throw "Provided secret file ${file} is not in the list of defined secrets."
13
+
else {_secret = "/run/secrets/akkoma/${file}";};
14
+
secrets = [
15
+
"joken_default_signer" # can't think of any better name spacing
16
+
"dist/cookie"
17
+
"search/meili/host_unencrypted"
18
+
"search/meili/key"
19
+
"endpoint/secret_base"
20
+
"endpoint/salt"
21
+
"endpoint/live_view/salt"
22
+
"vapid/pub"
23
+
"vapid/key"
24
+
"postgres/hostname"
25
+
"postgres/database_unencrypted"
26
+
"postgres/username"
27
+
"postgres/password"
28
+
"smtp/username"
29
+
"smtp/password"
30
+
"smtp/relay"
31
+
];
32
+
in {
33
+
# secrets definition
34
+
sops.secrets = _utils.genSecrets "akkoma" secrets {};
35
+
36
+
services.akkoma = {
37
+
enable = true;
38
+
initSecrets = false;
39
+
initDb.enable = false;
40
+
# TODO: figure out how to add swagger ui
41
+
# frontends = {
42
+
# swagger
43
+
# };
44
+
45
+
# TODO: Issue #5
46
+
dist.cookie = mkSecret "dist/cookie";
47
+
config = {
48
+
":joken".":default_signer" = mkSecret "joken_default_signer";
49
+
50
+
":pleroma" = {
51
+
":http_security" = {
52
+
sts = true;
53
+
};
54
+
55
+
":configurable_from_database" = true;
56
+
":instance" = {
57
+
name = "CassieAkko";
58
+
description = "You should not see this here...";
59
+
email = "me@soopy.moe";
60
+
notify_email = "noreply@a.soopy.moe";
61
+
limit = 5000;
62
+
registrations_open = true;
63
+
};
64
+
65
+
# TODO: add proper proxy support
66
+
# also refer to https://meta.akkoma.dev/t/another-vector-for-the-injection-vulnerability-found/483
67
+
":media_proxy" = {
68
+
enabled = true;
69
+
redirect_on_failure = true;
70
+
};
71
+
72
+
"Pleroma.Repo" = {
73
+
adapter = mkRaw "Ecto.Adapters.Postgres";
74
+
database = mkSecret "postgres/database_unencrypted";
75
+
hostname = mkSecret "postgres/hostname";
76
+
username = mkSecret "postgres/username";
77
+
password = mkSecret "postgres/password";
78
+
};
79
+
80
+
"Pleroma.Upload" = {
81
+
filters = [
82
+
(mkRaw "Pleroma.Upload.Filter.Exiftool")
83
+
(mkRaw "Pleroma.Upload.Filter.Dedupe")
84
+
];
85
+
};
86
+
87
+
"Pleroma.Web.Endpoint" = {
88
+
# We don't need to specify http ip/ports here because we use unix sockets
89
+
# ok we do because it's broken
90
+
http = {
91
+
ip = "127.0.0.1";
92
+
port = 35378;
93
+
};
94
+
url = {
95
+
host = "a.soopy.moe";
96
+
scheme = "https";
97
+
port = 443;
98
+
};
99
+
secure_cookie_flag = true;
100
+
101
+
secret_key_base = mkSecret "endpoint/secret_base";
102
+
signing_salt = mkSecret "endpoint/salt";
103
+
live_view = {
104
+
signing_salt = mkSecret "endpoint/live_view/salt";
105
+
};
106
+
};
107
+
108
+
"Pleroma.Emails.Mailer" = {
109
+
adapter = mkRaw "Swoosh.Adapters.SMTP";
110
+
relay = mkSecret "smtp/relay";
111
+
username = mkSecret "smtp/username";
112
+
password = mkSecret "smtp/password";
113
+
};
114
+
115
+
"Pleroma.Search.Meilisearch" = {
116
+
url = mkSecret "search/meili/host_unencrypted";
117
+
private_key = mkSecret "search/meili/key";
118
+
initial_indexing_chunk_size = 100000;
119
+
};
120
+
};
121
+
122
+
":web_push_encryption".":vapid_details" = {
123
+
subject = "mailto:me@soopy.moe";
124
+
public_key = mkSecret "vapid/pub";
125
+
private_key = mkSecret "vapid/key";
126
+
};
127
+
};
128
+
129
+
nginx = _utils.mkVhost {
130
+
useACMEHost = "fedi.c.soopy.moe";
131
+
extraConfig = ''
132
+
client_max_body_size 100M;
133
+
'';
134
+
};
135
+
136
+
extraStatic = {
137
+
"static/terms-of-service.html" = pkgs.writeText "terms-of-service.html" ''
138
+
<h1>Terms of Service</h1><p>Please refer to this ToS:
139
+
<a href="https://m.soopy.moe/@admin/pages/tos" rel="noopener noreferrer nofollow">
140
+
https://m.soopy.moe/@admin/pages/tos</a></p>
141
+
'';
142
+
# refer to https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/servers/akkoma/emoji/blobs_gg.nix#L29
143
+
# "emoji/Cat_girls_Emoji" = ...
144
+
};
145
+
};
146
+
147
+
systemd.services.akkoma-config = {
148
+
serviceConfig.SupplementaryGroups = [config.users.groups.keys.name];
149
+
};
150
+
}
-42
systems/koumakan/services/fediverse/bsky-pds.nix
-42
systems/koumakan/services/fediverse/bsky-pds.nix
···
1
-
{
2
-
inputs,
3
-
pkgs,
4
-
config,
5
-
_utils,
6
-
...
7
-
}:
8
-
let
9
-
secrets = _utils.setupSecrets config {
10
-
namespace = "pds";
11
-
secrets = [
12
-
"email/address"
13
-
"email/url"
14
-
];
15
-
config.owner = config.services.bsky-pds.user;
16
-
};
17
-
in
18
-
{
19
-
imports = [ secrets.generate ];
20
-
services.bsky-pds = {
21
-
enable = true;
22
-
package = inputs.mystia.packages.${pkgs.system}.bsky-pds;
23
-
24
-
# because sensible settings are already defined in the module, we can keep this simple :)
25
-
settings = {
26
-
PDS_HOSTNAME = "bsky.soopy.moe";
27
-
PDS_CONTACT_EMAIL_ADDRESS = "me@soopy.moe";
28
-
};
29
-
credentials = {
30
-
PDS_EMAIL_SMTP_URL = secrets.get "email/url";
31
-
PDS_EMAIL_FROM_ADDRESS = secrets.get "email/address";
32
-
};
33
-
};
34
-
35
-
services.nginx.virtualHosts.".bsky.soopy.moe" = _utils.mkSimpleProxy {
36
-
port = 2583;
37
-
websockets = true;
38
-
extraConfig = {
39
-
useACMEHost = "bsky.c.soopy.moe";
40
-
};
41
-
};
42
-
}
···
+2
-4
systems/koumakan/services/fediverse/default.nix
+2
-4
systems/koumakan/services/fediverse/default.nix
-40
systems/koumakan/services/fediverse/writefreely.nix
-40
systems/koumakan/services/fediverse/writefreely.nix
···
1
-
{
2
-
config,
3
-
_utils,
4
-
lib,
5
-
# inputs,
6
-
# pkgs,
7
-
...
8
-
}:
9
-
{
10
-
services.writefreely = {
11
-
enable = true;
12
-
# package = inputs.nixpkgs-wf.legacyPackages.${pkgs.system}.writefreely;
13
-
host = "words.soopy.moe";
14
-
settings = {
15
-
server.port = 31294;
16
-
app = {
17
-
host = "https://${config.services.writefreely.host}"; # annoying
18
-
site_name = "Kourindou";
19
-
site_description = "Words of Gensokyo, sprinkled with a little bit of technology";
20
-
21
-
max_blogs = 0;
22
-
open_registration = false;
23
-
user_invites = "user";
24
-
default_visibility = "public";
25
-
26
-
federation = false;
27
-
public_stats = true;
28
-
min_username_len = 5;
29
-
local_timeline = true;
30
-
};
31
-
};
32
-
nginx.enable = true;
33
-
admin.name = "soopyc";
34
-
};
35
-
36
-
services.nginx.virtualHosts.${config.services.writefreely.host} = _utils.mkVhost {
37
-
forceSSL = lib.mkForce true;
38
-
useACMEHost = "fedi.c.soopy.moe";
39
-
};
40
-
}
···
-6
systems/koumakan/services/feeds/default.nix
-6
systems/koumakan/services/feeds/default.nix
-16
systems/koumakan/services/feeds/miniflux.nix
-16
systems/koumakan/services/feeds/miniflux.nix
···
1
-
{ _utils, ... }:
2
-
{
3
-
services.miniflux = {
4
-
enable = true;
5
-
config = {
6
-
LISTEN_ADDR = "127.0.0.1:34723";
7
-
BASE_URL = "https://flux.soopy.moe/";
8
-
WEBAUTHN = 1;
9
-
CREATE_ADMIN = 0;
10
-
};
11
-
};
12
-
13
-
services.nginx.virtualHosts."flux.soopy.moe" = _utils.mkSimpleProxy {
14
-
port = 34723;
15
-
};
16
-
}
···
-73
systems/koumakan/services/ftp.nix
-73
systems/koumakan/services/ftp.nix
···
1
-
# {inputs, config, hostname, ...}: {
2
-
{
3
-
config,
4
-
inputs,
5
-
...
6
-
}:
7
-
{
8
-
sops.secrets = {
9
-
"vsftpdUsers.db" = {
10
-
sopsFile = inputs.self + "/creds/sops/koumakan/vsftpdUsers.db";
11
-
owner = config.users.users.vsftpd.name;
12
-
format = "binary";
13
-
};
14
-
15
-
"webdav.scan.htpasswd" = {
16
-
sopsFile = inputs.self + "/creds/sops/koumakan/webdav.scan.htpasswd";
17
-
owner = config.users.users.vsftpd.name;
18
-
format = "binary";
19
-
};
20
-
};
21
-
22
-
users = {
23
-
users.vsftpd = {
24
-
uid = 3000;
25
-
home = "/var/www/ftp";
26
-
};
27
-
groups.vsftpd.gid = 3000;
28
-
};
29
-
30
-
services.vsftpd = {
31
-
enable = true;
32
-
enableVirtualUsers = true;
33
-
localRoot = "/var/www/ftp";
34
-
localUsers = true;
35
-
virtualUseLocalPrivs = true;
36
-
writeEnable = true;
37
-
38
-
userDbPath = "/run/secrets/vsftpdUsers";
39
-
userlistEnable = true;
40
-
userlist = [
41
-
"brother_scan"
42
-
];
43
-
44
-
extraConfig = ''
45
-
pasv_min_port=50000
46
-
pasv_max_port=50100
47
-
'';
48
-
};
49
-
50
-
services.webdav-server-rs = {
51
-
user = "vsftpd";
52
-
group = "vsftpd";
53
-
enable = true;
54
-
settings = {
55
-
server.listen = [ "100.100.16.16:38563" ];
56
-
accounts.auth-type = "htpasswd.default";
57
-
58
-
htpasswd.default.htpasswd = config.sops.secrets."webdav.scan.htpasswd".path;
59
-
unix.min-uid = 1000;
60
-
61
-
location = [
62
-
{
63
-
route = [ "/*path" ];
64
-
auth = "true";
65
-
handler = "filesystem";
66
-
methods = [ "webdav-rw" ];
67
-
68
-
directory = "/var/www/ftp";
69
-
}
70
-
];
71
-
};
72
-
};
73
-
}
···
-3
systems/koumakan/services/games/default.nix
-3
systems/koumakan/services/games/default.nix
-68
systems/koumakan/services/games/whitelisted-assets/tos/en.md
-68
systems/koumakan/services/games/whitelisted-assets/tos/en.md
···
1
-
# server code of conduct
2
-
3
-
this server code of conduct (this document) lays out what you can and cannot do, among other things, while playing on the server `mc.soopy.moe`.
4
-
by proceeding, you accept and agree to follow this document in full.
5
-
6
-
if you do not agree, you must not click the button below to gain access.
7
-
8
-
we don't like legalese either, so we will try to keep this as short as possible.
9
-
please note that while this is **not** a legally binding document, you are still subject to punishments for violating this code of conduct.
10
-
11
-
## explicitly allowed actions
12
-
13
-
we are hosting this minecraft server out of goodwill, so we also expect players to act in good faith. most things that are socially acceptable are also acceptable on this server. in addition, these things are explicitly permitted on the server.
14
-
15
-
- not indemnifying this server, server owners and server staff
16
-
- this means you can talk shit about the admins.
17
-
- defaming human rights violators (including but not limited to trump, j.k. rowling and unnamed middle-east genocidic president) in an acceptable frequency and amount (so as to not affect other players)
18
-
- share derogatory memes **only about** shit world leaders and shit corporations
19
-
- be brilliant to each other
20
-
21
-
if the thing you plan to do doesn't make the life of other players difficult (regardless of it being in-game or not), you are likely permitted to do said thing.
22
-
23
-
## disallowed actions
24
-
25
-
you are not allowed to do anything in the following list, unless explicitly permitted by server admins in a gpg or ssh-signed message.
26
-
27
-
1. entice hate or violence against anyone regardless of their identity, status, anything.
28
-
2. partake in any form of bullying
29
-
3. vandalize, destroy or cause any form of damage against structures built by players without their permission
30
-
- we don't mind if you bomb your own buildings or machines, but if even just one player does not want a specific thing to be destroyed, then you will not destroy said thing.
31
-
4. perform denial of service against the server by any means, including but not limited to in-game actions (e.g. redstone, tnt, etc.) or external actions (e.g. ping spam, SYN flooding, etc.)
32
-
- actions that cause a denial of service is defined as anything that reduces the server TPS below 15 for more than 30 minutes, or outright crashing the server.
33
-
- we have a system tracking lag spikes. please do not think you can get away with making a lag machine.
34
-
5. failing to cease any action after being asked to stop.
35
-
- including but not limited to: (repeatedly) killing players, sending insufferable messages, etc.
36
-
37
-
note that this list may (or may not!) be modified with additional items from time to time depending on how poorly (or decently) players act.
38
-
39
-
## moderative actions
40
-
41
-
violating any of the rules set forth above may result in the following actions.
42
-
43
-
- **temporary** removal from the server (tempban; ranging from 1 hour to 30 days)
44
-
- **permanent** removal from the server **for this season** (permban for one season)
45
-
- **permanent** removal from the server **forever** (permban)
46
-
47
-
note that this list is not exhaustive, but we hope we never have to do anything not listed here.
48
-
49
-
there is **<span style="font-size: 2em">no</span>** appeal process. you really have to be a prick to get banned.
50
-
51
-
## reserved rights
52
-
53
-
admins and moderators reserves the right to the following:
54
-
55
-
- modifying any section of this code of conduct at anytime
56
-
- taking [moderative] actions against any user in their own discretion
57
-
58
-
## contact
59
-
60
-
for any matter regarding the server, please contact the owner with any of the following methods (in order of preference)
61
-
62
-
- signal: @soopyc.64
63
-
- email: [mc+season2025@soopy.moe](mailto:mc+season2025@soopy.moe)
64
-
- discord: [2a01.4f8.1c1c.cc9d.0.0.0.cafe](https://discord.com/users/397273885701177347)
65
-
66
-
_last modified: `Mon, 22 Sep 2025 12:50:23 +0800`_
67
-
68
-
[moderative]: https://en.wiktionary.org/wiki/moderative#English
···
-52
systems/koumakan/services/games/whitelisted-web.nix
-52
systems/koumakan/services/games/whitelisted-web.nix
···
1
-
{ _utils, config, ... }:
2
-
let
3
-
secrets = _utils.setupSecrets config {
4
-
namespace = "whitelisted-web";
5
-
secrets = [
6
-
"entra_secret"
7
-
"turnstile_key"
8
-
"ipc_token"
9
-
];
10
-
};
11
-
in
12
-
{
13
-
imports = [
14
-
secrets.generate
15
-
(secrets.mkTemplate "whitelisted-web.env" ''
16
-
ENTRA_CLIENT_SECRET="${secrets.placeholder "entra_secret"}"
17
-
TURNSTILE_SECRET_KEY="${secrets.placeholder "turnstile_key"}"
18
-
SHARED_IPC_TOKEN="${secrets.placeholder "ipc_token"}"
19
-
'')
20
-
];
21
-
22
-
gensokyo.services.whitelisted-web = {
23
-
enable = true;
24
-
25
-
buildConfig = {
26
-
PUBLIC_STATIC_CONTACT_INFO = ''{"Email": "mailto:Sophie Cheung <me@soopy.moe>"}'';
27
-
};
28
-
29
-
extraAssets = ./whitelisted-assets;
30
-
31
-
settings = {
32
-
PORT = "30274";
33
-
PUBLIC_URL = "https://mc.soopy.moe";
34
-
PUBLIC_TOS_URI_TEMPLATE = "/tos/{LANG}.md";
35
-
PUBLIC_SERVER_IP = "mc.soopy.moe"; # the public minecraft server IP
36
-
PUBLIC_TURNSTILE_SITEID = "0x4AAAAAABifUhFToAkxeZDM";
37
-
PUBLIC_ENTRA_CLIENT_ID = "807b9c9e-69c9-4b9f-b020-01dbf256623b";
38
-
};
39
-
40
-
environmentFile = secrets.getTemplate "whitelisted-web.env";
41
-
};
42
-
43
-
services.nginx.virtualHosts."mc.soopy.moe" = _utils.mkVhost {
44
-
locations."/" = {
45
-
proxyPass = "http://127.0.0.1:30274";
46
-
};
47
-
48
-
locations."/map/" = {
49
-
proxyPass = "http://renko.mist-nessie.ts.net:8100/";
50
-
};
51
-
};
52
-
}
···
+1
-2
systems/koumakan/services/matrix/default.nix
+1
-2
systems/koumakan/services/matrix/default.nix
+20
-58
systems/koumakan/services/matrix/synapse.nix
+20
-58
systems/koumakan/services/matrix/synapse.nix
···
1
{
2
_utils,
3
pkgs,
4
-
lib,
5
config,
6
-
inputs,
7
...
8
-
}:
9
-
let
10
-
getSocket = file: "/run/matrix-synapse/${file}.sock";
11
-
staticly = inputs.mystia.packages.${pkgs.system}.staticly;
12
-
in
13
-
{
14
sops.secrets."synapse.yaml" = {
15
mode = "0400";
16
owner = config.users.users.matrix-synapse.name;
···
21
owner = config.users.users.matrix-synapse.name;
22
};
23
24
-
users.users.matrix-synapse.shell = lib.mkForce pkgs.shadow;
25
26
services.matrix-synapse = {
27
enable = true;
28
-
enableRegistrationScript = false;
29
-
configureRedisLocally = true; # workers support
30
-
31
withJemalloc = true;
32
extras = [
33
"jwt"
···
38
"/run/secrets/synapse.yaml"
39
];
40
41
-
workers = {
42
-
federation-sender-0 = { };
43
-
pusher-0 = { };
44
-
};
45
-
46
settings = {
47
server_name = "nue.soopy.moe";
48
serve_server_wellknown = true;
49
allow_public_rooms_over_federation = true;
50
federation_client_minimum_tls_version = 1.2;
51
-
52
-
listeners = [
53
-
{
54
-
path = getSocket "mistress";
55
-
resources = [
56
-
{
57
-
names = [
58
-
"client" # implies ["media" "static"]
59
-
"federation"
60
-
"keys"
61
-
"openid"
62
-
"replication"
63
-
];
64
-
}
65
-
];
66
-
}
67
-
];
68
-
69
-
# workers
70
-
instance_map.main.path = getSocket "mistress";
71
-
federation_sender_instances = [
72
-
"federation-sender-0"
73
-
];
74
-
pusher_instances = [
75
-
"pusher-0"
76
-
];
77
-
78
# TODO: Setup TURN servers
79
# TODO: Setup OIDC providers
80
# TODO: Configure email
81
url_preview_enabled = true;
82
enable_registration = false;
83
session_lifetime = "99y";
···
90
system_mxid_display_name = "Server Notices";
91
room_name = "Server Notices";
92
};
93
-
94
-
allow_device_name_lookup_over_federation = true;
95
96
trusted_key_servers = [
97
{
···
115
};
116
117
services.postgresql = {
118
-
ensureDatabases = [ "synapse" ];
119
ensureUsers = [
120
{
121
name = "synapse";
122
-
ensureDBOwnership = true;
123
}
124
];
125
};
126
127
-
users.users.nginx.extraGroups = [ "matrix-synapse" ];
128
services.nginx.virtualHosts."nue.soopy.moe" = _utils.mkVhost {
129
-
extraConfig = ''
130
-
access_log off;
131
-
'';
132
133
-
locations."= /.well-known/matrix/server" = _utils.mkNginxJSON "server" {
134
-
"m.server" = "nue.soopy.moe:443";
135
};
136
137
-
locations."~ ^(/_matrix|/_synapse/client|/health)" = {
138
-
proxyPass = "http://unix:${getSocket "mistress"}";
139
extraConfig = ''
140
client_max_body_size 100M;
141
'';
142
};
143
144
locations."= /.well-known/matrix/client" = {
145
-
alias = "${staticly}/configs/matrix/";
146
tryFiles = "stable.json =404";
147
};
148
149
locations."/" = {
150
-
root = "${staticly}/pages/matrix/landing/";
151
tryFiles = "$uri $uri/index.html $uri.html =404";
152
};
153
};
···
1
{
2
_utils,
3
pkgs,
4
config,
5
...
6
+
}: {
7
sops.secrets."synapse.yaml" = {
8
mode = "0400";
9
owner = config.users.users.matrix-synapse.name;
···
14
owner = config.users.users.matrix-synapse.name;
15
};
16
17
+
users.users.matrix-synapse.extraGroups = [config.users.groups.keys.name];
18
19
services.matrix-synapse = {
20
enable = true;
21
withJemalloc = true;
22
extras = [
23
"jwt"
···
28
"/run/secrets/synapse.yaml"
29
];
30
31
settings = {
32
server_name = "nue.soopy.moe";
33
serve_server_wellknown = true;
34
allow_public_rooms_over_federation = true;
35
federation_client_minimum_tls_version = 1.2;
36
# TODO: Setup TURN servers
37
# TODO: Setup OIDC providers
38
# TODO: Configure email
39
+
# TODO: Setup opentracing
40
url_preview_enabled = true;
41
enable_registration = false;
42
session_lifetime = "99y";
···
49
system_mxid_display_name = "Server Notices";
50
room_name = "Server Notices";
51
};
52
53
trusted_key_servers = [
54
{
···
72
};
73
74
services.postgresql = {
75
+
ensureDatabases = ["synapse"];
76
ensureUsers = [
77
{
78
name = "synapse";
79
+
ensurePermissions = {
80
+
"database \"synapse\"" = "all privileges";
81
+
};
82
}
83
];
84
};
85
86
services.nginx.virtualHosts."nue.soopy.moe" = _utils.mkVhost {
87
+
locations."= /config.json" = {
88
+
alias = "${pkgs.staticly}/configs/";
89
+
tryFiles = "cinny.json =404";
90
+
extraConfig = ''
91
+
add_header access_control_allow_origin "*";
92
+
'';
93
+
};
94
95
+
locations."= /.well-known/matrix/server" = {
96
+
return = "200 '{\"m.server\": \"nue.soopy.moe:443\"}'";
97
};
98
99
+
locations."~ ^(/_matrix|/_synapse/client)" = {
100
+
proxyPass = "http://localhost:8008";
101
extraConfig = ''
102
client_max_body_size 100M;
103
'';
104
};
105
106
locations."= /.well-known/matrix/client" = {
107
+
alias = "${pkgs.staticly}/configs/matrix/";
108
tryFiles = "stable.json =404";
109
};
110
111
locations."/" = {
112
+
root = "${pkgs.staticly}/pages/matrix/landing/";
113
tryFiles = "$uri $uri/index.html $uri.html =404";
114
};
115
};
-36
systems/koumakan/services/mirror/archt2.nix
-36
systems/koumakan/services/mirror/archt2.nix
···
1
-
{ pkgs, ... }:
2
-
{
3
-
systemd = {
4
-
# TODO: make this a gensokyo module
5
-
timers."mirror-sync-t2" = {
6
-
after = [ "network-online.target" ];
7
-
wants = [ "network-online.target" ];
8
-
wantedBy = [ "multi-user.target" ];
9
-
timerConfig = {
10
-
OnCalendar = "*:30";
11
-
RandomizedDelaySec = "600s";
12
-
DeferReactivation = true;
13
-
Persistent = true;
14
-
};
15
-
};
16
-
17
-
services."mirror-sync-t2" = {
18
-
path = [ pkgs.rsync ];
19
-
script = ''
20
-
mkdir -p \
21
-
/var/lib/mirrors/arch-mact2 \
22
-
/var/lib/mirrors/endeavouros-t2
23
-
24
-
rsync -rlptHvh --progress --safe-links --delete-delay --delay-updates \
25
-
rsync://mirror.funami.tech/arch-mact2 /var/lib/mirrors/arch-mact2
26
-
27
-
rsync -rlptHvh --progress --safe-links --delete-delay --delay-updates \
28
-
rsync://mirror.funami.tech/endeavouros-t2 /var/lib/mirrors/endeavouros-t2
29
-
'';
30
-
31
-
serviceConfig = {
32
-
User = "mirror-worker";
33
-
};
34
-
};
35
-
};
36
-
}
···
-29
systems/koumakan/services/mirror/default.nix
-29
systems/koumakan/services/mirror/default.nix
···
1
-
{ _utils, config, ... }:
2
-
{
3
-
imports = [
4
-
./archt2.nix
5
-
];
6
-
7
-
users.groups."mirror-worker" = { };
8
-
users.users."mirror-worker" = {
9
-
isSystemUser = true;
10
-
group = "mirror-worker";
11
-
};
12
-
13
-
services.nginx.virtualHosts."mirror.soopy.moe" = _utils.mkVhost {
14
-
locations."/" = {
15
-
root = "/var/lib/mirrors";
16
-
extraConfig = "autoindex on;";
17
-
};
18
-
};
19
-
20
-
services.nginx.virtualHosts."keine.soopy.moe".globalRedirect = "mirror.soopy.moe";
21
-
22
-
# provision a directory for mirrors
23
-
systemd.tmpfiles.settings."10-mirrors" = {
24
-
"/var/lib/mirrors".d = {
25
-
mode = "0755";
26
-
user = config.users.users.mirror-worker.name;
27
-
};
28
-
};
29
-
}
···
+8
-8
systems/koumakan/services/nginx.nix
+8
-8
systems/koumakan/services/nginx.nix
···
1
-
{ pkgs, ... }:
2
-
{
3
-
gensokyo.presets.nginx = true;
4
-
5
-
users.users.nginx.extraGroups = [ "anubis" ];
6
services.nginx = {
7
enable = true;
8
clientMaxBodySize = "50m";
9
10
additionalModules = with pkgs.nginxModules; [
11
fancyindex
12
brotli
13
];
14
};
15
-
16
-
# necessary for stuff like backup-public.nix and user.nix
17
-
systemd.services.nginx.serviceConfig.ProtectHome = "tmpfs";
18
}
···
1
+
{pkgs, ...}: {
2
services.nginx = {
3
enable = true;
4
+
enableReload = true;
5
+
package = pkgs.nginxMainline;
6
+
7
clientMaxBodySize = "50m";
8
9
+
statusPage = true;
10
+
11
+
recommendedTlsSettings = true;
12
+
recommendedProxySettings = true;
13
additionalModules = with pkgs.nginxModules; [
14
fancyindex
15
brotli
16
];
17
};
18
}
+1
-4
systems/koumakan/services/proxies/default.nix
+1
-4
systems/koumakan/services/proxies/default.nix
-58
systems/koumakan/services/proxies/minio.nix
-58
systems/koumakan/services/proxies/minio.nix
···
1
-
{
2
-
_utils,
3
-
lib,
4
-
config,
5
-
...
6
-
}:
7
-
let
8
-
secrets = _utils.setupSecrets config {
9
-
namespace = "minio";
10
-
secrets = [
11
-
"root_user"
12
-
"root_pass"
13
-
"vmetrics_token"
14
-
];
15
-
};
16
-
in
17
-
{
18
-
imports = [
19
-
secrets.generate
20
-
(secrets.mkTemplate "minio.env" ''
21
-
MINIO_ROOT_USER=${secrets.placeholder "root_user"}
22
-
MINIO_ROOT_PASSWORD=${secrets.placeholder "root_pass"}
23
-
'')
24
-
];
25
-
26
-
services.minio = {
27
-
enable = true;
28
-
region = "ap-east-1";
29
-
listenAddress = "127.0.0.1:26531";
30
-
rootCredentialsFile = secrets.getTemplate "minio.env";
31
-
};
32
-
33
-
# stupid module design
34
-
systemd.services.minio.environment = {
35
-
MINIO_BROWSER_REDIRECT_URL = "https://s3.soopy.moe/_static";
36
-
MINIO_BROWSER_LOGIN_ANIMATION = "false";
37
-
};
38
-
39
-
systemd.services.vmagent.serviceConfig.LoadCredential = [
40
-
"minio_token:${secrets.get "vmetrics_token"}"
41
-
];
42
-
43
-
services.vmagent.prometheusConfig.scrape_configs = lib.singleton {
44
-
job_name = "minio-job";
45
-
metrics_path = "/minio/v2/metrics/cluster";
46
-
scheme = "http";
47
-
static_configs = lib.singleton { targets = lib.singleton "localhost:26531"; };
48
-
relabel_configs = lib.singleton {
49
-
target_label = "instance";
50
-
replacement = config.networking.fqdnOrHostName;
51
-
};
52
-
53
-
# https://github.com/NixOS/nixpkgs/issues/367447
54
-
# https://docs.victoriametrics.com/sd_configs/#scrape_configs
55
-
# hard coding because we can't use %{ENV_VAR} syntax (yet) when checking.
56
-
bearer_token_file = "/run/credentials/vmagent.service/minio_token";
57
-
};
58
-
}
···
-44
systems/koumakan/services/proxies/nginx-stream.nix
-44
systems/koumakan/services/proxies/nginx-stream.nix
···
1
-
{
2
-
systemd.tmpfiles.settings."nginx-stream-log"."/var/log/nginx/stream"."d" = {
3
-
user = "nginx";
4
-
group = "nginx";
5
-
mode = "0750";
6
-
};
7
-
# NOTE: this doesn't work properly atm, we cba setting up routing stuff right now.
8
-
# systemd.services.nginx.serviceConfig = {
9
-
# # needed for transparent proxying
10
-
# CapabilityBoundingSet = ["CAP_NET_RAW"];
11
-
# AmbientCapabilities = ["CAP_NET_RAW"];
12
-
# };
13
-
14
-
services.nginx.streamConfig = ''
15
-
resolver 100.100.100.100;
16
-
# proxy_bind $remote_addr transparent;
17
-
proxy_connect_timeout 1s;
18
-
proxy_timeout 30s;
19
-
20
-
log_format basic_stream '$remote_addr [$time_local] '
21
-
'$protocol $status $bytes_sent $bytes_received '
22
-
'$session_time';
23
-
24
-
error_log /var/log/nginx/stream/error.log;
25
-
access_log /var/log/nginx/stream/access.log basic_stream;
26
-
27
-
# data
28
-
server {
29
-
listen 25565-25599 reuseport;
30
-
proxy_pass renko.mist-nessie.ts.net:$server_port;
31
-
}
32
-
33
-
# query sockets
34
-
server {
35
-
listen 25565-25599 udp reuseport;
36
-
proxy_pass renko.mist-nessie.ts.net:$server_port;
37
-
}
38
-
# voice
39
-
server {
40
-
listen 55111-55199 udp reuseport;
41
-
proxy_pass renko.mist-nessie.ts.net:$server_port;
42
-
}
43
-
'';
44
-
}
···
+28
-3
systems/koumakan/services/proxies/nitter.nix
+28
-3
systems/koumakan/services/proxies/nitter.nix
···
1
{
2
+
_utils,
3
+
pkgs,
4
+
...
5
+
}: {
6
+
services.nitter = {
7
+
enable = true;
8
+
redisCreateLocally = false; # why is the default of this `true`??
9
+
server = {
10
+
title = "NSM";
11
+
port = 36325;
12
+
https = true;
13
+
hostname = "nitter.soopy.moe";
14
+
address = "127.0.0.1";
15
+
};
16
+
package = pkgs.nitterExperimental;
17
+
};
18
+
19
+
systemd.services.nitter = {
20
+
environment = {
21
+
NITTER_ACCOUNTS_FILE = "/run/credentials/nitter.service/guest_accounts.json";
22
+
};
23
+
serviceConfig.LoadCredential = [
24
+
"guest_accounts.json:/etc/nitter/guest_accounts.json"
25
+
];
26
+
};
27
+
28
+
services.nginx.virtualHosts."nitter.soopy.moe" = _utils.mkSimpleProxy {
29
+
port = 36325;
30
};
31
}
-121
systems/koumakan/services/proxies/searxng.nix
-121
systems/koumakan/services/proxies/searxng.nix
···
1
-
{
2
-
_utils,
3
-
config,
4
-
lib,
5
-
...
6
-
}:
7
-
let
8
-
secrets = _utils.setupSecrets config {
9
-
namespace = "searxng";
10
-
secrets = [ "secret" ];
11
-
};
12
-
in
13
-
{
14
-
imports = [
15
-
secrets.generate
16
-
(secrets.mkTemplate "searxng.env" ''
17
-
SEARXNG_SECRET=${secrets.placeholder "secret"}
18
-
'')
19
-
];
20
-
21
-
users.users.nginx.extraGroups = [ config.users.groups.searx.name ];
22
-
23
-
services.searx = {
24
-
enable = true;
25
-
environmentFile = secrets.getTemplate "searxng.env";
26
-
redisCreateLocally = true;
27
-
28
-
configureUwsgi = true;
29
-
uwsgiConfig = {
30
-
http = "/run/searx/searxng.sock";
31
-
chmod-socket = "660";
32
-
disable-logging = true;
33
-
};
34
-
35
-
# FIXME: this doesn't work atm because it's not read i think? add a symlink from /run/searx/limiter.toml pointing to /etc/searx/limiter.toml
36
-
limiterSettings = {
37
-
real_ip = {
38
-
x_for = 1;
39
-
ipv4_prefix = 32;
40
-
ipv6_prefix = 48;
41
-
};
42
-
botdetection.ip_limit.link_token = true;
43
-
botdetection.ip_lists.pass_searxng_org = true;
44
-
};
45
-
46
-
settings = {
47
-
use_default_settings = true;
48
-
general.contact_Url = "mailto:cassie@soopy.moe";
49
-
50
-
preferences.lock = lib.singleton "infinite_scroll";
51
-
ui.infinite_scroll = false;
52
-
ui.search_on_category_select = false;
53
-
54
-
server = {
55
-
secret_key = "@SEARXNG_SECRET@";
56
-
public_instance = true;
57
-
base_url = "https://s.soopy.moe";
58
-
image_proxy = true;
59
-
limiter = true;
60
-
http_protocol_version = "1.1";
61
-
};
62
-
63
-
search = {
64
-
autocomplete = "duckduckgo";
65
-
favicon_resolver = "duckduckgo";
66
-
};
67
-
68
-
engines = [
69
-
{
70
-
name = "annas archive";
71
-
disabled = false;
72
-
}
73
-
{
74
-
name = "nixos wiki";
75
-
disabled = false;
76
-
}
77
-
{
78
-
name = "cppreference";
79
-
disabled = false;
80
-
}
81
-
{
82
-
name = "ddg definitions";
83
-
disabled = false;
84
-
}
85
-
{
86
-
name = "fdroid";
87
-
disabled = false;
88
-
}
89
-
{
90
-
name = "lobste.rs";
91
-
disabled = false;
92
-
}
93
-
{
94
-
name = "nyaa";
95
-
disabled = false;
96
-
}
97
-
{
98
-
name = "pub.dev";
99
-
disabled = false;
100
-
}
101
-
{
102
-
name = "nixos discourse";
103
-
engine = "discourse";
104
-
shortcut = "dno";
105
-
base_url = "https://discourse.nixos.org";
106
-
categories = [
107
-
"it"
108
-
"q&a"
109
-
];
110
-
}
111
-
];
112
-
};
113
-
};
114
-
115
-
services.nginx.virtualHosts."s.soopy.moe" = _utils.mkSimpleProxy {
116
-
socketPath = "/run/searx/searxng.sock";
117
-
extraConfig.extraConfig = ''
118
-
access_log off;
119
-
'';
120
-
};
121
-
}
···
-7
systems/koumakan/services/scm/default.nix
-7
systems/koumakan/services/scm/default.nix
-243
systems/koumakan/services/scm/forgejo.nix
-243
systems/koumakan/services/scm/forgejo.nix
···
1
-
{
2
-
_utils,
3
-
lib,
4
-
config,
5
-
pkgs,
6
-
...
7
-
}:
8
-
let
9
-
secrets = [
10
-
"database/pass"
11
-
"turnstile/secret"
12
-
"turnstile/sitekey"
13
-
"mailing/host"
14
-
"mailing/protocol"
15
-
"mailing/from"
16
-
"mailing/user"
17
-
"mailing/pass"
18
-
];
19
-
ns = "forgejo";
20
-
mkSecret = file: config.sops.secrets."${ns}/${file}".path;
21
-
22
-
runConfig = config.services.forgejo.customDir + "/conf/app.ini";
23
-
in
24
-
{
25
-
sops.secrets = _utils.genSecrets ns secrets {
26
-
owner = config.services.forgejo.user;
27
-
};
28
-
services.forgejo = {
29
-
enable = true;
30
-
package = pkgs.forgejo;
31
-
32
-
repositoryRoot = "${config.services.forgejo.stateDir}/data/repositories";
33
-
34
-
secrets = {
35
-
service = {
36
-
CF_TURNSTILE_SECRET = mkSecret "turnstile/secret";
37
-
CF_TURNSTILE_SITEKEY = mkSecret "turnstile/sitekey";
38
-
};
39
-
40
-
mailer = {
41
-
PROTOCOL = mkSecret "mailing/protocol";
42
-
SMTP_ADDR = mkSecret "mailing/host";
43
-
FROM = mkSecret "mailing/from";
44
-
USER = mkSecret "mailing/user";
45
-
PASSWD = mkSecret "mailing/pass";
46
-
};
47
-
};
48
-
49
-
settings = {
50
-
DEFAULT.APP_NAME = "Patchy";
51
-
server = {
52
-
# Basic settings {{{
53
-
PROTOCOL = "http+unix";
54
-
DOMAIN = "patchy.soopy.moe";
55
-
ROOT_URL = "https://patchy.soopy.moe";
56
-
OFFLINE_MODE = false;
57
-
# HTTP_ADDR is defined automatically.
58
-
# }}}
59
-
60
-
# SSH {{{
61
-
DISABLE_SSH = false; # don't disable ssh access
62
-
START_SSH_SERVER = false; # do disable the built-in ssh server.
63
-
SSH_DOMAIN = "patchy.soopy.moe";
64
-
SSH_PORT = 22;
65
-
SSH_CREATE_AUTHORIZED_KEY_FILE = false;
66
-
SSH_CREATE_AUTHORIZED_PRINCIPALS_FILE = false;
67
-
# }}}
68
-
};
69
-
70
-
# Indexer {{{
71
-
indexer = {
72
-
REPO_INDEXER_ENABLED = true; # good bye hdd health
73
-
REPO_INDEXER_REPO_TYPES = "sources,forks,templates";
74
-
};
75
-
# }}}
76
-
77
-
# Service {{{
78
-
service = {
79
-
ENABLE_NOTIFY_MAIL = true;
80
-
REGISTER_EMAIL_CONFIRM = true;
81
-
82
-
DISABLE_REGISTRATION = false; # need to be false to enable any sort of reg.
83
-
ENABLE_INTERNAL_SIGNIN = true; # we have gatekeeper setup now and working, this can be turned off.
84
-
ALLOW_ONLY_EXTERNAL_REGISTRATION = true;
85
-
86
-
ENABLE_CAPTCHA = true;
87
-
CAPTCHA_TYPE = "cfturnstile";
88
-
};
89
-
# }}}
90
-
91
-
# Mailing {{{
92
-
mailer = {
93
-
ENABLED = true;
94
-
SEND_AS_PLAIN_TEXT = true;
95
-
};
96
-
# }}}
97
-
98
-
# Repository related {{{
99
-
repository = {
100
-
DEFAULT_PUSH_CREATE_PRIVATE = false;
101
-
ENABLE_PUSH_CREATE_USER = true;
102
-
ENABLE_PUSH_CREATE_ORG = true;
103
-
};
104
-
"repository.upload" = {
105
-
ENABLED = true;
106
-
FILE_MAX_SIZE = 10;
107
-
MAX_FILES = 10;
108
-
};
109
-
"repository.signing" = {
110
-
DEFAULT_TRUST_MODEL = "committer";
111
-
};
112
-
"repository.pull-request" = {
113
-
WORK_IN_PROGRESS_PREFIXES = "WIP:,[WIP],draft:";
114
-
DEFAULT_MERGE_STYLE = "rebase-merge";
115
-
};
116
-
# }}}
117
-
118
-
# Web UI {{{
119
-
"ui.meta" = {
120
-
AUTHOR = "Patchy";
121
-
DESCRIPTION = "Patchouli Knowledge, holder of code repos";
122
-
};
123
-
"ui.svg" = {
124
-
ENABLE_RENDER = true;
125
-
};
126
-
# }}}
127
-
128
-
# Security {{{
129
-
security = {
130
-
# Other relavant settings are defined automatically.
131
-
PASSWORD_HASH_ALGO = "argon2";
132
-
COOKIE_USERNAME = "I_LOVE_FORGEJO";
133
-
COOKIE_REMEMBER = "I_HATE_GITHUB";
134
-
REVERSE_PROXY_TRUSTED_PROXIES = "127.0.0.1/8,::1/128";
135
-
MIN_PASSWORD_LENGTH = 8;
136
-
PASSWORD_COMPLEXITY = "lower,digit";
137
-
PASSWORD_CHECK_PWN = true;
138
-
};
139
-
# }}}
140
-
141
-
# OAuth 2.0 and OpenID {{{
142
-
oauth2 = {
143
-
# JWT_SECRET defined automatically, but we don't use it lol
144
-
ENABLED = true;
145
-
JWT_SIGNING_ALGORITHM = "EdDSA";
146
-
JWT_SIGNING_PRIVATE_KEY_FILE = "jwt/oauth.pem";
147
-
# to generate, we're using: nix run n#openssl -- genpkey -algorithm ed25519 -out /var/lib/forgejo/data/jwt/oauth.pem
148
-
};
149
-
150
-
oauth2_client = {
151
-
REGISTER_EMAIL_CONFIRM = false;
152
-
};
153
-
154
-
openid = {
155
-
ENABLE_OPENID_SIGNIN = false;
156
-
ENABLE_OPENID_SIGNUP = false;
157
-
};
158
-
# }}}
159
-
160
-
# TODO: setup go-camo
161
-
162
-
# Logging {{{
163
-
log = {
164
-
ROOT_PATH = "/var/log/forgejo/";
165
-
LOGGER_ROUTER_MODE = "";
166
-
};
167
-
# }}}
168
-
169
-
# Federation {{{
170
-
federation = {
171
-
ENABLED = true;
172
-
MAX_SIZE = 10;
173
-
};
174
-
# }}}
175
-
176
-
# Session {{{
177
-
session = {
178
-
PROVIDER = "db"; # reuse existing db config
179
-
COOKIE_SECURE = true;
180
-
COOKIE_NAME = "girls_kissing";
181
-
SESSION_LIFE_TIME = 604800;
182
-
};
183
-
# }}}
184
-
185
-
# Picture and Avatars {{{
186
-
picture = {
187
-
DISABLE_GRAVATAR = false;
188
-
ENABLE_FEDERATED_AVATAR = true;
189
-
AVATAR_MAX_FILE_SIZE = 5242880;
190
-
};
191
-
# }}}
192
-
};
193
-
194
-
# Database {{{
195
-
database = {
196
-
type = "postgres";
197
-
host = "127.0.0.1";
198
-
name = "gitea";
199
-
user = "gitea";
200
-
passwordFile = mkSecret "database/pass";
201
-
# just be smarter 4head
202
-
# TODO: setup ensure db in postgres config
203
-
createDatabase = false;
204
-
};
205
-
#}}}
206
-
207
-
lfs.enable = true;
208
-
};
209
-
210
-
# nginx vhost and anubis definition {{{
211
-
services.anubis.instances."forgejo".settings = {
212
-
TARGET = "unix://${config.services.forgejo.settings.server.HTTP_ADDR}";
213
-
METRICS_BIND = "127.0.0.1:17001"; # FIXME: hopefully we can eradicate tcp sockets when vm supports that.
214
-
};
215
-
services.nginx.virtualHosts."patchy.soopy.moe" = _utils.mkSimpleProxy {
216
-
socketPath = config.services.anubis.instances."forgejo".settings.BIND;
217
-
extraConfig.extraConfig = ''
218
-
client_max_body_size 0; # managed by forgejo already, might be useful to quickly fail a request
219
-
'';
220
-
};
221
-
# }}}
222
-
223
-
# SSH daemon config {{{
224
-
services.openssh.extraConfig = lib.mkAfter ''
225
-
# forgejo specific settings
226
-
Match User ${config.services.forgejo.user},git
227
-
Banner none
228
-
PasswordAuthentication no
229
-
KbdInteractiveAuthentication no
230
-
AuthorizedKeysCommand ${config.security.wrapperDir}/forgejo-keys keys -e forgejo -u %u -t %t -k %k -c ${runConfig}
231
-
AuthorizedKeysCommandUser ${config.services.forgejo.user}
232
-
'';
233
-
234
-
# get around openssh restrictions
235
-
security.wrappers.forgejo-keys = {
236
-
owner = "root";
237
-
group = config.users.groups.forgejo.name;
238
-
permissions = "u+rx,g+x,o-rwx";
239
-
source = lib.getExe config.services.forgejo.package;
240
-
};
241
-
# }}}
242
-
}
243
-
# vim:foldmethod=marker
···
-35
systems/koumakan/services/scm/tangled-knot.nix
-35
systems/koumakan/services/scm/tangled-knot.nix
···
1
-
{
2
-
_utils,
3
-
...
4
-
}:
5
-
{
6
-
services.tangled-knotserver = {
7
-
enable = true;
8
-
user = "knot";
9
-
10
-
repo.mainBranch = "meow";
11
-
server = {
12
-
hostname = "enanan.staging.soopy.moe";
13
-
listenAddr = "127.0.0.1:34195";
14
-
internalListenAddr = "127.0.0.1:34196";
15
-
};
16
-
17
-
extraConfig = {
18
-
KNOT_SERVER_OWNER = "did:plc:jmr637khkdb2fdxxvoyj672m";
19
-
};
20
-
21
-
extraSshdConfig = ''
22
-
Banner none
23
-
PasswordAuthentication no
24
-
KbdInteractiveAuthentication no
25
-
'';
26
-
};
27
-
28
-
services.nginx.virtualHosts."enanan.staging.soopy.moe" = _utils.mkSimpleProxy {
29
-
port = 34195;
30
-
extraConfig = {
31
-
useACMEHost = null;
32
-
enableACME = true;
33
-
};
34
-
};
35
-
}
···
-7
systems/koumakan/services/security/default.nix
-7
systems/koumakan/services/security/default.nix
-57
systems/koumakan/services/security/pocket-id.nix
-57
systems/koumakan/services/security/pocket-id.nix
···
1
-
{
2
-
_utils,
3
-
config,
4
-
...
5
-
}:
6
-
let
7
-
secrets = _utils.setupSecrets config {
8
-
namespace = "pocket-id";
9
-
secrets = [
10
-
"encryption_key"
11
-
"maxmind_key"
12
-
];
13
-
config = {
14
-
owner = config.users.users.pocket-id.name;
15
-
};
16
-
};
17
-
in
18
-
{
19
-
imports = [ secrets.generate ];
20
-
21
-
services.pocket-id = {
22
-
enable = true;
23
-
24
-
settings = {
25
-
APP_URL = "https://gatekeeper.soopy.moe";
26
-
HOST = "127.0.0.1";
27
-
TRUST_PROXY = true;
28
-
PORT = "31411";
29
-
KEYS_STORAGE = "database";
30
-
31
-
ENCRYPTION_KEY_FILE = secrets.get "encryption_key";
32
-
MAXMIND_LICENSE_KEY_FILE = secrets.get "maxmind_key";
33
-
};
34
-
};
35
-
36
-
services.nginx.virtualHosts."gatekeeper.soopy.moe" = _utils.mkSimpleProxy {
37
-
port = 31411;
38
-
39
-
extraConfig.locations."= /humans.txt" = _utils.mkNginxFile {
40
-
filename = "humans.txt";
41
-
content = ''
42
-
/* Credits */
43
-
Login Background: https://www.pixiv.net/artworks/122054405
44
-
You: for using our services
45
-
46
-
/* People */
47
-
Administrator: soopyc
48
-
Contact: https://soopy.moe/about
49
-
50
-
/* Service */
51
-
Software: Pocket ID
52
-
Deployed-With: NixOS
53
-
Security: https://soopy.moe/.well-known/security.txt
54
-
'';
55
-
};
56
-
};
57
-
}
···
-122
systems/koumakan/services/security/vaultwarden.nix
-122
systems/koumakan/services/security/vaultwarden.nix
···
1
-
{
2
-
_utils,
3
-
config,
4
-
# lib,
5
-
...
6
-
}:
7
-
let
8
-
# mkSecrets = file:
9
-
# if !lib.elem file secrets
10
-
# then throw "Provided secret file ${file} is not in the list of defined secrets."
11
-
# else "/run/secrets/vaultwarden/${file}";
12
-
secrets = [
13
-
# TODO: figure out converting { smtp = ["username_encrypted"]; } to paths
14
-
"admin_token"
15
-
"smtp/username"
16
-
"smtp/password"
17
-
"smtp/host"
18
-
"smtp/security"
19
-
"smtp/port"
20
-
"database/username"
21
-
"database/password"
22
-
"yubico/id"
23
-
"yubico/secret"
24
-
"push/installation_id"
25
-
"push/installation_key"
26
-
];
27
-
in
28
-
{
29
-
sops.secrets = _utils.genSecrets "vaultwarden" secrets { };
30
-
sops.templates."vaultwarden.env".content =
31
-
let
32
-
ph = p: config.sops.placeholder."vaultwarden/${p}";
33
-
in
34
-
''
35
-
DATABASE_URL=postgresql://${ph "database/username"}:${ph "database/password"}@localhost/vaultwarden
36
-
ADMIN_TOKEN=${ph "admin_token"}
37
-
YUBICO_CLIENT_ID=${ph "yubico/id"}
38
-
YUBICO_SECRET_KEY=${ph "yubico/secret"}
39
-
SMTP_USERNAME=${ph "smtp/username"}
40
-
SMTP_FROM=${ph "smtp/username"}
41
-
SMTP_PASSWORD=${ph "smtp/password"}
42
-
SMTP_HOST=${ph "smtp/host"}
43
-
SMTP_SECURITY=${ph "smtp/security"}
44
-
SMTP_PORT=${ph "smtp/port"}
45
-
PUSH_INSTALLATION_ID=${ph "push/installation_id"}
46
-
PUSH_INSTALLATION_KEY=${ph "push/installation_key"}
47
-
'';
48
-
49
-
services.vaultwarden = {
50
-
enable = true;
51
-
config = {
52
-
ROCKET_ADDRESS = "::1";
53
-
ROCKET_PORT = 38480;
54
-
LOG_LEVEL = "warn";
55
-
DOMAIN = "https://v.soopy.moe";
56
-
IP_HEADER = "X-Real-IP";
57
-
RELOAD_TEMPLATES = false;
58
-
PUSH_ENABLED = true;
59
-
60
-
SIGNUPS_ALLOWED = true;
61
-
SIGNUPS_VERIFY = true;
62
-
SIGNUPS_VERIFY_RESEND_TIME = 3600;
63
-
SIGNUPS_VERIFY_RESEND_LIMIT = 6;
64
-
INVITATIONS_ALLOWED = true;
65
-
66
-
ICON_CACHE_TTL = 2592000;
67
-
ICON_CACHE_NEGTTL = 7200;
68
-
ICON_DOWNLOAD_TIMEOUT = 10;
69
-
ICON_BLACKLIST_NON_GLOBAL_IPS = true;
70
-
INVITATION_ORG_NAME = "TransGensokyobians";
71
-
USER_ATTACHMENT_LIMIT = 100000;
72
-
ORG_ATTACHMENT_LIMIT = 100000;
73
-
74
-
DISABLE_2FA_REMEMBER = false;
75
-
REQUIRE_DEVICE_EMAIL = true;
76
-
PASSWORD_ITERATIONS = 1000000;
77
-
PASSWORD_HINTS_ALLOWED = true;
78
-
SHOW_PASSWORD_HINT = false;
79
-
DISABLE_ADMIN_TOKEN = false;
80
-
EMERGENCY_ACCESS_ALLOWED = true;
81
-
EMAIL_TOKEN_SIZE = 12;
82
-
LOGIN_RATELIMIT_SECONDS = 10;
83
-
AUTHENTICATOR_DISABLE_TIME_DRIFT = false;
84
-
85
-
SMTP_EMBED_IMAGES = true;
86
-
SMTP_FROM_NAME = "Okuu (from vault at soopy.moe)";
87
-
SMTP_TIMEOUT = 15;
88
-
SMTP_ACCEPT_INVALID_CERTS = false;
89
-
SMTP_ACCEPT_INVALID_HOSTNAMES = false;
90
-
};
91
-
dbBackend = "postgresql";
92
-
environmentFile = config.sops.templates."vaultwarden.env".path;
93
-
};
94
-
95
-
services.nginx = {
96
-
virtualHosts."v.soopy.moe" = _utils.mkVhost {
97
-
extraConfig = ''
98
-
client_max_body_size 100M;
99
-
proxy_read_timeout 3h;
100
-
proxy_connect_timeout 3h;
101
-
proxy_send_timeout 3h;
102
-
'';
103
-
104
-
locations."/" = {
105
-
proxyPass = "http://vault-default";
106
-
proxyWebsockets = true; # in vw 1.30.0, the WS server is integrated into the same port.
107
-
};
108
-
};
109
-
110
-
upstreams = {
111
-
vault-default = {
112
-
servers = {
113
-
"[::1]:38480" = { };
114
-
};
115
-
extraConfig = ''
116
-
zone vaultwarden 128k; # XXX: are there any security implications if we reuse the same zone for both webvault and the ws server?
117
-
keepalive 2; # FIXME: should we use a higher keepalive?
118
-
'';
119
-
};
120
-
};
121
-
};
122
-
}
···
-20
systems/koumakan/services/static-sites/assets.nix
-20
systems/koumakan/services/static-sites/assets.nix
···
1
-
{ _utils, ... }:
2
-
{
3
-
services.nginx.virtualHosts."assets.soopy.moe" = _utils.mkVhost {
4
-
root = "/opt/public-assets";
5
-
locations = {
6
-
"/".extraConfig = ''
7
-
expires max;
8
-
etag on;
9
-
autoindex on;
10
-
add_header Cache-Control "public";
11
-
'';
12
-
13
-
"= /empty.gif".extraConfig = "empty_gif;";
14
-
15
-
"~* /\\.(?!well-known)".extraConfig = ''
16
-
deny all;
17
-
'';
18
-
};
19
-
};
20
-
}
···
-20
systems/koumakan/services/static-sites/backup-public.nix
-20
systems/koumakan/services/static-sites/backup-public.nix
···
1
-
{
2
-
_utils,
3
-
lib,
4
-
config,
5
-
...
6
-
}:
7
-
{
8
-
services.nginx.virtualHosts."backups.soopy.moe" = _utils.mkVhost {
9
-
locations."/" = {
10
-
root = "/home/backup/public/";
11
-
extraConfig = ''
12
-
autoindex on;
13
-
autoindex_exact_size off;
14
-
'';
15
-
};
16
-
};
17
-
18
-
systemd.services.nginx.serviceConfig.BindReadOnlyPaths = lib.singleton "/home/backup/public";
19
-
users.users.nginx.extraGroups = lib.singleton config.users.users.backup.name;
20
-
}
···
+9
-8
systems/koumakan/services/static-sites/default.nix
+9
-8
systems/koumakan/services/static-sites/default.nix
···
1
-
{
2
imports = [
3
-
./assets.nix
4
-
./backup-public.nix
5
-
./nonbunary.nix
6
-
./user.nix
7
-
./verification.nix
8
];
9
10
-
# Fallback site
11
services.nginx.virtualHosts."_" = {
12
default = true;
13
useACMEHost = "global.c.soopy.moe";
14
forceSSL = true;
15
16
locations = {
17
-
"/".root = "/srv/www/fallback";
18
};
19
};
20
}
···
1
+
{...}: {
2
imports = [
3
+
./keine.nix
4
];
5
6
services.nginx.virtualHosts."_" = {
7
default = true;
8
useACMEHost = "global.c.soopy.moe";
9
forceSSL = true;
10
+
# locations."/".return = "301 https://gensokyo.soopy.moe";
11
12
+
# TODO: remove after bringing back up all the services.
13
locations = {
14
+
"/".return = "503";
15
+
"~ ^/(index.html|splash.png)".root = "/srv/www/maintenance";
16
};
17
+
extraConfig = ''
18
+
error_page 503 /index.html;
19
+
'';
20
};
21
}
+25
systems/koumakan/services/static-sites/keine.nix
+25
systems/koumakan/services/static-sites/keine.nix
···
···
1
+
{_utils, ...}: {
2
+
services.nginx.virtualHosts."keine.soopy.moe" = _utils.mkVhost {
3
+
forceSSL = false;
4
+
addSSL = true; # Don't force SSL on a mirror (implications TBD)
5
+
6
+
root = "/srv/www/keine";
7
+
locations = {
8
+
"/".extraConfig = ''
9
+
fancyindex_header "/theme/index_header.html";
10
+
'';
11
+
"/theme/".alias = "/srv/www/misc/keine/theme/";
12
+
"/static/".alias = "/srv/www/misc/keine/theme/static/";
13
+
};
14
+
15
+
extraConfig = ''
16
+
fancyindex on;
17
+
fancyindex_header "/theme/header.html";
18
+
fancyindex_footer "/theme/footer.html";
19
+
fancyindex_show_path off;
20
+
fancyindex_name_length 255;
21
+
fancyindex_exact_size off;
22
+
fancyindex_localtime on;
23
+
'';
24
+
};
25
+
}
-21
systems/koumakan/services/static-sites/nonbunary.nix
-21
systems/koumakan/services/static-sites/nonbunary.nix
···
1
-
{ _utils, ... }:
2
-
{
3
-
services.nginx.virtualHosts."nonbunary.soopy.moe" = _utils.mkVhost {
4
-
locations."/".return = "404";
5
-
locations."= /" = _utils.mkNginxFile {
6
-
content = ''
7
-
<!doctype html>
8
-
<html lang="en">
9
-
<body>
10
-
<svg xmlns="http://www.w3.org/2000/svg" width="300" height="200">
11
-
<path fill="#2D2D2D" d="m0,0h300v200H0"/>
12
-
<path fill="#9B59D0" d="m0,0h300v150H0"/>
13
-
<path fill="#FFFFFF" d="m0,0h300v100H0"/>
14
-
<path fill="#FFF433" d="m0,0h300v50H0"/>
15
-
</svg>
16
-
</body>
17
-
</html>
18
-
'';
19
-
};
20
-
};
21
-
}
···
-65
systems/koumakan/services/static-sites/photography.nix
-65
systems/koumakan/services/static-sites/photography.nix
···
1
-
{
2
-
config,
3
-
pkgs,
4
-
lib,
5
-
_utils,
6
-
...
7
-
}:
8
-
{
9
-
# TODO: we can make this better by just automating everything needed to make a h5ai site.
10
-
services.phpfpm.pools."photography" = {
11
-
user = "photography";
12
-
settings = {
13
-
"listen.owner" = config.services.nginx.user;
14
-
"pm" = "ondemand";
15
-
"pm.process_idle_timeout" = "3s";
16
-
"pm.max_children" = 32;
17
-
"pm.max_requests" = 500;
18
-
"pm.start_servers" = 1;
19
-
"pm.min_spare_servers" = 1;
20
-
"pm.max_spare_servers" = 3;
21
-
22
-
"php_admin_value[error_log]" = "stderr";
23
-
"php_admin_flag[log_errors]" = true;
24
-
"catch_workers_output" = true;
25
-
};
26
-
phpEnv."PATH" = lib.makeBinPath (
27
-
with pkgs;
28
-
[
29
-
zip
30
-
]
31
-
);
32
-
};
33
-
34
-
services.nginx.virtualHosts."photography.soopy.moe" = _utils.mkVhost {
35
-
root = "/opt/photography";
36
-
extraConfig = ''
37
-
index index.html index.php /_h5ai/public/index.php;
38
-
'';
39
-
40
-
locations."~ \.php$" = {
41
-
tryFiles = "$fastcgi_script_name =404";
42
-
# what's the purpose of $.fastcgiParams when it's barely even usable
43
-
# fastcgiParams = {
44
-
# DOCUMENT_ROOT = "$realpath_root";
45
-
# SCRIPT_FILENAME = "$realpath_root$fastcgi_script_name";
46
-
# };
47
-
48
-
extraConfig = ''
49
-
error_log /var/log/nginx/photography.error.log warn;
50
-
fastcgi_pass unix:${config.services.phpfpm.pools.photography.socket};
51
-
include ${config.services.nginx.package}/conf/fastcgi.conf;
52
-
'';
53
-
};
54
-
};
55
-
56
-
users.users.photography = {
57
-
isSystemUser = true;
58
-
group = "photography";
59
-
createHome = false;
60
-
};
61
-
users.groups.photography = { };
62
-
63
-
users.users.nginx.extraGroups = [ "photography" ];
64
-
users.users.cassie.extraGroups = [ "photography" ];
65
-
}
···
-32
systems/koumakan/services/static-sites/user.nix
-32
systems/koumakan/services/static-sites/user.nix
···
1
-
{ _utils, lib, ... }:
2
-
{
3
-
services.nginx.virtualHosts."users.soopy.moe" = _utils.mkVhost {
4
-
locations."/" = _utils.mkNginxFile {
5
-
content = ''
6
-
<!doctype html>
7
-
<html lang="en">
8
-
<head>
9
-
<meta charset="utf-8" />
10
-
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
11
-
<style>:root {font-family: monospace;}</style>
12
-
<title>~</title>
13
-
</head>
14
-
15
-
<body>
16
-
<h1>You are at ~</h1>
17
-
<ul>
18
-
<li><a href="/~soopyc" title="web hosting for soopyc">~soopyc</a></li>
19
-
</ul>
20
-
</body>
21
-
</html>
22
-
'';
23
-
};
24
-
25
-
locations."/~soopyc" = {
26
-
root = "/home/cassie/Web";
27
-
tryFiles = "$uri $uri/index.html $uri.html =404";
28
-
extraConfig = "autoindex on;";
29
-
};
30
-
};
31
-
systemd.services.nginx.serviceConfig.BindReadOnlyPaths = lib.singleton "/home/cassie/Web";
32
-
}
···
-7
systems/koumakan/services/static-sites/verification-data/.well-known/microsoft-identity-association.json
-7
systems/koumakan/services/static-sites/verification-data/.well-known/microsoft-identity-association.json
-20
systems/koumakan/services/static-sites/verification-data/index.html
-20
systems/koumakan/services/static-sites/verification-data/index.html
···
1
-
<!doctype html>
2
-
<html lang="en">
3
-
<head>
4
-
<meta charset="utf-8" />
5
-
<meta name="viewport" content="width=device-width, initial-scale=1" />
6
-
<title>publisher verification | soopy.moe</title>
7
-
<style>
8
-
:root {
9
-
font-family: monospace;
10
-
}
11
-
</style>
12
-
</head>
13
-
14
-
<body>
15
-
<h1>pub.soopy.moe</h1>
16
-
<p>welcome to <b>pub.soopy.moe</b>.</p>
17
-
<p>this is a verification domain for projects created and maintained by <a href="//soopy.moe">soopyc</a>.</p>
18
-
<p>you might have gotten here from an oauth application. if you have any questions about data handling, please contact soopyc via the link above.</p>
19
-
</body>
20
-
</html>
···
-8
systems/koumakan/services/static-sites/verification.nix
-8
systems/koumakan/services/static-sites/verification.nix
-13
systems/koumakan/services/storage/atuin.nix
-13
systems/koumakan/services/storage/atuin.nix
-71
systems/koumakan/services/storage/backup.nix
-71
systems/koumakan/services/storage/backup.nix
···
1
-
{
2
-
lib,
3
-
pkgs,
4
-
inputs,
5
-
...
6
-
}:
7
-
{
8
-
users = {
9
-
users.backup = {
10
-
isNormalUser = true;
11
-
group = "backup";
12
-
shell = pkgs.bashInteractive;
13
-
packages = with pkgs; [ rsync ];
14
-
openssh.authorizedKeys.keyFiles = lib.singleton (inputs.self + "/creds/ssh/users/backup");
15
-
createHome = false;
16
-
};
17
-
18
-
groups.backup = { };
19
-
};
20
-
21
-
system.activationScripts.initBackupHome = {
22
-
deps = [ "users" ];
23
-
supportsDryActivation = false;
24
-
text =
25
-
let
26
-
btrfs = lib.getExe pkgs.btrfs-progs;
27
-
in
28
-
''
29
-
ensureSubvolume() {
30
-
mode=$1; shift
31
-
dir=$1; shift
32
-
33
-
if test ! -e $dir; then
34
-
${btrfs} subvolume create $dir
35
-
fi
36
-
chown backup:backup $dir
37
-
chmod $mode $dir
38
-
}
39
-
40
-
ensureSubvolume 550 /home/backup
41
-
ensureSubvolume 700 /home/backup/private
42
-
ensureSubvolume 700 /home/backup/private/snapshots
43
-
ensureSubvolume 755 /home/backup/public
44
-
ensureSubvolume 755 /home/backup/public/snapshots
45
-
'';
46
-
};
47
-
48
-
systemd = {
49
-
services."snapshot-backup" = {
50
-
path = [ pkgs.btrfs-progs ];
51
-
script = ''
52
-
NOW=$(date -u +%Y%m%d.%H%M%S)
53
-
DATA_PATH=/home/backup/public
54
-
55
-
mkdir -p ''${DATA_PATH}/snapshots
56
-
btrfs subvolume snapshot -r $DATA_PATH ''${DATA_PATH}/snapshots/''${NOW}
57
-
'';
58
-
serviceConfig.User = "backup";
59
-
};
60
-
61
-
timers."snapshot-backup" = {
62
-
wantedBy = lib.singleton "multi-user.target";
63
-
timerConfig = {
64
-
OnCalendar = "*:0";
65
-
RandomizedDelaySec = "60s";
66
-
AccuracySec = "1us";
67
-
};
68
-
unitConfig.RequiresMountsFor = "/home";
69
-
};
70
-
};
71
-
}
···
-9
systems/koumakan/services/storage/default.nix
-9
systems/koumakan/services/storage/default.nix
-143
systems/koumakan/services/storage/garage.nix
-143
systems/koumakan/services/storage/garage.nix
···
1
-
{
2
-
_utils,
3
-
config,
4
-
lib,
5
-
pkgs,
6
-
...
7
-
}:
8
-
let
9
-
secrets = _utils.setupSecrets config {
10
-
namespace = "garage";
11
-
secrets = [
12
-
"rpc_secret"
13
-
"admin_token"
14
-
"metrics_token"
15
-
];
16
-
config.owner = "garage";
17
-
};
18
-
in
19
-
{
20
-
imports = [ secrets.generate ];
21
-
22
-
users = {
23
-
users.garage = {
24
-
isSystemUser = true;
25
-
group = "garage";
26
-
};
27
-
groups.garage = { };
28
-
};
29
-
30
-
services.garage = {
31
-
enable = true;
32
-
package = pkgs.garage_2;
33
-
34
-
settings = {
35
-
metadata_dir = "/var/lib/garage/meta";
36
-
metadata_snapshots_dir = "/var/lib/garage/snapshots";
37
-
data_dir = "/var/lib/garage/data";
38
-
db_engine = "sqlite";
39
-
metadata_auto_snapshot_interval = "6h";
40
-
41
-
replication_factor = 1; # we only have the resources for a single node atm.
42
-
compression_level = 4;
43
-
44
-
s3_api = {
45
-
s3_region = "ap-east-1";
46
-
api_bind_addr = "[::1]:39930";
47
-
root_domain = ".s3.soopy.moe";
48
-
};
49
-
50
-
# this is needed because garage apparently still doesn't support anon access via path based api, so this is more like a hack than anything atm.
51
-
s3_web = {
52
-
bind_addr = "[::1]:39939";
53
-
root_domain = ".s3web.soopy.moe";
54
-
};
55
-
56
-
rpc_bind_addr = "100.100.16.16:39931";
57
-
rpc_public_addr = "koumakan.mist-nessie.ts.net:39931";
58
-
rpc_secret_file = secrets.get "rpc_secret";
59
-
60
-
admin = {
61
-
api_bind_addr = "100.100.16.16:39932";
62
-
admin_token_file = secrets.get "admin_token";
63
-
metrics_token_file = secrets.get "metrics_token";
64
-
};
65
-
};
66
-
};
67
-
68
-
systemd.tmpfiles.settings."50-garage-init"."/var/lib/garage"."d" = {
69
-
user = "garage";
70
-
group = "garage";
71
-
mode = "0700";
72
-
};
73
-
74
-
systemd.services.garage.serviceConfig = {
75
-
DynamicUser = false; # we need to use a mounted filesystem and systemd explodes when i already have a mountpoint at /var/lib/garage/data.
76
-
User = config.users.users.garage.name;
77
-
Group = config.users.groups.garage.name;
78
-
Restart = "on-failure";
79
-
StateDirectory = lib.mkForce null; # this somehow breaks mounting dirs into /var/lib; systemd complains about id-mapped mount: device or resource busy
80
-
};
81
-
82
-
services.nginx.virtualHosts.".s3.soopy.moe" = _utils.mkSimpleProxy {
83
-
port = 39930;
84
-
extraConfig = {
85
-
useACMEHost = "s3.soopy.moe";
86
-
extraConfig = ''
87
-
client_max_body_size 32G;
88
-
proxy_max_temp_file_size 0;
89
-
'';
90
-
91
-
locations."= /_static" = _utils.mkNginxFile {
92
-
content = ''
93
-
<!doctype html>
94
-
<html lang="en">
95
-
<head>
96
-
<title>horrors of gensokyo</title>
97
-
<style>
98
-
:root {font-family: "monospace";}
99
-
</style>
100
-
</head>
101
-
<body>
102
-
<h1>gensokyo filedump - public buckets</h1>
103
-
<ul>
104
-
<li><a href="//cache.soopy.moe">nix-cache</a></li>
105
-
<li>lwjgl-nix</li>
106
-
</ul>
107
-
</body>
108
-
</html>
109
-
'';
110
-
};
111
-
};
112
-
};
113
-
114
-
services.nginx.virtualHosts."*.s3web.soopy.moe" = _utils.mkSimpleProxy {
115
-
port = 39939;
116
-
extraConfig.useACMEHost = "s3.soopy.moe";
117
-
};
118
-
119
-
systemd.services.vmagent.serviceConfig.LoadCredential = [
120
-
"garage_token:${secrets.get "metrics_token"}"
121
-
];
122
-
123
-
services.vmagent.prometheusConfig.scrape_configs = lib.singleton {
124
-
job_name = "garage-job";
125
-
scheme = "http";
126
-
static_configs = lib.singleton { targets = lib.singleton "localhost:39932"; };
127
-
relabel_configs = lib.singleton {
128
-
target_label = "instance";
129
-
replacement = config.networking.fqdnOrHostName;
130
-
};
131
-
132
-
# https://github.com/NixOS/nixpkgs/issues/367447
133
-
# https://docs.victoriametrics.com/sd_configs/#scrape_configs
134
-
# hard coding because we can't use %{ENV_VAR} syntax (yet) when checking.
135
-
bearer_token_file = "/run/credentials/vmagent.service/garage_token";
136
-
};
137
-
138
-
##################### NAMED BUCKETS WITH WEB HOSTING ###########################
139
-
140
-
services.nginx.virtualHosts."cache.soopy.moe" = _utils.mkSimpleProxy {
141
-
port = 39939;
142
-
};
143
-
}
···
-33
systems/koumakan/services/storage/wastebin.nix
-33
systems/koumakan/services/storage/wastebin.nix
···
1
-
{
2
-
_utils,
3
-
config,
4
-
...
5
-
}:
6
-
let
7
-
secrets = _utils.setupSecrets config {
8
-
namespace = "wastebasket";
9
-
secrets = [ "key" ];
10
-
};
11
-
in
12
-
{
13
-
# figure out a way to disable encryption, i don't trust the impl.
14
-
imports = [
15
-
secrets.generate
16
-
(secrets.mkTemplate "wastebin.env" ''
17
-
WASTEBIN_SIGNING_KEY=${secrets.placeholder "key"}
18
-
'')
19
-
];
20
-
services.wastebin = {
21
-
enable = true;
22
-
settings = {
23
-
WASTEBIN_ADDRESS_PORT = "127.0.0.1:34682";
24
-
WASTEBIN_BASE_URL = "https://akyuu.soopy.moe";
25
-
WASTEBIN_MAX_BODY_SIZE = 10240;
26
-
};
27
-
secretFile = secrets.getTemplate "wastebin.env";
28
-
};
29
-
30
-
services.nginx.virtualHosts."akyuu.soopy.moe" = _utils.mkSimpleProxy {
31
-
port = 34682;
32
-
};
33
-
}
···
-54
systems/koumakan/services/storage/zipline.nix
-54
systems/koumakan/services/storage/zipline.nix
···
1
-
{
2
-
_utils,
3
-
lib,
4
-
config,
5
-
...
6
-
}:
7
-
let
8
-
secrets = _utils.setupSecrets config {
9
-
namespace = "zipline";
10
-
secrets = [
11
-
"core/secret"
12
-
"s3/access_key"
13
-
"s3/access_secret"
14
-
];
15
-
};
16
-
in
17
-
{
18
-
imports = [
19
-
secrets.generate
20
-
(secrets.mkTemplate "zipline.env" ''
21
-
CORE_SECRET=${secrets.placeholder "core/secret"}
22
-
DATASOURCE_S3_ACCESS_KEY_ID=${secrets.placeholder "s3/access_key"}
23
-
DATASOURCE_S3_SECRET_ACCESS_KEY=${secrets.placeholder "s3/access_secret"}
24
-
'')
25
-
];
26
-
27
-
services.zipline = {
28
-
enable = true;
29
-
environmentFiles = lib.singleton (secrets.getTemplate "zipline.env");
30
-
31
-
settings = {
32
-
CORE_PORT = 34638;
33
-
DATASOURCE_TYPE = "s3";
34
-
DATASOURCE_S3_BUCKET = "zipline-01";
35
-
DATASOURCE_S3_REGION = "ap-east-1";
36
-
DATASOURCE_S3_ENDPOINT = "https://s3.soopy.moe";
37
-
DATASOURCE_S3_FORCE_PATH_STYLE = "true";
38
-
39
-
FEATURES_OAUTH_REGISTRATION = "true";
40
-
};
41
-
};
42
-
43
-
services.nginx.virtualHosts."dumpster.soopy.moe" = _utils.mkSimpleProxy {
44
-
port = 34638;
45
-
extraConfig.extraConfig = ''
46
-
client_max_body_size 100M;
47
-
'';
48
-
};
49
-
50
-
systemd.services.zipline.serviceConfig = {
51
-
Restart = "on-failure";
52
-
RestartSec = "10s";
53
-
};
54
-
}
···
-7
systems/koumakan/services/telemetry/default.nix
-7
systems/koumakan/services/telemetry/default.nix
-16
systems/koumakan/services/telemetry/grafana/dashboards/README.md
-16
systems/koumakan/services/telemetry/grafana/dashboards/README.md
···
1
-
# Grafana Dashboards
2
-
3
-
Reproducible definitions of grafana dashboards. Most of these are obtained are obtained from Grafana's site directly.
4
-
Please see our `utils/justfile` for more details.
5
-
6
-
## Obtaining a new dashboard
7
-
Run the following just recipe.
8
-
9
-
```console
10
-
# just utils add-grafana-dashboard <id> <name> [title]
11
-
# dashboard id ^ ^ ^ (visible) dashboard title
12
-
# dashboard json name (invisible)
13
-
14
-
$ just utils add-grafana-dashboard 1860 node "Node Metrics"
15
-
xh https://grafana.com/api/dashboards/1860 | jq '.json | .uid="node" | .title="Node Metrics"' -c > ../systems/koumakan/services/telemetry/grafana/dashboards/node.json
16
-
```
···
-1
systems/koumakan/services/telemetry/grafana/dashboards/garage.json
-1
systems/koumakan/services/telemetry/grafana/dashboards/garage.json
···
1
-
{"__inputs":[{"name":"DS_DS_PROMETHEUS","label":"DS_PROMETHEUS","description":"","type":"datasource","pluginId":"prometheus","pluginName":"Prometheus"}],"__elements":{},"__requires":[{"type":"grafana","id":"grafana","name":"Grafana","version":"9.2.0"},{"type":"datasource","id":"prometheus","name":"Prometheus","version":"1.0.0"},{"type":"panel","id":"timeseries","name":"Time series","version":""}],"annotations":{"list":[{"builtIn":1,"datasource":{"type":"datasource","uid":"grafana"},"enable":true,"hide":true,"iconColor":"rgba(0, 211, 255, 1)","name":"Annotations & Alerts","target":{"limit":100,"matchAny":false,"tags":[],"type":"dashboard"},"type":"dashboard"}]},"editable":true,"fiscalYearStartMonth":0,"graphTooltip":0,"id":null,"links":[],"liveNow":false,"panels":[{"datasource":{"type":"prometheus","uid":"${DS_DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":24,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"auto","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"Bps"},"overrides":[]},"gridPos":{"h":9,"w":8,"x":0,"y":0},"id":10,"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom","showLegend":true},"tooltip":{"mode":"single","sort":"none"}},"targets":[{"datasource":{"type":"prometheus","uid":"${DS_DS_PROMETHEUS}"},"exemplar":true,"expr":"sum(rate(block_bytes_read{job=\"garage\"}[$__rate_interval]) )","hide":false,"interval":"","legendFormat":"Disk bytes read","refId":"A"},{"datasource":{"type":"prometheus","uid":"${DS_DS_PROMETHEUS}"},"exemplar":true,"expr":"-sum(rate(block_bytes_written{job=\"garage\"}[$__rate_interval]) )","hide":false,"interval":"","legendFormat":"Disk bytes written","refId":"B"}],"title":"Disk I/O","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${DS_DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"auto","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"reqps"},"overrides":[]},"gridPos":{"h":9,"w":8,"x":8,"y":0},"id":3,"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom","showLegend":true},"tooltip":{"mode":"single","sort":"none"}},"targets":[{"datasource":{"type":"prometheus","uid":"${DS_DS_PROMETHEUS}"},"editorMode":"code","exemplar":true,"expr":"sum by (api_endpoint) (rate(api_s3_request_counter {job=\"garage\"}[$__rate_interval]))","hide":false,"interval":"","legendFormat":"{{api_endpoint}}","range":true,"refId":"A"}],"title":"API requests","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${DS_DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"auto","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"reqps"},"overrides":[]},"gridPos":{"h":9,"w":8,"x":16,"y":0},"id":9,"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom","showLegend":true},"tooltip":{"mode":"single","sort":"none"}},"targets":[{"datasource":{"type":"prometheus","uid":"${DS_DS_PROMETHEUS}"},"exemplar":true,"expr":"sum(rate(web_request_counter {job=\"garage\"}[$__rate_interval]))","hide":false,"interval":"","legendFormat":"Web request rate","refId":"A"}],"title":"Web requests","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${DS_DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"auto","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"reqps"},"overrides":[]},"gridPos":{"h":8,"w":8,"x":0,"y":9},"id":2,"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom","showLegend":true},"tooltip":{"mode":"single","sort":"none"}},"targets":[{"datasource":{"type":"prometheus","uid":"${DS_DS_PROMETHEUS}"},"exemplar":true,"expr":"sum by (rpc_endpoint) (rate(rpc_request_counter {job=\"garage\"}[$__rate_interval]))","hide":false,"interval":"","legendFormat":"{{rpc_endpoint}}","refId":"A"}],"title":"RPC requests","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${DS_DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"auto","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"reqps"},"overrides":[]},"gridPos":{"h":8,"w":8,"x":8,"y":9},"id":4,"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom","showLegend":true},"tooltip":{"mode":"single","sort":"none"}},"targets":[{"datasource":{"type":"prometheus","uid":"${DS_DS_PROMETHEUS}"},"editorMode":"code","exemplar":true,"expr":"sum by (api_endpoint, status_code) (rate(api_s3_error_counter {job=\"garage\"}[$__rate_interval]))","hide":false,"interval":"","legendFormat":"{{api_endpoint}} {{status_code}}","range":true,"refId":"A"}],"title":"API errors","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${DS_DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"auto","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"reqps"},"overrides":[]},"gridPos":{"h":8,"w":8,"x":16,"y":9},"id":11,"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom","showLegend":true},"tooltip":{"mode":"single","sort":"none"}},"targets":[{"datasource":{"type":"prometheus","uid":"${DS_DS_PROMETHEUS}"},"exemplar":true,"expr":"sum by(status_code) (rate(web_error_counter {job=\"garage\"}[$__rate_interval]))","hide":false,"interval":"","legendFormat":"{{status_code}}","refId":"A"}],"title":"Web errors","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${DS_DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"auto","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]}},"overrides":[{"__systemRef":"hideSeriesFrom","matcher":{"id":"byNames","options":{"mode":"exclude","names":["10.83.2.3:3903"],"prefix":"All except:","readOnly":true}},"properties":[{"id":"custom.hideFrom","value":{"legend":false,"tooltip":false,"viz":true}}]}]},"gridPos":{"h":8,"w":8,"x":0,"y":17},"id":6,"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom","showLegend":true},"tooltip":{"mode":"single","sort":"none"}},"targets":[{"datasource":{"type":"prometheus","uid":"${DS_DS_PROMETHEUS}"},"exemplar":true,"expr":"block_resync_queue_length{job=\"garage\"}","interval":"","legendFormat":"{{instance}}","refId":"A"}],"title":"Resync queue length","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${DS_DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"auto","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]}},"overrides":[]},"gridPos":{"h":8,"w":8,"x":8,"y":17},"id":7,"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom","showLegend":true},"tooltip":{"mode":"single","sort":"none"}},"targets":[{"datasource":{"type":"prometheus","uid":"${DS_DS_PROMETHEUS}"},"exemplar":true,"expr":"sum by(table_name) (table_gc_todo_queue_length{job=\"garage\"})","interval":"","legendFormat":"{{ table_name}}","refId":"A"}],"title":"Table GC queue length","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${DS_DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"auto","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]}},"overrides":[]},"gridPos":{"h":8,"w":8,"x":16,"y":17},"id":8,"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom","showLegend":true},"tooltip":{"mode":"single","sort":"none"}},"targets":[{"datasource":{"type":"prometheus","uid":"${DS_DS_PROMETHEUS}"},"exemplar":true,"expr":"sum by(table_name) (table_merkle_updater_todo_queue_length{job=\"garage\"})","interval":"","legendFormat":"{{ table_name}}","refId":"A"}],"title":"Table Merkle updater queue length","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${DS_DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"auto","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]}},"overrides":[]},"gridPos":{"h":8,"w":8,"x":0,"y":25},"id":12,"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom","showLegend":true},"tooltip":{"mode":"single","sort":"none"}},"targets":[{"datasource":{"type":"prometheus","uid":"${DS_DS_PROMETHEUS}"},"exemplar":true,"expr":"block_resync_errored_blocks{job=\"garage\"}","interval":"","legendFormat":"{{instance}}","refId":"A"}],"title":"Resync errored blocks","type":"timeseries"}],"refresh":"30s","schemaVersion":37,"style":"dark","tags":[],"templating":{"list":[]},"time":{"from":"now-6h","to":"now"},"timepicker":{},"timezone":"","title":"Garage","uid":"ys3pnpZ4k","version":26,"weekStart":""}
···
-1
systems/koumakan/services/telemetry/grafana/dashboards/minio-cluster.json
-1
systems/koumakan/services/telemetry/grafana/dashboards/minio-cluster.json
···
1
-
{"__inputs":[{"name":"DS_PROMETHEUS","label":"Prometheus","description":"","type":"datasource","pluginId":"prometheus","pluginName":"Prometheus"}],"__elements":{},"__requires":[{"type":"panel","id":"bargauge","name":"Bar gauge","version":""},{"type":"panel","id":"gauge","name":"Gauge","version":""},{"type":"grafana","id":"grafana","name":"Grafana","version":"10.3.1"},{"type":"panel","id":"graph","name":"Graph (old)","version":""},{"type":"panel","id":"piechart","name":"Pie chart","version":""},{"type":"datasource","id":"prometheus","name":"Prometheus","version":"1.0.0"},{"type":"panel","id":"stat","name":"Stat","version":""},{"type":"panel","id":"timeseries","name":"Time series","version":""}],"annotations":{"list":[{"builtIn":1,"datasource":{"type":"datasource","uid":"grafana"},"enable":true,"hide":true,"iconColor":"rgba(0, 211, 255, 1)","name":"Annotations & Alerts","target":{"limit":100,"matchAny":false,"tags":[],"type":"dashboard"},"type":"dashboard"}]},"description":"MinIO Grafana Dashboard - https://min.io/","editable":true,"fiscalYearStartMonth":0,"gnetId":13502,"graphTooltip":0,"id":null,"links":[{"icon":"external link","includeVars":true,"keepTime":true,"tags":["minio"],"type":"dashboards"}],"liveNow":false,"panels":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"","fieldConfig":{"defaults":{"mappings":[{"options":{"match":"null","result":{"text":"N/A"}},"type":"special"}],"thresholds":{"mode":"percentage","steps":[{"color":"green","value":null}]},"unit":"dtdurations","unitScale":true},"overrides":[]},"gridPos":{"h":6,"w":3,"x":0,"y":0},"id":1,"links":[],"maxDataPoints":100,"options":{"colorMode":"value","graphMode":"none","justifyMode":"auto","orientation":"auto","reduceOptions":{"calcs":["mean"],"fields":"","values":false},"showPercentChange":false,"text":{},"textMode":"auto","wideLayout":true},"pluginVersion":"10.3.1","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"time() - max(minio_node_process_starttime_seconds{job=~\"$scrape_jobs\"})","format":"time_series","instant":true,"interval":"","intervalFactor":1,"legendFormat":"{{instance}}","metric":"process_start_time_seconds","refId":"A","step":60}],"title":"Uptime","type":"stat"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"","fieldConfig":{"defaults":{"mappings":[{"options":{"match":"null","result":{"text":"N/A"}},"type":"special"}],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null}]},"unit":"bytes","unitScale":true},"overrides":[]},"gridPos":{"h":3,"w":3,"x":3,"y":0},"id":65,"links":[],"maxDataPoints":100,"options":{"colorMode":"value","graphMode":"area","justifyMode":"auto","orientation":"auto","reduceOptions":{"calcs":["last"],"fields":"","values":false},"showPercentChange":false,"text":{},"textMode":"auto","wideLayout":true},"pluginVersion":"10.3.1","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"sum by (instance) (minio_s3_traffic_received_bytes{job=~\"$scrape_jobs\"})","format":"table","hide":false,"instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{instance}}","metric":"process_start_time_seconds","refId":"A","step":60}],"title":"Total S3 Ingress","type":"stat"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"hideFrom":{"legend":false,"tooltip":false,"viz":false}},"mappings":[{"options":{"match":"null","result":{"text":"N/A"}},"type":"special"}],"unit":"bytes","unitScale":true},"overrides":[{"matcher":{"id":"byName","options":"Free"},"properties":[{"id":"color","value":{"fixedColor":"green","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Used"},"properties":[{"id":"color","value":{"fixedColor":"orange","mode":"fixed"}}]}]},"gridPos":{"h":6,"w":4,"x":6,"y":0},"id":50,"interval":"1m","links":[],"maxDataPoints":100,"options":{"displayLabels":[],"legend":{"displayMode":"table","placement":"bottom","showLegend":true,"values":["percent"]},"pieType":"donut","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"tooltip":{"mode":"single","sort":"none"}},"pluginVersion":"8.2.1","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"topk(1, sum(minio_cluster_capacity_usable_total_bytes{job=~\"$scrape_jobs\"}) by (instance)) - topk(1, sum(minio_cluster_capacity_usable_free_bytes{job=~\"$scrape_jobs\"}) by (instance))","format":"time_series","instant":false,"interval":"1m","intervalFactor":1,"legendFormat":"Used","refId":"A","step":300},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"topk(1, sum(minio_cluster_capacity_usable_free_bytes{job=~\"$scrape_jobs\"}) by (instance)) ","hide":false,"interval":"1m","legendFormat":"Free","refId":"B"}],"title":"Capacity","type":"piechart"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":10,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":true,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"bytes","unitScale":true},"overrides":[{"matcher":{"id":"byName","options":"Objects"},"properties":[{"id":"color","value":{"fixedColor":"blue","mode":"fixed"}}]},{"__systemRef":"hideSeriesFrom","matcher":{"id":"byNames","options":{"mode":"exclude","names":["Usage"],"prefix":"All except:","readOnly":true}},"properties":[{"id":"custom.hideFrom","value":{"legend":false,"tooltip":false,"viz":true}}]}]},"gridPos":{"h":6,"w":6,"x":10,"y":0},"id":68,"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom","showLegend":false},"tooltip":{"mode":"single","sort":"none"}},"pluginVersion":"8.2.1","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"code","exemplar":true,"expr":"max(minio_cluster_usage_total_bytes{job=~\"$scrape_jobs\"})","interval":"","legendFormat":"Usage","range":true,"refId":"A"}],"title":"Data Usage Growth","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"continuous-GrYlRd"},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null}]},"unitScale":true},"overrides":[]},"gridPos":{"h":6,"w":5,"x":16,"y":0},"id":52,"links":[],"options":{"displayMode":"lcd","maxVizHeight":300,"minVizHeight":16,"minVizWidth":8,"namePlacement":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"showUnfilled":true,"sizing":"auto","valueMode":"color"},"pluginVersion":"10.3.1","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"disableTextWrap":false,"editorMode":"code","exemplar":true,"expr":"minio_cluster_objects_size_distribution{job=~\"$scrape_jobs\"}","format":"time_series","fullMetaSearch":false,"includeNullMetadata":true,"instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{range}}","refId":"A","step":300,"useBackend":false}],"title":"Object Size Distribution","type":"bargauge"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":25,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"auto","spanNulls":false,"stacking":{"group":"A","mode":"normal"},"thresholdsStyle":{"mode":"off"}},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unitScale":true},"overrides":[]},"gridPos":{"h":3,"w":3,"x":21,"y":0},"id":61,"links":[],"maxDataPoints":100,"options":{"legend":{"calcs":[],"displayMode":"hidden","placement":"right","showLegend":false},"tooltip":{"mode":"single","sort":"none"}},"pluginVersion":"10.3.1","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"code","exemplar":true,"expr":"minio_node_file_descriptor_open_total{job=~\"$scrape_jobs\"}","format":"time_series","hide":false,"instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{server}}","metric":"process_start_time_seconds","refId":"A","step":60}],"title":"Open FDs ","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"","fieldConfig":{"defaults":{"mappings":[{"options":{"match":"null","result":{"text":"N/A"}},"type":"special"}],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null}]},"unit":"bytes","unitScale":true},"overrides":[]},"gridPos":{"h":3,"w":3,"x":3,"y":3},"id":64,"links":[],"maxDataPoints":100,"options":{"colorMode":"value","graphMode":"area","justifyMode":"auto","orientation":"auto","reduceOptions":{"calcs":["last"],"fields":"","values":false},"showPercentChange":false,"text":{},"textMode":"auto","wideLayout":true},"pluginVersion":"10.3.1","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"sum by (instance) (minio_s3_traffic_sent_bytes{job=~\"$scrape_jobs\"})","format":"table","hide":false,"instant":false,"interval":"","intervalFactor":1,"legendFormat":"","metric":"process_start_time_seconds","refId":"A","step":60}],"title":"Total S3 Egress","type":"stat"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":25,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"auto","spanNulls":false,"stacking":{"group":"A","mode":"normal"},"thresholdsStyle":{"mode":"off"}},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unitScale":true},"overrides":[]},"gridPos":{"h":3,"w":3,"x":21,"y":3},"id":62,"links":[],"maxDataPoints":100,"options":{"legend":{"calcs":[],"displayMode":"hidden","placement":"right","showLegend":false},"tooltip":{"mode":"single","sort":"none"}},"pluginVersion":"10.3.1","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"code","exemplar":true,"expr":"minio_node_go_routine_total{job=~\"$scrape_jobs\"}","format":"time_series","hide":false,"instant":false,"interval":"","intervalFactor":1,"legendFormat":"{{server}}","metric":"process_start_time_seconds","refId":"A","step":60}],"title":"Goroutines","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null}]},"unit":"bool_on_off","unitScale":true},"overrides":[]},"gridPos":{"h":2,"w":3,"x":0,"y":6},"id":94,"options":{"colorMode":"value","graphMode":"area","justifyMode":"auto","orientation":"auto","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"showPercentChange":false,"textMode":"auto","wideLayout":true},"pluginVersion":"10.3.1","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"disableTextWrap":false,"editorMode":"code","exemplar":true,"expr":"minio_cluster_health_status{job=~\"$scrape_jobs\"}","fullMetaSearch":false,"includeNullMetadata":true,"interval":"","legendFormat":"Pool: {{pool}} Set: {{set}}","range":true,"refId":"A","useBackend":false}],"title":"Cluster Health Status","transformations":[],"type":"stat"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"","fieldConfig":{"defaults":{"mappings":[],"thresholds":{"mode":"percentage","steps":[{"color":"green","value":null}]},"unitScale":true},"overrides":[]},"gridPos":{"h":4,"w":3,"x":3,"y":6},"id":78,"links":[],"maxDataPoints":100,"options":{"minVizHeight":75,"minVizWidth":75,"orientation":"auto","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"showThresholdLabels":false,"showThresholdMarkers":true,"sizing":"auto"},"pluginVersion":"10.3.1","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"code","exemplar":false,"expr":"max(minio_cluster_drive_online_total{job=~\"$scrape_jobs\"})","format":"time_series","hide":false,"instant":true,"interval":"","intervalFactor":1,"legendFormat":".","metric":"process_start_time_seconds","range":false,"refId":"A","step":60},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"code","exemplar":false,"expr":"max(minio_cluster_drive_offline_total{job=~\"$scrape_jobs\"})","format":"time_series","hide":false,"instant":true,"legendFormat":".","range":false,"refId":"B"}],"title":"Total Online/Offline Drives","type":"gauge"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"mappings":[{"options":{"match":"null","result":{"text":"N/A"}},"type":"special"}],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"dark-yellow","value":75000000},{"color":"dark-red","value":100000000}]},"unit":"short","unitScale":true},"overrides":[]},"gridPos":{"h":3,"w":3,"x":6,"y":6},"id":66,"links":[],"maxDataPoints":100,"options":{"colorMode":"value","graphMode":"area","justifyMode":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"showPercentChange":false,"text":{},"textMode":"auto","wideLayout":true},"pluginVersion":"10.3.1","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"code","exemplar":true,"expr":"max(minio_cluster_bucket_total{job=~\"$scrape_jobs\"})","format":"time_series","instant":false,"interval":"1m","intervalFactor":1,"legendFormat":"","refId":"A"}],"title":"Number of Buckets","type":"stat"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":25,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"auto","spanNulls":false,"stacking":{"group":"A","mode":"normal"},"thresholdsStyle":{"mode":"off"}},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"binBps","unitScale":true},"overrides":[]},"gridPos":{"h":6,"w":7,"x":9,"y":6},"id":63,"options":{"legend":{"calcs":[],"displayMode":"hidden","placement":"right","showLegend":false},"tooltip":{"mode":"single","sort":"none"}},"pluginVersion":"10.3.1","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"sum by (server) (rate(minio_s3_traffic_received_bytes{job=~\"$scrape_jobs\"}[$__rate_interval]))","interval":"1m","intervalFactor":2,"legendFormat":"Data Received [{{server}}]","refId":"A"}],"title":"S3 API Ingress Rate ","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":25,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"auto","spanNulls":false,"stacking":{"group":"A","mode":"normal"},"thresholdsStyle":{"mode":"off"}},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"binBps","unitScale":true},"overrides":[]},"gridPos":{"h":6,"w":8,"x":16,"y":6},"id":70,"options":{"legend":{"calcs":[],"displayMode":"hidden","placement":"right","showLegend":false},"tooltip":{"mode":"single","sort":"none"}},"pluginVersion":"10.3.1","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"sum by (server) (rate(minio_s3_traffic_sent_bytes{job=~\"$scrape_jobs\"}[$__rate_interval]))","interval":"1m","intervalFactor":2,"legendFormat":"Data Sent [{{server}}]","refId":"A"}],"title":"S3 API Egress Rate ","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"","fieldConfig":{"defaults":{"mappings":[{"options":{"match":"null","result":{"text":"N/A"}},"type":"special"}],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"short","unitScale":true},"overrides":[]},"gridPos":{"h":2,"w":3,"x":0,"y":8},"id":53,"links":[],"maxDataPoints":100,"options":{"colorMode":"value","graphMode":"area","justifyMode":"auto","orientation":"auto","reduceOptions":{"calcs":["mean"],"fields":"","values":false},"showPercentChange":false,"text":{},"textMode":"auto","wideLayout":true},"pluginVersion":"10.3.1","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"max(minio_cluster_nodes_online_total{job=~\"$scrape_jobs\"})","format":"table","hide":false,"instant":true,"interval":"","intervalFactor":1,"legendFormat":"","metric":"process_start_time_seconds","refId":"A","step":60}],"title":"Total Online Servers","type":"stat"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"mappings":[{"options":{"match":"null","result":{"text":"N/A"}},"type":"special"}],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"dark-yellow","value":75000000},{"color":"dark-red","value":100000000}]},"unit":"short","unitScale":true},"overrides":[]},"gridPos":{"h":3,"w":3,"x":6,"y":9},"id":44,"links":[],"maxDataPoints":100,"options":{"colorMode":"value","graphMode":"area","justifyMode":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"showPercentChange":false,"text":{},"textMode":"auto","wideLayout":true},"pluginVersion":"10.3.1","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"code","exemplar":true,"expr":"max(minio_cluster_usage_object_total{job=~\"$scrape_jobs\"})","format":"time_series","instant":false,"interval":"1m","intervalFactor":1,"legendFormat":"","refId":"A"}],"title":"Number of Objects","type":"stat"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null}]},"unit":"ns","unitScale":true},"overrides":[]},"gridPos":{"h":2,"w":3,"x":0,"y":10},"id":80,"links":[],"maxDataPoints":100,"options":{"colorMode":"value","graphMode":"none","justifyMode":"auto","orientation":"auto","reduceOptions":{"calcs":["last"],"fields":"","values":false},"showPercentChange":false,"text":{},"textMode":"auto","wideLayout":true},"pluginVersion":"10.3.1","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"max(minio_heal_time_last_activity_nano_seconds{job=~\"$scrape_jobs\"})","format":"time_series","instant":true,"interval":"","intervalFactor":1,"legendFormat":"","metric":"process_start_time_seconds","refId":"A","step":60}],"title":"Time Since Last Heal","type":"stat"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null}]},"unit":"ns","unitScale":true},"overrides":[]},"gridPos":{"h":2,"w":3,"x":3,"y":10},"id":81,"links":[],"maxDataPoints":100,"options":{"colorMode":"value","graphMode":"none","justifyMode":"auto","orientation":"auto","reduceOptions":{"calcs":["last"],"fields":"","values":false},"showPercentChange":false,"text":{},"textMode":"auto","wideLayout":true},"pluginVersion":"10.3.1","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"max(minio_usage_last_activity_nano_seconds{job=~\"$scrape_jobs\"})","format":"time_series","instant":true,"interval":"","intervalFactor":1,"legendFormat":"","metric":"process_start_time_seconds","refId":"A","step":60}],"title":"Time Since Last Scan","type":"stat"},{"aliasColors":{"S3 Errors":"light-red","S3 Requests":"light-green"},"bars":false,"dashLength":10,"dashes":false,"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"unitScale":true},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":6,"w":9,"x":0,"y":12},"hiddenSeries":false,"id":60,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"nullPointMode":"null","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"10.3.1","pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"sum by (server,api) (increase(minio_s3_requests_total{job=~\"$scrape_jobs\"}[$__rate_interval]))","interval":"1m","intervalFactor":2,"legendFormat":"{{server,api}}","refId":"A"}],"thresholds":[],"timeRegions":[],"title":"S3 API Request Rate","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"mode":"time","show":true,"values":[]},"yaxes":[{"$$hashKey":"object:331","format":"none","logBase":1,"show":true},{"$$hashKey":"object:332","format":"short","logBase":1,"show":false}],"yaxis":{"align":false}},{"aliasColors":{"S3 Errors":"light-red","S3 Requests":"light-green"},"bars":false,"dashLength":10,"dashes":false,"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"unitScale":true},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":6,"w":7,"x":9,"y":12},"hiddenSeries":false,"id":88,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"nullPointMode":"null","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"10.3.1","pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"sum by (server,api) (increase(minio_s3_requests_4xx_errors_total{job=~\"$scrape_jobs\"}[$__rate_interval]))","interval":"1m","intervalFactor":2,"legendFormat":"{{server,api}}","refId":"A"}],"thresholds":[],"timeRegions":[],"title":"S3 API Request Error Rate (4xx)","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"mode":"time","show":true,"values":[]},"yaxes":[{"$$hashKey":"object:331","format":"none","logBase":1,"show":true},{"$$hashKey":"object:332","format":"short","logBase":1,"show":false}],"yaxis":{"align":false}},{"aliasColors":{"S3 Errors":"light-red","S3 Requests":"light-green"},"bars":false,"dashLength":10,"dashes":false,"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"unitScale":true},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":6,"w":8,"x":16,"y":12},"hiddenSeries":false,"id":86,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"nullPointMode":"null","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"10.3.1","pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"sum by (server,api) (increase(minio_s3_requests_5xx_errors_total{job=~\"$scrape_jobs\"}[$__rate_interval]))","interval":"1m","intervalFactor":2,"legendFormat":"{{server,api}}","refId":"A"}],"thresholds":[],"timeRegions":[],"title":"S3 API Request Error Rate (5xx)","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"mode":"time","show":true,"values":[]},"yaxes":[{"$$hashKey":"object:331","format":"none","logBase":1,"show":true},{"$$hashKey":"object:332","format":"short","logBase":1,"show":false}],"yaxis":{"align":false}},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"fixed"},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null}]},"unitScale":true},"overrides":[]},"gridPos":{"h":8,"w":12,"x":0,"y":18},"id":99,"options":{"displayMode":"lcd","maxVizHeight":300,"minVizHeight":16,"minVizWidth":8,"namePlacement":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"showUnfilled":true,"sizing":"auto","valueMode":"color"},"pluginVersion":"10.3.1","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"disableTextWrap":false,"editorMode":"builder","expr":"minio_cluster_health_erasure_set_online_drives{job=~\"$scrape_jobs\"}","fullMetaSearch":false,"hide":false,"includeNullMetadata":true,"instant":false,"legendFormat":"Pool {{pool}} / Set {{set}} - Online Drives","range":true,"refId":"A","useBackend":false},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"disableTextWrap":false,"editorMode":"builder","expr":"minio_cluster_health_erasure_set_read_quorum{job=~\"$scrape_jobs\"}","fullMetaSearch":false,"hide":false,"includeNullMetadata":true,"instant":false,"legendFormat":"Pool {{pool}} / Set {{set}} - Read Quorum","range":true,"refId":"B","useBackend":false},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"disableTextWrap":false,"editorMode":"builder","expr":"minio_cluster_health_erasure_set_write_quorum{job=~\"$scrape_jobs\"}","fullMetaSearch":false,"hide":false,"includeNullMetadata":true,"instant":false,"legendFormat":"Pool {{pool}} / Set {{set}} - Write Quorum","range":true,"refId":"C","useBackend":false},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"disableTextWrap":false,"editorMode":"builder","expr":"minio_cluster_health_erasure_set_healing_drives{job=~\"$scrape_jobs\"}","fullMetaSearch":false,"hide":false,"includeNullMetadata":true,"instant":false,"legendFormat":"Pool {{pool}} / Set {{set}} - Healing Drives","range":true,"refId":"D","useBackend":false},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"disableTextWrap":false,"editorMode":"builder","expr":"minio_cluster_health_erasure_set_status{job=~\"$scrape_jobs\"}","fullMetaSearch":false,"hide":false,"includeNullMetadata":true,"instant":false,"legendFormat":"Pool {{pool}} / Set {{set}} - Status","range":true,"refId":"E","useBackend":false}],"title":"Health Breakdown","type":"bargauge"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"continuous-GrYlRd"},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"bytes","unitScale":true},"overrides":[]},"gridPos":{"h":8,"w":12,"x":12,"y":18},"id":76,"options":{"displayMode":"lcd","maxVizHeight":300,"minVizHeight":16,"minVizWidth":8,"namePlacement":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"showUnfilled":true,"sizing":"auto","valueMode":"color"},"pluginVersion":"10.3.1","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"code","exemplar":false,"expr":"minio_node_process_resident_memory_bytes{job=~\"$scrape_jobs\"}","format":"time_series","instant":false,"interval":"","legendFormat":"{{server}}","range":true,"refId":"A"}],"title":"Memory Usage ","type":"bargauge"},{"aliasColors":{},"bars":true,"dashLength":10,"dashes":false,"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"unitScale":true},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":12,"x":0,"y":26},"hiddenSeries":false,"id":73,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"nullPointMode":"null","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"10.3.1","pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"rate(minio_node_io_rchar_bytes{job=~\"$scrape_jobs\"}[$__rate_interval])","format":"time_series","instant":false,"interval":"","legendFormat":"Node RChar [{{server}}]","refId":"A"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"rate(minio_node_io_wchar_bytes{job=~\"$scrape_jobs\"}[$__rate_interval])","interval":"","legendFormat":"Node WChar [{{server}}]","refId":"B"}],"thresholds":[],"timeRegions":[],"title":"Read, Write I/O","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"mode":"time","show":true,"values":[]},"yaxes":[{"$$hashKey":"object:381","format":"bytes","logBase":1,"show":true},{"$$hashKey":"object:382","format":"short","logBase":1,"show":true}],"yaxis":{"align":false}},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"mappings":[],"thresholds":{"mode":"percentage","steps":[{"color":"green"},{"color":"orange","value":70},{"color":"red","value":85}]},"unit":"s","unitScale":true},"overrides":[]},"gridPos":{"h":7,"w":12,"x":12,"y":26},"id":77,"options":{"minVizHeight":75,"minVizWidth":75,"orientation":"auto","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"showThresholdLabels":false,"showThresholdMarkers":true,"sizing":"auto"},"pluginVersion":"10.3.1","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"code","exemplar":true,"expr":"rate(minio_node_process_cpu_total_seconds{job=~\"$scrape_jobs\"}[$__rate_interval])","interval":"","legendFormat":"{{server}}","range":true,"refId":"A"}],"title":"CPU Usage","type":"gauge"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"Total number of bytes received and sent on MinIO cluster","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":25,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"auto","spanNulls":false,"stacking":{"group":"A","mode":"normal"},"thresholdsStyle":{"mode":"off"}},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"bytes","unitScale":true},"overrides":[]},"gridPos":{"h":7,"w":12,"x":0,"y":33},"id":17,"links":[],"options":{"legend":{"calcs":[],"displayMode":"hidden","placement":"right","showLegend":false},"tooltip":{"mode":"single","sort":"none"}},"pluginVersion":"10.3.1","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"code","exemplar":true,"expr":"rate(minio_inter_node_traffic_sent_bytes{job=~\"$scrape_jobs\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":2,"legendFormat":"Internode Bytes Received [{{server}}]","metric":"minio_http_requests_duration_seconds_count","range":true,"refId":"A","step":4},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"rate(minio_inter_node_traffic_received_bytes{job=~\"$scrape_jobs\"}[$__rate_interval])","interval":"","legendFormat":"Internode Bytes Sent [{{server}}]","refId":"B"}],"title":"Internode Traffic","type":"timeseries"},{"aliasColors":{"available 10.13.1.25:9000":"green","used 10.13.1.25:9000":"blue"},"bars":false,"dashLength":10,"dashes":false,"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"","fieldConfig":{"defaults":{"links":[],"unit":"bytes","unitScale":true},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":12,"x":12,"y":33},"hiddenSeries":false,"id":8,"legend":{"avg":false,"current":false,"max":false,"min":false,"rightSide":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"10.3.1","pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"minio_node_file_descriptor_open_total{job=~\"$scrape_jobs\"}","interval":"","legendFormat":"Open FDs [{{server}}]","refId":"B"}],"thresholds":[],"timeRegions":[],"title":"File Descriptors","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"mode":"time","show":true,"values":[]},"yaxes":[{"$$hashKey":"object:212","format":"bytes","logBase":1,"min":"0","show":true},{"$$hashKey":"object:213","format":"none","logBase":1,"min":"0","show":true}],"yaxis":{"align":false}},{"aliasColors":{"Offline 10.13.1.25:9000":"dark-red","Total 10.13.1.25:9000":"blue"},"bars":true,"dashLength":10,"dashes":false,"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"Number of online drives per MinIO Server","fieldConfig":{"defaults":{"links":[],"unitScale":true},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":12,"x":0,"y":40},"hiddenSeries":false,"id":11,"legend":{"avg":false,"current":false,"max":false,"min":false,"rightSide":false,"show":true,"total":false,"values":false},"lines":false,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"10.3.1","pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"rate(minio_node_syscall_read_total{job=~\"$scrape_jobs\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":2,"legendFormat":"Read Syscalls [{{server}}]","metric":"process_start_time_seconds","refId":"A","step":60},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"rate(minio_node_syscall_write_total{job=~\"$scrape_jobs\"}[$__rate_interval])","interval":"","legendFormat":"Write Syscalls [{{server}}]","refId":"B"}],"thresholds":[],"timeRegions":[],"title":"Syscalls","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"mode":"time","show":true,"values":[]},"yaxes":[{"$$hashKey":"object:185","decimals":0,"format":"short","logBase":1,"min":"0","show":true},{"$$hashKey":"object:186","format":"short","logBase":1,"show":true}],"yaxis":{"align":false}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"unitScale":true},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":12,"x":12,"y":40},"hiddenSeries":false,"id":95,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"nullPointMode":"null","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"10.3.1","pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"rate(minio_node_scanner_objects_scanned{job=~\"$scrape_jobs\"}[$__rate_interval])","interval":"1m","legendFormat":"[{{server}}]","refId":"A"}],"thresholds":[],"timeRegions":[],"title":"Scanned Objects","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"mode":"time","show":true,"values":[]},"yaxes":[{"$$hashKey":"object:212","format":"none","logBase":1,"min":"0","show":true},{"$$hashKey":"object:213","format":"none","logBase":1,"min":"0","show":true}],"yaxis":{"align":false}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"unitScale":true},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":12,"x":0,"y":47},"hiddenSeries":false,"id":75,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"nullPointMode":"null","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"10.3.1","pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"rate(minio_node_scanner_versions_scanned{job=~\"$scrape_jobs\"}[$__rate_interval])","interval":"1m","legendFormat":"[{{server}}]","refId":"A"}],"thresholds":[],"timeRegions":[],"title":"Scanned Versions","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"mode":"time","show":true,"values":[]},"yaxes":[{"$$hashKey":"object:212","format":"none","logBase":1,"min":"0","show":true},{"$$hashKey":"object:213","format":"none","logBase":1,"min":"0","show":true}],"yaxis":{"align":false}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"unitScale":true},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":12,"x":12,"y":47},"hiddenSeries":false,"id":96,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"nullPointMode":"null","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"10.3.1","pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"rate(minio_node_scanner_directories_scanned{job=~\"$scrape_jobs\"}[$__rate_interval])","interval":"1m","legendFormat":"[{{server}}]","refId":"A"}],"thresholds":[],"timeRegions":[],"title":"Scanned Directories","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"mode":"time","show":true,"values":[]},"yaxes":[{"$$hashKey":"object:212","format":"none","logBase":1,"min":"0","show":true},{"$$hashKey":"object:213","format":"none","logBase":1,"min":"0","show":true}],"yaxis":{"align":false}},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"","fieldConfig":{"defaults":{"mappings":[{"options":{"match":"null","result":{"text":"N/A"}},"type":"special"}],"thresholds":{"mode":"percentage","steps":[{"color":"green"}]},"unit":"dtdurations","unitScale":true},"overrides":[]},"gridPos":{"h":4,"w":4,"x":0,"y":54},"id":89,"links":[],"maxDataPoints":100,"options":{"colorMode":"value","graphMode":"none","justifyMode":"auto","orientation":"auto","reduceOptions":{"calcs":["mean"],"fields":"","values":false},"showPercentChange":false,"text":{},"textMode":"auto","wideLayout":true},"pluginVersion":"10.3.1","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"minio_cluster_kms_uptime{job=~\"$scrape_jobs\"}","format":"time_series","instant":true,"interval":"","intervalFactor":1,"legendFormat":"{{instance}}","metric":"minio_cluster_kms_uptime","refId":"A","step":60}],"title":"KMS Uptime","type":"stat"},{"aliasColors":{"S3 Errors":"light-red","S3 Requests":"light-green"},"bars":false,"dashLength":10,"dashes":false,"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"unitScale":true},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":4,"w":4,"x":4,"y":54},"hiddenSeries":false,"id":91,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"nullPointMode":"null","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"10.3.1","pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"sum by (server) (increase(minio_cluster_kms_request_error{job=~\"$scrape_jobs\"}[$__rate_interval]))","interval":"1m","intervalFactor":2,"legendFormat":"{{server}}","refId":"A"}],"thresholds":[],"timeRegions":[],"title":"KMS Request 4xx Error Rate","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"mode":"time","show":true,"values":[]},"yaxes":[{"$$hashKey":"object:331","format":"none","logBase":1,"show":true},{"$$hashKey":"object:332","format":"short","logBase":1,"show":false}],"yaxis":{"align":false}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"unit":"bool_on_off","unitScale":true},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":4,"w":4,"x":8,"y":54},"hiddenSeries":false,"id":90,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"nullPointMode":"null","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"10.3.1","pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"sum by (server) (minio_cluster_kms_online{job=~\"$scrape_jobs\"})","interval":"1m","legendFormat":"{{server}}","refId":"A"}],"thresholds":[],"timeRegions":[],"title":"KMS Online(1)/Offline(0)","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"mode":"time","show":true,"values":[]},"yaxes":[{"$$hashKey":"object:212","format":"bool_on_off","logBase":1,"min":"0","show":true},{"$$hashKey":"object:213","format":"none","logBase":1,"min":"0","show":true}],"yaxis":{"align":false}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"unitScale":true},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":12,"x":12,"y":54},"hiddenSeries":false,"id":98,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"nullPointMode":"null","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"10.3.1","pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"rate(minio_node_scanner_bucket_scans_finished{job=~\"$scrape_jobs\"}[$__rate_interval])","interval":"1m","legendFormat":"[{{server}}]","refId":"A"}],"thresholds":[],"timeRegions":[],"title":"Bucket Scans Finished","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"mode":"time","show":true,"values":[]},"yaxes":[{"$$hashKey":"object:212","format":"none","logBase":1,"min":"0","show":true},{"$$hashKey":"object:213","format":"none","logBase":1,"min":"0","show":true}],"yaxis":{"align":false}},{"aliasColors":{"S3 Errors":"light-red","S3 Requests":"light-green"},"bars":false,"dashLength":10,"dashes":false,"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"unitScale":true},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":5,"w":6,"x":0,"y":58},"hiddenSeries":false,"id":92,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"nullPointMode":"null","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"10.3.1","pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"sum by (server) (increase(minio_cluster_kms_request_failure{job=~\"$scrape_jobs\"}[$__rate_interval]))","interval":"1m","intervalFactor":2,"legendFormat":"{{server}}","refId":"A"}],"thresholds":[],"timeRegions":[],"title":"KMS Request 5xx Error Rate","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"mode":"time","show":true,"values":[]},"yaxes":[{"$$hashKey":"object:331","format":"none","logBase":1,"show":true},{"$$hashKey":"object:332","format":"short","logBase":1,"show":false}],"yaxis":{"align":false}},{"aliasColors":{"S3 Errors":"light-red","S3 Requests":"light-green"},"bars":false,"dashLength":10,"dashes":false,"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"unitScale":true},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":5,"w":6,"x":6,"y":58},"hiddenSeries":false,"id":93,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"nullPointMode":"null","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"10.3.1","pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"sum by (server) (rate(minio_cluster_kms_request_success{job=~\"$scrape_jobs\"}[$__rate_interval]))","interval":"1m","intervalFactor":2,"legendFormat":"KMS Request Success [{{server}}]","refId":"A"}],"thresholds":[],"timeRegions":[],"title":"KMS Request Success Rate ","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"mode":"time","show":true,"values":[]},"yaxes":[{"$$hashKey":"object:331","format":"none","logBase":1,"show":true},{"$$hashKey":"object:332","format":"short","logBase":1,"show":false}],"yaxis":{"align":false}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"unitScale":true},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":9,"w":12,"x":12,"y":61},"hiddenSeries":false,"id":97,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"nullPointMode":"null","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"10.3.1","pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"rate(minio_node_scanner_bucket_scans_started{job=~\"$scrape_jobs\"}[$__rate_interval])","interval":"1m","legendFormat":"[{{server}}]","refId":"A"}],"thresholds":[],"timeRegions":[],"title":"Bucket Scans Started","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"mode":"time","show":true,"values":[]},"yaxes":[{"$$hashKey":"object:212","format":"none","logBase":1,"min":"0","show":true},{"$$hashKey":"object:213","format":"none","logBase":1,"min":"0","show":true}],"yaxis":{"align":false}}],"refresh":"","schemaVersion":39,"tags":["minio"],"templating":{"list":[{"current":{"selected":false,"tags":[],"text":"default","value":"default"},"hide":0,"includeAll":false,"label":"datasource","multi":false,"name":"DS_PROMETHEUS","options":[],"query":"prometheus","refresh":1,"regex":"","skipUrlSync":false,"type":"datasource"},{"current":{},"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"definition":"","hide":0,"includeAll":false,"label":"Job","multi":false,"name":"scrape_jobs","options":[],"query":{"query":"label_values(minio_cluster_health_status, job)","refId":"minio-scrape_job-Variable-Query"},"refresh":1,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":"","tagsQuery":"","type":"query","useTags":false}]},"time":{"from":"now-6h","to":"now"},"timepicker":{"refresh_intervals":["10s","30s","1m","5m","15m","30m","1h","2h","1d"],"time_options":["5m","15m","1h","6h","12h","24h","2d","7d","30d"]},"timezone":"","title":"MinIO Dashboard","uid":"minio-cluster","version":54,"weekStart":""}
···
-1
systems/koumakan/services/telemetry/grafana/dashboards/nginx.json
-1
systems/koumakan/services/telemetry/grafana/dashboards/nginx.json
···
1
-
{"__inputs":[{"description":"","label":"Prometheus","name":"DS_PROMETHEUS","pluginId":"prometheus","pluginName":"Prometheus","type":"datasource"}],"__requires":[{"id":"grafana","name":"Grafana","type":"grafana","version":"5.0.0"},{"id":"graph","name":"Graph","type":"panel","version":""},{"id":"prometheus","name":"Prometheus","type":"datasource","version":"1.0.0"},{"id":"singlestat","name":"Singlestat","type":"panel","version":""}],"annotations":{"list":[{"builtIn":1,"datasource":"-- Grafana --","enable":true,"hide":true,"iconColor":"rgba(0, 211, 255, 1)","name":"Annotations & Alerts","type":"dashboard"}]},"description":"Official dashboard for NGINX Prometheus exporter","editable":true,"gnetId":null,"graphTooltip":0,"id":null,"iteration":1562682051068,"links":[],"panels":[{"collapsed":false,"datasource":"${DS_PROMETHEUS}","gridPos":{"h":1,"w":24,"x":0,"y":0},"id":4,"panels":[],"title":"Status","type":"row"},{"cacheTimeout":null,"colorBackground":true,"colorPostfix":false,"colorPrefix":false,"colorValue":false,"colors":["#E02F44","#FF9830","#299c46"],"datasource":"${DS_PROMETHEUS}","decimals":null,"description":"","format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":3,"w":12,"x":0,"y":1},"id":8,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"repeat":"instance","repeatDirection":"h","sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"nginx_up{instance=~\"$instance\"}","format":"time_series","instant":false,"intervalFactor":1,"refId":"A"}],"thresholds":"1,1","timeFrom":null,"timeShift":null,"title":"NGINX Status for $instance","type":"singlestat","valueFontSize":"100%","valueMaps":[{"op":"=","text":"Down","value":"0"},{"op":"=","text":"Up","value":"1"}],"valueName":"current"},{"collapsed":false,"datasource":"${DS_PROMETHEUS}","gridPos":{"h":1,"w":24,"x":0,"y":4},"id":6,"panels":[],"title":"Metrics","type":"row"},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","decimals":null,"description":"","fill":1,"gridPos":{"h":10,"w":12,"x":0,"y":5},"id":10,"legend":{"alignAsTable":false,"avg":false,"current":false,"hideEmpty":false,"max":false,"min":false,"rightSide":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"irate(nginx_connections_accepted{instance=~\"$instance\"}[5m])","format":"time_series","instant":false,"intervalFactor":1,"legendFormat":"{{instance}} accepted","refId":"A"},{"expr":"irate(nginx_connections_handled{instance=~\"$instance\"}[5m])","format":"time_series","instant":false,"intervalFactor":1,"legendFormat":"{{instance}} handled","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Processed connections","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":1,"format":"short","label":"Connections (rate)","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":"","logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","decimals":0,"fill":1,"gridPos":{"h":10,"w":12,"x":12,"y":5},"id":12,"legend":{"alignAsTable":false,"avg":false,"current":false,"max":false,"min":false,"rightSide":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"nginx_connections_active{instance=~\"$instance\"}","format":"time_series","intervalFactor":1,"legendFormat":"{{instance}} active","refId":"A"},{"expr":"nginx_connections_reading{instance=~\"$instance\"}","format":"time_series","intervalFactor":1,"legendFormat":"{{instance}} reading","refId":"B"},{"expr":"nginx_connections_waiting{instance=~\"$instance\"}","format":"time_series","intervalFactor":1,"legendFormat":"{{instance}} waiting","refId":"C"},{"expr":"nginx_connections_writing{instance=~\"$instance\"}","format":"time_series","intervalFactor":1,"legendFormat":"{{instance}} writing","refId":"D"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Active Connections","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":"Connections","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","fill":1,"gridPos":{"h":8,"w":24,"x":0,"y":15},"id":15,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"irate(nginx_http_requests_total{instance=~\"$instance\"}[5m])","format":"time_series","intervalFactor":1,"legendFormat":"{{instance}} total requests","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Total requests","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}}],"refresh":"5s","schemaVersion":18,"style":"dark","tags":["nginx","prometheus","nginx prometheus exporter"],"templating":{"list":[{"current":{"selected":false,"tags":[],"text":"default","value":"default"},"hide":0,"includeAll":false,"label":"datasource","multi":false,"name":"DS_PROMETHEUS","options":[],"query":"prometheus","refresh":1,"regex":"","skipUrlSync":false,"type":"datasource"},{"allValue":null,"current":{},"datasource":"${DS_PROMETHEUS}","definition":"label_values(nginx_up, instance)","hide":0,"includeAll":true,"label":"","multi":true,"name":"instance","options":[],"query":"label_values(nginx_up, instance)","refresh":1,"regex":"","skipUrlSync":false,"sort":0,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false}]},"time":{"from":"now-15m","to":"now"},"timepicker":{"refresh_intervals":["5s","10s","30s","1m","5m","15m","30m","1h","2h","1d"],"time_options":["5m","15m","1h","6h","12h","24h","2d","7d","30d"]},"timezone":"","title":"NGINX","uid":"MsjffzSZz","version":1}
···
-1
systems/koumakan/services/telemetry/grafana/dashboards/node.json
-1
systems/koumakan/services/telemetry/grafana/dashboards/node.json
···
1
-
{"__inputs":[{"name":"DS_PROMETHEUS","label":"Prometheus","description":"","type":"datasource","pluginId":"prometheus","pluginName":"Prometheus"}],"__elements":{},"__requires":[{"type":"panel","id":"bargauge","name":"Bar gauge","version":""},{"type":"panel","id":"gauge","name":"Gauge","version":""},{"type":"grafana","id":"grafana","name":"Grafana","version":"9.4.3"},{"type":"datasource","id":"prometheus","name":"Prometheus","version":"1.0.0"},{"type":"panel","id":"stat","name":"Stat","version":""},{"type":"panel","id":"timeseries","name":"Time series","version":""}],"annotations":{"list":[{"$$hashKey":"object:1058","builtIn":1,"datasource":{"type":"datasource","uid":"grafana"},"enable":true,"hide":true,"iconColor":"rgba(0, 211, 255, 1)","name":"Annotations & Alerts","target":{"limit":100,"matchAny":false,"tags":[],"type":"dashboard"},"type":"dashboard"}]},"editable":true,"fiscalYearStartMonth":0,"gnetId":1860,"graphTooltip":1,"id":null,"links":[{"icon":"external link","tags":[],"targetBlank":true,"title":"GitHub","type":"link","url":"https://github.com/rfmoz/grafana-dashboards"},{"icon":"external link","tags":[],"targetBlank":true,"title":"Grafana","type":"link","url":"https://grafana.com/grafana/dashboards/1860"}],"liveNow":false,"panels":[{"collapsed":false,"datasource":{"type":"prometheus","uid":"000000001"},"gridPos":{"h":1,"w":24,"x":0,"y":0},"id":261,"panels":[],"targets":[{"datasource":{"type":"prometheus","uid":"000000001"},"refId":"A"}],"title":"Quick CPU / Mem / Disk","type":"row"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"Resource pressure via PSI","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"decimals":1,"links":[],"mappings":[],"max":1,"min":0,"thresholds":{"mode":"percentage","steps":[{"color":"green","value":null},{"color":"dark-yellow","value":70},{"color":"dark-red","value":90}]},"unit":"percentunit"},"overrides":[]},"gridPos":{"h":4,"w":3,"x":0,"y":1},"id":323,"links":[],"options":{"displayMode":"basic","minVizHeight":10,"minVizWidth":0,"orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"showUnfilled":true,"text":{}},"pluginVersion":"9.4.3","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","exemplar":false,"expr":"irate(node_pressure_cpu_waiting_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","instant":true,"intervalFactor":1,"legendFormat":"CPU","range":false,"refId":"CPU some","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","exemplar":false,"expr":"irate(node_pressure_memory_waiting_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","hide":false,"instant":true,"intervalFactor":1,"legendFormat":"Mem","range":false,"refId":"Memory some","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","exemplar":false,"expr":"irate(node_pressure_io_waiting_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","hide":false,"instant":true,"intervalFactor":1,"legendFormat":"I/O","range":false,"refId":"I/O some","step":240}],"title":"Pressure","type":"bargauge"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"Busy state of all CPU cores together","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"decimals":1,"mappings":[{"options":{"match":"null","result":{"text":"N/A"}},"type":"special"}],"max":100,"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"rgba(50, 172, 45, 0.97)","value":null},{"color":"rgba(237, 129, 40, 0.89)","value":85},{"color":"rgba(245, 54, 54, 0.9)","value":95}]},"unit":"percent"},"overrides":[]},"gridPos":{"h":4,"w":3,"x":3,"y":1},"id":20,"links":[],"options":{"orientation":"auto","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"showThresholdLabels":false,"showThresholdMarkers":true},"pluginVersion":"9.4.3","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","exemplar":false,"expr":"100 * (1 - avg(rate(node_cpu_seconds_total{mode=\"idle\", instance=\"$node\"}[$__rate_interval])))","hide":false,"instant":true,"intervalFactor":1,"legendFormat":"","range":false,"refId":"A","step":240}],"title":"CPU Busy","type":"gauge"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"System load over all CPU cores together","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"decimals":1,"mappings":[{"options":{"match":"null","result":{"text":"N/A"}},"type":"special"}],"max":100,"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"rgba(50, 172, 45, 0.97)","value":null},{"color":"rgba(237, 129, 40, 0.89)","value":85},{"color":"rgba(245, 54, 54, 0.9)","value":95}]},"unit":"percent"},"overrides":[]},"gridPos":{"h":4,"w":3,"x":6,"y":1},"id":155,"links":[],"options":{"orientation":"auto","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"showThresholdLabels":false,"showThresholdMarkers":true},"pluginVersion":"9.4.3","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","exemplar":false,"expr":"scalar(node_load1{instance=\"$node\",job=\"$job\"}) * 100 / count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu))","format":"time_series","hide":false,"instant":true,"intervalFactor":1,"range":false,"refId":"A","step":240}],"title":"Sys Load","type":"gauge"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"Non available RAM memory","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"decimals":1,"mappings":[],"max":100,"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"rgba(50, 172, 45, 0.97)","value":null},{"color":"rgba(237, 129, 40, 0.89)","value":80},{"color":"rgba(245, 54, 54, 0.9)","value":90}]},"unit":"percent"},"overrides":[]},"gridPos":{"h":4,"w":3,"x":9,"y":1},"hideTimeOverride":false,"id":16,"links":[],"options":{"orientation":"auto","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"showThresholdLabels":false,"showThresholdMarkers":true},"pluginVersion":"9.4.3","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","exemplar":false,"expr":"((node_memory_MemTotal_bytes{instance=\"$node\", job=\"$job\"} - node_memory_MemFree_bytes{instance=\"$node\", job=\"$job\"}) / node_memory_MemTotal_bytes{instance=\"$node\", job=\"$job\"}) * 100","format":"time_series","hide":true,"instant":true,"intervalFactor":1,"range":false,"refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","exemplar":false,"expr":"(1 - (node_memory_MemAvailable_bytes{instance=\"$node\", job=\"$job\"} / node_memory_MemTotal_bytes{instance=\"$node\", job=\"$job\"})) * 100","format":"time_series","hide":false,"instant":true,"intervalFactor":1,"range":false,"refId":"B","step":240}],"title":"RAM Used","type":"gauge"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"Used Swap","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"decimals":1,"mappings":[{"options":{"match":"null","result":{"text":"N/A"}},"type":"special"}],"max":100,"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"rgba(50, 172, 45, 0.97)","value":null},{"color":"rgba(237, 129, 40, 0.89)","value":10},{"color":"rgba(245, 54, 54, 0.9)","value":25}]},"unit":"percent"},"overrides":[]},"gridPos":{"h":4,"w":3,"x":12,"y":1},"id":21,"links":[],"options":{"orientation":"auto","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"showThresholdLabels":false,"showThresholdMarkers":true},"pluginVersion":"9.4.3","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","exemplar":false,"expr":"((node_memory_SwapTotal_bytes{instance=\"$node\",job=\"$job\"} - node_memory_SwapFree_bytes{instance=\"$node\",job=\"$job\"}) / (node_memory_SwapTotal_bytes{instance=\"$node\",job=\"$job\"})) * 100","instant":true,"intervalFactor":1,"range":false,"refId":"A","step":240}],"title":"SWAP Used","type":"gauge"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"Used Root FS","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"decimals":1,"mappings":[{"options":{"match":"null","result":{"text":"N/A"}},"type":"special"}],"max":100,"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"rgba(50, 172, 45, 0.97)","value":null},{"color":"rgba(237, 129, 40, 0.89)","value":80},{"color":"rgba(245, 54, 54, 0.9)","value":90}]},"unit":"percent"},"overrides":[]},"gridPos":{"h":4,"w":3,"x":15,"y":1},"id":154,"links":[],"options":{"orientation":"auto","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"showThresholdLabels":false,"showThresholdMarkers":true},"pluginVersion":"9.4.3","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","exemplar":false,"expr":"100 - ((node_filesystem_avail_bytes{instance=\"$node\",job=\"$job\",mountpoint=\"/\",fstype!=\"rootfs\"} * 100) / node_filesystem_size_bytes{instance=\"$node\",job=\"$job\",mountpoint=\"/\",fstype!=\"rootfs\"})","format":"time_series","instant":true,"intervalFactor":1,"range":false,"refId":"A","step":240}],"title":"Root FS Used","type":"gauge"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"Total number of CPU cores","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[{"options":{"match":"null","result":{"text":"N/A"}},"type":"special"}],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":2,"w":2,"x":18,"y":1},"id":14,"links":[],"maxDataPoints":100,"options":{"colorMode":"none","graphMode":"none","justifyMode":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"textMode":"auto"},"pluginVersion":"9.4.3","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","exemplar":false,"expr":"count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu))","instant":true,"legendFormat":"__auto","range":false,"refId":"A"}],"title":"CPU Cores","type":"stat"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"System uptime","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"decimals":1,"mappings":[{"options":{"match":"null","result":{"text":"N/A"}},"type":"special"}],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"s"},"overrides":[]},"gridPos":{"h":2,"w":4,"x":20,"y":1},"hideTimeOverride":true,"id":15,"links":[],"maxDataPoints":100,"options":{"colorMode":"none","graphMode":"none","justifyMode":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"textMode":"auto"},"pluginVersion":"9.4.3","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","exemplar":false,"expr":"node_time_seconds{instance=\"$node\",job=\"$job\"} - node_boot_time_seconds{instance=\"$node\",job=\"$job\"}","instant":true,"intervalFactor":1,"range":false,"refId":"A","step":240}],"title":"Uptime","type":"stat"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"Total RootFS","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"decimals":0,"mappings":[{"options":{"match":"null","result":{"text":"N/A"}},"type":"special"}],"thresholds":{"mode":"absolute","steps":[{"color":"rgba(50, 172, 45, 0.97)","value":null},{"color":"rgba(237, 129, 40, 0.89)","value":70},{"color":"rgba(245, 54, 54, 0.9)","value":90}]},"unit":"bytes"},"overrides":[]},"gridPos":{"h":2,"w":2,"x":18,"y":3},"id":23,"links":[],"maxDataPoints":100,"options":{"colorMode":"none","graphMode":"none","justifyMode":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"textMode":"auto"},"pluginVersion":"9.4.3","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","exemplar":false,"expr":"node_filesystem_size_bytes{instance=\"$node\",job=\"$job\",mountpoint=\"/\",fstype!=\"rootfs\"}","format":"time_series","hide":false,"instant":true,"intervalFactor":1,"range":false,"refId":"A","step":240}],"title":"RootFS Total","type":"stat"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"Total RAM","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"decimals":0,"mappings":[{"options":{"match":"null","result":{"text":"N/A"}},"type":"special"}],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"bytes"},"overrides":[]},"gridPos":{"h":2,"w":2,"x":20,"y":3},"id":75,"links":[],"maxDataPoints":100,"options":{"colorMode":"none","graphMode":"none","justifyMode":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"textMode":"auto"},"pluginVersion":"9.4.3","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","exemplar":false,"expr":"node_memory_MemTotal_bytes{instance=\"$node\",job=\"$job\"}","instant":true,"intervalFactor":1,"range":false,"refId":"A","step":240}],"title":"RAM Total","type":"stat"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"Total SWAP","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"decimals":0,"mappings":[{"options":{"match":"null","result":{"text":"N/A"}},"type":"special"}],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"bytes"},"overrides":[]},"gridPos":{"h":2,"w":2,"x":22,"y":3},"id":18,"links":[],"maxDataPoints":100,"options":{"colorMode":"none","graphMode":"none","justifyMode":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"textMode":"auto"},"pluginVersion":"9.4.3","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","exemplar":false,"expr":"node_memory_SwapTotal_bytes{instance=\"$node\",job=\"$job\"}","instant":true,"intervalFactor":1,"range":false,"refId":"A","step":240}],"title":"SWAP Total","type":"stat"},{"collapsed":false,"datasource":{"type":"prometheus","uid":"000000001"},"gridPos":{"h":1,"w":24,"x":0,"y":5},"id":263,"panels":[],"targets":[{"datasource":{"type":"prometheus","uid":"000000001"},"refId":"A"}],"title":"Basic CPU / Mem / Net / Disk","type":"row"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"Basic CPU info","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":40,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"smooth","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"percent"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"percentunit"},"overrides":[{"matcher":{"id":"byName","options":"Busy Iowait"},"properties":[{"id":"color","value":{"fixedColor":"#890F02","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Idle"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Busy Iowait"},"properties":[{"id":"color","value":{"fixedColor":"#890F02","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Idle"},"properties":[{"id":"color","value":{"fixedColor":"#7EB26D","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Busy System"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Busy User"},"properties":[{"id":"color","value":{"fixedColor":"#0A437C","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Busy Other"},"properties":[{"id":"color","value":{"fixedColor":"#6D1F62","mode":"fixed"}}]}]},"gridPos":{"h":7,"w":12,"x":0,"y":6},"id":77,"links":[],"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom","showLegend":true,"width":250},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","exemplar":false,"expr":"sum(irate(node_cpu_seconds_total{instance=\"$node\",job=\"$job\", mode=\"system\"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu)))","format":"time_series","hide":false,"instant":false,"intervalFactor":1,"legendFormat":"Busy System","range":true,"refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"sum(irate(node_cpu_seconds_total{instance=\"$node\",job=\"$job\", mode=\"user\"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu)))","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"Busy User","range":true,"refId":"B","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"sum(irate(node_cpu_seconds_total{instance=\"$node\",job=\"$job\", mode=\"iowait\"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu)))","format":"time_series","intervalFactor":1,"legendFormat":"Busy Iowait","range":true,"refId":"C","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"sum(irate(node_cpu_seconds_total{instance=\"$node\",job=\"$job\", mode=~\".*irq\"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu)))","format":"time_series","intervalFactor":1,"legendFormat":"Busy IRQs","range":true,"refId":"D","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"sum(irate(node_cpu_seconds_total{instance=\"$node\",job=\"$job\", mode!='idle',mode!='user',mode!='system',mode!='iowait',mode!='irq',mode!='softirq'}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu)))","format":"time_series","intervalFactor":1,"legendFormat":"Busy Other","range":true,"refId":"E","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"sum(irate(node_cpu_seconds_total{instance=\"$node\",job=\"$job\", mode=\"idle\"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu)))","format":"time_series","intervalFactor":1,"legendFormat":"Idle","range":true,"refId":"F","step":240}],"title":"CPU Basic","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"Basic memory usage","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":40,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"normal"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"bytes"},"overrides":[{"matcher":{"id":"byName","options":"Apps"},"properties":[{"id":"color","value":{"fixedColor":"#629E51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Buffers"},"properties":[{"id":"color","value":{"fixedColor":"#614D93","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cache"},"properties":[{"id":"color","value":{"fixedColor":"#6D1F62","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cached"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Committed"},"properties":[{"id":"color","value":{"fixedColor":"#508642","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Free"},"properties":[{"id":"color","value":{"fixedColor":"#0A437C","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working"},"properties":[{"id":"color","value":{"fixedColor":"#CFFAFF","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Inactive"},"properties":[{"id":"color","value":{"fixedColor":"#584477","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"PageTables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Page_Tables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"RAM_Free"},"properties":[{"id":"color","value":{"fixedColor":"#E0F9D7","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"SWAP Used"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab"},"properties":[{"id":"color","value":{"fixedColor":"#806EB7","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#E0752D","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap Used"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#C15C17","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Free"},"properties":[{"id":"color","value":{"fixedColor":"#2F575E","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Unused"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"RAM Total"},"properties":[{"id":"color","value":{"fixedColor":"#E0F9D7","mode":"fixed"}},{"id":"custom.fillOpacity","value":0},{"id":"custom.stacking","value":{"group":false,"mode":"normal"}}]},{"matcher":{"id":"byName","options":"RAM Cache + Buffer"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"RAM Free"},"properties":[{"id":"color","value":{"fixedColor":"#7EB26D","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Available"},"properties":[{"id":"color","value":{"fixedColor":"#DEDAF7","mode":"fixed"}},{"id":"custom.fillOpacity","value":0},{"id":"custom.stacking","value":{"group":false,"mode":"normal"}}]}]},"gridPos":{"h":7,"w":12,"x":12,"y":6},"id":78,"links":[],"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom","showLegend":true,"width":350},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_MemTotal_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"RAM Total","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_MemTotal_bytes{instance=\"$node\",job=\"$job\"} - node_memory_MemFree_bytes{instance=\"$node\",job=\"$job\"} - (node_memory_Cached_bytes{instance=\"$node\",job=\"$job\"} + node_memory_Buffers_bytes{instance=\"$node\",job=\"$job\"} + node_memory_SReclaimable_bytes{instance=\"$node\",job=\"$job\"})","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"RAM Used","refId":"B","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_Cached_bytes{instance=\"$node\",job=\"$job\"} + node_memory_Buffers_bytes{instance=\"$node\",job=\"$job\"} + node_memory_SReclaimable_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"RAM Cache + Buffer","refId":"C","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_MemFree_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"RAM Free","refId":"D","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(node_memory_SwapTotal_bytes{instance=\"$node\",job=\"$job\"} - node_memory_SwapFree_bytes{instance=\"$node\",job=\"$job\"})","format":"time_series","intervalFactor":1,"legendFormat":"SWAP Used","refId":"E","step":240}],"title":"Memory Basic","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"Basic network info per interface","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":40,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"bps"},"overrides":[{"matcher":{"id":"byName","options":"Recv_bytes_eth2"},"properties":[{"id":"color","value":{"fixedColor":"#7EB26D","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Recv_bytes_lo"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Recv_drop_eth2"},"properties":[{"id":"color","value":{"fixedColor":"#6ED0E0","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Recv_drop_lo"},"properties":[{"id":"color","value":{"fixedColor":"#E0F9D7","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Recv_errs_eth2"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Recv_errs_lo"},"properties":[{"id":"color","value":{"fixedColor":"#CCA300","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Trans_bytes_eth2"},"properties":[{"id":"color","value":{"fixedColor":"#7EB26D","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Trans_bytes_lo"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Trans_drop_eth2"},"properties":[{"id":"color","value":{"fixedColor":"#6ED0E0","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Trans_drop_lo"},"properties":[{"id":"color","value":{"fixedColor":"#E0F9D7","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Trans_errs_eth2"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Trans_errs_lo"},"properties":[{"id":"color","value":{"fixedColor":"#CCA300","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"recv_bytes_lo"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"recv_drop_eth0"},"properties":[{"id":"color","value":{"fixedColor":"#99440A","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"recv_drop_lo"},"properties":[{"id":"color","value":{"fixedColor":"#967302","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"recv_errs_eth0"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"recv_errs_lo"},"properties":[{"id":"color","value":{"fixedColor":"#890F02","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"trans_bytes_eth0"},"properties":[{"id":"color","value":{"fixedColor":"#7EB26D","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"trans_bytes_lo"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"trans_drop_eth0"},"properties":[{"id":"color","value":{"fixedColor":"#99440A","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"trans_drop_lo"},"properties":[{"id":"color","value":{"fixedColor":"#967302","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"trans_errs_eth0"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"trans_errs_lo"},"properties":[{"id":"color","value":{"fixedColor":"#890F02","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*trans.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":7,"w":12,"x":0,"y":13},"id":74,"links":[],"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_network_receive_bytes_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])*8","format":"time_series","intervalFactor":1,"legendFormat":"recv {{device}}","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_network_transmit_bytes_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])*8","format":"time_series","intervalFactor":1,"legendFormat":"trans {{device}} ","refId":"B","step":240}],"title":"Network Traffic Basic","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"Disk space used of all filesystems mounted","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":40,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"max":100,"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"percent"},"overrides":[]},"gridPos":{"h":7,"w":12,"x":12,"y":13},"id":152,"links":[],"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"100 - ((node_filesystem_avail_bytes{instance=\"$node\",job=\"$job\",device!~'rootfs'} * 100) / node_filesystem_size_bytes{instance=\"$node\",job=\"$job\",device!~'rootfs'})","format":"time_series","intervalFactor":1,"legendFormat":"{{mountpoint}}","refId":"A","step":240}],"title":"Disk Space Used Basic","type":"timeseries"},{"collapsed":true,"datasource":{"type":"prometheus","uid":"000000001"},"gridPos":{"h":1,"w":24,"x":0,"y":20},"id":265,"panels":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"percentage","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":70,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"smooth","lineWidth":2,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"percent"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"percentunit"},"overrides":[{"matcher":{"id":"byName","options":"Idle - Waiting for something to happen"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Iowait - Waiting for I/O to complete"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Irq - Servicing interrupts"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Nice - Niced processes executing in user mode"},"properties":[{"id":"color","value":{"fixedColor":"#C15C17","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Softirq - Servicing softirqs"},"properties":[{"id":"color","value":{"fixedColor":"#E24D42","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Steal - Time spent in other operating systems when running in a virtualized environment"},"properties":[{"id":"color","value":{"fixedColor":"#FCE2DE","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"System - Processes executing in kernel mode"},"properties":[{"id":"color","value":{"fixedColor":"#508642","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"User - Normal processes executing in user mode"},"properties":[{"id":"color","value":{"fixedColor":"#5195CE","mode":"fixed"}}]}]},"gridPos":{"h":12,"w":12,"x":0,"y":21},"id":3,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":250},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"sum(irate(node_cpu_seconds_total{instance=\"$node\",job=\"$job\", mode=\"system\"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu)))","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"System - Processes executing in kernel mode","range":true,"refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"sum(irate(node_cpu_seconds_total{instance=\"$node\",job=\"$job\", mode=\"user\"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu)))","format":"time_series","intervalFactor":1,"legendFormat":"User - Normal processes executing in user mode","range":true,"refId":"B","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"sum(irate(node_cpu_seconds_total{instance=\"$node\",job=\"$job\", mode=\"nice\"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu)))","format":"time_series","intervalFactor":1,"legendFormat":"Nice - Niced processes executing in user mode","range":true,"refId":"C","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"sum by(instance) (irate(node_cpu_seconds_total{instance=\"$node\",job=\"$job\", mode=\"iowait\"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu)))","format":"time_series","intervalFactor":1,"legendFormat":"Iowait - Waiting for I/O to complete","range":true,"refId":"E","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"sum(irate(node_cpu_seconds_total{instance=\"$node\",job=\"$job\", mode=\"irq\"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu)))","format":"time_series","intervalFactor":1,"legendFormat":"Irq - Servicing interrupts","range":true,"refId":"F","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"sum(irate(node_cpu_seconds_total{instance=\"$node\",job=\"$job\", mode=\"softirq\"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu)))","format":"time_series","intervalFactor":1,"legendFormat":"Softirq - Servicing softirqs","range":true,"refId":"G","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"sum(irate(node_cpu_seconds_total{instance=\"$node\",job=\"$job\", mode=\"steal\"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu)))","format":"time_series","intervalFactor":1,"legendFormat":"Steal - Time spent in other operating systems when running in a virtualized environment","range":true,"refId":"H","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"sum(irate(node_cpu_seconds_total{instance=\"$node\",job=\"$job\", mode=\"idle\"}[$__rate_interval])) / scalar(count(count(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}) by (cpu)))","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"Idle - Waiting for something to happen","range":true,"refId":"J","step":240}],"title":"CPU","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"bytes","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":40,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"normal"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"bytes"},"overrides":[{"matcher":{"id":"byName","options":"Apps"},"properties":[{"id":"color","value":{"fixedColor":"#629E51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Buffers"},"properties":[{"id":"color","value":{"fixedColor":"#614D93","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cache"},"properties":[{"id":"color","value":{"fixedColor":"#6D1F62","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cached"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Committed"},"properties":[{"id":"color","value":{"fixedColor":"#508642","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Free"},"properties":[{"id":"color","value":{"fixedColor":"#0A437C","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working"},"properties":[{"id":"color","value":{"fixedColor":"#CFFAFF","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Inactive"},"properties":[{"id":"color","value":{"fixedColor":"#584477","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"PageTables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Page_Tables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"RAM_Free"},"properties":[{"id":"color","value":{"fixedColor":"#E0F9D7","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab"},"properties":[{"id":"color","value":{"fixedColor":"#806EB7","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#E0752D","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap - Swap memory usage"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#C15C17","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Free"},"properties":[{"id":"color","value":{"fixedColor":"#2F575E","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Unused"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Unused - Free memory unassigned"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*Hardware Corrupted - *./"},"properties":[{"id":"custom.stacking","value":{"group":false,"mode":"normal"}}]}]},"gridPos":{"h":12,"w":12,"x":12,"y":21},"id":24,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":350},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_MemTotal_bytes{instance=\"$node\",job=\"$job\"} - node_memory_MemFree_bytes{instance=\"$node\",job=\"$job\"} - node_memory_Buffers_bytes{instance=\"$node\",job=\"$job\"} - node_memory_Cached_bytes{instance=\"$node\",job=\"$job\"} - node_memory_Slab_bytes{instance=\"$node\",job=\"$job\"} - node_memory_PageTables_bytes{instance=\"$node\",job=\"$job\"} - node_memory_SwapCached_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"Apps - Memory used by user-space applications","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_PageTables_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"PageTables - Memory used to map between virtual and physical memory addresses","refId":"B","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_SwapCached_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"SwapCache - Memory that keeps track of pages that have been fetched from swap but not yet been modified","refId":"C","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_Slab_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"Slab - Memory used by the kernel to cache data structures for its own use (caches like inode, dentry, etc)","refId":"D","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_Cached_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"Cache - Parked file data (file content) cache","refId":"E","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_Buffers_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"Buffers - Block device (e.g. harddisk) cache","refId":"F","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_MemFree_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"Unused - Free memory unassigned","refId":"G","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"(node_memory_SwapTotal_bytes{instance=\"$node\",job=\"$job\"} - node_memory_SwapFree_bytes{instance=\"$node\",job=\"$job\"})","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"Swap - Swap space used","refId":"H","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_HardwareCorrupted_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working","refId":"I","step":240}],"title":"Memory Stack","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"bits out (-) / in (+)","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":40,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"bps"},"overrides":[{"matcher":{"id":"byName","options":"receive_packets_eth0"},"properties":[{"id":"color","value":{"fixedColor":"#7EB26D","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"receive_packets_lo"},"properties":[{"id":"color","value":{"fixedColor":"#E24D42","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"transmit_packets_eth0"},"properties":[{"id":"color","value":{"fixedColor":"#7EB26D","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"transmit_packets_lo"},"properties":[{"id":"color","value":{"fixedColor":"#E24D42","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*Trans.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":12,"w":12,"x":0,"y":33},"id":84,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_network_receive_bytes_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])*8","format":"time_series","intervalFactor":1,"legendFormat":"{{device}} - Receive","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_network_transmit_bytes_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])*8","format":"time_series","intervalFactor":1,"legendFormat":"{{device}} - Transmit","refId":"B","step":240}],"title":"Network Traffic","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"bytes","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":40,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"bytes"},"overrides":[]},"gridPos":{"h":12,"w":12,"x":12,"y":33},"id":156,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_filesystem_size_bytes{instance=\"$node\",job=\"$job\",device!~'rootfs'} - node_filesystem_avail_bytes{instance=\"$node\",job=\"$job\",device!~'rootfs'}","format":"time_series","intervalFactor":1,"legendFormat":"{{mountpoint}}","refId":"A","step":240}],"title":"Disk Space Used","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"IO read (-) / write (+)","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"iops"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*Read.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]},{"matcher":{"id":"byRegexp","options":"/.*sda_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#7EB26D","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#6ED0E0","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EF843C","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E24D42","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#584477","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda2_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#BA43A9","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda3_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F4D598","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E0752D","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#962D82","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#614D93","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#9AC48A","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#65C5DB","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F9934E","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E0F9D7","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#FCEACA","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F9E2D2","mode":"fixed"}}]}]},"gridPos":{"h":12,"w":12,"x":0,"y":45},"id":229,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"single","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_disk_reads_completed_total{instance=\"$node\",job=\"$job\",device=~\"$diskdevices\"}[$__rate_interval])","intervalFactor":4,"legendFormat":"{{device}} - Reads completed","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_disk_writes_completed_total{instance=\"$node\",job=\"$job\",device=~\"$diskdevices\"}[$__rate_interval])","intervalFactor":1,"legendFormat":"{{device}} - Writes completed","refId":"B","step":240}],"title":"Disk IOps","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"bytes read (-) / write (+)","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":40,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"Bps"},"overrides":[{"matcher":{"id":"byName","options":"io time"},"properties":[{"id":"color","value":{"fixedColor":"#890F02","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*read*./"},"properties":[{"id":"custom.transform","value":"negative-Y"}]},{"matcher":{"id":"byRegexp","options":"/.*sda.*/"},"properties":[{"id":"color","value":{"fixedColor":"#7EB26D","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc.*/"},"properties":[{"id":"color","value":{"fixedColor":"#6ED0E0","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EF843C","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E24D42","mode":"fixed"}}]},{"matcher":{"id":"byType","options":"time"},"properties":[{"id":"custom.axisPlacement","value":"hidden"}]}]},"gridPos":{"h":12,"w":12,"x":12,"y":45},"id":42,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_disk_read_bytes_total{instance=\"$node\",job=\"$job\",device=~\"$diskdevices\"}[$__rate_interval])","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"{{device}} - Successfully read bytes","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_disk_written_bytes_total{instance=\"$node\",job=\"$job\",device=~\"$diskdevices\"}[$__rate_interval])","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"{{device}} - Successfully written bytes","refId":"B","step":240}],"title":"I/O Usage Read / Write","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"%util","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":40,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"percentunit"},"overrides":[{"matcher":{"id":"byName","options":"io time"},"properties":[{"id":"color","value":{"fixedColor":"#890F02","mode":"fixed"}}]},{"matcher":{"id":"byType","options":"time"},"properties":[{"id":"custom.axisPlacement","value":"hidden"}]}]},"gridPos":{"h":12,"w":12,"x":0,"y":57},"id":127,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_disk_io_time_seconds_total{instance=\"$node\",job=\"$job\",device=~\"$diskdevices\"} [$__rate_interval])","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"{{device}}","refId":"A","step":240}],"title":"I/O Utilization","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"percentage","axisPlacement":"auto","barAlignment":0,"drawStyle":"bars","fillOpacity":70,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"smooth","lineWidth":2,"pointSize":3,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"mappings":[],"max":1,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"percentunit"},"overrides":[{"matcher":{"id":"byRegexp","options":"/^Guest - /"},"properties":[{"id":"color","value":{"fixedColor":"#5195ce","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/^GuestNice - /"},"properties":[{"id":"color","value":{"fixedColor":"#c15c17","mode":"fixed"}}]}]},"gridPos":{"h":12,"w":12,"x":12,"y":57},"id":319,"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"desc"}},"targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"sum by(instance) (irate(node_cpu_guest_seconds_total{instance=\"$node\",job=\"$job\", mode=\"user\"}[1m])) / on(instance) group_left sum by (instance)((irate(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}[1m])))","hide":false,"legendFormat":"Guest - Time spent running a virtual CPU for a guest operating system","range":true,"refId":"A"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"sum by(instance) (irate(node_cpu_guest_seconds_total{instance=\"$node\",job=\"$job\", mode=\"nice\"}[1m])) / on(instance) group_left sum by (instance)((irate(node_cpu_seconds_total{instance=\"$node\",job=\"$job\"}[1m])))","hide":false,"legendFormat":"GuestNice - Time spent running a niced guest (virtual CPU for guest operating system)","range":true,"refId":"B"}],"title":"CPU spent seconds in guests (VMs)","type":"timeseries"}],"targets":[{"datasource":{"type":"prometheus","uid":"000000001"},"refId":"A"}],"title":"CPU / Memory / Net / Disk","type":"row"},{"collapsed":true,"datasource":{"type":"prometheus","uid":"000000001"},"gridPos":{"h":1,"w":24,"x":0,"y":21},"id":266,"panels":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"bytes","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"normal"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"bytes"},"overrides":[{"matcher":{"id":"byName","options":"Apps"},"properties":[{"id":"color","value":{"fixedColor":"#629E51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Buffers"},"properties":[{"id":"color","value":{"fixedColor":"#614D93","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cache"},"properties":[{"id":"color","value":{"fixedColor":"#6D1F62","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cached"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Committed"},"properties":[{"id":"color","value":{"fixedColor":"#508642","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Free"},"properties":[{"id":"color","value":{"fixedColor":"#0A437C","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working"},"properties":[{"id":"color","value":{"fixedColor":"#CFFAFF","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Inactive"},"properties":[{"id":"color","value":{"fixedColor":"#584477","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"PageTables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Page_Tables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"RAM_Free"},"properties":[{"id":"color","value":{"fixedColor":"#E0F9D7","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab"},"properties":[{"id":"color","value":{"fixedColor":"#806EB7","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#E0752D","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#C15C17","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Free"},"properties":[{"id":"color","value":{"fixedColor":"#2F575E","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Unused"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":54},"id":136,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":350},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_Inactive_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"Inactive - Memory which has been less recently used. It is more eligible to be reclaimed for other purposes","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_Active_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"Active - Memory that has been used more recently and usually not reclaimed unless absolutely necessary","refId":"B","step":240}],"title":"Memory Active / Inactive","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"bytes","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"bytes"},"overrides":[{"matcher":{"id":"byName","options":"Apps"},"properties":[{"id":"color","value":{"fixedColor":"#629E51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Buffers"},"properties":[{"id":"color","value":{"fixedColor":"#614D93","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cache"},"properties":[{"id":"color","value":{"fixedColor":"#6D1F62","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cached"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Committed"},"properties":[{"id":"color","value":{"fixedColor":"#508642","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Free"},"properties":[{"id":"color","value":{"fixedColor":"#0A437C","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working"},"properties":[{"id":"color","value":{"fixedColor":"#CFFAFF","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Inactive"},"properties":[{"id":"color","value":{"fixedColor":"#584477","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"PageTables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Page_Tables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"RAM_Free"},"properties":[{"id":"color","value":{"fixedColor":"#E0F9D7","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab"},"properties":[{"id":"color","value":{"fixedColor":"#806EB7","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#E0752D","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#C15C17","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Free"},"properties":[{"id":"color","value":{"fixedColor":"#2F575E","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Unused"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*CommitLimit - *./"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}},{"id":"custom.fillOpacity","value":0}]}]},"gridPos":{"h":10,"w":12,"x":12,"y":54},"id":135,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":350},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_Committed_AS_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"Committed_AS - Amount of memory presently allocated on the system","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_CommitLimit_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"CommitLimit - Amount of memory currently available to be allocated on the system","refId":"B","step":240}],"title":"Memory Committed","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"bytes","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"normal"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"bytes"},"overrides":[{"matcher":{"id":"byName","options":"Apps"},"properties":[{"id":"color","value":{"fixedColor":"#629E51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Buffers"},"properties":[{"id":"color","value":{"fixedColor":"#614D93","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cache"},"properties":[{"id":"color","value":{"fixedColor":"#6D1F62","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cached"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Committed"},"properties":[{"id":"color","value":{"fixedColor":"#508642","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Free"},"properties":[{"id":"color","value":{"fixedColor":"#0A437C","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working"},"properties":[{"id":"color","value":{"fixedColor":"#CFFAFF","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Inactive"},"properties":[{"id":"color","value":{"fixedColor":"#584477","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"PageTables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Page_Tables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"RAM_Free"},"properties":[{"id":"color","value":{"fixedColor":"#E0F9D7","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab"},"properties":[{"id":"color","value":{"fixedColor":"#806EB7","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#E0752D","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#C15C17","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Free"},"properties":[{"id":"color","value":{"fixedColor":"#2F575E","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Unused"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":64},"id":191,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":350},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_Inactive_file_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"Inactive_file - File-backed memory on inactive LRU list","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_Inactive_anon_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"Inactive_anon - Anonymous and swap cache on inactive LRU list, including tmpfs (shmem)","refId":"B","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_Active_file_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"Active_file - File-backed memory on active LRU list","refId":"C","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_Active_anon_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"Active_anon - Anonymous and swap cache on active least-recently-used (LRU) list, including tmpfs","refId":"D","step":240}],"title":"Memory Active / Inactive Detail","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"bytes","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"bytes"},"overrides":[{"matcher":{"id":"byName","options":"Active"},"properties":[{"id":"color","value":{"fixedColor":"#99440A","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Buffers"},"properties":[{"id":"color","value":{"fixedColor":"#58140C","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cache"},"properties":[{"id":"color","value":{"fixedColor":"#6D1F62","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cached"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Committed"},"properties":[{"id":"color","value":{"fixedColor":"#508642","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Dirty"},"properties":[{"id":"color","value":{"fixedColor":"#6ED0E0","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Free"},"properties":[{"id":"color","value":{"fixedColor":"#B7DBAB","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Inactive"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Mapped"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"PageTables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Page_Tables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#C15C17","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total RAM"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total RAM + Swap"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total Swap"},"properties":[{"id":"color","value":{"fixedColor":"#614D93","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"VmallocUsed"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]}]},"gridPos":{"h":10,"w":12,"x":12,"y":64},"id":130,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_Writeback_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"Writeback - Memory which is actively being written back to disk","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_WritebackTmp_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"WritebackTmp - Memory used by FUSE for temporary writeback buffers","refId":"B","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_Dirty_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"Dirty - Memory which is waiting to get written back to the disk","refId":"C","step":240}],"title":"Memory Writeback and Dirty","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"bytes","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"bytes"},"overrides":[{"matcher":{"id":"byName","options":"Apps"},"properties":[{"id":"color","value":{"fixedColor":"#629E51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Buffers"},"properties":[{"id":"color","value":{"fixedColor":"#614D93","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cache"},"properties":[{"id":"color","value":{"fixedColor":"#6D1F62","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cached"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Committed"},"properties":[{"id":"color","value":{"fixedColor":"#508642","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Free"},"properties":[{"id":"color","value":{"fixedColor":"#0A437C","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working"},"properties":[{"id":"color","value":{"fixedColor":"#CFFAFF","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Inactive"},"properties":[{"id":"color","value":{"fixedColor":"#584477","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"PageTables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Page_Tables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"RAM_Free"},"properties":[{"id":"color","value":{"fixedColor":"#E0F9D7","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab"},"properties":[{"id":"color","value":{"fixedColor":"#806EB7","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#E0752D","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#C15C17","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Free"},"properties":[{"id":"color","value":{"fixedColor":"#2F575E","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Unused"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"ShmemHugePages - Memory used by shared memory (shmem) and tmpfs allocated with huge pages"},"properties":[{"id":"custom.fillOpacity","value":0}]},{"matcher":{"id":"byName","options":"ShmemHugePages - Memory used by shared memory (shmem) and tmpfs allocated with huge pages"},"properties":[{"id":"custom.fillOpacity","value":0}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":74},"id":138,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":350},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_Mapped_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"Mapped - Used memory in mapped pages files which have been mapped, such as libraries","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_Shmem_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"Shmem - Used shared memory (shared between several processes, thus including RAM disks)","refId":"B","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_ShmemHugePages_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"ShmemHugePages - Memory used by shared memory (shmem) and tmpfs allocated with huge pages","refId":"C","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_ShmemPmdMapped_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"ShmemPmdMapped - Amount of shared (shmem/tmpfs) memory backed by huge pages","refId":"D","step":240}],"title":"Memory Shared and Mapped","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"bytes","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"normal"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"bytes"},"overrides":[{"matcher":{"id":"byName","options":"Active"},"properties":[{"id":"color","value":{"fixedColor":"#99440A","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Buffers"},"properties":[{"id":"color","value":{"fixedColor":"#58140C","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cache"},"properties":[{"id":"color","value":{"fixedColor":"#6D1F62","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cached"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Committed"},"properties":[{"id":"color","value":{"fixedColor":"#508642","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Dirty"},"properties":[{"id":"color","value":{"fixedColor":"#6ED0E0","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Free"},"properties":[{"id":"color","value":{"fixedColor":"#B7DBAB","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Inactive"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Mapped"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"PageTables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Page_Tables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#C15C17","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total RAM"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total RAM + Swap"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total Swap"},"properties":[{"id":"color","value":{"fixedColor":"#614D93","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"VmallocUsed"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]}]},"gridPos":{"h":10,"w":12,"x":12,"y":74},"id":131,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_SUnreclaim_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"SUnreclaim - Part of Slab, that cannot be reclaimed on memory pressure","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_SReclaimable_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"SReclaimable - Part of Slab, that might be reclaimed, such as caches","refId":"B","step":240}],"title":"Memory Slab","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"bytes","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"bytes"},"overrides":[{"matcher":{"id":"byName","options":"Active"},"properties":[{"id":"color","value":{"fixedColor":"#99440A","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Buffers"},"properties":[{"id":"color","value":{"fixedColor":"#58140C","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cache"},"properties":[{"id":"color","value":{"fixedColor":"#6D1F62","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cached"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Committed"},"properties":[{"id":"color","value":{"fixedColor":"#508642","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Dirty"},"properties":[{"id":"color","value":{"fixedColor":"#6ED0E0","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Free"},"properties":[{"id":"color","value":{"fixedColor":"#B7DBAB","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Inactive"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Mapped"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"PageTables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Page_Tables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#C15C17","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total RAM"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total RAM + Swap"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"VmallocUsed"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":84},"id":70,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_VmallocChunk_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"VmallocChunk - Largest contiguous block of vmalloc area which is free","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_VmallocTotal_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"VmallocTotal - Total size of vmalloc memory area","refId":"B","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_VmallocUsed_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"VmallocUsed - Amount of vmalloc area which is used","refId":"C","step":240}],"title":"Memory Vmalloc","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"bytes","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"bytes"},"overrides":[{"matcher":{"id":"byName","options":"Apps"},"properties":[{"id":"color","value":{"fixedColor":"#629E51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Buffers"},"properties":[{"id":"color","value":{"fixedColor":"#614D93","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cache"},"properties":[{"id":"color","value":{"fixedColor":"#6D1F62","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cached"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Committed"},"properties":[{"id":"color","value":{"fixedColor":"#508642","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Free"},"properties":[{"id":"color","value":{"fixedColor":"#0A437C","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working"},"properties":[{"id":"color","value":{"fixedColor":"#CFFAFF","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Inactive"},"properties":[{"id":"color","value":{"fixedColor":"#584477","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"PageTables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Page_Tables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"RAM_Free"},"properties":[{"id":"color","value":{"fixedColor":"#E0F9D7","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab"},"properties":[{"id":"color","value":{"fixedColor":"#806EB7","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#E0752D","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#C15C17","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Free"},"properties":[{"id":"color","value":{"fixedColor":"#2F575E","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Unused"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]}]},"gridPos":{"h":10,"w":12,"x":12,"y":84},"id":159,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":350},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_Bounce_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"Bounce - Memory used for block device bounce buffers","refId":"A","step":240}],"title":"Memory Bounce","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"bytes","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"bytes"},"overrides":[{"matcher":{"id":"byName","options":"Active"},"properties":[{"id":"color","value":{"fixedColor":"#99440A","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Buffers"},"properties":[{"id":"color","value":{"fixedColor":"#58140C","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cache"},"properties":[{"id":"color","value":{"fixedColor":"#6D1F62","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cached"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Committed"},"properties":[{"id":"color","value":{"fixedColor":"#508642","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Dirty"},"properties":[{"id":"color","value":{"fixedColor":"#6ED0E0","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Free"},"properties":[{"id":"color","value":{"fixedColor":"#B7DBAB","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Inactive"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Mapped"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"PageTables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Page_Tables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#C15C17","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total RAM"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total RAM + Swap"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"VmallocUsed"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*Inactive *./"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":94},"id":129,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_AnonHugePages_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"AnonHugePages - Memory in anonymous huge pages","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_AnonPages_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"AnonPages - Memory in user pages not backed by files","refId":"B","step":240}],"title":"Memory Anonymous","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"bytes","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"bytes"},"overrides":[{"matcher":{"id":"byName","options":"Apps"},"properties":[{"id":"color","value":{"fixedColor":"#629E51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Buffers"},"properties":[{"id":"color","value":{"fixedColor":"#614D93","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cache"},"properties":[{"id":"color","value":{"fixedColor":"#6D1F62","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cached"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Committed"},"properties":[{"id":"color","value":{"fixedColor":"#508642","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Free"},"properties":[{"id":"color","value":{"fixedColor":"#0A437C","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working"},"properties":[{"id":"color","value":{"fixedColor":"#CFFAFF","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Inactive"},"properties":[{"id":"color","value":{"fixedColor":"#584477","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"PageTables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Page_Tables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"RAM_Free"},"properties":[{"id":"color","value":{"fixedColor":"#E0F9D7","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab"},"properties":[{"id":"color","value":{"fixedColor":"#806EB7","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#E0752D","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#C15C17","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Free"},"properties":[{"id":"color","value":{"fixedColor":"#2F575E","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Unused"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]}]},"gridPos":{"h":10,"w":12,"x":12,"y":94},"id":160,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":350},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_KernelStack_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"KernelStack - Kernel memory stack. This is not reclaimable","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_Percpu_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"PerCPU - Per CPU memory allocated dynamically by loadable modules","refId":"B","step":240}],"title":"Memory Kernel / CPU","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"pages","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[{"matcher":{"id":"byName","options":"Active"},"properties":[{"id":"color","value":{"fixedColor":"#99440A","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Buffers"},"properties":[{"id":"color","value":{"fixedColor":"#58140C","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cache"},"properties":[{"id":"color","value":{"fixedColor":"#6D1F62","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cached"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Committed"},"properties":[{"id":"color","value":{"fixedColor":"#508642","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Dirty"},"properties":[{"id":"color","value":{"fixedColor":"#6ED0E0","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Free"},"properties":[{"id":"color","value":{"fixedColor":"#B7DBAB","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Inactive"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Mapped"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"PageTables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Page_Tables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#C15C17","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total RAM"},"properties":[{"id":"color","value":{"fixedColor":"#806EB7","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total RAM + Swap"},"properties":[{"id":"color","value":{"fixedColor":"#806EB7","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"VmallocUsed"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":104},"id":140,"links":[],"options":{"legend":{"calcs":["lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_HugePages_Free{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"HugePages_Free - Huge pages in the pool that are not yet allocated","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_HugePages_Rsvd{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"HugePages_Rsvd - Huge pages for which a commitment to allocate from the pool has been made, but no allocation has yet been made","refId":"B","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_HugePages_Surp{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"HugePages_Surp - Huge pages in the pool above the value in /proc/sys/vm/nr_hugepages","refId":"C","step":240}],"title":"Memory HugePages Counter","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"bytes","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"bytes"},"overrides":[{"matcher":{"id":"byName","options":"Active"},"properties":[{"id":"color","value":{"fixedColor":"#99440A","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Buffers"},"properties":[{"id":"color","value":{"fixedColor":"#58140C","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cache"},"properties":[{"id":"color","value":{"fixedColor":"#6D1F62","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cached"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Committed"},"properties":[{"id":"color","value":{"fixedColor":"#508642","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Dirty"},"properties":[{"id":"color","value":{"fixedColor":"#6ED0E0","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Free"},"properties":[{"id":"color","value":{"fixedColor":"#B7DBAB","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Inactive"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Mapped"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"PageTables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Page_Tables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#C15C17","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total RAM"},"properties":[{"id":"color","value":{"fixedColor":"#806EB7","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total RAM + Swap"},"properties":[{"id":"color","value":{"fixedColor":"#806EB7","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"VmallocUsed"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]}]},"gridPos":{"h":10,"w":12,"x":12,"y":104},"id":71,"links":[],"options":{"legend":{"calcs":["lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_HugePages_Total{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"HugePages - Total size of the pool of huge pages","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_Hugepagesize_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"Hugepagesize - Huge Page size","refId":"B","step":240}],"title":"Memory HugePages Size","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"bytes","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"bytes"},"overrides":[{"matcher":{"id":"byName","options":"Active"},"properties":[{"id":"color","value":{"fixedColor":"#99440A","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Buffers"},"properties":[{"id":"color","value":{"fixedColor":"#58140C","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cache"},"properties":[{"id":"color","value":{"fixedColor":"#6D1F62","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cached"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Committed"},"properties":[{"id":"color","value":{"fixedColor":"#508642","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Dirty"},"properties":[{"id":"color","value":{"fixedColor":"#6ED0E0","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Free"},"properties":[{"id":"color","value":{"fixedColor":"#B7DBAB","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Inactive"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Mapped"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"PageTables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Page_Tables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#C15C17","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total RAM"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total RAM + Swap"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"VmallocUsed"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":114},"id":128,"links":[],"options":{"legend":{"calcs":["mean","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_DirectMap1G_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"DirectMap1G - Amount of pages mapped as this size","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_DirectMap2M_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"DirectMap2M - Amount of pages mapped as this size","refId":"B","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_DirectMap4k_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"DirectMap4K - Amount of pages mapped as this size","refId":"C","step":240}],"title":"Memory DirectMap","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"bytes","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"bytes"},"overrides":[{"matcher":{"id":"byName","options":"Apps"},"properties":[{"id":"color","value":{"fixedColor":"#629E51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Buffers"},"properties":[{"id":"color","value":{"fixedColor":"#614D93","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cache"},"properties":[{"id":"color","value":{"fixedColor":"#6D1F62","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cached"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Committed"},"properties":[{"id":"color","value":{"fixedColor":"#508642","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Free"},"properties":[{"id":"color","value":{"fixedColor":"#0A437C","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working"},"properties":[{"id":"color","value":{"fixedColor":"#CFFAFF","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Inactive"},"properties":[{"id":"color","value":{"fixedColor":"#584477","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"PageTables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Page_Tables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"RAM_Free"},"properties":[{"id":"color","value":{"fixedColor":"#E0F9D7","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab"},"properties":[{"id":"color","value":{"fixedColor":"#806EB7","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#E0752D","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#C15C17","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Free"},"properties":[{"id":"color","value":{"fixedColor":"#2F575E","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Unused"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]}]},"gridPos":{"h":10,"w":12,"x":12,"y":114},"id":137,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":350},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_Unevictable_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"Unevictable - Amount of unevictable memory that can't be swapped out for a variety of reasons","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_Mlocked_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"MLocked - Size of pages locked to memory using the mlock() system call","refId":"B","step":240}],"title":"Memory Unevictable and MLocked","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"bytes","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"bytes"},"overrides":[{"matcher":{"id":"byName","options":"Active"},"properties":[{"id":"color","value":{"fixedColor":"#99440A","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Buffers"},"properties":[{"id":"color","value":{"fixedColor":"#58140C","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cache"},"properties":[{"id":"color","value":{"fixedColor":"#6D1F62","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cached"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Committed"},"properties":[{"id":"color","value":{"fixedColor":"#508642","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Dirty"},"properties":[{"id":"color","value":{"fixedColor":"#6ED0E0","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Free"},"properties":[{"id":"color","value":{"fixedColor":"#B7DBAB","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Inactive"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Mapped"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"PageTables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Page_Tables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#C15C17","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total RAM"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total RAM + Swap"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total Swap"},"properties":[{"id":"color","value":{"fixedColor":"#614D93","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"VmallocUsed"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":124},"id":132,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_memory_NFS_Unstable_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"NFS Unstable - Memory in NFS pages sent to the server, but not yet committed to the storage","refId":"A","step":240}],"title":"Memory NFS","type":"timeseries"}],"targets":[{"datasource":{"type":"prometheus","uid":"000000001"},"refId":"A"}],"title":"Memory Meminfo","type":"row"},{"collapsed":true,"datasource":{"type":"prometheus","uid":"000000001"},"gridPos":{"h":1,"w":24,"x":0,"y":22},"id":267,"panels":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"pages out (-) / in (+)","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*out/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":41},"id":176,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_vmstat_pgpgin{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","intervalFactor":1,"legendFormat":"Pagesin - Page in operations","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_vmstat_pgpgout{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","intervalFactor":1,"legendFormat":"Pagesout - Page out operations","refId":"B","step":240}],"title":"Memory Pages In / Out","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"pages out (-) / in (+)","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*out/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":10,"w":12,"x":12,"y":41},"id":22,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_vmstat_pswpin{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","intervalFactor":1,"legendFormat":"Pswpin - Pages swapped in","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_vmstat_pswpout{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","intervalFactor":1,"legendFormat":"Pswpout - Pages swapped out","refId":"B","step":240}],"title":"Memory Pages Swap In / Out","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"faults","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"normal"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[{"matcher":{"id":"byName","options":"Apps"},"properties":[{"id":"color","value":{"fixedColor":"#629E51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Buffers"},"properties":[{"id":"color","value":{"fixedColor":"#614D93","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cache"},"properties":[{"id":"color","value":{"fixedColor":"#6D1F62","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cached"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Committed"},"properties":[{"id":"color","value":{"fixedColor":"#508642","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Free"},"properties":[{"id":"color","value":{"fixedColor":"#0A437C","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working"},"properties":[{"id":"color","value":{"fixedColor":"#CFFAFF","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Inactive"},"properties":[{"id":"color","value":{"fixedColor":"#584477","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"PageTables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Page_Tables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"RAM_Free"},"properties":[{"id":"color","value":{"fixedColor":"#E0F9D7","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab"},"properties":[{"id":"color","value":{"fixedColor":"#806EB7","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#E0752D","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#C15C17","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Free"},"properties":[{"id":"color","value":{"fixedColor":"#2F575E","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Unused"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Pgfault - Page major and minor fault operations"},"properties":[{"id":"custom.fillOpacity","value":0},{"id":"custom.stacking","value":{"group":false,"mode":"normal"}}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":51},"id":175,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":350},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_vmstat_pgfault{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","intervalFactor":1,"legendFormat":"Pgfault - Page major and minor fault operations","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_vmstat_pgmajfault{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","intervalFactor":1,"legendFormat":"Pgmajfault - Major page fault operations","refId":"B","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_vmstat_pgfault{instance=\"$node\",job=\"$job\"}[$__rate_interval]) - irate(node_vmstat_pgmajfault{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","intervalFactor":1,"legendFormat":"Pgminfault - Minor page fault operations","refId":"C","step":240}],"title":"Memory Page Faults","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[{"matcher":{"id":"byName","options":"Active"},"properties":[{"id":"color","value":{"fixedColor":"#99440A","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Buffers"},"properties":[{"id":"color","value":{"fixedColor":"#58140C","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cache"},"properties":[{"id":"color","value":{"fixedColor":"#6D1F62","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Cached"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Committed"},"properties":[{"id":"color","value":{"fixedColor":"#508642","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Dirty"},"properties":[{"id":"color","value":{"fixedColor":"#6ED0E0","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Free"},"properties":[{"id":"color","value":{"fixedColor":"#B7DBAB","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Inactive"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Mapped"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"PageTables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Page_Tables"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Slab_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Swap_Cache"},"properties":[{"id":"color","value":{"fixedColor":"#C15C17","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total"},"properties":[{"id":"color","value":{"fixedColor":"#511749","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total RAM"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total RAM + Swap"},"properties":[{"id":"color","value":{"fixedColor":"#052B51","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Total Swap"},"properties":[{"id":"color","value":{"fixedColor":"#614D93","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"VmallocUsed"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]}]},"gridPos":{"h":10,"w":12,"x":12,"y":51},"id":307,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_vmstat_oom_kill{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"oom killer invocations ","refId":"A","step":240}],"title":"OOM Killer","type":"timeseries"}],"targets":[{"datasource":{"type":"prometheus","uid":"000000001"},"refId":"A"}],"title":"Memory Vmstat","type":"row"},{"collapsed":true,"datasource":{"type":"prometheus","uid":"000000001"},"gridPos":{"h":1,"w":24,"x":0,"y":23},"id":293,"panels":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"seconds","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"s"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*Variation*./"},"properties":[{"id":"color","value":{"fixedColor":"#890F02","mode":"fixed"}}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":24},"id":260,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_timex_estimated_error_seconds{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"Estimated error in seconds","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_timex_offset_seconds{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"Time offset in between local system and reference clock","refId":"B","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_timex_maxerror_seconds{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"Maximum error in seconds","refId":"C","step":240}],"title":"Time Synchronized Drift","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":12,"y":24},"id":291,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_timex_loop_time_constant{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"Phase-locked loop time adjust","refId":"A","step":240}],"title":"Time PLL Adjust","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*Variation*./"},"properties":[{"id":"color","value":{"fixedColor":"#890F02","mode":"fixed"}}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":34},"id":168,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_timex_sync_status{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"Is clock synchronized to a reliable server (1 = yes, 0 = no)","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_timex_frequency_adjustment_ratio{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"Local clock frequency adjustment","refId":"B","step":240}],"title":"Time Synchronized Status","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"seconds","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"s"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":12,"y":34},"id":294,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_timex_tick_seconds{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"Seconds between clock ticks","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_timex_tai_offset_seconds{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"International Atomic Time (TAI) offset","refId":"B","step":240}],"title":"Time Misc","type":"timeseries"}],"targets":[{"datasource":{"type":"prometheus","uid":"000000001"},"refId":"A"}],"title":"System Timesync","type":"row"},{"collapsed":true,"datasource":{"type":"prometheus","uid":"000000001"},"gridPos":{"h":1,"w":24,"x":0,"y":24},"id":312,"panels":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":0,"y":73},"id":62,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_procs_blocked{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"Processes blocked waiting for I/O to complete","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_procs_running{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"Processes in runnable state","refId":"B","step":240}],"title":"Processes Status","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"Enable with --collector.processes argument on node-exporter","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"normal"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":12,"y":73},"id":315,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_processes_state{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"{{ state }}","refId":"A","step":240}],"title":"Processes State","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"forks / sec","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":0,"y":83},"id":148,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_forks_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"Processes forks second","refId":"A","step":240}],"title":"Processes Forks","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"bytes","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"decbytes"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*Max.*/"},"properties":[{"id":"custom.fillOpacity","value":0}]}]},"gridPos":{"h":10,"w":12,"x":12,"y":83},"id":149,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(process_virtual_memory_bytes{instance=\"$node\",job=\"$job\"}[$__rate_interval])","hide":false,"interval":"","intervalFactor":1,"legendFormat":"Processes virtual memory size in bytes","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"process_resident_memory_max_bytes{instance=\"$node\",job=\"$job\"}","hide":false,"interval":"","intervalFactor":1,"legendFormat":"Maximum amount of virtual memory available in bytes","refId":"B","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(process_virtual_memory_bytes{instance=\"$node\",job=\"$job\"}[$__rate_interval])","hide":false,"interval":"","intervalFactor":1,"legendFormat":"Processes virtual memory size in bytes","refId":"C","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(process_virtual_memory_max_bytes{instance=\"$node\",job=\"$job\"}[$__rate_interval])","hide":false,"interval":"","intervalFactor":1,"legendFormat":"Maximum amount of virtual memory available in bytes","refId":"D","step":240}],"title":"Processes Memory","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"Enable with --collector.processes argument on node-exporter","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[{"matcher":{"id":"byName","options":"PIDs limit"},"properties":[{"id":"color","value":{"fixedColor":"#F2495C","mode":"fixed"}},{"id":"custom.fillOpacity","value":0}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":93},"id":313,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_processes_pids{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"Number of PIDs","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_processes_max_processes{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"PIDs limit","refId":"B","step":240}],"title":"PIDs Number and Limit","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"seconds","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"s"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*waiting.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":10,"w":12,"x":12,"y":93},"id":305,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_schedstat_running_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"CPU {{ cpu }} - seconds spent running a process","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_schedstat_waiting_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"CPU {{ cpu }} - seconds spent by processing waiting for this CPU","refId":"B","step":240}],"title":"Process schedule stats Running / Waiting","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"Enable with --collector.processes argument on node-exporter","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[{"matcher":{"id":"byName","options":"Threads limit"},"properties":[{"id":"color","value":{"fixedColor":"#F2495C","mode":"fixed"}},{"id":"custom.fillOpacity","value":0}]}]},"gridPos":{"h":10,"w":12,"x":12,"y":103},"id":314,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_processes_threads{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"Allocated threads","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_processes_max_threads{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"Threads limit","refId":"B","step":240}],"title":"Threads Number and Limit","type":"timeseries"}],"targets":[{"datasource":{"type":"prometheus","uid":"000000001"},"refId":"A"}],"title":"System Processes","type":"row"},{"collapsed":true,"datasource":{"type":"prometheus","uid":"000000001"},"gridPos":{"h":1,"w":24,"x":0,"y":25},"id":269,"panels":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":0,"y":26},"id":8,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_context_switches_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","intervalFactor":1,"legendFormat":"Context switches","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_intr_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"Interrupts","refId":"B","step":240}],"title":"Context Switches / Interrupts","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":12,"y":26},"id":7,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_load1{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":4,"legendFormat":"Load 1m","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_load5{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":4,"legendFormat":"Load 5m","refId":"B","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_load15{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":4,"legendFormat":"Load 15m","refId":"C","step":240}],"title":"System Load","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"hertz"},"overrides":[{"matcher":{"id":"byName","options":"Max"},"properties":[{"id":"custom.lineStyle","value":{"dash":[10,10],"fill":"dash"}},{"id":"color","value":{"fixedColor":"blue","mode":"fixed"}},{"id":"custom.fillOpacity","value":10},{"id":"custom.hideFrom","value":{"legend":true,"tooltip":false,"viz":false}},{"id":"custom.fillBelowTo","value":"Min"}]},{"matcher":{"id":"byName","options":"Min"},"properties":[{"id":"custom.lineStyle","value":{"dash":[10,10],"fill":"dash"}},{"id":"color","value":{"fixedColor":"blue","mode":"fixed"}},{"id":"custom.hideFrom","value":{"legend":true,"tooltip":false,"viz":false}}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":36},"id":321,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"node_cpu_scaling_frequency_hertz{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"CPU {{ cpu }}","range":true,"refId":"B","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"avg(node_cpu_scaling_frequency_max_hertz{instance=\"$node\",job=\"$job\"})","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"Max","range":true,"refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"avg(node_cpu_scaling_frequency_min_hertz{instance=\"$node\",job=\"$job\"})","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"Min","range":true,"refId":"C","step":240}],"title":"CPU Frequency Scaling","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"https://docs.kernel.org/accounting/psi.html","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":10,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"percentunit"},"overrides":[{"matcher":{"id":"byName","options":"Memory some"},"properties":[{"id":"color","value":{"fixedColor":"dark-red","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Memory full"},"properties":[{"id":"color","value":{"fixedColor":"light-red","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"I/O some"},"properties":[{"id":"color","value":{"fixedColor":"dark-blue","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"I/O full"},"properties":[{"id":"color","value":{"fixedColor":"light-blue","mode":"fixed"}}]}]},"gridPos":{"h":10,"w":12,"x":12,"y":36},"id":322,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"rate(node_pressure_cpu_waiting_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","intervalFactor":1,"legendFormat":"CPU some","range":true,"refId":"CPU some","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"rate(node_pressure_memory_waiting_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"Memory some","range":true,"refId":"Memory some","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"rate(node_pressure_memory_stalled_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"Memory full","range":true,"refId":"Memory full","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"rate(node_pressure_io_waiting_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"I/O some","range":true,"refId":"I/O some","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"rate(node_pressure_io_stalled_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"I/O full","range":true,"refId":"I/O full","step":240}],"title":"Pressure Stall Information","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"Enable with --collector.interrupts argument on node-exporter","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"short"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*Critical*./"},"properties":[{"id":"color","value":{"fixedColor":"#E24D42","mode":"fixed"}},{"id":"custom.fillOpacity","value":0}]},{"matcher":{"id":"byRegexp","options":"/.*Max*./"},"properties":[{"id":"color","value":{"fixedColor":"#EF843C","mode":"fixed"}},{"id":"custom.fillOpacity","value":0}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":46},"id":259,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_interrupts_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"{{ type }} - {{ info }}","refId":"A","step":240}],"title":"Interrupts Detail","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":12,"y":46},"id":306,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_schedstat_timeslices_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"CPU {{ cpu }}","refId":"A","step":240}],"title":"Schedule timeslices executed by each cpu","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":0,"y":56},"id":151,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_entropy_available_bits{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"Entropy available to random number generators","refId":"A","step":240}],"title":"Entropy","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"seconds","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"s"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":12,"y":56},"id":308,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(process_cpu_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"Time spent","refId":"A","step":240}],"title":"CPU time spent in user and system contexts","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"short"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*Max*./"},"properties":[{"id":"color","value":{"fixedColor":"#890F02","mode":"fixed"}},{"id":"custom.fillOpacity","value":0}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":66},"id":64,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"process_max_fds{instance=\"$node\",job=\"$job\"}","interval":"","intervalFactor":1,"legendFormat":"Maximum open file descriptors","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"process_open_fds{instance=\"$node\",job=\"$job\"}","interval":"","intervalFactor":1,"legendFormat":"Open file descriptors","refId":"B","step":240}],"title":"File Descriptors","type":"timeseries"}],"targets":[{"datasource":{"type":"prometheus","uid":"000000001"},"refId":"A"}],"title":"System Misc","type":"row"},{"collapsed":true,"datasource":{"type":"prometheus","uid":"000000001"},"gridPos":{"h":1,"w":24,"x":0,"y":26},"id":304,"panels":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"temperature","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"celsius"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*Critical*./"},"properties":[{"id":"color","value":{"fixedColor":"#E24D42","mode":"fixed"}},{"id":"custom.fillOpacity","value":0}]},{"matcher":{"id":"byRegexp","options":"/.*Max*./"},"properties":[{"id":"color","value":{"fixedColor":"#EF843C","mode":"fixed"}},{"id":"custom.fillOpacity","value":0}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":59},"id":158,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_hwmon_temp_celsius{instance=\"$node\",job=\"$job\"} * on(chip) group_left(chip_name) node_hwmon_chip_names{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"{{ chip_name }} {{ sensor }} temp","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_hwmon_temp_crit_alarm_celsius{instance=\"$node\",job=\"$job\"} * on(chip) group_left(chip_name) node_hwmon_chip_names{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":true,"interval":"","intervalFactor":1,"legendFormat":"{{ chip_name }} {{ sensor }} Critical Alarm","refId":"B","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_hwmon_temp_crit_celsius{instance=\"$node\",job=\"$job\"} * on(chip) group_left(chip_name) node_hwmon_chip_names{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"{{ chip_name }} {{ sensor }} Critical","refId":"C","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_hwmon_temp_crit_hyst_celsius{instance=\"$node\",job=\"$job\"} * on(chip) group_left(chip_name) node_hwmon_chip_names{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":true,"interval":"","intervalFactor":1,"legendFormat":"{{ chip_name }} {{ sensor }} Critical Historical","refId":"D","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_hwmon_temp_max_celsius{instance=\"$node\",job=\"$job\"} * on(chip) group_left(chip_name) node_hwmon_chip_names{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":true,"interval":"","intervalFactor":1,"legendFormat":"{{ chip_name }} {{ sensor }} Max","refId":"E","step":240}],"title":"Hardware temperature monitor","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*Max*./"},"properties":[{"id":"color","value":{"fixedColor":"#EF843C","mode":"fixed"}},{"id":"custom.fillOpacity","value":0}]}]},"gridPos":{"h":10,"w":12,"x":12,"y":59},"id":300,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_cooling_device_cur_state{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"Current {{ name }} in {{ type }}","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_cooling_device_max_state{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"Max {{ name }} in {{ type }}","refId":"B","step":240}],"title":"Throttle cooling device","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":0,"y":69},"id":302,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_power_supply_online{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"{{ power_supply }} online","refId":"A","step":240}],"title":"Power supply","type":"timeseries"}],"targets":[{"datasource":{"type":"prometheus","uid":"000000001"},"refId":"A"}],"title":"Hardware Misc","type":"row"},{"collapsed":true,"datasource":{"type":"prometheus","uid":"000000001"},"gridPos":{"h":1,"w":24,"x":0,"y":27},"id":296,"panels":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":0,"y":46},"id":297,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_systemd_socket_accepted_connections_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"{{ name }} Connections","refId":"A","step":240}],"title":"Systemd Sockets","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"normal"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[{"matcher":{"id":"byName","options":"Failed"},"properties":[{"id":"color","value":{"fixedColor":"#F2495C","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Inactive"},"properties":[{"id":"color","value":{"fixedColor":"#FF9830","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Active"},"properties":[{"id":"color","value":{"fixedColor":"#73BF69","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Deactivating"},"properties":[{"id":"color","value":{"fixedColor":"#FFCB7D","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"Activating"},"properties":[{"id":"color","value":{"fixedColor":"#C8F2C2","mode":"fixed"}}]}]},"gridPos":{"h":10,"w":12,"x":12,"y":46},"id":298,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_systemd_units{instance=\"$node\",job=\"$job\",state=\"activating\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"Activating","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_systemd_units{instance=\"$node\",job=\"$job\",state=\"active\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"Active","refId":"B","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_systemd_units{instance=\"$node\",job=\"$job\",state=\"deactivating\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"Deactivating","refId":"C","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_systemd_units{instance=\"$node\",job=\"$job\",state=\"failed\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"Failed","refId":"D","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_systemd_units{instance=\"$node\",job=\"$job\",state=\"inactive\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"Inactive","refId":"E","step":240}],"title":"Systemd Units State","type":"timeseries"}],"targets":[{"datasource":{"type":"prometheus","uid":"000000001"},"refId":"A"}],"title":"Systemd","type":"row"},{"collapsed":true,"datasource":{"type":"prometheus","uid":"000000001"},"gridPos":{"h":1,"w":24,"x":0,"y":28},"id":270,"panels":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"The number (after merges) of I/O requests completed per second for the device","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"IO read (-) / write (+)","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"iops"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*Read.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]},{"matcher":{"id":"byRegexp","options":"/.*sda_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#7EB26D","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#6ED0E0","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EF843C","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E24D42","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#584477","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda2_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#BA43A9","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda3_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F4D598","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E0752D","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#962D82","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#614D93","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#9AC48A","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#65C5DB","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F9934E","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E0F9D7","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#FCEACA","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F9E2D2","mode":"fixed"}}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":47},"id":9,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"single","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_disk_reads_completed_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","intervalFactor":4,"legendFormat":"{{device}} - Reads completed","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_disk_writes_completed_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","intervalFactor":1,"legendFormat":"{{device}} - Writes completed","refId":"B","step":240}],"title":"Disk IOps Completed","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"The number of bytes read from or written to the device per second","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"bytes read (-) / write (+)","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"Bps"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*Read.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]},{"matcher":{"id":"byRegexp","options":"/.*sda_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#7EB26D","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#6ED0E0","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EF843C","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E24D42","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#584477","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda2_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#BA43A9","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda3_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F4D598","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E0752D","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#962D82","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#614D93","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#9AC48A","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#65C5DB","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F9934E","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E0F9D7","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#FCEACA","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F9E2D2","mode":"fixed"}}]}]},"gridPos":{"h":10,"w":12,"x":12,"y":47},"id":33,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"single","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_disk_read_bytes_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","intervalFactor":4,"legendFormat":"{{device}} - Read bytes","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_disk_written_bytes_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","intervalFactor":1,"legendFormat":"{{device}} - Written bytes","refId":"B","step":240}],"title":"Disk R/W Data","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"The average time for requests issued to the device to be served. This includes the time spent by the requests in queue and the time spent servicing them.","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"time. read (-) / write (+)","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":30,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"s"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*Read.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]},{"matcher":{"id":"byRegexp","options":"/.*sda_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#7EB26D","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#6ED0E0","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EF843C","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E24D42","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#584477","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda2_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#BA43A9","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda3_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F4D598","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E0752D","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#962D82","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#614D93","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#9AC48A","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#65C5DB","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F9934E","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E0F9D7","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#FCEACA","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F9E2D2","mode":"fixed"}}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":57},"id":37,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"single","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_disk_read_time_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval]) / irate(node_disk_reads_completed_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","hide":false,"interval":"","intervalFactor":4,"legendFormat":"{{device}} - Read wait time avg","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_disk_write_time_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval]) / irate(node_disk_writes_completed_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","hide":false,"interval":"","intervalFactor":1,"legendFormat":"{{device}} - Write wait time avg","refId":"B","step":240}],"title":"Disk Average Wait Time","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"The average queue length of the requests that were issued to the device","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"aqu-sz","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"none"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*sda_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#7EB26D","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#6ED0E0","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EF843C","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E24D42","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#584477","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda2_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#BA43A9","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda3_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F4D598","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E0752D","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#962D82","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#614D93","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#9AC48A","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#65C5DB","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F9934E","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E0F9D7","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#FCEACA","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F9E2D2","mode":"fixed"}}]}]},"gridPos":{"h":10,"w":12,"x":12,"y":57},"id":35,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"single","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_disk_io_time_weighted_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","interval":"","intervalFactor":4,"legendFormat":"{{device}}","refId":"A","step":240}],"title":"Average Queue Size","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"The number of read and write requests merged per second that were queued to the device","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"I/Os","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"iops"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*Read.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]},{"matcher":{"id":"byRegexp","options":"/.*sda_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#7EB26D","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#6ED0E0","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EF843C","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E24D42","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#584477","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda2_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#BA43A9","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda3_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F4D598","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E0752D","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#962D82","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#614D93","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#9AC48A","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#65C5DB","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F9934E","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E0F9D7","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#FCEACA","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F9E2D2","mode":"fixed"}}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":67},"id":133,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"single","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_disk_reads_merged_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","intervalFactor":1,"legendFormat":"{{device}} - Read merged","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_disk_writes_merged_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","intervalFactor":1,"legendFormat":"{{device}} - Write merged","refId":"B","step":240}],"title":"Disk R/W Merged","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"Percentage of elapsed time during which I/O requests were issued to the device (bandwidth utilization for the device). Device saturation occurs when this value is close to 100% for devices serving requests serially. But for devices serving requests in parallel, such as RAID arrays and modern SSDs, this number does not reflect their performance limits.","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"%util","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":30,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"percentunit"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*sda_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#7EB26D","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#6ED0E0","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EF843C","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E24D42","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#584477","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda2_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#BA43A9","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda3_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F4D598","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E0752D","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#962D82","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#614D93","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#9AC48A","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#65C5DB","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F9934E","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E0F9D7","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#FCEACA","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F9E2D2","mode":"fixed"}}]}]},"gridPos":{"h":10,"w":12,"x":12,"y":67},"id":36,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"single","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_disk_io_time_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","interval":"","intervalFactor":4,"legendFormat":"{{device}} - IO","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_disk_discard_time_seconds_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","interval":"","intervalFactor":4,"legendFormat":"{{device}} - discard","refId":"B","step":240}],"title":"Time Spent Doing I/Os","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"The number of outstanding requests at the instant the sample was taken. Incremented as requests are given to appropriate struct request_queue and decremented as they finish.","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"Outstanding req.","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"none"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*sda_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#7EB26D","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#6ED0E0","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EF843C","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E24D42","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#584477","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda2_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#BA43A9","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda3_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F4D598","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E0752D","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#962D82","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#614D93","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#9AC48A","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#65C5DB","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F9934E","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E0F9D7","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#FCEACA","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F9E2D2","mode":"fixed"}}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":77},"id":34,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"single","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_disk_io_now{instance=\"$node\",job=\"$job\"}","interval":"","intervalFactor":4,"legendFormat":"{{device}} - IO now","refId":"A","step":240}],"title":"Instantaneous Queue Size","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"IOs","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"iops"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*sda_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#7EB26D","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EAB839","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#6ED0E0","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EF843C","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E24D42","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#584477","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda2_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#BA43A9","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sda3_.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F4D598","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#0A50A1","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#BF1B00","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdb3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E0752D","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#962D82","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#614D93","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdc3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#9AC48A","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#65C5DB","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F9934E","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#EA6460","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde1.*/"},"properties":[{"id":"color","value":{"fixedColor":"#E0F9D7","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sdd2.*/"},"properties":[{"id":"color","value":{"fixedColor":"#FCEACA","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*sde3.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F9E2D2","mode":"fixed"}}]}]},"gridPos":{"h":10,"w":12,"x":12,"y":77},"id":301,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"single","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_disk_discards_completed_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","interval":"","intervalFactor":4,"legendFormat":"{{device}} - Discards completed","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_disk_discards_merged_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","interval":"","intervalFactor":1,"legendFormat":"{{device}} - Discards merged","refId":"B","step":240}],"title":"Disk IOps Discards completed / merged","type":"timeseries"}],"targets":[{"datasource":{"type":"prometheus","uid":"000000001"},"refId":"A"}],"title":"Storage Disk","type":"row"},{"collapsed":true,"datasource":{"type":"prometheus","uid":"000000001"},"gridPos":{"h":1,"w":24,"x":0,"y":29},"id":271,"panels":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"bytes","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"bytes"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":0,"y":62},"id":43,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_filesystem_avail_bytes{instance=\"$node\",job=\"$job\",device!~'rootfs'}","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"{{mountpoint}} - Available","metric":"","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_filesystem_free_bytes{instance=\"$node\",job=\"$job\",device!~'rootfs'}","format":"time_series","hide":true,"intervalFactor":1,"legendFormat":"{{mountpoint}} - Free","refId":"B","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_filesystem_size_bytes{instance=\"$node\",job=\"$job\",device!~'rootfs'}","format":"time_series","hide":true,"intervalFactor":1,"legendFormat":"{{mountpoint}} - Size","refId":"C","step":240}],"title":"Filesystem space available","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"file nodes","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":12,"y":62},"id":41,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_filesystem_files_free{instance=\"$node\",job=\"$job\",device!~'rootfs'}","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"{{mountpoint}} - Free file nodes","refId":"A","step":240}],"title":"File Nodes Free","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"files","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":0,"y":72},"id":28,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"single","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_filefd_maximum{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":4,"legendFormat":"Max open files","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_filefd_allocated{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"Open files","refId":"B","step":240}],"title":"File Descriptor","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"file Nodes","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":12,"y":72},"id":219,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_filesystem_files{instance=\"$node\",job=\"$job\",device!~'rootfs'}","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"{{mountpoint}} - File nodes total","refId":"A","step":240}],"title":"File Nodes Size","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"normal"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"max":1,"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[{"matcher":{"id":"byName","options":"/ ReadOnly"},"properties":[{"id":"color","value":{"fixedColor":"#890F02","mode":"fixed"}}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":82},"id":44,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_filesystem_readonly{instance=\"$node\",job=\"$job\",device!~'rootfs'}","format":"time_series","intervalFactor":1,"legendFormat":"{{mountpoint}} - ReadOnly","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_filesystem_device_error{instance=\"$node\",job=\"$job\",device!~'rootfs',fstype!~'tmpfs'}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"{{mountpoint}} - Device error","refId":"B","step":240}],"title":"Filesystem in ReadOnly / Error","type":"timeseries"}],"targets":[{"datasource":{"type":"prometheus","uid":"000000001"},"refId":"A"}],"title":"Storage Filesystem","type":"row"},{"collapsed":true,"datasource":{"type":"prometheus","uid":"000000001"},"gridPos":{"h":1,"w":24,"x":0,"y":30},"id":272,"panels":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"packets out (-) / in (+)","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"pps"},"overrides":[{"matcher":{"id":"byName","options":"receive_packets_eth0"},"properties":[{"id":"color","value":{"fixedColor":"#7EB26D","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"receive_packets_lo"},"properties":[{"id":"color","value":{"fixedColor":"#E24D42","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"transmit_packets_eth0"},"properties":[{"id":"color","value":{"fixedColor":"#7EB26D","mode":"fixed"}}]},{"matcher":{"id":"byName","options":"transmit_packets_lo"},"properties":[{"id":"color","value":{"fixedColor":"#E24D42","mode":"fixed"}}]},{"matcher":{"id":"byRegexp","options":"/.*Trans.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":47},"id":60,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":300},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_network_receive_packets_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"{{device}} - Receive","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_network_transmit_packets_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"{{device}} - Transmit","refId":"B","step":240}],"title":"Network Traffic by Packets","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"packets out (-) / in (+)","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"pps"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*Trans.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":10,"w":12,"x":12,"y":47},"id":142,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":300},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_network_receive_errs_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","intervalFactor":1,"legendFormat":"{{device}} - Receive errors","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_network_transmit_errs_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","intervalFactor":1,"legendFormat":"{{device}} - Transmit errors","refId":"B","step":240}],"title":"Network Traffic Errors","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"packets out (-) / in (+)","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"pps"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*Trans.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":57},"id":143,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":300},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_network_receive_drop_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","intervalFactor":1,"legendFormat":"{{device}} - Receive drop","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_network_transmit_drop_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","intervalFactor":1,"legendFormat":"{{device}} - Transmit drop","refId":"B","step":240}],"title":"Network Traffic Drop","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"packets out (-) / in (+)","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"pps"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*Trans.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":10,"w":12,"x":12,"y":57},"id":141,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":300},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_network_receive_compressed_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","intervalFactor":1,"legendFormat":"{{device}} - Receive compressed","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_network_transmit_compressed_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","intervalFactor":1,"legendFormat":"{{device}} - Transmit compressed","refId":"B","step":240}],"title":"Network Traffic Compressed","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"packets out (-) / in (+)","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"pps"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*Trans.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":67},"id":146,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":300},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_network_receive_multicast_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","intervalFactor":1,"legendFormat":"{{device}} - Receive multicast","refId":"A","step":240}],"title":"Network Traffic Multicast","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"packets out (-) / in (+)","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"pps"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*Trans.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":10,"w":12,"x":12,"y":67},"id":144,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":300},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_network_receive_fifo_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","intervalFactor":1,"legendFormat":"{{device}} - Receive fifo","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_network_transmit_fifo_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","intervalFactor":1,"legendFormat":"{{device}} - Transmit fifo","refId":"B","step":240}],"title":"Network Traffic Fifo","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"packets out (-) / in (+)","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"pps"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*Trans.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":77},"id":145,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":300},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_network_receive_frame_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"{{device}} - Receive frame","refId":"A","step":240}],"title":"Network Traffic Frame","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":12,"y":77},"id":231,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":300},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_network_transmit_carrier_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","intervalFactor":1,"legendFormat":"{{device}} - Statistic transmit_carrier","refId":"A","step":240}],"title":"Network Traffic Carrier","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*Trans.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":87},"id":232,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":300},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_network_transmit_colls_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","intervalFactor":1,"legendFormat":"{{device}} - Transmit colls","refId":"A","step":240}],"title":"Network Traffic Colls","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"entries","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[{"matcher":{"id":"byName","options":"NF conntrack limit"},"properties":[{"id":"color","value":{"fixedColor":"#890F02","mode":"fixed"}},{"id":"custom.fillOpacity","value":0}]}]},"gridPos":{"h":10,"w":12,"x":12,"y":87},"id":61,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_nf_conntrack_entries{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"NF conntrack entries","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_nf_conntrack_entries_limit{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"NF conntrack limit","refId":"B","step":240}],"title":"NF Conntrack","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"Entries","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":0,"y":97},"id":230,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_arp_entries{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"{{ device }} - ARP entries","refId":"A","step":240}],"title":"ARP Entries","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"bytes","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"decimals":0,"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"bytes"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":12,"y":97},"id":288,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_network_mtu_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"{{ device }} - Bytes","refId":"A","step":240}],"title":"MTU","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"bytes","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"decimals":0,"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"bytes"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":0,"y":107},"id":280,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_network_speed_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"{{ device }} - Speed","refId":"A","step":240}],"title":"Speed","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"packets","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"decimals":0,"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"none"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":12,"y":107},"id":289,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_network_transmit_queue_length{instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"{{ device }} - Interface transmit queue length","refId":"A","step":240}],"title":"Queue Length","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"packetes drop (-) / process (+)","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*Dropped.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":117},"id":290,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":300},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_softnet_processed_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"CPU {{cpu}} - Processed","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_softnet_dropped_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"CPU {{cpu}} - Dropped","refId":"B","step":240}],"title":"Softnet Packets","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":12,"y":117},"id":310,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":300},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_softnet_times_squeezed_total{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"CPU {{cpu}} - Squeezed","refId":"A","step":240}],"title":"Softnet Out of Quota","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":0,"y":127},"id":309,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":300},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_network_up{operstate=\"up\",instance=\"$node\",job=\"$job\"}","format":"time_series","intervalFactor":1,"legendFormat":"{{interface}} - Operational state UP","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_network_carrier{instance=\"$node\",job=\"$job\"}","format":"time_series","instant":false,"legendFormat":"{{device}} - Physical link state","refId":"B"}],"title":"Network Operational Status","type":"timeseries"}],"targets":[{"datasource":{"type":"prometheus","uid":"000000001"},"refId":"A"}],"title":"Network Traffic","type":"row"},{"collapsed":true,"datasource":{"type":"prometheus","uid":"000000001"},"gridPos":{"h":1,"w":24,"x":0,"y":31},"id":273,"panels":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":0,"y":48},"id":63,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":300},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_sockstat_TCP_alloc{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"TCP_alloc - Allocated sockets","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_sockstat_TCP_inuse{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"TCP_inuse - Tcp sockets currently in use","refId":"B","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_sockstat_TCP_mem{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":true,"interval":"","intervalFactor":1,"legendFormat":"TCP_mem - Used memory for tcp","refId":"C","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_sockstat_TCP_orphan{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"TCP_orphan - Orphan sockets","refId":"D","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_sockstat_TCP_tw{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"TCP_tw - Sockets waiting close","refId":"E","step":240}],"title":"Sockstat TCP","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":12,"y":48},"id":124,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":300},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_sockstat_UDPLITE_inuse{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"UDPLITE_inuse - Udplite sockets currently in use","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_sockstat_UDP_inuse{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"UDP_inuse - Udp sockets currently in use","refId":"B","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_sockstat_UDP_mem{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"UDP_mem - Used memory for udp","refId":"C","step":240}],"title":"Sockstat UDP","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":0,"y":58},"id":125,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":300},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_sockstat_FRAG_inuse{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"FRAG_inuse - Frag sockets currently in use","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_sockstat_RAW_inuse{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"RAW_inuse - Raw sockets currently in use","refId":"C","step":240}],"title":"Sockstat FRAG / RAW","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"bytes","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"bytes"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":12,"y":58},"id":220,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":300},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_sockstat_TCP_mem_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"mem_bytes - TCP sockets in that state","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_sockstat_UDP_mem_bytes{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"mem_bytes - UDP sockets in that state","refId":"B","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_sockstat_FRAG_memory{instance=\"$node\",job=\"$job\"}","interval":"","intervalFactor":1,"legendFormat":"FRAG_memory - Used memory for frag","refId":"C"}],"title":"Sockstat Memory Size","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"sockets","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":0,"y":68},"id":126,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":300},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_sockstat_sockets_used{instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"Sockets_used - Sockets currently in use","refId":"A","step":240}],"title":"Sockstat Used","type":"timeseries"}],"targets":[{"datasource":{"type":"prometheus","uid":"000000001"},"refId":"A"}],"title":"Network Sockstat","type":"row"},{"collapsed":true,"datasource":{"type":"prometheus","uid":"000000001"},"gridPos":{"h":1,"w":24,"x":0,"y":32},"id":274,"panels":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"octets out (-) / in (+)","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*Out.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":49},"id":221,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":300},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_netstat_IpExt_InOctets{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"InOctets - Received octets","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_netstat_IpExt_OutOctets{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","intervalFactor":1,"legendFormat":"OutOctets - Sent octets","refId":"B","step":240}],"title":"Netstat IP In / Out Octets","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"datagrams","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":12,"y":49},"id":81,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true,"width":300},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_netstat_Ip_Forwarding{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"Forwarding - IP forwarding","refId":"A","step":240}],"title":"Netstat IP Forwarding","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"messages out (-) / in (+)","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*Out.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":59},"id":115,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_netstat_Icmp_InMsgs{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"InMsgs - Messages which the entity received. Note that this counter includes all those counted by icmpInErrors","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_netstat_Icmp_OutMsgs{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"OutMsgs - Messages which this entity attempted to send. Note that this counter includes all those counted by icmpOutErrors","refId":"B","step":240}],"title":"ICMP In / Out","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"messages out (-) / in (+)","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*Out.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":10,"w":12,"x":12,"y":59},"id":50,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_netstat_Icmp_InErrors{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"InErrors - Messages which the entity received but determined as having ICMP-specific errors (bad ICMP checksums, bad length, etc.)","refId":"A","step":240}],"title":"ICMP Errors","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"datagrams out (-) / in (+)","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*Out.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]},{"matcher":{"id":"byRegexp","options":"/.*Snd.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":69},"id":55,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_netstat_Udp_InDatagrams{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"InDatagrams - Datagrams received","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_netstat_Udp_OutDatagrams{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"OutDatagrams - Datagrams sent","refId":"B","step":240}],"title":"UDP In / Out","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"datagrams","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":12,"y":69},"id":109,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_netstat_Udp_InErrors{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"InErrors - UDP Datagrams that could not be delivered to an application","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_netstat_Udp_NoPorts{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"NoPorts - UDP Datagrams received on a port with no listener","refId":"B","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_netstat_UdpLite_InErrors{instance=\"$node\",job=\"$job\"}[$__rate_interval])","interval":"","legendFormat":"InErrors Lite - UDPLite Datagrams that could not be delivered to an application","refId":"C"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_netstat_Udp_RcvbufErrors{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"RcvbufErrors - UDP buffer errors received","refId":"D","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_netstat_Udp_SndbufErrors{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"SndbufErrors - UDP buffer errors send","refId":"E","step":240}],"title":"UDP Errors","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"datagrams out (-) / in (+)","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*Out.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]},{"matcher":{"id":"byRegexp","options":"/.*Snd.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":79},"id":299,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_netstat_Tcp_InSegs{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","instant":false,"interval":"","intervalFactor":1,"legendFormat":"InSegs - Segments received, including those received in error. This count includes segments received on currently established connections","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_netstat_Tcp_OutSegs{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"OutSegs - Segments sent, including those on current connections but excluding those containing only retransmitted octets","refId":"B","step":240}],"title":"TCP In / Out","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":12,"y":79},"id":104,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_netstat_TcpExt_ListenOverflows{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"ListenOverflows - Times the listen queue of a socket overflowed","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_netstat_TcpExt_ListenDrops{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"ListenDrops - SYNs to LISTEN sockets ignored","refId":"B","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_netstat_TcpExt_TCPSynRetrans{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"TCPSynRetrans - SYN-SYN/ACK retransmits to break down retransmissions in SYN, fast/timeout retransmits","refId":"C","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_netstat_Tcp_RetransSegs{instance=\"$node\",job=\"$job\"}[$__rate_interval])","interval":"","legendFormat":"RetransSegs - Segments retransmitted - that is, the number of TCP segments transmitted containing one or more previously transmitted octets","refId":"D"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_netstat_Tcp_InErrs{instance=\"$node\",job=\"$job\"}[$__rate_interval])","interval":"","legendFormat":"InErrs - Segments received in error (e.g., bad TCP checksums)","refId":"E"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_netstat_Tcp_OutRsts{instance=\"$node\",job=\"$job\"}[$__rate_interval])","interval":"","legendFormat":"OutRsts - Segments sent with RST flag","refId":"F"}],"title":"TCP Errors","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"connections","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*MaxConn *./"},"properties":[{"id":"color","value":{"fixedColor":"#890F02","mode":"fixed"}},{"id":"custom.fillOpacity","value":0}]}]},"gridPos":{"h":10,"w":12,"x":0,"y":89},"id":85,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_netstat_Tcp_CurrEstab{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"CurrEstab - TCP connections for which the current state is either ESTABLISHED or CLOSE- WAIT","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_netstat_Tcp_MaxConn{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"MaxConn - Limit on the total number of TCP connections the entity can support (Dynamic is \"-1\")","refId":"B","step":240}],"title":"TCP Connections","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter out (-) / in (+)","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*Sent.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":10,"w":12,"x":12,"y":89},"id":91,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_netstat_TcpExt_SyncookiesFailed{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"SyncookiesFailed - Invalid SYN cookies received","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_netstat_TcpExt_SyncookiesRecv{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"SyncookiesRecv - SYN cookies received","refId":"B","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_netstat_TcpExt_SyncookiesSent{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"SyncookiesSent - SYN cookies sent","refId":"C","step":240}],"title":"TCP SynCookie","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"connections","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":0,"y":99},"id":82,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_netstat_Tcp_ActiveOpens{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"ActiveOpens - TCP connections that have made a direct transition to the SYN-SENT state from the CLOSED state","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"irate(node_netstat_Tcp_PassiveOpens{instance=\"$node\",job=\"$job\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"PassiveOpens - TCP connections that have made a direct transition to the SYN-RCVD state from the LISTEN state","refId":"B","step":240}],"title":"TCP Direct Transition","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"Enable with --collector.tcpstat argument on node-exporter","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"connections","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"}]},"unit":"short"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":12,"y":99},"id":320,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"node_tcp_connection_states{state=\"established\",instance=\"$node\",job=\"$job\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"established - TCP sockets in established state","range":true,"refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"node_tcp_connection_states{state=\"fin_wait2\",instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"fin_wait2 - TCP sockets in fin_wait2 state","range":true,"refId":"B","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"node_tcp_connection_states{state=\"listen\",instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"listen - TCP sockets in listen state","range":true,"refId":"C","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"editorMode":"code","expr":"node_tcp_connection_states{state=\"time_wait\",instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"time_wait - TCP sockets in time_wait state","range":true,"refId":"D","step":240}],"title":"TCP Stat","type":"timeseries"}],"targets":[{"datasource":{"type":"prometheus","uid":"000000001"},"refId":"A"}],"title":"Network Netstat","type":"row"},{"collapsed":true,"datasource":{"type":"prometheus","uid":"000000001"},"gridPos":{"h":1,"w":24,"x":0,"y":33},"id":279,"panels":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"seconds","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"normal"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"s"},"overrides":[]},"gridPos":{"h":10,"w":12,"x":0,"y":66},"id":40,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_scrape_collector_duration_seconds{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"{{collector}} - Scrape duration","refId":"A","step":240}],"title":"Node Exporter Scrape Time","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${datasource}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"counter","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":20,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineStyle":{"fill":"solid"},"lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*error.*/"},"properties":[{"id":"color","value":{"fixedColor":"#F2495C","mode":"fixed"}},{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":10,"w":12,"x":12,"y":66},"id":157,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max","min"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.2.0","targets":[{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_scrape_collector_success{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"{{collector}} - Scrape success","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${datasource}"},"expr":"node_textfile_scrape_error{instance=\"$node\",job=\"$job\"}","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"{{collector}} - Scrape textfile error (1 = true)","refId":"B","step":240}],"title":"Node Exporter Scrape","type":"timeseries"}],"targets":[{"datasource":{"type":"prometheus","uid":"000000001"},"refId":"A"}],"title":"Node Exporter","type":"row"}],"refresh":"1m","revision":1,"schemaVersion":38,"style":"dark","tags":["linux"],"templating":{"list":[{"current":{"selected":false,"text":"default","value":"default"},"hide":0,"includeAll":false,"label":"Datasource","multi":false,"name":"datasource","options":[],"query":"prometheus","queryValue":"","refresh":1,"regex":"","skipUrlSync":false,"type":"datasource"},{"current":{},"datasource":{"type":"prometheus","uid":"${datasource}"},"definition":"","hide":0,"includeAll":false,"label":"Job","multi":false,"name":"job","options":[],"query":{"query":"label_values(node_uname_info, job)","refId":"Prometheus-job-Variable-Query"},"refresh":1,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":"","tagsQuery":"","type":"query","useTags":false},{"current":{},"datasource":{"type":"prometheus","uid":"${datasource}"},"definition":"label_values(node_uname_info{job=\"$job\"}, instance)","hide":0,"includeAll":false,"label":"Host","multi":false,"name":"node","options":[],"query":{"query":"label_values(node_uname_info{job=\"$job\"}, instance)","refId":"Prometheus-node-Variable-Query"},"refresh":1,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":"","tagsQuery":"","type":"query","useTags":false},{"current":{"selected":false,"text":"[a-z]+|nvme[0-9]+n[0-9]+|mmcblk[0-9]+","value":"[a-z]+|nvme[0-9]+n[0-9]+|mmcblk[0-9]+"},"hide":2,"includeAll":false,"multi":false,"name":"diskdevices","options":[{"selected":true,"text":"[a-z]+|nvme[0-9]+n[0-9]+|mmcblk[0-9]+","value":"[a-z]+|nvme[0-9]+n[0-9]+|mmcblk[0-9]+"}],"query":"[a-z]+|nvme[0-9]+n[0-9]+|mmcblk[0-9]+","skipUrlSync":false,"type":"custom"}]},"time":{"from":"now-24h","to":"now"},"timepicker":{"refresh_intervals":["5s","10s","30s","1m","5m","15m","30m","1h","2h","1d"],"time_options":["5m","15m","1h","6h","12h","24h","2d","7d","30d"]},"timezone":"browser","title":"Node Metrics","uid":"node","version":90,"weekStart":""}
···
-1
systems/koumakan/services/telemetry/grafana/dashboards/vm.json
-1
systems/koumakan/services/telemetry/grafana/dashboards/vm.json
···
1
-
{"__inputs":[],"__elements":{},"__requires":[{"type":"grafana","id":"grafana","name":"Grafana","version":"10.4.2"},{"type":"datasource","id":"prometheus","name":"Prometheus","version":"1.0.0"},{"type":"panel","id":"stat","name":"Stat","version":""},{"type":"panel","id":"table","name":"Table","version":""},{"type":"panel","id":"text","name":"Text","version":""},{"type":"panel","id":"timeseries","name":"Time series","version":""}],"annotations":{"list":[{"builtIn":1,"datasource":{"type":"datasource","uid":"grafana"},"enable":true,"hide":true,"iconColor":"rgba(0, 211, 255, 1)","name":"Annotations & Alerts","target":{"limit":100,"matchAny":false,"tags":[],"type":"dashboard"},"type":"dashboard"},{"datasource":{"type":"prometheus","uid":"$ds"},"enable":true,"expr":"sum(ALERTS{job=~\"$job\", instance=~\"$instance\", alertgroup=\"vmsingle\",alertstate=\"firing\",show_at=\"dashboard\"}) by(alertname)","iconColor":"red","name":"alerts","titleFormat":"{{alertname}}"},{"datasource":{"type":"prometheus","uid":"$ds"},"enable":true,"expr":"sum(vm_app_version{job=~\"$job\", instance=~\"$instance\"}) by(version) unless (sum(vm_app_version{job=~\"$job\", instance=~\"$instance\"} offset $__interval) by(version))","hide":true,"iconColor":"dark-blue","name":"version","textFormat":"{{version}}","titleFormat":"Version change"}]},"description":"Overview for single-node VictoriaMetrics v1.83.0 or higher","editable":true,"fiscalYearStartMonth":0,"gnetId":10229,"graphTooltip":1,"id":null,"links":[{"icon":"doc","tags":[],"targetBlank":true,"title":"Single server Wiki","type":"link","url":"https://docs.victoriametrics.com/"},{"icon":"external link","tags":[],"targetBlank":true,"title":"Found a bug?","type":"link","url":"https://github.com/VictoriaMetrics/VictoriaMetrics/issues"},{"icon":"external link","tags":[],"targetBlank":true,"title":"New releases","tooltip":"","type":"link","url":"https://github.com/VictoriaMetrics/VictoriaMetrics/releases"}],"liveNow":false,"panels":[{"collapsed":false,"datasource":{"type":"prometheus","uid":"$ds"},"gridPos":{"h":1,"w":24,"x":0,"y":0},"id":6,"panels":[],"targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"refId":"A"}],"title":"Stats","type":"row"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"","gridPos":{"h":2,"w":4,"x":0,"y":1},"id":85,"options":{"code":{"language":"plaintext","showLineNumbers":false,"showMiniMap":false},"content":"<div style=\"text-align: center;\">$version</div>","mode":"markdown"},"pluginVersion":"10.4.2","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"refId":"A"}],"title":"Version","type":"text"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"How many datapoints are in storage","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null}]},"unit":"short"},"overrides":[]},"gridPos":{"h":2,"w":5,"x":4,"y":1},"id":26,"maxDataPoints":100,"options":{"colorMode":"value","graphMode":"area","justifyMode":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"showPercentChange":false,"text":{},"textMode":"auto","wideLayout":true},"pluginVersion":"10.4.2","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","exemplar":false,"expr":"sum(vm_rows{job=~\"$job\", instance=~\"$instance\", type!~\"indexdb.*\"})","format":"time_series","instant":true,"interval":"","intervalFactor":1,"legendFormat":"","refId":"A"}],"title":"Total datapoints","type":"stat"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Shows the datapoints ingestion rate.","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null}]},"unit":"short"},"overrides":[]},"gridPos":{"h":2,"w":5,"x":9,"y":1},"id":107,"maxDataPoints":100,"options":{"colorMode":"value","graphMode":"area","justifyMode":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"showPercentChange":false,"text":{},"textMode":"auto","wideLayout":true},"pluginVersion":"10.4.2","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","exemplar":false,"expr":"sum(rate(vm_rows_inserted_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval]))","format":"time_series","instant":true,"interval":"","intervalFactor":1,"legendFormat":"","refId":"A"}],"title":"Ingestion rate","type":"stat"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Shows the rate of HTTP read requests.","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null}]},"unit":"short"},"overrides":[]},"gridPos":{"h":2,"w":5,"x":14,"y":1},"id":108,"maxDataPoints":100,"options":{"colorMode":"value","graphMode":"area","justifyMode":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"showPercentChange":false,"text":{},"textMode":"auto","wideLayout":true},"pluginVersion":"10.4.2","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","exemplar":false,"expr":"sum(rate(vm_http_requests_total{job=~\"$job\", instance=~\"$instance\", path!~\".*(/write|/metrics)\"}[$__rate_interval]))","format":"time_series","instant":true,"interval":"","intervalFactor":1,"legendFormat":"","refId":"A"}],"title":"Read requests","type":"stat"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Total number of available CPUs for VM process","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":2,"w":5,"x":19,"y":1},"id":77,"maxDataPoints":100,"options":{"colorMode":"value","graphMode":"area","justifyMode":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"showPercentChange":false,"text":{},"textMode":"auto","wideLayout":true},"pluginVersion":"10.4.2","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"exemplar":false,"expr":"sum(vm_available_cpu_cores{job=~\"$job\", instance=~\"$instance\"})","format":"time_series","instant":true,"interval":"","intervalFactor":1,"legendFormat":"","refId":"A"}],"title":"Available CPU","type":"stat"},{"datasource":{"type":"prometheus","uid":"$ds"},"fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"red","value":null},{"color":"green","value":1800}]},"unit":"s"},"overrides":[]},"gridPos":{"h":2,"w":4,"x":0,"y":3},"id":87,"options":{"colorMode":"value","graphMode":"area","justifyMode":"auto","orientation":"auto","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"showPercentChange":false,"text":{},"textMode":"auto","wideLayout":true},"pluginVersion":"10.4.2","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","exemplar":false,"expr":"min(vm_app_uptime_seconds{job=~\"$job\", instance=~\"$instance\"})","instant":true,"interval":"","legendFormat":"","refId":"A"}],"title":"Uptime","type":"stat"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Shows the number of [active time series](https://docs.victoriametrics.com/faq/#what-is-an-active-time-series) with new data points inserted during the last hour. High value may result in ingestion slowdown.","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null}]},"unit":"short"},"overrides":[]},"gridPos":{"h":2,"w":5,"x":4,"y":3},"id":38,"maxDataPoints":100,"options":{"colorMode":"value","graphMode":"area","justifyMode":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"showPercentChange":false,"text":{},"textMode":"auto","wideLayout":true},"pluginVersion":"10.4.2","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","exemplar":false,"expr":"sum(vm_cache_entries{job=~\"$job\", instance=~\"$instance\", type=\"storage/hour_metric_ids\"})","format":"time_series","instant":true,"interval":"","intervalFactor":1,"legendFormat":"","refId":"A"}],"title":"Active series","type":"stat"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Total amount of used disk space","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null}]},"unit":"bytes"},"overrides":[]},"gridPos":{"h":2,"w":5,"x":9,"y":3},"id":81,"maxDataPoints":100,"options":{"colorMode":"value","graphMode":"area","justifyMode":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"showPercentChange":false,"text":{},"textMode":"auto","wideLayout":true},"pluginVersion":"10.4.2","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","exemplar":false,"expr":"sum(vm_data_size_bytes{job=~\"$job\", instance=~\"$instance\"})","format":"time_series","instant":true,"interval":"","intervalFactor":1,"legendFormat":"","refId":"A"}],"title":"Disk space usage","type":"stat"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Average disk usage per datapoint.","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null}]},"unit":"bytes"},"overrides":[]},"gridPos":{"h":2,"w":5,"x":14,"y":3},"id":82,"maxDataPoints":100,"options":{"colorMode":"value","graphMode":"area","justifyMode":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"showPercentChange":false,"text":{},"textMode":"auto","wideLayout":true},"pluginVersion":"10.4.2","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","exemplar":false,"expr":"max(sum(vm_data_size_bytes{job=~\"$job\", instance=~\"$instance\"}) / sum(vm_rows{job=~\"$job\", instance=~\"$instance\"}))","format":"time_series","instant":true,"interval":"","intervalFactor":1,"legendFormat":"","refId":"A"}],"title":"Bytes per point","type":"stat"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Total size of available memory for VM process","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null}]},"unit":"bytes"},"overrides":[]},"gridPos":{"h":2,"w":5,"x":19,"y":3},"id":78,"maxDataPoints":100,"options":{"colorMode":"value","graphMode":"area","justifyMode":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"showPercentChange":false,"text":{},"textMode":"auto","wideLayout":true},"pluginVersion":"10.4.2","targets":[{"datasource":{"uid":"$ds"},"exemplar":false,"expr":"sum(vm_available_memory_bytes{job=~\"$job\", instance=~\"$instance\"})","format":"time_series","instant":true,"interval":"","intervalFactor":1,"legendFormat":"","refId":"A"}],"title":"Available memory","type":"stat"},{"collapsed":false,"datasource":{"type":"prometheus","uid":"$ds"},"gridPos":{"h":1,"w":24,"x":0,"y":5},"id":24,"panels":[],"targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"refId":"A"}],"title":"Overview","type":"row"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"How many datapoints are inserted into storage per second","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":10,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":8,"w":12,"x":0,"y":6},"id":106,"options":{"legend":{"calcs":["mean","lastNotNull"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"uid":"$ds"},"editorMode":"code","expr":"sum(rate(vm_rows_inserted_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])) by (type, instance) > 0","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"{{instance}} - {{type}}","range":true,"refId":"A"}],"title":"Datapoints ingestion rate","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"* `*` - unsupported query path\n* `/write` - insert into VM\n* `/metrics` - query VM system metrics\n* `/query` - query instant values\n* `/query_range` - query over a range of time\n* `/series` - match a certain label set\n* `/label/{}/values` - query a list of label values (variables mostly)","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":8,"w":12,"x":12,"y":6},"id":12,"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(rate(vm_http_requests_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])) by (path, instance) > 0","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"{{instance}} - {{path}}","range":true,"refId":"A"}],"title":"Requests rate","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Shows the number of [active time series](https://docs.victoriametrics.com/faq/#what-is-an-active-time-series) with new data points inserted during the last hour. High value may result in ingestion slowdown. \n\nSee following link for details:","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":10,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":8,"w":12,"x":0,"y":14},"id":51,"links":[{"targetBlank":true,"title":"troubleshooting","url":"https://docs.victoriametrics.com/troubleshooting"}],"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"vm_cache_entries{job=~\"$job\", instance=~\"$instance\", type=\"storage/hour_metric_ids\"}","format":"time_series","intervalFactor":1,"legendFormat":"{{instance}}","range":true,"refId":"A"}],"title":"Active time series","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"The less time it takes is better.\n* `*` - unsupported query path\n* `/write` - insert into VM\n* `/metrics` - query VM system metrics\n* `/query` - query instant values\n* `/query_range` - query over a range of time\n* `/series` - match a certain label set\n* `/label/{}/values` - query a list of label values (variables mostly)","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":10,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"s"},"overrides":[]},"gridPos":{"h":8,"w":12,"x":12,"y":14},"id":22,"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"max(vm_request_duration_seconds{job=~\"$job\", instance=~\"$instance\", quantile=\"0.99\"}) by (instance, path) > 0","format":"time_series","intervalFactor":1,"legendFormat":"{{instance}} - {{path}}","range":true,"refId":"A"}],"title":"Query duration 0.99 quantile","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"* `*` - unsupported query path\n* `/write` - insert into VM\n* `/metrics` - query VM system metrics\n* `/query` - query instant values\n* `/query_range` - query over a range of time\n* `/series` - match a certain label set\n* `/label/{}/values` - query a list of label values (variables mostly)","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":10,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":8,"w":12,"x":0,"y":22},"id":35,"options":{"legend":{"calcs":["mean","lastNotNull"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","exemplar":false,"expr":"sum(rate(vm_http_request_errors_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])) by (instance, path) > 0","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"{{instance}} - {{path}}","range":true,"refId":"A"}],"title":"Requests error rate","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Shows the rate of logging the messages by their level. Unexpected spike in rate is a good reason to check logs.","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"bars","fillOpacity":100,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"auto","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]}},"overrides":[]},"gridPos":{"h":8,"w":12,"x":12,"y":22},"id":110,"options":{"legend":{"calcs":["lastNotNull","mean","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"single","sort":"none"}},"targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(rate(vm_log_messages_total{job=~\"$job\", instance=~\"$instance\", level!=\"info\"}[$__rate_interval])) by (instance, level, location) > 0","interval":"5m","legendFormat":"{{instance}} - {{level}}: {{location}}","range":true,"refId":"A"}],"title":"Logging rate","type":"timeseries"},{"collapsed":true,"datasource":{"type":"prometheus","uid":"$ds"},"gridPos":{"h":1,"w":24,"x":0,"y":30},"id":46,"panels":[{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Percentage of used RSS memory (resident).\nThe RSS memory shows the amount of memory recently accessed by the application. It includes anonymous memory and data from recently accessed files (aka page cache).\nThe application's performance will significantly degrade when memory usage is close to 100%.\n\nClick on the line and choose Drilldown to show memory usage per instance","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"percentunit","unitScale":true},"overrides":[]},"gridPos":{"h":8,"w":12,"x":0,"y":11},"id":112,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","exemplar":false,"expr":"max(\n max_over_time(process_resident_memory_bytes{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])\n /\n vm_available_memory_bytes{job=~\"$job\", instance=~\"$instance\"}\n) by(instance)","interval":"","legendFormat":"__auto","range":true,"refId":"A"}],"title":"RSS memory % usage","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"bytes","unitScale":true},"overrides":[]},"gridPos":{"h":8,"w":12,"x":12,"y":11},"id":44,"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(go_memstats_sys_bytes{job=~\"$job\", instance=~\"$instance\"}) by (instance) + sum(vm_cache_size_bytes{job=~\"$job\", instance=~\"$instance\"}) by (instance)","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"{{instance}} - requested from system","range":true,"refId":"A"},{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(go_memstats_heap_inuse_bytes{job=~\"$job\", instance=~\"$instance\"}) by (instance) + sum(vm_cache_size_bytes{job=~\"$job\", instance=~\"$instance\"}) by (instance)","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"{{instance}} - heap inuse","range":true,"refId":"B"},{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(go_memstats_stack_inuse_bytes{job=~\"$job\", instance=~\"$instance\"}) by (instance)","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"{{instance}} - stack inuse","range":true,"refId":"C"},{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(process_resident_memory_bytes{job=~\"$job\", instance=~\"$instance\"}) by (instance)","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"{{instance}} - resident","range":true,"refId":"D"},{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","exemplar":false,"expr":"sum(process_resident_memory_anon_bytes{job=~\"$job\", instance=~\"$instance\"}) by (instance)","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"{{instance}} - resident anonymous","range":true,"refId":"E"}],"title":"Memory usage","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Share for memory allocated by the process itself. When memory usage reaches 100% it will be likely OOM-killed.\nSafe memory usage % considered to be below 80%\n\nClick on the line and choose Drilldown to show memory usage per instance","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"percentunit","unitScale":true},"overrides":[]},"gridPos":{"h":8,"w":12,"x":0,"y":19},"id":123,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","exemplar":false,"expr":"max(\n max_over_time(process_resident_memory_anon_bytes{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])\n /\n vm_available_memory_bytes{job=~\"$job\", instance=~\"$instance\"}\n) by(instance)","interval":"","legendFormat":"__auto","range":true,"refId":"A"}],"title":"RSS anonymous memory % usage","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"percentunit","unitScale":true},"overrides":[]},"gridPos":{"h":8,"w":12,"x":12,"y":19},"id":114,"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","exemplar":false,"expr":"max(\n rate(process_cpu_seconds_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])\n /\n vm_available_cpu_cores{job=~\"$job\", instance=~\"$instance\"}\n) by(instance)","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"__auto","range":true,"refId":"A"}],"title":"CPU % usage","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Shows the percentage of open file descriptors compared to the limit set in the OS.\nReaching the limit of open files can cause various issues and must be prevented.\n\nSee how to change limits here https://medium.com/@muhammadtriwibowo/set-permanently-ulimit-n-open-files-in-ubuntu-4d61064429a","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"decimals":2,"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"percentunit"},"overrides":[{"matcher":{"id":"byName","options":"max"},"properties":[{"id":"color","value":{"fixedColor":"#C4162A","mode":"fixed"}}]}]},"gridPos":{"h":8,"w":12,"x":0,"y":27},"id":75,"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"max_over_time(process_open_fds{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])\n/\nprocess_max_fds{job=~\"$job\", instance=~\"$instance\"}","format":"time_series","hide":false,"interval":"","intervalFactor":2,"legendFormat":"{{instance}}","range":true,"refId":"A"}],"title":"Open FDs","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"CPU cores used by instance","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[{"matcher":{"id":"byName","options":"Limit"},"properties":[{"id":"color","value":{"fixedColor":"#F2495C","mode":"fixed"}}]}]},"gridPos":{"h":8,"w":12,"x":12,"y":27},"id":57,"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"rate(process_cpu_seconds_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"{{instance}}","range":true,"refId":"A"},{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","exemplar":false,"expr":"min(process_cpu_cores_available{job=~\"$job\", instance=~\"$instance\"})","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"Limit","range":true,"refId":"B"}],"title":"CPU","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":10,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"decimals":0,"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":8,"w":12,"x":0,"y":35},"id":47,"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(go_goroutines{job=~\"$job\", instance=~\"$instance\"}) by(instance)","format":"time_series","intervalFactor":2,"legendFormat":"{{instance}}","range":true,"refId":"A"}],"title":"Goroutines","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Shows the number of bytes read/write from the storage layer.","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":10,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"bytes"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*read/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":8,"w":12,"x":12,"y":35},"id":76,"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(rate(process_io_storage_read_bytes_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])) by (instance)","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"{{instance}} - read","range":true,"refId":"A"},{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(rate(process_io_storage_written_bytes_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])) by (instance)","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"{{instance}} - write","range":true,"refId":"B"}],"title":"Disk writes/reads","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":10,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"decimals":0,"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":8,"w":12,"x":0,"y":43},"id":48,"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(process_num_threads{job=~\"$job\", instance=~\"$instance\"}) by(instance)","format":"time_series","intervalFactor":2,"legendFormat":"{{instance}}","range":true,"refId":"A"}],"title":"Threads","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Shows the number of read/write syscalls such as read, pread, write, pwrite.","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":10,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[{"matcher":{"id":"byRegexp","options":"/.*read.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":8,"w":12,"x":12,"y":43},"id":124,"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(rate(process_io_read_syscalls_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])) by (instance)","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"{{instance}} - read calls","range":true,"refId":"A"},{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(rate(process_io_write_syscalls_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])) by (instance)","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"{{instance}} - write calls","range":true,"refId":"B"}],"title":"Disk write/read calls","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":10,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":8,"w":12,"x":0,"y":51},"id":49,"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(rate(vm_tcplistener_accepts_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])) by(instance)","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"{{instance}}","range":true,"refId":"A"}],"title":"TCP connections rate","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":10,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":8,"w":12,"x":12,"y":51},"id":37,"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(vm_tcplistener_conns{job=~\"$job\", instance=~\"$instance\"}) by(instance)","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"{{instance}}","range":true,"refId":"A"}],"title":"TCP connections","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Shows network usage by VM:\n* Writes show traffic sent to clients\n* Reads show traffic received from clients","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":10,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"decbits"},"overrides":[{"matcher":{"id":"byRegexp","options":"/read.*/"},"properties":[{"id":"custom.transform","value":"negative-Y"}]}]},"gridPos":{"h":8,"w":12,"x":0,"y":59},"id":127,"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(rate(vm_tcplistener_read_bytes_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])) by(name) * 8 > 0","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"read via {{name}}","range":true,"refId":"A"},{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(rate(vm_tcplistener_written_bytes_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])) by(name) * 8 > 0","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"write via {{name}}","range":true,"refId":"B"}],"title":"Network usage","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Shows the percent of CPU spent on garbage collection.\n\nIf % is high, then CPU usage can be decreased by changing GOGC to higher values. Increasing GOGC value will increase memory usage, and decrease CPU usage.\n\nTry searching for keyword `GOGC` at https://docs.victoriametrics.com/troubleshooting/ ","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"decimals":0,"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"percentunit"},"overrides":[]},"gridPos":{"h":8,"w":12,"x":12,"y":59},"id":125,"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.2.6","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"max(\n rate(go_gc_cpu_seconds_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval]) \n / rate(process_cpu_seconds_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])\n ) by(instance)","format":"time_series","interval":"","intervalFactor":2,"legendFormat":"__auto","range":true,"refId":"A"}],"title":"CPU spent on GC","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Shows the time goroutines have spent in runnable state before actually running. The lower is better.\n\nHigh values or values exceeding the threshold is usually a sign of insufficient CPU resources or CPU throttling. \n\nVerify that service has enough CPU resources. Otherwise, the service could work unreliably with delays in processing.","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"line"}},"decimals":0,"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":0.1}]},"unit":"s"},"overrides":[]},"gridPos":{"h":8,"w":12,"x":0,"y":67},"id":128,"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.2.6","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"histogram_quantile(0.99, sum(rate(go_sched_latencies_seconds_bucket{job=~\"$job\"}[$__rate_interval])) by (job, instance, le))","format":"time_series","interval":"","intervalFactor":2,"legendFormat":"__auto","range":true,"refId":"A"}],"title":"Go scheduling latency","type":"timeseries"}],"targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"refId":"A"}],"title":"Resource usage","type":"row"},{"collapsed":true,"datasource":{"type":"prometheus","uid":"$ds"},"gridPos":{"h":1,"w":24,"x":0,"y":31},"id":71,"panels":[{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Shows the rate and total number of new series created over last 24h.\n\nHigh [churn rate](https://docs.victoriametrics.com/faq/#what-is-high-churn-rate) tightly connected with database performance and may result in unexpected OOM's or slow queries. It is recommended to always keep an eye on this metric to avoid unexpected [cardinality](https://docs.victoriametrics.com/keyconcepts/#cardinality) \"explosions\".\n\nThe higher churn rate is, the more resources required to handle it. Consider to keep the churn rate as low as possible.\n\nGood references to read:\n* https://www.robustperception.io/cardinality-is-key\n* https://www.robustperception.io/using-tsdb-analyze-to-investigate-churn-and-cardinality","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":8,"w":12,"x":0,"y":32},"id":66,"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(rate(vm_new_timeseries_created_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])) by (instance)","interval":"","legendFormat":"{{instance}} - churn rate","range":true,"refId":"A"},{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(increase(vm_new_timeseries_created_total{job=~\"$job\", instance=~\"$instance\"}[24h])) by (instance)","interval":"","legendFormat":"{{instance}} - new series over 24h","range":true,"refId":"B"}],"title":"Churn rate","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"The percentage of slow inserts comparing to total insertion rate during the last 5 minutes. \n\nThe less value is better. If percentage remains high (>10%) during extended periods of time, then it is likely more RAM is needed for optimal handling of the current number of [active time series](https://docs.victoriametrics.com/faq/#what-is-an-active-time-series). \n\nIn general, VictoriaMetrics requires ~1KB or RAM per active time series, so it should be easy calculating the required amounts of RAM for the current workload according to capacity planning docs. But the resulting number may be far from the real number because the required amounts of memory depends on many other factors such as the number of labels per time series and the length of label values. See also [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/3976#issuecomment-1476883183) for details.","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":10,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"line+area"}},"decimals":2,"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"transparent","value":null},{"color":"red","value":0.1}]},"unit":"percentunit"},"overrides":[]},"gridPos":{"h":8,"w":12,"x":12,"y":32},"id":68,"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"max(\n rate(vm_slow_row_inserts_total{job=~\"$job\"}[$__rate_interval]) \n / rate(vm_rows_added_to_storage_total{job=~\"$job\"}[$__rate_interval])\n) by (instance)","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"{{instance}}","range":true,"refId":"A"}],"title":"Slow inserts %","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Merge assist happens when storage can't keep up with merging parts. This is usually a sign of overload for storage.","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"bars","fillOpacity":100,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":8,"w":12,"x":0,"y":40},"id":116,"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","exemplar":false,"expr":"sum(increase(vm_assisted_merges_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])) by(instance, type) > 0","format":"time_series","interval":"5m","intervalFactor":1,"legendFormat":"{{instance}} - {{type}}","range":true,"refId":"A"}],"title":"Assisted merges","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Slow queries rate according to `search.logSlowQueryDuration` flag, which is `5s` by default.","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":10,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":8,"w":12,"x":12,"y":40},"id":60,"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(rate(vm_slow_queries_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])) by (instance)","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"{{instance}}","range":true,"refId":"A"}],"title":"Slow queries rate","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Shows the percentage of used cache size from the allowed size by type. \nValues close to 100% show the maximum potential utilization.\nValues close to 0% show that cache is underutilized.","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"percentunit"},"overrides":[]},"gridPos":{"h":9,"w":12,"x":0,"y":48},"id":90,"options":{"legend":{"calcs":["lastNotNull","mean","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","exemplar":false,"expr":"vm_cache_size_bytes{job=~\"$job\", instance=~\"$instance\"} / vm_cache_size_max_bytes{job=~\"$job\", instance=~\"$instance\"}","interval":"","legendFormat":"{{instance}} - {{type}}","range":true,"refId":"A"}],"title":"Cache usage % by type","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Shows cache miss ratio. Lower is better.","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"max":1,"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"percentunit"},"overrides":[]},"gridPos":{"h":9,"w":12,"x":12,"y":48},"id":118,"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","exemplar":false,"expr":"(\n rate(vm_cache_misses_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])\n /\n rate(vm_cache_requests_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])\n) > 0","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"{{instance}} - {{type}}","range":true,"refId":"A"}],"title":"Cache miss ratio","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Flags explicitly set to non-default values","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"custom":{"align":"auto","cellOptions":{"type":"auto"},"inspect":false},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]}},"overrides":[{"matcher":{"id":"byName","options":"Time"},"properties":[{"id":"custom.hidden","value":true}]},{"matcher":{"id":"byName","options":"Value"},"properties":[{"id":"custom.hidden","value":true}]},{"matcher":{"id":"byName","options":"job"},"properties":[{"id":"custom.hidden","value":true}]}]},"gridPos":{"h":8,"w":12,"x":0,"y":57},"id":126,"options":{"cellHeight":"sm","footer":{"countRows":false,"fields":"","reducer":["sum"],"show":false},"showHeader":true},"pluginVersion":"10.4.2","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","exemplar":false,"expr":"sum(flag{is_set=\"true\", job=~\"$job\", instance=~\"$instance\"}) by(job, instance, name, value)","format":"table","instant":true,"legendFormat":"__auto","range":false,"refId":"A"}],"title":"Non-default flags","type":"table"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"VictoriaMetrics limits the number of labels per each metric with `-maxLabelsPerTimeseries` command-line flag.\n\nThis prevents from ingesting metrics with too many labels. The value of `maxLabelsPerTimeseries` must be adjusted for your workload.\n\nWhen limit is exceeded (graph is > 0) - extra labels are dropped, which could result in unexpected identical time series. See more details about dropped labels in logs.","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":10,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"decimals":2,"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"short"},"overrides":[]},"gridPos":{"h":8,"w":12,"x":12,"y":57},"id":74,"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"list","placement":"bottom","showLegend":false},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"exemplar":false,"expr":"sum(increase(vm_metrics_with_dropped_labels_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])) by (instance)","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"{{instance}} - limit exceeded","range":true,"refId":"A"}],"title":"Labels limit exceeded","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Shows the number of restarts per job. The chart can be useful to identify periodic process restarts and correlate them with potential issues or anomalies. Normally, processes shouldn't restart unless restart was inited by user. The reason of restarts should be figured out by checking the logs of each specific service. ","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","axisSoftMin":0,"barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"stepAfter","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"decimals":0,"links":[],"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]},"unit":"none"},"overrides":[]},"gridPos":{"h":8,"w":12,"x":0,"y":65},"id":129,"options":{"legend":{"calcs":["lastNotNull"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(changes(vm_app_start_timestamp{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval]) > 0) by(job)","format":"time_series","instant":false,"legendFormat":"{{job}}","refId":"A"}],"title":"Restarts ($job)","type":"timeseries"}],"targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"refId":"A"}],"title":"Troubleshooting","type":"row"},{"collapsed":true,"datasource":{"type":"prometheus","uid":"$ds"},"gridPos":{"h":1,"w":24,"x":0,"y":32},"id":14,"panels":[{"datasource":{"type":"prometheus","uid":"$ds"},"description":"How many datapoints are inserted into storage per second","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":10,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short","unitScale":true},"overrides":[]},"gridPos":{"h":8,"w":12,"x":0,"y":13},"id":10,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(rate(vm_rows_inserted_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])) by (instance, type) > 0","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"{{instance}} - {{type}}","range":true,"refId":"A"}],"title":"Datapoints ingestion rate","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Shows the approx time needed to reach 100% of disk capacity based on the following params:\n* free disk space;\n* row ingestion rate;\n* compression.\n\nNote: this panel doesn't account for deduplication process.","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"s","unitScale":true},"overrides":[]},"gridPos":{"h":8,"w":12,"x":12,"y":13},"id":73,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","min"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"(vm_free_disk_space_bytes{job=~\"$job\", instance=~\"$instance\"}-vm_free_disk_space_limit_bytes{job=~\"$job\", instance=~\"$instance\"}) \n/ ignoring(path) (\n rate(vm_rows_added_to_storage_total{job=~\"$job\", instance=~\"$instance\"}[1d]) \n * scalar(\n sum(vm_data_size_bytes{job=~\"$job\", instance=~\"$instance\", type!~\"indexdb.*\"}) \n / sum(vm_rows{job=~\"$job\", instance=~\"$instance\", type!~\"indexdb.*\"})\n )\n )","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"{{instance}}","range":true,"refId":"A"}],"title":"Storage full ETA","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Shows amount of on-disk space occupied by data points and the remaining disk space at `-storageDataPath`","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"bytes","unitScale":true},"overrides":[]},"gridPos":{"h":8,"w":12,"x":0,"y":21},"id":53,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(vm_data_size_bytes{job=~\"$job\", instance=~\"$instance\", type!~\"indexdb.*\"}) by (instance)","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"{{instance}} - Used (datapoints)","range":true,"refId":"A"},{"datasource":{"type":"prometheus","uid":"$ds"},"expr":"vm_free_disk_space_bytes{job=~\"$job\", instance=~\"$instance\"} - vm_free_disk_space_limit_bytes{job=~\"$job\", instance=~\"$instance\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"{{instance}} - Free","range":true,"refId":"B"},{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(vm_data_size_bytes{job=~\"$job\", instance=~\"$instance\", type=~\"indexdb.*\"}) by (instance)","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"{{instance}} - Used (index)","range":true,"refId":"C"}],"title":"Disk space usage - datapoints","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"How many datapoints are in RAM queue waiting to be written into storage. The number of pending data points should be in the range from 0 to `3*<ingestion_rate>`, since VictoriaMetrics pushes pending data to persistent storage every two seconds.","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":10,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short","unitScale":true},"overrides":[{"matcher":{"id":"byName","options":"pending index entries"},"properties":[{"id":"unit","value":"none"},{"id":"decimals","value":3}]}]},"gridPos":{"h":8,"w":12,"x":12,"y":21},"id":34,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"expr":"vm_pending_rows{job=~\"$job\", instance=~\"$instance\", type=\"storage\"}","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"{{instance}} - pending datapoints","range":true,"refId":"A"},{"datasource":{"type":"prometheus","uid":"$ds"},"expr":"vm_pending_rows{job=~\"$job\", instance=~\"$instance\", type=\"indexdb\"}","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"{{instance}} - pending index entries","range":true,"refId":"B"}],"title":"Pending datapoints","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Shows how many datapoints are in the storage and what is average disk usage per datapoint.","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short","unitScale":true},"overrides":[{"matcher":{"id":"byName","options":"bytes-per-datapoint"},"properties":[{"id":"unit","value":"bytes"},{"id":"decimals","value":2}]}]},"gridPos":{"h":8,"w":12,"x":0,"y":29},"id":30,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(vm_rows{job=~\"$job\", instance=~\"$instance\", type!~\"indexdb.*\"}) by (instance)","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"{{instance}} - total datapoints","range":true,"refId":"A"},{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(vm_data_size_bytes{job=~\"$job\", instance=~\"$instance\"}) by (instance)\n/ sum(vm_rows{job=~\"$job\", instance=~\"$instance\", type!~\"indexdb.*\"}) by (instance)","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"{{instance}} - bytes-per-datapoint","range":true,"refId":"B"}],"title":"Datapoints","type":"timeseries"},{"datasource":{"uid":"$ds"},"description":"Data parts of LSM tree.\nHigh number of parts could be an evidence of slow merge performance - check the resource utilization.\n* `indexdb` - inverted index\n* `storage/small` - recently added parts of data ingested into storage(hot data)\n* `storage/big` - small parts gradually merged into big parts (cold data)","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short","unitScale":true},"overrides":[]},"gridPos":{"h":8,"w":12,"x":12,"y":29},"id":36,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(vm_parts{job=~\"$job\", instance=~\"$instance\"}) by (instance, type)","format":"time_series","intervalFactor":1,"legendFormat":"{{instance}} - {{type}}","range":true,"refId":"A"}],"title":"LSM parts","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Shows how many rows were ignored on insertion due to corrupted or out of retention timestamps.","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":10,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short","unitScale":true},"overrides":[]},"gridPos":{"h":8,"w":12,"x":0,"y":37},"id":58,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","exemplar":false,"expr":"sum(increase(vm_rows_ignored_total{job=~\"$job\", instance=~\"$instance\"}[1h])) by (instance, reason)","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"{{instance}} - {{reason}}","range":true,"refId":"A"}],"title":"Rows ignored for last 1h","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"The number of on-going merges in storage nodes. It is expected to have high numbers for `storage/small` metric.","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"decimals":0,"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short","unitScale":true},"overrides":[]},"gridPos":{"h":8,"w":12,"x":12,"y":37},"id":62,"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(vm_active_merges{job=~\"$job\", instance=~\"$instance\"}) by(instance, type)","legendFormat":"{{instance}} - {{type}}","range":true,"refId":"A"}],"title":"Active merges","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"Shows how many ongoing insertions (not API /write calls) on disk are taking place, where:\n* `max` - equal to number of CPUs;\n* `current` - current number of goroutines busy with inserting rows into underlying storage.\n\nEvery successful API /write call results into flush on disk. However, these two actions are separated and controlled via different concurrency limiters. The `max` on this panel can't be changed and always equal to number of CPUs. \n\nWhen `current` hits `max` constantly, it means storage is overloaded and requires more CPU.\n\n","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"decimals":0,"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short","unitScale":true},"overrides":[{"matcher":{"id":"byName","options":"max"},"properties":[{"id":"color","value":{"fixedColor":"#C4162A","mode":"fixed"}}]}]},"gridPos":{"h":8,"w":12,"x":0,"y":45},"id":59,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull"],"displayMode":"table","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"max_over_time(vm_concurrent_insert_capacity{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"{{instance}} - max","range":true,"refId":"A"},{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(vm_concurrent_insert_current{job=~\"$job\", instance=~\"$instance\"}) by (instance)","format":"time_series","intervalFactor":1,"legendFormat":"{{instance}} - current","range":true,"refId":"B"}],"title":"Concurrent flushes on disk","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"The number of rows merged per second by storage nodes.","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"decimals":0,"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short","unitScale":true},"overrides":[]},"gridPos":{"h":8,"w":12,"x":12,"y":45},"id":64,"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"sum(rate(vm_rows_merged_total{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])) by(instance, type)","legendFormat":"{{instance}} - {{type}}","range":true,"refId":"A"}],"title":"Merge speed","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"99th percentile of number of series read per query.","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"decimals":2,"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short","unitScale":true},"overrides":[]},"gridPos":{"h":8,"w":12,"x":0,"y":53},"id":99,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"histogram_quantile(0.99, sum(rate(vm_series_read_per_query_bucket{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])) by (instance, vmrange))","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"{{instance}}","range":true,"refId":"A"}],"title":"Series read per query","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"99th percentile of number of [data samples](https://docs.victoriametrics.com/keyconcepts/#raw-samples) read per queried series.","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"decimals":2,"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short","unitScale":true},"overrides":[]},"gridPos":{"h":8,"w":12,"x":12,"y":53},"id":103,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"histogram_quantile(0.99, sum(rate(vm_rows_read_per_series_bucket{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])) by (instance, vmrange))","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"{{instance}}","range":true,"refId":"A"}],"title":"Datapoints read per series","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"99th percentile of number of [data samples](https://docs.victoriametrics.com/keyconcepts/#raw-samples) read per query.","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"decimals":2,"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short","unitScale":true},"overrides":[]},"gridPos":{"h":8,"w":12,"x":0,"y":61},"id":122,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"histogram_quantile(0.99, sum(rate(vm_rows_read_per_query_bucket{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])) by (instance, vmrange))","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"{{instance}}","range":true,"refId":"A"}],"title":"Datapoints read per query","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"$ds"},"description":"99th percentile of number of [data samples](https://docs.victoriametrics.com/keyconcepts/#raw-samples) scanner per query.\n\nThis number can exceed number of RowsReadPerQuery if `step` query arg passed to [/api/v1/query_range](https://prometheus.io/docs/prometheus/latest/querying/api/#range-queries) is smaller than the lookbehind window set in square brackets of [rollup function](https://docs.victoriametrics.com/metricsql/#rollup-functions). For example, if `increase(some_metric[1h])` is executed with the `step=5m`, then the same [data samples](https://docs.victoriametrics.com/keyconcepts/#raw-samples) on a hour time range are scanned `1h/5m=12` times. See [this article](https://valyala.medium.com/how-to-optimize-promql-and-metricsql-queries-85a1b75bf986) for details.","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisBorderShow":false,"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"insertNulls":false,"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":false,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"off"}},"decimals":2,"links":[],"mappings":[],"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]},"unit":"short","unitScale":true},"overrides":[]},"gridPos":{"h":8,"w":12,"x":12,"y":61},"id":105,"links":[],"options":{"legend":{"calcs":["mean","lastNotNull","max"],"displayMode":"table","placement":"bottom","showLegend":true,"sortBy":"Last *","sortDesc":true},"tooltip":{"mode":"multi","sort":"desc"}},"pluginVersion":"9.1.0","targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"editorMode":"code","expr":"histogram_quantile(0.99, sum(rate(vm_rows_scanned_per_query_bucket{job=~\"$job\", instance=~\"$instance\"}[$__rate_interval])) by (instance, vmrange))","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"{{instance}}","range":true,"refId":"A"}],"title":"Datapoints scanned per query","type":"timeseries"}],"targets":[{"datasource":{"type":"prometheus","uid":"$ds"},"refId":"A"}],"title":"Storage","type":"row"}],"refresh":"","schemaVersion":39,"tags":["victoriametrics","vmsingle"],"templating":{"list":[{"current":{"selected":false,"text":"VictoriaMetrics","value":"P4169E866C3094E38"},"hide":0,"includeAll":false,"multi":false,"name":"ds","options":[],"query":"prometheus","queryValue":"","refresh":1,"regex":"","skipUrlSync":false,"type":"datasource"},{"current":{},"datasource":{"type":"prometheus","uid":"$ds"},"definition":"label_values(vm_app_version{version=~\"victoria-metrics-.*\"}, job)","hide":0,"includeAll":false,"multi":false,"name":"job","options":[],"query":{"query":"label_values(vm_app_version{version=~\"victoria-metrics-.*\"}, job)","refId":"VictoriaMetrics-job-Variable-Query"},"refresh":1,"regex":"","skipUrlSync":false,"sort":0,"tagValuesQuery":"","tagsQuery":"","type":"query","useTags":false},{"current":{},"datasource":{"type":"prometheus","uid":"$ds"},"definition":"label_values(vm_app_version{job=~\"$job\", instance=~\"$instance\"}, version)","hide":2,"includeAll":false,"multi":false,"name":"version","options":[],"query":{"query":"label_values(vm_app_version{job=~\"$job\", instance=~\"$instance\"}, version)","refId":"VictoriaMetrics-version-Variable-Query"},"refresh":1,"regex":"/.*-(?:tags|heads)-(.*)-(?:0|dirty)-.*/","skipUrlSync":false,"sort":2,"tagValuesQuery":"","tagsQuery":"","type":"query","useTags":false},{"allValue":".*","current":{},"datasource":{"type":"prometheus","uid":"$ds"},"definition":"label_values(vm_app_version{job=~\"$job\"}, instance)","hide":0,"includeAll":true,"multi":true,"name":"instance","options":[],"query":{"query":"label_values(vm_app_version{job=~\"$job\"}, instance)","refId":"VictoriaMetrics-instance-Variable-Query"},"refresh":1,"regex":"","skipUrlSync":false,"sort":0,"tagValuesQuery":"","tagsQuery":"","type":"query","useTags":false},{"datasource":{"type":"prometheus","uid":"$ds"},"filters":[],"hide":0,"name":"adhoc","skipUrlSync":false,"type":"adhoc"}]},"time":{"from":"now-3h","to":"now"},"timepicker":{"refresh_intervals":["10s","30s","1m","5m","15m","30m","1h","2h","1d"],"time_options":["5m","15m","1h","6h","12h","24h","2d","7d","30d"]},"timezone":"","title":"VictoriaMetrics - single-node","uid":"vm","version":1,"weekStart":""}
···
-106
systems/koumakan/services/telemetry/grafana/default.nix
-106
systems/koumakan/services/telemetry/grafana/default.nix
···
1
-
{
2
-
_utils,
3
-
config,
4
-
...
5
-
}:
6
-
let
7
-
secrets = _utils.setupSecrets config {
8
-
namespace = "grafana";
9
-
secrets = [
10
-
"oauth2/github/cid"
11
-
"oauth2/github/cse"
12
-
"oauth2/gateway/cid"
13
-
"oauth2/gateway/cse"
14
-
];
15
-
config = {
16
-
owner = config.users.users.grafana.name;
17
-
};
18
-
};
19
-
fromSecret = path: "$__file{${secrets.get path}}";
20
-
in
21
-
{
22
-
imports = [
23
-
secrets.generate
24
-
./provisioning.nix
25
-
];
26
-
27
-
users.users.grafana.extraGroups = [
28
-
"nginx"
29
-
];
30
-
31
-
services.grafana = {
32
-
enable = true;
33
-
settings = {
34
-
server = {
35
-
protocol = "socket";
36
-
socket_gid = config.users.groups.nginx.gid;
37
-
read_timeout = "1m";
38
-
39
-
domain = "suika.soopy.moe";
40
-
enforce_domain = true;
41
-
42
-
root_url = "https://suika.soopy.moe/";
43
-
router_logging = false;
44
-
};
45
-
46
-
security = {
47
-
disable_initial_admin_creation = true;
48
-
disable_gravatar = false;
49
-
cookie_secure = true;
50
-
cookie_samesite = "lax";
51
-
};
52
-
53
-
dashboards = {
54
-
versions_to_keep = 5;
55
-
min_refresh_interval = "30s";
56
-
};
57
-
58
-
users = {
59
-
allow_sign_up = false;
60
-
allow_org_create = false;
61
-
};
62
-
63
-
auth = {
64
-
login_cookie_name = "girls_last_stats";
65
-
disable_login_form = true;
66
-
};
67
-
68
-
snapshots = {
69
-
enabled = true;
70
-
external_enabled = true;
71
-
};
72
-
73
-
# "auth.generic_oauth" = {
74
-
# name = "GensoGateway";
75
-
# enabled = true;
76
-
77
-
# allow_sign_up = true;
78
-
79
-
# client_id = fromSecret "oauth2/gateway/cid";
80
-
# client_secret = fromSecret "oauth2/gateway/cse";
81
-
# scopes = "openid email profile offline_access roles";
82
-
83
-
# email_attribute_path = "email";
84
-
# login_attribute_path = "username";
85
-
# name_attribute_path = "username";
86
-
87
-
# auth_url = "https://gateway.soopy.moe/realms/gensokyo/protocol/openid-connect/auth";
88
-
# token_url = "https://gateway.soopy.moe/realms/gensokyo/protocol/openid-connect/token";
89
-
# api_url = "https://gateway.soopy.moe/realms/gensokyo/protocol/openid-connect/userinfo";
90
-
# };
91
-
92
-
"auth.github" = {
93
-
enabled = true;
94
-
allow_sign_up = true; # TODO: disable this when we're done with gensogateway
95
-
client_id = fromSecret "oauth2/github/cid";
96
-
client_secret = fromSecret "oauth2/github/cse";
97
-
scopes = "user:email,read:org";
98
-
};
99
-
};
100
-
};
101
-
102
-
services.nginx.virtualHosts."suika.soopy.moe" = _utils.mkSimpleProxy {
103
-
socketPath = config.services.grafana.settings.server.socket;
104
-
websockets = true;
105
-
};
106
-
}
···
-34
systems/koumakan/services/telemetry/grafana/provisioning.nix
-34
systems/koumakan/services/telemetry/grafana/provisioning.nix
···
1
-
{ ... }:
2
-
{
3
-
services.grafana.provision = {
4
-
datasources.settings = {
5
-
apiVersion = 1; # i am stupid. keep this as 1.
6
-
7
-
datasources = [
8
-
{
9
-
version = 2;
10
-
name = "panopticon";
11
-
type = "prometheus";
12
-
uid = "gs_panopticon";
13
-
url = "http://localhost:20090";
14
-
isDefault = true;
15
-
jsonData = {
16
-
prometheusVersion = "2.44.0";
17
-
};
18
-
}
19
-
];
20
-
};
21
-
22
-
dashboards.settings = {
23
-
apiVersion = 1; # same as above
24
-
25
-
providers = [
26
-
{
27
-
name = "flake";
28
-
allowUiUpdates = false;
29
-
options.path = ./dashboards;
30
-
}
31
-
];
32
-
};
33
-
};
34
-
}
···
-124
systems/koumakan/services/telemetry/victoriametrics.nix
-124
systems/koumakan/services/telemetry/victoriametrics.nix
···
1
-
{
2
-
config,
3
-
lib,
4
-
_utils,
5
-
...
6
-
}:
7
-
let
8
-
monitoredHosts = [
9
-
"satori"
10
-
"renko"
11
-
"kita"
12
-
"ryo"
13
-
"nijika"
14
-
];
15
-
secrets = _utils.setupSecrets config {
16
-
namespace = "vmetrics";
17
-
secrets = builtins.map (f: "auth/hosts/" + f) monitoredHosts;
18
-
};
19
-
in
20
-
{
21
-
imports = [
22
-
secrets.generate
23
-
24
-
(secrets.mkTemplate "vmauth.env" (
25
-
lib.concatLines (
26
-
builtins.map (
27
-
host: "AUTH_${lib.toUpper host}_TOKEN=${secrets.placeholder "auth/hosts/${host}"}"
28
-
) monitoredHosts
29
-
)
30
-
))
31
-
];
32
-
33
-
services.victoriametrics = {
34
-
enable = true;
35
-
listenAddress = "127.0.0.1:20090";
36
-
retentionPeriod = "5y"; # 5 years
37
-
};
38
-
39
-
services.vmagent = {
40
-
enable = true;
41
-
remoteWrite.url = "http://${config.services.victoriametrics.listenAddress}/api/v1/write";
42
-
prometheusConfig = {
43
-
global = {
44
-
scrape_interval = "30s";
45
-
};
46
-
47
-
scrape_configs = [
48
-
{
49
-
job_name = "victoriametrics";
50
-
scrape_interval = "15s";
51
-
static_configs = lib.singleton {
52
-
targets = lib.singleton "${builtins.toString config.services.victoriametrics.listenAddress}";
53
-
};
54
-
}
55
-
56
-
# node exporters
57
-
{
58
-
job_name = "node";
59
-
scrape_interval = "15s";
60
-
static_configs = lib.singleton {
61
-
targets = lib.singleton "localhost:${builtins.toString config.services.prometheus.exporters.node.port}";
62
-
};
63
-
relabel_configs = lib.singleton {
64
-
target_label = "instance";
65
-
replacement = "koumakan";
66
-
};
67
-
}
68
-
69
-
# external nodes uses remote write
70
-
# [mail, gateway]
71
-
72
-
# other services' metrics
73
-
{
74
-
job_name = "nginx";
75
-
static_configs = lib.singleton {
76
-
targets = lib.singleton "localhost:${builtins.toString config.services.prometheus.exporters.nginx.port}";
77
-
};
78
-
relabel_configs = lib.singleton {
79
-
target_label = "instance";
80
-
replacement = "koumakan";
81
-
};
82
-
}
83
-
];
84
-
};
85
-
};
86
-
87
-
# vmetrics docs suggests NOT to expose any vmetrics component to the public except vmauth or vmgateway, so we're not going to do that.
88
-
# this unfortunately requires a custom module which we have written ourselves, and might upstream to core nixpkgs when we are sure of its stability.
89
-
# some may wonder why we can't just use nginx directly instead of another module
90
-
# i mean, yeah. vmauth is honestly just another nginx. whatever, i do not care. i'm tired.
91
-
92
-
# module search: https://mystia.soopy.moe
93
-
services.vmauth = {
94
-
enable = true;
95
-
listenAddress = "127.0.0.1:21000";
96
-
authConfig = {
97
-
users = builtins.concatMap (
98
-
token:
99
-
lib.singleton {
100
-
bearer_token = token;
101
-
url_prefix = "http://${config.services.victoriametrics.listenAddress}"; # send directly to vm
102
-
}
103
-
) (builtins.map (host: "%{AUTH_${lib.toUpper host}_TOKEN}") monitoredHosts);
104
-
};
105
-
environmentFile = secrets.getTemplate "vmauth.env";
106
-
};
107
-
108
-
# expose vmauth remote write endpoint
109
-
services.nginx.virtualHosts."panopticon.soopy.moe" = _utils.mkVhost {
110
-
# Deny all routes by default
111
-
# This is strictly a write-only exposure so anything else can explod.
112
-
locations."/".return = "444";
113
-
114
-
locations."= /".extraConfig = ''
115
-
add_header content-type text/plain;
116
-
return 200 "HTTP/1.1 100 CONTINUE - big sister is watching you.";
117
-
'';
118
-
119
-
# Allow only the write route
120
-
locations."~* /api/.*/write" = {
121
-
proxyPass = "http://127.0.0.1:21000";
122
-
};
123
-
};
124
-
}
···
-53
systems/renko/configuration.nix
-53
systems/renko/configuration.nix
···
1
-
{
2
-
inputs,
3
-
...
4
-
}:
5
-
{
6
-
imports = [
7
-
./gui
8
-
./development
9
-
./services
10
-
inputs.nixos-hardware.nixosModules.common-cpu-amd-pstate
11
-
inputs.nixos-hardware.nixosModules.common-gpu-amd
12
-
];
13
-
14
-
gensokyo = {
15
-
traits = {
16
-
gui = true;
17
-
games = true;
18
-
};
19
-
presets = {
20
-
vmetrics = true;
21
-
secureboot = true;
22
-
};
23
-
system-manager = {
24
-
enable = true;
25
-
flakeLocation = "/home/cassie/gensokyo";
26
-
};
27
-
};
28
-
29
-
# boot.kernelPackages = pkgs.linuxPackages_latest;
30
-
# Use the systemd-boot EFI boot loader.
31
-
boot.loader.systemd-boot = {
32
-
enable = true;
33
-
consoleMode = "max";
34
-
};
35
-
boot.initrd.systemd.enable = true;
36
-
37
-
boot.loader.efi.canTouchEfiVariables = true;
38
-
boot.loader.efi.efiSysMountPoint = "/efi";
39
-
40
-
fileSystems."/".options = [
41
-
"compress=zstd:5"
42
-
"autodefrag"
43
-
];
44
-
45
-
networking.firewall = {
46
-
allowedTCPPorts = [ 59153 5515 ];
47
-
};
48
-
49
-
# muh unfree software!!!!!!!!!!!!!!!!!!
50
-
nixpkgs.config.allowUnfree = true;
51
-
52
-
system.stateVersion = "23.11"; # Did you read the comment? Yes.
53
-
}
···
-4
systems/renko/development/adb.nix
-4
systems/renko/development/adb.nix
-9
systems/renko/development/default.nix
-9
systems/renko/development/default.nix
-11
systems/renko/development/docker.nix
-11
systems/renko/development/docker.nix
-6
systems/renko/development/jvm.nix
-6
systems/renko/development/jvm.nix
-13
systems/renko/development/postgresql.nix
-13
systems/renko/development/postgresql.nix
-9
systems/renko/gui/default.nix
-9
systems/renko/gui/default.nix
-6
systems/renko/gui/finance.nix
-6
systems/renko/gui/finance.nix
-96
systems/renko/gui/games/_osu.nix
-96
systems/renko/gui/games/_osu.nix
···
1
-
{
2
-
lib,
3
-
stdenvNoCC,
4
-
fetchurl,
5
-
appimageTools,
6
-
makeWrapper,
7
-
nativeWayland ? false,
8
-
9
-
version,
10
-
hash,
11
-
}:
12
-
13
-
let
14
-
pname = "osu-lazer-bin";
15
-
16
-
src = fetchurl {
17
-
inherit hash;
18
-
url = "https://github.com/ppy/osu/releases/download/${version}/osu.AppImage";
19
-
};
20
-
21
-
meta = {
22
-
description = "Rhythm is just a *click* away (tachyon, patched drv)";
23
-
homepage = "https://osu.ppy.sh";
24
-
license = with lib.licenses; [
25
-
mit
26
-
cc-by-nc-40
27
-
unfreeRedistributable # osu-framework contains libbass.so in repository
28
-
];
29
-
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
30
-
maintainers = with lib.maintainers; [
31
-
gepbird
32
-
stepbrobd
33
-
Guanran928
34
-
soopyc
35
-
];
36
-
mainProgram = "osu!";
37
-
platforms = [
38
-
"x86_64-linux"
39
-
];
40
-
};
41
-
42
-
passthru.updateScript = ./update.sh;
43
-
in
44
-
if stdenvNoCC.hostPlatform.isDarwin then
45
-
stdenvNoCC.mkDerivation {
46
-
inherit
47
-
pname
48
-
version
49
-
src
50
-
meta
51
-
passthru
52
-
;
53
-
54
-
nativeBuildInputs = [ makeWrapper ];
55
-
56
-
installPhase = ''
57
-
runHook preInstall
58
-
OSU_WRAPPER="$out/Applications/osu!.app/Contents"
59
-
OSU_CONTENTS="osu!.app/Contents"
60
-
mkdir -p "$OSU_WRAPPER/MacOS"
61
-
cp -r "$OSU_CONTENTS/Info.plist" "$OSU_CONTENTS/Resources" "$OSU_WRAPPER"
62
-
cp -r "osu!.app" "$OSU_WRAPPER/Resources/osu-wrapped.app"
63
-
makeWrapper "$OSU_WRAPPER/Resources/osu-wrapped.app/Contents/MacOS/osu!" "$OSU_WRAPPER/MacOS/osu!" --set OSU_EXTERNAL_UPDATE_PROVIDER 1
64
-
runHook postInstall
65
-
'';
66
-
}
67
-
else
68
-
appimageTools.wrapType2 {
69
-
inherit
70
-
pname
71
-
version
72
-
src
73
-
meta
74
-
passthru
75
-
;
76
-
77
-
extraPkgs = pkgs: with pkgs; [ icu ];
78
-
79
-
extraInstallCommands =
80
-
let
81
-
contents = appimageTools.extract { inherit pname version src; };
82
-
in
83
-
''
84
-
. ${makeWrapper}/nix-support/setup-hook
85
-
mv -v $out/bin/${pname} $out/bin/osu!
86
-
87
-
wrapProgram $out/bin/osu! \
88
-
${lib.optionalString nativeWayland "--set SDL_VIDEODRIVER wayland"} \
89
-
--set OSU_EXTERNAL_UPDATE_PROVIDER 1
90
-
91
-
install -m 444 -D ${contents}/osu!.desktop -t $out/share/applications
92
-
for i in 16 32 48 64 96 128 256 512 1024; do
93
-
install -D ${contents}/osu.png $out/share/icons/hicolor/''${i}x$i/apps/osu.png
94
-
done
95
-
'';
96
-
}
···
-11
systems/renko/gui/games/default.nix
-11
systems/renko/gui/games/default.nix
-11
systems/renko/gui/games/hud.nix
-11
systems/renko/gui/games/hud.nix
-11
systems/renko/gui/games/lutris.nix
-11
systems/renko/gui/games/lutris.nix
-11
systems/renko/gui/games/minecraft.nix
-11
systems/renko/gui/games/minecraft.nix
-16
systems/renko/gui/games/osu.nix
-16
systems/renko/gui/games/osu.nix
···
1
-
{
2
-
lib,
3
-
config,
4
-
pkgs,
5
-
...
6
-
}:
7
-
lib.mkIf config.gensokyo.traits.games {
8
-
environment.systemPackages = [
9
-
# this override is crap don't do it
10
-
(pkgs.callPackage ./_osu.nix {
11
-
version = "2025.912.0-lazer";
12
-
hash = "sha256-73UY3RJp0pFfbxRWX8qSnLeoZB/BRGtucmQClJP7Qwg=";
13
-
# nativeWayland = true; # this doesnt window properly
14
-
})
15
-
];
16
-
}
···
-17
systems/renko/gui/games/steam.nix
-17
systems/renko/gui/games/steam.nix
-8
systems/renko/gui/graphics.nix
-8
systems/renko/gui/graphics.nix
-7
systems/renko/gui/media.nix
-7
systems/renko/gui/media.nix
-29
systems/renko/gui/virt.nix
-29
systems/renko/gui/virt.nix
···
1
-
{
2
-
programs.virt-manager.enable = true;
3
-
virtualisation.libvirtd = {
4
-
enable = true;
5
-
qemu.swtpm.enable = true;
6
-
};
7
-
8
-
virtualisation.waydroid.enable = true;
9
-
10
-
# try virtualbox
11
-
virtualisation.virtualbox.host = {
12
-
enable = true;
13
-
enableKvm = true;
14
-
enableExtensionPack = false;
15
-
addNetworkInterface = false; # conflicts with KVM
16
-
};
17
-
18
-
# GPU Passthrough
19
-
# boot.initrd.kernelModules = [
20
-
# "vfio_pci" "vfio" "vfio_iommu_type1" "amdgpu"
21
-
# ];
22
-
# boot.kernelParams = lib.singleton ("vfio-pci.ids=" + lib.concatStringsSep "," [
23
-
# "1002:7480" # GPU video
24
-
# "1002:ab30" # GPU Audio
25
-
# ]);
26
-
# virtualisation.spiceUSBRedirection.enable = true;
27
-
28
-
# vm performance is still terrible after pinning
29
-
}
···
-55
systems/renko/hardware-configuration.nix
-55
systems/renko/hardware-configuration.nix
···
1
-
# Do not modify this file! It was generated by โnixos-generate-configโ
2
-
# and may be overwritten by future invocations. Please make changes
3
-
# to /etc/nixos/configuration.nix instead.
4
-
{
5
-
config,
6
-
lib,
7
-
modulesPath,
8
-
...
9
-
}:
10
-
{
11
-
imports = [
12
-
(modulesPath + "/installer/scan/not-detected.nix")
13
-
];
14
-
15
-
boot.initrd.availableKernelModules = [
16
-
"nvme"
17
-
"xhci_pci"
18
-
"ahci"
19
-
"usbhid"
20
-
];
21
-
boot.initrd.kernelModules = [ ];
22
-
boot.kernelModules = [ "kvm-amd" ];
23
-
boot.extraModulePackages = [ ];
24
-
25
-
fileSystems."/" = {
26
-
device = "/dev/disk/by-uuid/e6637f8a-12fc-4aa4-8335-3fad10d8f63a";
27
-
fsType = "btrfs";
28
-
};
29
-
30
-
boot.initrd.luks.devices."gock".device = "/dev/disk/by-uuid/9d57daa1-f152-443d-992c-b58cbfa57ec1";
31
-
32
-
fileSystems."/efi" = {
33
-
device = "/dev/disk/by-uuid/77E6-011C";
34
-
fsType = "vfat";
35
-
options = [
36
-
"fmask=0022"
37
-
"dmask=0022"
38
-
"umask=0077"
39
-
];
40
-
};
41
-
42
-
swapDevices = [
43
-
{ device = "/dev/disk/by-uuid/40a77774-ab28-45db-8f8a-845814eacba9"; }
44
-
];
45
-
46
-
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
47
-
# (the default) this is the recommended approach. When using systemd-networkd it's
48
-
# still possible to use this option, but it's recommended to use it in conjunction
49
-
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
50
-
networking.useDHCP = lib.mkDefault true;
51
-
# networking.interfaces.eno1.useDHCP = lib.mkDefault true;
52
-
53
-
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
54
-
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
55
-
}
···
-38
systems/renko/services/backup-servers.nix
-38
systems/renko/services/backup-servers.nix
···
1
-
{ lib, pkgs, ... }:
2
-
{
3
-
systemd.user = {
4
-
timers.backup-2025 = {
5
-
wantedBy = lib.singleton "default.target";
6
-
timerConfig = {
7
-
OnCalendar = "*:0/5";
8
-
AccuracySec = "1us";
9
-
};
10
-
};
11
-
12
-
services.backup-2025 = {
13
-
path = with pkgs; [
14
-
rsync
15
-
openssh
16
-
];
17
-
script = ''
18
-
SOURCE="/home/cassie/mcservers/season-2025"
19
-
DESTINATION="backup@koumakan:/home/backup/public/"
20
-
rsync \
21
-
-rltH \
22
-
--rsh="ssh -i $HOME/.ssh/id_backup_koumakan" \
23
-
--safe-links \
24
-
--delay-updates \
25
-
--human-readable --progress \
26
-
--exclude="*/bluemap/web" \
27
-
--exclude="*/libraries" \
28
-
--exclude=".fabric" \
29
-
--exclude="*.tmp" \
30
-
--exclude="*/tmp" \
31
-
--exclude="DistantHorizons.sqlite*" \
32
-
--verbose \
33
-
$SOURCE \
34
-
$DESTINATION
35
-
'';
36
-
};
37
-
};
38
-
}
···
-7
systems/renko/services/default.nix
-7
systems/renko/services/default.nix
-29
systems/renko/services/forgejo-runner.nix
-29
systems/renko/services/forgejo-runner.nix
···
1
-
{
2
-
_utils,
3
-
config,
4
-
lib,
5
-
pkgs,
6
-
...
7
-
}:
8
-
let
9
-
secrets = _utils.setupSecrets config {
10
-
namespace = "forgejo";
11
-
secrets = [ "tokenFile" ];
12
-
};
13
-
in
14
-
{
15
-
imports = lib.singleton secrets.generate;
16
-
17
-
services.gitea-actions-runner = {
18
-
package = pkgs.forgejo-runner;
19
-
instances.default = {
20
-
enable = true;
21
-
name = "renko-default";
22
-
url = "https://patchy.soopy.moe";
23
-
tokenFile = secrets.get "tokenFile";
24
-
labels = [
25
-
"debian-trixie:docker://node:24-trixie"
26
-
];
27
-
};
28
-
};
29
-
}
···
-19
systems/renko/services/proxy.nix
-19
systems/renko/services/proxy.nix
···
1
-
{
2
-
services.nginx = {
3
-
enable = true;
4
-
recommendedOptimisation = true;
5
-
6
-
virtualHosts."renko.mist-nessie.ts.net" = {
7
-
listen = [
8
-
{
9
-
addr = "100.86.12.107";
10
-
port = 80;
11
-
}
12
-
];
13
-
14
-
locations."/" = {
15
-
proxyPass = "http://110.40.153.242";
16
-
};
17
-
};
18
-
};
19
-
}
···
-21
systems/ryo/configuration.nix
-21
systems/ryo/configuration.nix
···
1
-
# ryo because empty-headed. also btr naming scheme.
2
-
# DO NOT copy anything done on this host, it's insecure by design.
3
-
{ ... }:
4
-
{
5
-
imports = [
6
-
./services
7
-
];
8
-
9
-
gensokyo.presets = {
10
-
vmetrics = true;
11
-
certificates = true;
12
-
nginx = true;
13
-
};
14
-
swapDevices = [
15
-
{
16
-
device = "/Swapfile";
17
-
size = 2048;
18
-
}
19
-
];
20
-
system.stateVersion = "23.11";
21
-
}
···
-35
systems/ryo/hardware-configuration.nix
-35
systems/ryo/hardware-configuration.nix
···
1
-
{
2
-
modulesPath,
3
-
lib,
4
-
...
5
-
}:
6
-
{
7
-
imports = [ (modulesPath + "/profiles/qemu-guest.nix") ];
8
-
9
-
boot.initrd.availableKernelModules = [
10
-
"ata_piix"
11
-
"uhci_hcd"
12
-
"virtio_pci"
13
-
"virtio_scsi"
14
-
"sd_mod"
15
-
"xen_blkfront"
16
-
"vmw_pvscsi"
17
-
];
18
-
boot.initrd.kernelModules = [ "nvme" ];
19
-
boot.loader.grub = {
20
-
efiSupport = true;
21
-
efiInstallAsRemovable = true;
22
-
device = "nodev";
23
-
};
24
-
25
-
fileSystems."/boot" = {
26
-
device = "/dev/disk/by-uuid/14EF-4002";
27
-
fsType = "vfat";
28
-
};
29
-
fileSystems."/" = {
30
-
device = "/dev/disk/by-uuid/88cb39be-b19e-4c4a-b544-286b2f45f003";
31
-
fsType = "xfs";
32
-
};
33
-
34
-
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
35
-
}
···
-7
systems/ryo/services/default.nix
-7
systems/ryo/services/default.nix
-45
systems/ryo/services/novnc.nix
-45
systems/ryo/services/novnc.nix
···
1
-
{
2
-
_utils,
3
-
pkgs,
4
-
lib,
5
-
...
6
-
}:
7
-
{
8
-
services.nginx.virtualHosts."ryo.soopy.moe" = _utils.mkSimpleProxy {
9
-
port = 6080;
10
-
websockets = true;
11
-
extraConfig = {
12
-
locations."= /".return = "303 /vnc_lite.html";
13
-
enableACME = true; # don't bother with DNS-01
14
-
useACMEHost = null;
15
-
};
16
-
};
17
-
18
-
systemd.services."novnc" = {
19
-
enable = true;
20
-
wantedBy = [ "multi-user.target" ];
21
-
path = with pkgs; [ procps ];
22
-
serviceConfig = {
23
-
DynamicUser = true;
24
-
ExecStart = "${lib.getExe pkgs.novnc} --file-only";
25
-
26
-
# hardening
27
-
PrivateUsers = true;
28
-
LockPersonality = true;
29
-
ProtectHostname = true;
30
-
ProtectKernelTunables = true;
31
-
ProtectDevices = true;
32
-
ProtectClock = true;
33
-
SystemCallArchitectures = "native";
34
-
CapabilityBoundingSet = null;
35
-
RestrictAddressFamilies = [
36
-
"AF_INET"
37
-
"AF_INET6"
38
-
];
39
-
SystemCallFilter = [
40
-
"@system-service"
41
-
"~@privileged"
42
-
];
43
-
};
44
-
};
45
-
}
···
-86
systems/ryo/services/thefunny.nix
-86
systems/ryo/services/thefunny.nix
···
1
-
{
2
-
pkgs,
3
-
lib,
4
-
...
5
-
}:
6
-
let
7
-
serviceHardening = {
8
-
PrivateUsers = true;
9
-
LockPersonality = true;
10
-
ProtectHostname = true;
11
-
ProtectKernelTunables = true;
12
-
ProtectClock = true;
13
-
ProtectSystem = true;
14
-
ProtectProc = true;
15
-
ProtectHome = true;
16
-
PrivateTmp = true;
17
-
PrivateDevices = false; # cage's drmGetDevices need devices despite being headless.
18
-
SystemCallArchitectures = "native";
19
-
CapabilityBoundingSet = null;
20
-
NoNewPrivileges = true;
21
-
RestrictAddressFamilies = [
22
-
"AF_INET"
23
-
"AF_INET6"
24
-
"AF_UNIX"
25
-
];
26
-
SystemCallFilter = [
27
-
"@system-service"
28
-
# "~@privileged" # cage/wlroots needs setgid for some reason?
29
-
];
30
-
};
31
-
in
32
-
{
33
-
users.users.funny = {
34
-
isSystemUser = true;
35
-
group = "funny";
36
-
};
37
-
users.groups.funny = { };
38
-
39
-
systemd.services = {
40
-
cage-feh = {
41
-
wantedBy = [ "multi-user.target" ];
42
-
serviceConfig = {
43
-
User = "funny";
44
-
RuntimeDirectory = "funny";
45
-
Restart = "on-failure";
46
-
RestartSec = "1";
47
-
}
48
-
// serviceHardening;
49
-
path = with pkgs; [
50
-
cage
51
-
feh
52
-
];
53
-
script = ''
54
-
set -e
55
-
cage -d feh -- -.dz -D10 --draw-tinted /srv/funny
56
-
'';
57
-
environment = {
58
-
WLR_BACKENDS = "headless";
59
-
WLR_LIBINPUT_NO_DEVICES = "1";
60
-
XDG_RUNTIME_DIR = "%t/funny"; # if this is set to %t only, it fails with a cryptic "invalid argument" error but in fact it's probably just a permission denied error.
61
-
};
62
-
};
63
-
64
-
wayvnc-feh = {
65
-
wantedBy = [ "multi-user.target" ];
66
-
requires = [ "cage-feh.service" ];
67
-
after = [ "cage-feh.service" ];
68
-
serviceConfig = {
69
-
User = "funny";
70
-
RuntimeDirectory = "funny";
71
-
ExecStart = "${lib.getExe pkgs.wayvnc} -d 0.0.0.0";
72
-
Restart = "on-failure";
73
-
RestartSec = "1";
74
-
}
75
-
// serviceHardening;
76
-
environment = {
77
-
WAYLAND_DISPLAY = "wayland-0";
78
-
XDG_RUNTIME_DIR = "%t/funny";
79
-
};
80
-
};
81
-
};
82
-
83
-
networking.firewall.allowedTCPPorts = [
84
-
5900 # vnc; yes this is intended.
85
-
];
86
-
}
···
-92
systems/satori/configuration.nix
-92
systems/satori/configuration.nix
···
1
-
{
2
-
inputs,
3
-
pkgs,
4
-
lib,
5
-
...
6
-
}:
7
-
{
8
-
imports = [
9
-
./steam.nix
10
-
inputs.nixos-hardware.nixosModules.apple-t2
11
-
inputs.nixos-hardware.nixosModules.common-cpu-intel
12
-
];
13
-
14
-
gensokyo = {
15
-
traits = {
16
-
gui = true;
17
-
games = true;
18
-
portable = true;
19
-
hidpi = true;
20
-
};
21
-
presets = {
22
-
vmetrics = true;
23
-
};
24
-
system-manager = {
25
-
enable = true;
26
-
flakeLocation = "/home/cassie/gensokyo";
27
-
};
28
-
};
29
-
30
-
# Use the systemd-boot EFI boot loader.
31
-
boot.loader.systemd-boot.enable = true;
32
-
boot.loader.efi.canTouchEfiVariables = true;
33
-
boot.loader.efi.efiSysMountPoint = "/boot";
34
-
35
-
# development
36
-
# services.redis.servers."".enable = true;
37
-
38
-
boot.initrd.systemd.enable = true;
39
-
hardware.apple.touchBar = {
40
-
enable = true;
41
-
settings = {
42
-
FontTemplate = "Hurmit Nerd Font";
43
-
};
44
-
};
45
-
hardware.firmware = [
46
-
inputs.self.packages.${pkgs.system}.brcmfmac
47
-
];
48
-
49
-
hardware.apple-t2.kernelChannel = "stable";
50
-
specialisation.latest-kernel.configuration.hardware.apple-t2.kernelChannel = lib.mkForce "latest";
51
-
52
-
# experimental
53
-
boot.kernelParams = [ "mem_sleep_default=s2idle" ];
54
-
systemd = {
55
-
services.tiny-dfr = {
56
-
wantedBy = [
57
-
"post-resume.target"
58
-
"dev-tiny_dfr_display.device"
59
-
"dev-tiny_dfr_backlight.device"
60
-
"dev-tiny_dfr_display_backlight.device"
61
-
];
62
-
after = [ "post-resume.target" ];
63
-
};
64
-
};
65
-
66
-
environment.etc."systemd/timesyncd.conf.d/50-save-clock.conf".text = ''
67
-
[Time]
68
-
SaveIntervalSec=30
69
-
'';
70
-
71
-
environment.systemPackages = [
72
-
pkgs.jetbrains.idea-ultimate
73
-
pkgs.prismlauncher
74
-
];
75
-
76
-
# TODO: make this a trait
77
-
virtualisation.docker = {
78
-
enable = true;
79
-
storageDriver = "btrfs";
80
-
};
81
-
82
-
users.groups.docker.members = [
83
-
"cassie"
84
-
];
85
-
86
-
zramSwap.enable = true;
87
-
88
-
# muh unfree software!!!!!!!!!!!!!!!!!!
89
-
nixpkgs.config.allowUnfree = true;
90
-
91
-
system.stateVersion = "23.05"; # Did you read the comment? Yes.
92
-
}
···
-53
systems/satori/hardware-configuration.nix
-53
systems/satori/hardware-configuration.nix
···
1
-
# Do not modify this file! It was generated by โnixos-generate-configโ
2
-
# and may be overwritten by future invocations. Please make changes
3
-
# to /etc/nixos/configuration.nix instead.
4
-
{
5
-
config,
6
-
lib,
7
-
modulesPath,
8
-
...
9
-
}:
10
-
{
11
-
imports = [
12
-
(modulesPath + "/installer/scan/not-detected.nix")
13
-
];
14
-
15
-
boot.initrd.availableKernelModules = [
16
-
"xhci_pci"
17
-
"nvme"
18
-
"usbhid"
19
-
"usb_storage"
20
-
"sd_mod"
21
-
];
22
-
boot.initrd.kernelModules = [ ];
23
-
boot.kernelModules = [ "kvm-intel" ];
24
-
boot.extraModulePackages = [ ];
25
-
26
-
fileSystems."/" = {
27
-
device = "/dev/disk/by-uuid/f4bb41e2-b477-49e7-ae96-61fd80a63b2e";
28
-
fsType = "btrfs";
29
-
};
30
-
31
-
fileSystems."/boot" = {
32
-
device = "/dev/disk/by-uuid/3231-A446";
33
-
fsType = "vfat";
34
-
options = [
35
-
"fmask=0022"
36
-
"dmask=0022"
37
-
"umask=0077"
38
-
];
39
-
};
40
-
41
-
swapDevices = [ ];
42
-
43
-
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
44
-
# (the default) this is the recommended approach. When using systemd-networkd it's
45
-
# still possible to use this option, but it's recommended to use it in conjunction
46
-
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
47
-
networking.useDHCP = lib.mkDefault true;
48
-
# networking.interfaces.enp0s13f0u2.useDHCP = lib.mkDefault true;
49
-
# networking.interfaces.enp230s0f1u1.useDHCP = lib.mkDefault true;
50
-
51
-
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
52
-
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
53
-
}
···
-14
systems/satori/steam.nix
-14
systems/satori/steam.nix
-8
users/README.md
-8
users/README.md
···
1
-
# gensokyo/users
2
-
3
-
This directory holds per-user configurations.
4
-
5
-
Note that files in `./home/` directories are **not** NixOS modules, rather
6
-
[Home Manager](https://github.com/nix-community/home-manager) modules. You can
7
-
see the available options [in the HM manual](https://nix-community.github.io/home-manager/options.xhtml)
8
-
or with the [option searcher](https://home-manager-options.extranix.com/).
···
-8
users/_tester.nix
-8
users/_tester.nix
-28
users/builder.nix
-28
users/builder.nix
···
1
-
{
2
-
inputs,
3
-
config,
4
-
lib,
5
-
pkgs,
6
-
...
7
-
}:
8
-
lib.mkIf (!config.gensokyo.traits.sensitive) {
9
-
users.users.builder = {
10
-
openssh = {
11
-
authorizedKeys.keyFiles = [
12
-
(inputs.self + "/creds/ssh/users/builder")
13
-
];
14
-
};
15
-
isNormalUser = false;
16
-
isSystemUser = true;
17
-
# group = "nixbld";
18
-
# https://github.com/NixOS/nix/blob/946fd29422361e8478425d6aaf9ccae23d7ddffb/src/nix/daemon.cc#L266-L267
19
-
# https://discourse.nixos.org/t/strange-remote-build-issue/24387/4
20
-
group = "remote-builder";
21
-
22
-
# allow builders to actually access nix
23
-
# todo: harden this somehow
24
-
shell = pkgs.zsh;
25
-
};
26
-
27
-
users.groups.remote-builder = { };
28
-
}
···
-14
users/cassie/default.nix
-14
users/cassie/default.nix
-1
users/cassie/ephemeral/vscode/.gitignore
-1
users/cassie/ephemeral/vscode/.gitignore
···
1
-
sync.lock
···
-25
users/cassie/ephemeral/vscode/extension.json
-25
users/cassie/ephemeral/vscode/extension.json
···
1
-
[
2
-
"anweber.local-sync",
3
-
"astro-build.astro-vscode",
4
-
"catppuccin.catppuccin-vsc",
5
-
"catppuccin.catppuccin-vsc-icons",
6
-
"dbaeumer.vscode-eslint",
7
-
"denoland.vscode-deno",
8
-
"editorconfig.editorconfig",
9
-
"esbenp.prettier-vscode",
10
-
"formulahendry.auto-rename-tag",
11
-
"gruntfuggly.todo-tree",
12
-
"hossaini.bootstrap-intellisense",
13
-
"inlang.vs-code-extension",
14
-
"jnoortheen.nix-ide",
15
-
"llvm-vs-code-extensions.vscode-clangd",
16
-
"minecraftcommands.syntax-mcfunction",
17
-
"mkhl.direnv",
18
-
"ms-python.debugpy",
19
-
"ms-python.python",
20
-
"ms-vscode.hexeditor",
21
-
"redhat.vscode-yaml",
22
-
"svelte.svelte-vscode",
23
-
"usernamehw.errorlens",
24
-
"yoavbls.pretty-ts-errors"
25
-
]
···
-42
users/cassie/ephemeral/vscode/keybindings.json
-42
users/cassie/ephemeral/vscode/keybindings.json
···
1
-
// Place your key bindings in this file to override the defaults
2
-
[
3
-
{
4
-
"key": "alt+s",
5
-
"command": "git.stageSelectedRanges",
6
-
"when": "isInDiffEditor && !operationInProgress"
7
-
},
8
-
{
9
-
"key": "ctrl+k ctrl+alt+s",
10
-
"command": "-git.stageSelectedRanges",
11
-
"when": "isInDiffEditor && !operationInProgress"
12
-
},
13
-
{
14
-
"key": "ctrl+k ctrl+w",
15
-
"command": "-workbench.action.closeAllEditors"
16
-
},
17
-
{
18
-
"key": "ctrl+k ctrl+w",
19
-
"command": "workbench.action.openWorkspace"
20
-
},
21
-
{
22
-
"key": "ctrl+alt+n",
23
-
"command": "explorer.newFile"
24
-
},
25
-
{
26
-
"key": "ctrl+k shift+f",
27
-
"command": "workbench.explorer.fileView.focus"
28
-
},
29
-
{
30
-
"key": "ctrl+`",
31
-
"command": "workbench.action.focusActiveEditorGroup",
32
-
"when": "terminalFocus"
33
-
},
34
-
{
35
-
"key": "alt+t alt+r",
36
-
"command": "typescript.restartTsServer"
37
-
},
38
-
{
39
-
"key": "alt+'",
40
-
"command": "editor.emmet.action.wrapWithAbbreviation"
41
-
}
42
-
]
···
-97
users/cassie/ephemeral/vscode/settings.json
-97
users/cassie/ephemeral/vscode/settings.json
···
1
-
{
2
-
// reduce eye strain
3
-
"terminal.integrated.fontFamily": "Hurmit Nerd Font Mono",
4
-
"terminal.integrated.enableImages": true,
5
-
"terminal.integrated.enableVisualBell": true,
6
-
"terminal.integrated.tabs.defaultColor": "terminal.ansiBlue",
7
-
"terminal.integrated.cursorBlinking": true,
8
-
"terminal.integrated.environmentChangesIndicator": "on",
9
-
"git.terminalGitEditor": false,
10
-
// ricing
11
-
"workbench.colorTheme": "Catppuccin Latte",
12
-
"catppuccin.accentColor": "pink",
13
-
"catppuccin.boldKeywords": true,
14
-
"editor.renderWhitespace": "all",
15
-
"editor.cursorSmoothCaretAnimation": "on",
16
-
"editor.cursorBlinking": "phase",
17
-
"editor.fontFamily": "'Hurmit Nerd Font', 'Menlo', monospace",
18
-
"editor.fontSize": 17,
19
-
"editor.lineHeight": 1.65,
20
-
"editor.fontLigatures": false,
21
-
"errorLens.statusBarIconsEnabled": true,
22
-
"errorLens.gutterIconSet": "defaultOutline",
23
-
"errorLens.statusBarColorsEnabled": true,
24
-
"errorLens.statusBarIconsPriority": 1000,
25
-
"workbench.iconTheme": "catppuccin-latte",
26
-
"explorer.confirmDelete": false,
27
-
"files.autoSave": "onFocusChange",
28
-
"git.suggestSmartCommit": false,
29
-
"git.verboseCommit": true,
30
-
"editor.bracketPairColorization.independentColorPoolPerBracketType": true,
31
-
"workbench.preferredDarkColorTheme": "Catppuccin Mocha",
32
-
"workbench.preferredLightColorTheme": "Catppuccin Latte",
33
-
"window.autoDetectColorScheme": true,
34
-
"git.branchRandomName.dictionary": [
35
-
"adjectives",
36
-
"colors",
37
-
"animals"
38
-
],
39
-
"todo-tree.general.statusBar": "top three",
40
-
"window.titleBarStyle": "native",
41
-
"window.dialogStyle": "custom",
42
-
"window.customTitleBarVisibility": "never",
43
-
"svelte.enable-ts-plugin": true,
44
-
"editor.smoothScrolling": true,
45
-
"workbench.list.smoothScrolling": true,
46
-
"editor.insertSpaces": false,
47
-
"json.format.enable": false,
48
-
"editor.rulers": [
49
-
100
50
-
],
51
-
"todo-tree.highlights.useColourScheme": true,
52
-
"window.confirmBeforeClose": "keyboardOnly",
53
-
"prettier.useEditorConfig": false,
54
-
"nix.enableLanguageServer": true,
55
-
"nix.serverPath": "nixd",
56
-
"editor.unicodeHighlight.allowedLocales": {
57
-
"zh-hant": true
58
-
},
59
-
"[html]": {
60
-
"editor.defaultFormatter": "esbenp.prettier-vscode"
61
-
},
62
-
"bootstrapIntelliSense": {
63
-
"enable": true,
64
-
"bsVersion": "5.3.6",
65
-
"useLocalFile": false,
66
-
"cssFilePath": "",
67
-
"languageSupport": []
68
-
},
69
-
"git.closeDiffOnOperation": true,
70
-
"redhat.telemetry.enabled": false,
71
-
"update.mode": "none",
72
-
"[javascript]": {
73
-
"editor.defaultFormatter": "esbenp.prettier-vscode"
74
-
},
75
-
"python.terminal.activateEnvironment": false,
76
-
"git.openRepositoryInParentFolders": "never",
77
-
"diffEditor.ignoreTrimWhitespace": false,
78
-
"terminal.integrated.stickyScroll.enabled": false,
79
-
// shit removal
80
-
"chat.agent.enabled": false,
81
-
"chat.detectParticipant.enabled": false,
82
-
"chat.checkpoints.enabled": false,
83
-
"chat.disableAIFeatures": true,
84
-
// backups
85
-
"local-sync.autobackup": true,
86
-
"local-sync.autorestore": true,
87
-
"sherlock.userId": "6a5316dc-c799-445c-934c-34b77e148545",
88
-
"[dockercompose]": {
89
-
"editor.insertSpaces": true,
90
-
"editor.tabSize": 2,
91
-
"editor.autoIndent": "advanced",
92
-
"editor.defaultFormatter": "redhat.vscode-yaml"
93
-
},
94
-
"[github-actions-workflow]": {
95
-
"editor.defaultFormatter": "redhat.vscode-yaml"
96
-
}
97
-
}
···
-120
users/cassie/home/assets/cursor_smear.glsl
-120
users/cassie/home/assets/cursor_smear.glsl
···
1
-
// from https://github.com/KroneCorylus/ghostty-shader-playground/tree/eec84ccb34564ef4b41ef494338de1d1b7098638
2
-
3
-
float getSdfRectangle(in vec2 p, in vec2 xy, in vec2 b)
4
-
{
5
-
vec2 d = abs(p - xy) - b;
6
-
return length(max(d, 0.0)) + min(max(d.x, d.y), 0.0);
7
-
}
8
-
9
-
// Based on Inigo Quilez's 2D distance functions article: https://iquilezles.org/articles/distfunctions2d/
10
-
// Potencially optimized by eliminating conditionals and loops to enhance performance and reduce branching
11
-
12
-
float seg(in vec2 p, in vec2 a, in vec2 b, inout float s, float d) {
13
-
vec2 e = b - a;
14
-
vec2 w = p - a;
15
-
vec2 proj = a + e * clamp(dot(w, e) / dot(e, e), 0.0, 1.0);
16
-
float segd = dot(p - proj, p - proj);
17
-
d = min(d, segd);
18
-
19
-
float c0 = step(0.0, p.y - a.y);
20
-
float c1 = 1.0 - step(0.0, p.y - b.y);
21
-
float c2 = 1.0 - step(0.0, e.x * w.y - e.y * w.x);
22
-
float allCond = c0 * c1 * c2;
23
-
float noneCond = (1.0 - c0) * (1.0 - c1) * (1.0 - c2);
24
-
float flip = mix(1.0, -1.0, step(0.5, allCond + noneCond));
25
-
s *= flip;
26
-
return d;
27
-
}
28
-
29
-
float getSdfParallelogram(in vec2 p, in vec2 v0, in vec2 v1, in vec2 v2, in vec2 v3) {
30
-
float s = 1.0;
31
-
float d = dot(p - v0, p - v0);
32
-
33
-
d = seg(p, v0, v3, s, d);
34
-
d = seg(p, v1, v0, s, d);
35
-
d = seg(p, v2, v1, s, d);
36
-
d = seg(p, v3, v2, s, d);
37
-
38
-
return s * sqrt(d);
39
-
}
40
-
41
-
vec2 normalize(vec2 value, float isPosition) {
42
-
return (value * 2.0 - (iResolution.xy * isPosition)) / iResolution.y;
43
-
}
44
-
45
-
float antialising(float distance) {
46
-
return 1. - smoothstep(0., normalize(vec2(2., 2.), 0.).x, distance);
47
-
}
48
-
49
-
float determineStartVertexFactor(vec2 a, vec2 b) {
50
-
// Conditions using step
51
-
float condition1 = step(b.x, a.x) * step(a.y, b.y); // a.x < b.x && a.y > b.y
52
-
float condition2 = step(a.x, b.x) * step(b.y, a.y); // a.x > b.x && a.y < b.y
53
-
54
-
// If neither condition is met, return 1 (else case)
55
-
return 1.0 - max(condition1, condition2);
56
-
}
57
-
58
-
vec2 getRectangleCenter(vec4 rectangle) {
59
-
return vec2(rectangle.x + (rectangle.z / 2.), rectangle.y - (rectangle.w / 2.));
60
-
}
61
-
float ease(float x) {
62
-
return pow(1.0 - x, 3.0);
63
-
}
64
-
vec4 saturate(vec4 color, float factor) {
65
-
float gray = dot(color, vec4(0.299, 0.587, 0.114, 0.)); // luminance
66
-
return mix(vec4(gray), color, factor);
67
-
}
68
-
69
-
vec4 TRAIL_COLOR = iCurrentCursorColor;
70
-
const float OPACITY = 0.6;
71
-
const float DURATION = 0.3; //IN SECONDS
72
-
73
-
void mainImage(out vec4 fragColor, in vec2 fragCoord)
74
-
{
75
-
76
-
#if !defined(WEB)
77
-
fragColor = texture(iChannel0, fragCoord.xy / iResolution.xy);
78
-
#endif
79
-
// Normalization for fragCoord to a space of -1 to 1;
80
-
vec2 vu = normalize(fragCoord, 1.);
81
-
vec2 offsetFactor = vec2(-.5, 0.5);
82
-
83
-
// Normalization for cursor position and size;
84
-
// cursor xy has the postion in a space of -1 to 1;
85
-
// zw has the width and height
86
-
vec4 currentCursor = vec4(normalize(iCurrentCursor.xy, 1.), normalize(iCurrentCursor.zw, 0.));
87
-
vec4 previousCursor = vec4(normalize(iPreviousCursor.xy, 1.), normalize(iPreviousCursor.zw, 0.));
88
-
89
-
// When drawing a parellelogram between cursors for the trail i need to determine where to start at the top-left or top-right vertex of the cursor
90
-
float vertexFactor = determineStartVertexFactor(currentCursor.xy, previousCursor.xy);
91
-
float invertedVertexFactor = 1.0 - vertexFactor;
92
-
93
-
// Set every vertex of my parellogram
94
-
vec2 v0 = vec2(currentCursor.x + currentCursor.z * vertexFactor, currentCursor.y - currentCursor.w);
95
-
vec2 v1 = vec2(currentCursor.x + currentCursor.z * invertedVertexFactor, currentCursor.y);
96
-
vec2 v2 = vec2(previousCursor.x + currentCursor.z * invertedVertexFactor, previousCursor.y);
97
-
vec2 v3 = vec2(previousCursor.x + currentCursor.z * vertexFactor, previousCursor.y - previousCursor.w);
98
-
99
-
float sdfCurrentCursor = getSdfRectangle(vu, currentCursor.xy - (currentCursor.zw * offsetFactor), currentCursor.zw * 0.5);
100
-
float sdfTrail = getSdfParallelogram(vu, v0, v1, v2, v3);
101
-
102
-
float progress = clamp((iTime - iTimeCursorChange) / DURATION, 0.0, 1.0);
103
-
float easedProgress = ease(progress);
104
-
// Distance between cursors determine the total length of the parallelogram;
105
-
vec2 centerCC = getRectangleCenter(currentCursor);
106
-
vec2 centerCP = getRectangleCenter(previousCursor);
107
-
float lineLength = distance(centerCC, centerCP);
108
-
109
-
vec4 newColor = vec4(fragColor);
110
-
111
-
vec4 trail = TRAIL_COLOR;
112
-
trail = saturate(trail, 2.5);
113
-
// Draw trail
114
-
newColor = mix(newColor, trail, antialising(sdfTrail));
115
-
// Draw current cursor
116
-
newColor = mix(newColor, trail, antialising(sdfCurrentCursor));
117
-
newColor = mix(newColor, fragColor, step(sdfCurrentCursor, 0.));
118
-
// newColor = mix(fragColor, newColor, OPACITY);
119
-
fragColor = mix(fragColor, newColor, step(sdfCurrentCursor, easedProgress * lineLength));
120
-
}
···
-17
users/cassie/home/default.nix
-17
users/cassie/home/default.nix
-15
users/cassie/home/dev/default.nix
-15
users/cassie/home/dev/default.nix
-76
users/cassie/home/dev/editors.nix
-76
users/cassie/home/dev/editors.nix
···
1
-
{
2
-
traits,
3
-
lib,
4
-
...
5
-
}:
6
-
lib.mkMerge [
7
-
{
8
-
programs.helix = {
9
-
enable = true;
10
-
languages.language = [
11
-
{
12
-
name = "yaml";
13
-
scope = "source.yaml";
14
-
indent = {
15
-
unit = " ";
16
-
tab-width = 2;
17
-
};
18
-
}
19
-
];
20
-
};
21
-
}
22
-
23
-
(lib.mkIf traits.gui {
24
-
programs.zed-editor = {
25
-
enable = true;
26
-
userSettings = {
27
-
# crap disablement
28
-
agent = {
29
-
version = "1";
30
-
enabled = false;
31
-
};
32
-
features = {
33
-
edit_prediction_provider = "none"; # no copilot
34
-
};
35
-
telemetry = {
36
-
metrics = false;
37
-
};
38
-
39
-
# display
40
-
ui_font_size = 20;
41
-
buffer_font_size = 16;
42
-
buffer_font_family = "Fira Code";
43
-
buffer_font_weight = 500;
44
-
buffer_font_features.calt = false;
45
-
46
-
preferred_line_length = 120;
47
-
wrap_guides = [ 120 ];
48
-
show_whitespaces = "all";
49
-
indent_guides = {
50
-
enabled = true;
51
-
coloring = "indent_aware";
52
-
};
53
-
theme = {
54
-
mode = "system";
55
-
# light = "Catppuccin Latte";
56
-
dark = lib.mkForce "Catppuccin Mocha (pink)";
57
-
};
58
-
diagnostics.inline.enable = true;
59
-
60
-
# editing settings
61
-
base_keymap = "VSCode";
62
-
hard_tabs = true;
63
-
vim_mode = false;
64
-
autosave = "on_focus_change";
65
-
66
-
# nix stuff
67
-
load_direnv = "shell_hook";
68
-
69
-
# terminal
70
-
terminal.env = {
71
-
"TERM" = "xterm-256color"; # this is not set apparently
72
-
};
73
-
};
74
-
};
75
-
})
76
-
]
···
-40
users/cassie/home/dev/git.nix
-40
users/cassie/home/dev/git.nix
···
1
-
{
2
-
lib,
3
-
traits,
4
-
inputs,
5
-
...
6
-
}:
7
-
{
8
-
programs.git = lib.mkMerge [
9
-
{
10
-
enable = true;
11
-
12
-
settings = {
13
-
user.name = "Sophie Cheung";
14
-
user.email = "git@soopy.moe";
15
-
};
16
-
}
17
-
18
-
(lib.mkIf traits.gui {
19
-
settings = {
20
-
gpg.format = "ssh";
21
-
commit.gpgSign = true;
22
-
tag.gpgSign = true;
23
-
24
-
user.signingKey = inputs.self + "/creds/ssh/auth";
25
-
};
26
-
})
27
-
];
28
-
29
-
programs.diff-so-fancy = {
30
-
enable = true;
31
-
enableGitIntegration = true;
32
-
33
-
settings.stripLeadingSymbols = false;
34
-
};
35
-
36
-
home.shellAliases = {
37
-
# redo previous commit when something explodes, like my key died or something
38
-
gcmm = "git commit -eF .git/COMMIT_EDITMSG"; # FIXME: strip the thing after ------ 8< ------
39
-
};
40
-
}
···
-10
users/cassie/home/dev/lazygit.nix
-10
users/cassie/home/dev/lazygit.nix
···
1
-
{
2
-
programs.lazygit = {
3
-
enable = true;
4
-
settings = {
5
-
# we use ssh keys as auth, and this is hyper annoying for when we want to do literally anything longer than 2 minutes.
6
-
# we think the concept of autofetching is kind of stupid anyways. i will fetch when i want to.
7
-
git.autoFetch = false;
8
-
};
9
-
};
10
-
}
···
-45
users/cassie/home/dev/ssh.nix
-45
users/cassie/home/dev/ssh.nix
···
1
-
{ ... }:
2
-
{
3
-
programs.ssh = {
4
-
enable = true;
5
-
enableDefaultConfig = false; # silent warning
6
-
7
-
matchBlocks = {
8
-
# most intuitive design /s
9
-
patchy = {
10
-
# host is set to the match block name by default but it is not in the manual/option docs.
11
-
hostname = "koumakan";
12
-
user = "forgejo";
13
-
};
14
-
15
-
gh = {
16
-
hostname = "github.com";
17
-
user = "git";
18
-
};
19
-
20
-
backup = {
21
-
hostname = "koumakan";
22
-
user = "forgejo";
23
-
identitiesOnly = true;
24
-
identityFile = "~/.ssh/id_minecraft_backup";
25
-
};
26
-
27
-
"*" = {
28
-
forwardAgent = true;
29
-
compression = false;
30
-
serverAliveInterval = 0;
31
-
serverAliveCountMax = 3;
32
-
hashKnownHosts = true;
33
-
userKnownHostsFile = "~/.ssh/known_hosts";
34
-
# visualHostKey = true; # if this doesn't work im moving to hjem
35
-
};
36
-
};
37
-
38
-
# extraConfig is config for the Host * block.
39
-
## n.b.: identitesonly and identityfile makes bootstrapping other devices hard esp.
40
-
## if they're embedded or resource constrained.
41
-
extraConfig = ''
42
-
VisualHostKey yes
43
-
'';
44
-
};
45
-
}
···
-12
users/cassie/home/extras.nix
-12
users/cassie/home/extras.nix
-17
users/cassie/home/eyecandy.nix
-17
users/cassie/home/eyecandy.nix
-26
users/cassie/home/ghostty.nix
-26
users/cassie/home/ghostty.nix
···
1
-
{
2
-
inputs,
3
-
traits,
4
-
lib,
5
-
pkgs,
6
-
...
7
-
}:
8
-
lib.mkIf traits.gui {
9
-
programs.ghostty = {
10
-
enable = true;
11
-
package = inputs.ghostty.packages.${pkgs.system}.ghostty;
12
-
settings = {
13
-
theme = "catppuccin-latte";
14
-
font-family = "CozetteVector";
15
-
font-size = 14;
16
-
window-decoration = "client";
17
-
18
-
# great feature, but breaks a bit too many things :(
19
-
# minimum-contrast = 1.1;
20
-
async-backend = "epoll"; # see if this fixes iowait "bug"
21
-
22
-
custom-shader = builtins.toString ./assets/cursor_smear.glsl;
23
-
custom-shader-animation = true;
24
-
};
25
-
};
26
-
}
···
-13
users/cassie/home/media.nix
-13
users/cassie/home/media.nix
-16
users/cassie/home/obs.nix
-16
users/cassie/home/obs.nix
-6
users/cassie/home/path.nix
-6
users/cassie/home/path.nix
-44
users/cassie/home/shell.nix
-44
users/cassie/home/shell.nix
···
1
-
{ ... }:
2
-
{
3
-
programs.atuin = {
4
-
enable = true;
5
-
daemon.enable = true;
6
-
settings = {
7
-
search_mode = "fuzzy";
8
-
update_check = false;
9
-
workspaces = true;
10
-
sync_address = "https://atuin.soopy.moe";
11
-
search_mode_shell_up_key_binding = "prefix";
12
-
filter_mode_shell_up_key_binding = "session";
13
-
enter_accept = true;
14
-
inline_height = 10;
15
-
16
-
daemon.sync_frequency = 10;
17
-
sync.records = true;
18
-
19
-
stats.common_subcommands = [
20
-
","
21
-
"apt"
22
-
"cargo"
23
-
"composer"
24
-
"dnf"
25
-
"docker"
26
-
"git"
27
-
"go"
28
-
"ip"
29
-
"just"
30
-
"kubectl"
31
-
"nix"
32
-
"nmcli"
33
-
"npm"
34
-
"pecl"
35
-
"pnpm"
36
-
"podman"
37
-
"port"
38
-
"systemctl"
39
-
"tmux"
40
-
"yarn"
41
-
];
42
-
};
43
-
};
44
-
}
···
-41
users/cassie/home/syncthing.nix
-41
users/cassie/home/syncthing.nix
···
1
-
{ lib, traits, ... }:
2
-
let
3
-
mkDevice = name: id: {
4
-
inherit name;
5
-
value = {
6
-
inherit id;
7
-
addresses = [
8
-
"tcp://${name}.mist-nessie.ts.net"
9
-
"quic://${name}.mist-nessie.ts.net"
10
-
];
11
-
};
12
-
};
13
-
devices = lib.listToAttrs [
14
-
(mkDevice "renko" "JSPWYCM-O76XTAY-IEP3AKI-A2IK4KX-X2NC7N4-ADMQKXY-VYM45XX-OADHHA3")
15
-
(mkDevice "satori" "OZ2QYJS-463IWPW-DXL6OKH-BU2D2QK-ZP577US-BYXSMAA-LAXRWV7-6PC54QF")
16
-
];
17
-
allDevices = lib.attrNames devices;
18
-
in
19
-
lib.mkIf (traits.gui) {
20
-
services.syncthing = {
21
-
enable = true;
22
-
settings = {
23
-
inherit devices;
24
-
options.globalAnnounceEnabled = false;
25
-
defaults.ignores = [
26
-
"(?d)**/node_modules"
27
-
"(?d)**/target"
28
-
"(?d)**/.svelte-kit"
29
-
"(?d)**/build"
30
-
"(?d)**/.gradle"
31
-
"(?d)**/.direnv"
32
-
];
33
-
folders = {
34
-
"/home/cassie/projects/synced" = {
35
-
id = "synced-projects";
36
-
devices = allDevices;
37
-
};
38
-
};
39
-
};
40
-
};
41
-
}
···
-12
users/cassie/home/virt.nix
-12
users/cassie/home/virt.nix
-8
users/default.nix
-8
users/default.nix
-9
utils/build-yaml.nix
-9
utils/build-yaml.nix
+2
-22
utils/justfile
+2
-22
utils/justfile
···
1
python_executable := if os() == "android" { "python3" } else { "nix develop ..# -c python3" }
2
3
list:
4
-
just -l
5
6
# grab a new nitter guest account and save it
7
nitter-token:
8
-
{{python_executable}} nitter-guest-account.py tokens.json
9
-
10
-
# sync sops config with the nix file
11
-
update-sops-config:
12
-
#!/usr/bin/env bash
13
-
set -euxo pipefail
14
-
rm ../.sops.yaml || true
15
-
# mv ../.sops.yaml{,.bak} 2>/dev/null || true
16
-
OUT=$(nix-build build-yaml.nix --argstr name ".sops.yaml" --arg content "import ../.sops.nix")
17
-
echo -e "# WARNING: This is a generated file. DO NOT EDIT DIRECTLY!\n# See .sops.nix and utils/build-yaml.nix for more details." \
18
-
| cat - $OUT > ../.sops.yaml
19
-
20
-
for file in ../creds/sops/**/*; do sops updatekeys $file; done
21
-
22
-
rotate-sops-keys:
23
-
for file in ../creds/sops/**/*; do sops -i -r $file; done
24
-
25
-
add-grafana-dashboard id name *title="":
26
-
xh https://grafana.com/api/dashboards/{{id}} | \
27
-
jq '.json | .uid="{{name}}" {{ if title != "" {"| .title=\"" + title + "\"" } else {""} }}' \
28
-
-c > ../systems/koumakan/services/telemetry/grafana/dashboards/{{name}}.json
-9
utils/rebuild-collations.sh
-9
utils/rebuild-collations.sh
···
-1
vendor/brcmfmac/.gitignore
-1
vendor/brcmfmac/.gitignore
···
1
-
firmware.tar.gz
···
-32
vendor/brcmfmac/default.nix
-32
vendor/brcmfmac/default.nix
···
1
-
{
2
-
zstd,
3
-
lib,
4
-
fetchzip,
5
-
stdenvNoCC,
6
-
}:
7
-
stdenvNoCC.mkDerivation (final: {
8
-
name = "brcm-mac-firmware";
9
-
10
-
src = fetchzip {
11
-
nativeBuildInputs = [ zstd ];
12
-
stripRoot = false;
13
-
url = "https://mirror.funami.tech/arch-mact2/os/x86_64/apple-bcm-firmware-14.0-1-any.pkg.tar.zst";
14
-
hash = "sha256-7HFXStpTkBG8wujsO8OTm5x+h17mqRiGSrS/Srv49Yg=";
15
-
};
16
-
17
-
dontBuild = true;
18
-
dontConfigure = true; # don't do unnecessary stuff.
19
-
20
-
installPhase = ''
21
-
finalDir="$out/lib/firmware"
22
-
mkdir -p "$finalDir"
23
-
cp -r ${final.src}/usr/lib/firmware/brcm "$finalDir"
24
-
'';
25
-
26
-
meta = {
27
-
description = "Collection of Wi-Fi and Bluetooth firmware files for Apple Mac devices.";
28
-
license = lib.licenses.unfree;
29
-
maintainers = with lib.maintainers; [ soopyc ];
30
-
platforms = lib.platforms.linux;
31
-
};
32
-
})
···