+9
-5
.editorconfig
+9
-5
.editorconfig
···
1
1
root = true
2
2
3
3
[*]
4
-
indent_size = 4
5
-
indent_style = tab
4
+
indent_size = 2
5
+
indent_style = space
6
6
insert_final_newline = true
7
7
trim_trailing_whitespace = true
8
8
9
-
[*.{yaml,yml,nix}]
10
-
indent_style = space
11
-
indent_size = 2
9
+
[*.py]
10
+
indent_size = 4
11
+
indent_style = tab
12
12
13
13
[*.cry]
14
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
-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
1
[](https://github.com/soopyc/nix-on-koumakan/actions/workflows/build.yaml)
2
-
[](https://garnix.io)
3
2
4
3
# Cow
5
-

4
+

6
5
7
-
*Picture by [Quaritsch Photography](https://unsplash.com/@quaritsch) on Unsplash, via https://unsplash.com/photos/1_6rJHQ2Gmw*
6
+
*Gracefully provided by [Quaritsch Photography](https://unsplash.com/@quaritsch) on Unsplash, via https://unsplash.com/photos/1_6rJHQ2Gmw*
8
7
9
8
# NixOS Configuration
10
9
This is a bare minimum nix configuration for koumakan.
···
20
19
21
20
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
22
21
23
-
## Todo
24
-
See ./TODO.md
25
-
26
-
## Tangled
22
+
## TODO
23
+
- [ ] migrate ~/.yubico/authorized_yubikeys to HM config (via pam.yubico.authorizedYubiKeys.ids)
27
24
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
-
```
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
1
{
2
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": {
3
+
"attic": {
20
4
"inputs": {
21
-
"flake-parts": "flake-parts",
22
-
"haskell-flake": "haskell-flake",
5
+
"crane": "crane",
6
+
"flake-compat": "flake-compat",
7
+
"flake-utils": "flake-utils",
23
8
"nixpkgs": [
24
9
"nixpkgs"
25
-
]
10
+
],
11
+
"nixpkgs-stable": "nixpkgs-stable"
26
12
},
27
13
"locked": {
28
-
"lastModified": 1767581175,
29
-
"narHash": "sha256-d9ztdDD4EIbsGbERzXhg6Vlo7zMChjpZci4IrS0hSAY=",
30
-
"owner": "hercules-ci",
31
-
"repo": "arion",
32
-
"rev": "3534dd9d0f32c7dbee4f87378d4c95ffcd8838c5",
14
+
"lastModified": 1692225040,
15
+
"narHash": "sha256-jbQNvkgWGioiC6S39dZVyn6us8p/DlEvm5hQKEYkzDU=",
16
+
"owner": "zhaofengli",
17
+
"repo": "attic",
18
+
"rev": "b43d12082e34bceb26038bdad0438fd68804cfcd",
33
19
"type": "github"
34
20
},
35
21
"original": {
36
-
"owner": "hercules-ci",
37
-
"repo": "arion",
22
+
"owner": "zhaofengli",
23
+
"repo": "attic",
38
24
"type": "github"
39
25
}
40
26
},
41
-
"catppuccin": {
27
+
"crane": {
42
28
"inputs": {
43
-
"nixpkgs": "nixpkgs"
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"
44
42
},
45
43
"locked": {
46
-
"lastModified": 1763111355,
47
-
"narHash": "sha256-iUTS8wV7tCo7A456Ro6ZOJ6Bbk0V5Is3zPd+BmJHJ/Q=",
48
-
"owner": "catppuccin",
49
-
"repo": "nix",
50
-
"rev": "5375a9d80c4b2a835c7203920f997f3ea4224423",
44
+
"lastModified": 1677892403,
45
+
"narHash": "sha256-/Wi0L1spSWLFj+UQxN3j0mPYMoc7ZoAujpUF/juFVII=",
46
+
"owner": "ipetkov",
47
+
"repo": "crane",
48
+
"rev": "105e27adb70a9890986b6d543a67761cbc1964a2",
51
49
"type": "github"
52
50
},
53
51
"original": {
54
-
"owner": "catppuccin",
55
-
"ref": "release-25.05",
56
-
"repo": "nix",
52
+
"owner": "ipetkov",
53
+
"repo": "crane",
57
54
"type": "github"
58
55
}
59
56
},
60
-
"crane": {
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
+
},
61
76
"locked": {
62
-
"lastModified": 1765145449,
63
-
"narHash": "sha256-aBVHGWWRzSpfL++LubA0CwOOQ64WNLegrYHwsVuVN7A=",
77
+
"lastModified": 1681177078,
78
+
"narHash": "sha256-ZNIjBDou2GOabcpctiQykEQVkI8BDwk7TyvlWlI4myE=",
64
79
"owner": "ipetkov",
65
80
"repo": "crane",
66
-
"rev": "69f538cdce5955fcd47abfed4395dc6d5194c1c5",
81
+
"rev": "0c9f468ff00576577d83f5019a66c557ede5acf6",
67
82
"type": "github"
68
83
},
69
84
"original": {
···
75
90
"flake-compat": {
76
91
"flake": false,
77
92
"locked": {
78
-
"lastModified": 1761588595,
79
-
"narHash": "sha256-XKUZz9zewJNUj46b4AJdiRZJAvSZ0Dqj2BNfXvFlJC4=",
93
+
"lastModified": 1673956053,
94
+
"narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=",
80
95
"owner": "edolstra",
81
96
"repo": "flake-compat",
82
-
"rev": "f387cd2afec9419c8ee37694406ca490c3f34ee5",
97
+
"rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9",
83
98
"type": "github"
84
99
},
85
100
"original": {
···
91
106
"flake-compat_2": {
92
107
"flake": false,
93
108
"locked": {
94
-
"lastModified": 1761588595,
95
-
"narHash": "sha256-XKUZz9zewJNUj46b4AJdiRZJAvSZ0Dqj2BNfXvFlJC4=",
109
+
"lastModified": 1673956053,
110
+
"narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=",
96
111
"owner": "edolstra",
97
112
"repo": "flake-compat",
98
-
"rev": "f387cd2afec9419c8ee37694406ca490c3f34ee5",
113
+
"rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9",
99
114
"type": "github"
100
115
},
101
116
"original": {
···
107
122
"flake-compat_3": {
108
123
"flake": false,
109
124
"locked": {
110
-
"lastModified": 1761588595,
111
-
"narHash": "sha256-XKUZz9zewJNUj46b4AJdiRZJAvSZ0Dqj2BNfXvFlJC4=",
125
+
"lastModified": 1673956053,
126
+
"narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=",
112
127
"owner": "edolstra",
113
128
"repo": "flake-compat",
114
-
"rev": "f387cd2afec9419c8ee37694406ca490c3f34ee5",
129
+
"rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9",
115
130
"type": "github"
116
131
},
117
132
"original": {
···
120
135
"type": "github"
121
136
}
122
137
},
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
138
"flake-parts": {
138
139
"inputs": {
139
140
"nixpkgs-lib": [
140
-
"arion",
141
+
"lanzaboote",
141
142
"nixpkgs"
142
143
]
143
144
},
144
145
"locked": {
145
-
"lastModified": 1765835352,
146
-
"narHash": "sha256-XswHlK/Qtjasvhd1nOa1e8MgZ8GS//jBoTqWtrS1Giw=",
146
+
"lastModified": 1680392223,
147
+
"narHash": "sha256-n3g7QFr85lDODKt250rkZj2IFS3i4/8HBU2yKHO3tqw=",
147
148
"owner": "hercules-ci",
148
149
"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",
150
+
"rev": "dcc36e45d054d7bb554c9cdab69093debd91a0b5",
172
151
"type": "github"
173
152
},
174
153
"original": {
···
178
157
}
179
158
},
180
159
"flake-utils": {
181
-
"inputs": {
182
-
"systems": "systems"
183
-
},
184
160
"locked": {
185
-
"lastModified": 1731533236,
186
-
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
161
+
"lastModified": 1667395993,
162
+
"narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
187
163
"owner": "numtide",
188
164
"repo": "flake-utils",
189
-
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
165
+
"rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f",
190
166
"type": "github"
191
167
},
192
168
"original": {
···
197
173
},
198
174
"flake-utils_2": {
199
175
"inputs": {
200
-
"systems": "systems_2"
176
+
"systems": "systems"
201
177
},
202
178
"locked": {
203
-
"lastModified": 1731533236,
204
-
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
179
+
"lastModified": 1681202837,
180
+
"narHash": "sha256-H+Rh19JDwRtpVPAWp64F+rlEtxUWBAQW28eAi3SRSzg=",
205
181
"owner": "numtide",
206
182
"repo": "flake-utils",
207
-
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
183
+
"rev": "cfacdce06f30d2b68473a46042957675eebb3401",
208
184
"type": "github"
209
185
},
210
186
"original": {
···
213
189
"type": "github"
214
190
}
215
191
},
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
192
"gitignore": {
240
193
"inputs": {
241
194
"nixpkgs": [
242
195
"lanzaboote",
243
-
"pre-commit",
196
+
"pre-commit-hooks-nix",
244
197
"nixpkgs"
245
198
]
246
199
},
247
200
"locked": {
248
-
"lastModified": 1709087332,
249
-
"narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
201
+
"lastModified": 1660459072,
202
+
"narHash": "sha256-8DFJjXG8zqoONA1vXtgeKXy68KdJL5UaXR8NtVMUbx8=",
250
203
"owner": "hercules-ci",
251
204
"repo": "gitignore.nix",
252
-
"rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
205
+
"rev": "a20de23b925fd8264fd7fad6454652e142fd7f73",
253
206
"type": "github"
254
207
},
255
208
"original": {
···
258
211
"type": "github"
259
212
}
260
213
},
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
214
"home-manager": {
300
215
"inputs": {
301
216
"nixpkgs": [
302
-
"ghostty",
303
217
"nixpkgs"
304
218
]
305
219
},
306
220
"locked": {
307
-
"lastModified": 1755776884,
308
-
"narHash": "sha256-CPM7zm6csUx7vSfKvzMDIjepEJv1u/usmaT7zydzbuI=",
221
+
"lastModified": 1693208669,
222
+
"narHash": "sha256-hHFaaUsZ860wvppPeiu7nJn/nXZjJfnqAQEu9SPFE9I=",
309
223
"owner": "nix-community",
310
224
"repo": "home-manager",
311
-
"rev": "4fb695d10890e9fc6a19deadf85ff79ffb78da86",
225
+
"rev": "5bac4a1c06cd77cf8fc35a658ccb035a6c50cd2c",
312
226
"type": "github"
313
227
},
314
228
"original": {
315
229
"owner": "nix-community",
316
-
"ref": "release-25.05",
230
+
"ref": "release-23.05",
317
231
"repo": "home-manager",
318
232
"type": "github"
319
233
}
320
234
},
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
235
"lanzaboote": {
453
236
"inputs": {
454
-
"crane": "crane",
237
+
"crane": "crane_2",
238
+
"flake-compat": "flake-compat_2",
239
+
"flake-parts": "flake-parts",
240
+
"flake-utils": "flake-utils_2",
455
241
"nixpkgs": [
456
242
"nixpkgs"
457
243
],
458
-
"pre-commit": "pre-commit",
459
-
"rust-overlay": "rust-overlay"
244
+
"pre-commit-hooks-nix": "pre-commit-hooks-nix",
245
+
"rust-overlay": "rust-overlay_2"
460
246
},
461
247
"locked": {
462
-
"lastModified": 1765382359,
463
-
"narHash": "sha256-RJmgVDzjRI18BWVogG6wpsl1UCuV6ui8qr4DJ1LfWZ8=",
248
+
"lastModified": 1682802423,
249
+
"narHash": "sha256-Fb5TeRTdvUlo/5Yi2d+FC8a6KoRLk2h1VE0/peMhWPs=",
464
250
"owner": "nix-community",
465
251
"repo": "lanzaboote",
466
-
"rev": "e8c096ade12ec9130ff931b0f0e25d2f1bc63607",
252
+
"rev": "64b903ca87d18cef2752c19c098af275c6e51d63",
467
253
"type": "github"
468
254
},
469
255
"original": {
470
256
"owner": "nix-community",
471
-
"ref": "v1.0.0",
257
+
"ref": "v0.3.0",
472
258
"repo": "lanzaboote",
473
259
"type": "github"
474
260
}
475
261
},
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
262
"mystia": {
490
263
"inputs": {
491
264
"flake-compat": "flake-compat_3",
492
-
"nix-update-soopy": "nix-update-soopy",
493
-
"nixpkgs": "nixpkgs_4",
494
-
"treefmt-nix": "treefmt-nix_2"
265
+
"nixpkgs": [
266
+
"nixpkgs"
267
+
]
495
268
},
496
269
"locked": {
497
-
"lastModified": 1765558006,
498
-
"narHash": "sha256-8o8J6YJgx7ZLZJfXlKL/upDyGuRFoTOTKeaLT4ZgUHw=",
270
+
"lastModified": 1694357290,
271
+
"narHash": "sha256-Mai5saiiuBWlQzTreLtIeUJQJN9zMH/UBIKJPOqnasM=",
499
272
"owner": "soopyc",
500
273
"repo": "mystia",
501
-
"rev": "5b177c1b32e2f671c1b4b92f0d71ec2a6a55fa9a",
274
+
"rev": "cfe783698ccd18cb27fb2e422917f14b82f7afc4",
502
275
"type": "github"
503
276
},
504
277
"original": {
···
507
280
"type": "github"
508
281
}
509
282
},
510
-
"nix": {
511
-
"flake": false,
283
+
"nixpkgs": {
512
284
"locked": {
513
-
"lastModified": 1767367029,
514
-
"narHash": "sha256-RsVlkBkxvPPePEo59AVolBFdayxny9FFv8X4aNq9qFc=",
515
-
"owner": "NixOS",
516
-
"repo": "nix",
517
-
"rev": "394a8da9dd9c046de715e451a96b70e64ce4aa7a",
518
-
"type": "github"
519
-
},
520
-
"original": {
285
+
"lastModified": 1694237756,
286
+
"narHash": "sha256-8T29BDnqRexwVy3jhEzIH9r7ROiF9I6ESVD0QLC6VXk=",
521
287
"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",
288
+
"repo": "nixpkgs",
289
+
"rev": "1a5bda2b28ea75a96dda2c349fe6d5e7864950ee",
535
290
"type": "github"
536
291
},
537
292
"original": {
538
-
"owner": "nix-community",
539
-
"ref": "v2.32.1",
540
-
"repo": "nix-eval-jobs",
541
-
"type": "github"
293
+
"id": "nixpkgs",
294
+
"ref": "master",
295
+
"type": "indirect"
542
296
}
543
297
},
544
-
"nix-index-database": {
545
-
"inputs": {
546
-
"nixpkgs": [
547
-
"nixpkgs"
548
-
]
549
-
},
298
+
"nixpkgs-stable": {
550
299
"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=",
300
+
"lastModified": 1685004253,
301
+
"narHash": "sha256-AbVL1nN/TDicUQ5wXZ8xdLERxz/eJr7+o8lqkIOVuaE=",
607
302
"owner": "NixOS",
608
303
"repo": "nixpkgs",
609
-
"rev": "1f08a4df998e21f4e8be8fb6fbf61d11a1a5076a",
304
+
"rev": "3e01645c40b92d29f3ae76344a6d654986a91a91",
610
305
"type": "github"
611
306
},
612
307
"original": {
613
308
"owner": "NixOS",
614
-
"ref": "nixos-25.05",
309
+
"ref": "nixos-23.05",
615
310
"repo": "nixpkgs",
616
311
"type": "github"
617
312
}
618
313
},
619
-
"nixpkgs_2": {
314
+
"nixpkgs-stable_2": {
620
315
"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=",
316
+
"lastModified": 1678872516,
317
+
"narHash": "sha256-/E1YwtMtFAu2KUQKV/1+KFuReYPANM2Rzehk84VxVoc=",
636
318
"owner": "NixOS",
637
319
"repo": "nixpkgs",
638
-
"rev": "7a0d60a03534a2d14b0805616aa1fd403fccfa55",
320
+
"rev": "9b8e5abb18324c7fe9f07cb100c3cd4a29cda8b8",
639
321
"type": "github"
640
322
},
641
323
"original": {
642
324
"owner": "NixOS",
643
-
"ref": "nixos-25.11-small",
325
+
"ref": "nixos-22.11",
644
326
"repo": "nixpkgs",
645
327
"type": "github"
646
328
}
647
329
},
648
-
"nixpkgs_4": {
330
+
"nixpkgs-stable_3": {
649
331
"locked": {
650
-
"lastModified": 1763966396,
651
-
"narHash": "sha256-6eeL1YPcY1MV3DDStIDIdy/zZCDKgHdkCmsrLJFiZf0=",
332
+
"lastModified": 1693675694,
333
+
"narHash": "sha256-2pIOyQwGyy2FtFAUIb8YeKVmOCcPOTVphbAvmshudLE=",
652
334
"owner": "NixOS",
653
335
"repo": "nixpkgs",
654
-
"rev": "5ae3b07d8d6527c42f17c876e404993199144b6a",
336
+
"rev": "5601118d39ca9105f8e7b39d4c221d3388c0419d",
655
337
"type": "github"
656
338
},
657
339
"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"
340
+
"owner": "NixOS",
341
+
"ref": "release-23.05",
342
+
"repo": "nixpkgs",
343
+
"type": "github"
674
344
}
675
345
},
676
-
"pre-commit": {
346
+
"pre-commit-hooks-nix": {
677
347
"inputs": {
678
-
"flake-compat": "flake-compat_2",
348
+
"flake-compat": [
349
+
"lanzaboote",
350
+
"flake-compat"
351
+
],
352
+
"flake-utils": [
353
+
"lanzaboote",
354
+
"flake-utils"
355
+
],
679
356
"gitignore": "gitignore",
680
357
"nixpkgs": [
681
358
"lanzaboote",
682
359
"nixpkgs"
683
-
]
360
+
],
361
+
"nixpkgs-stable": "nixpkgs-stable_2"
684
362
},
685
363
"locked": {
686
-
"lastModified": 1765016596,
687
-
"narHash": "sha256-rhSqPNxDVow7OQKi4qS5H8Au0P4S3AYbawBSmJNUtBQ=",
364
+
"lastModified": 1681413034,
365
+
"narHash": "sha256-/t7OjNQcNkeWeSq/CFLYVBfm+IEnkjoSm9iKvArnUUI=",
688
366
"owner": "cachix",
689
367
"repo": "pre-commit-hooks.nix",
690
-
"rev": "548fc44fca28a5e81c5d6b846e555e6b9c2a5a3c",
368
+
"rev": "d3de8f69ca88fb6f8b09e5b598be5ac98d28ede5",
691
369
"type": "github"
692
370
},
693
371
"original": {
···
698
376
},
699
377
"root": {
700
378
"inputs": {
701
-
"arion": "arion",
702
-
"catppuccin": "catppuccin",
703
-
"ghostty": "ghostty",
704
-
"home-manager": "home-manager_2",
705
-
"hydra": "hydra",
706
-
"knotserver-module": "knotserver-module",
379
+
"attic": "attic",
380
+
"home-manager": "home-manager",
707
381
"lanzaboote": "lanzaboote",
708
382
"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"
383
+
"nixpkgs": "nixpkgs",
384
+
"sops-nix": "sops-nix"
716
385
}
717
386
},
718
387
"rust-overlay": {
719
388
"inputs": {
389
+
"flake-utils": [
390
+
"attic",
391
+
"crane",
392
+
"flake-utils"
393
+
],
720
394
"nixpkgs": [
721
-
"lanzaboote",
395
+
"attic",
396
+
"crane",
722
397
"nixpkgs"
723
398
]
724
399
},
725
400
"locked": {
726
-
"lastModified": 1765075567,
727
-
"narHash": "sha256-KFDCdQcHJ0hE3Nt5Gm5enRIhmtEifAjpxgUQ3mzSJpA=",
401
+
"lastModified": 1675391458,
402
+
"narHash": "sha256-ukDKZw922BnK5ohL9LhwtaDAdCsJL7L6ScNEyF1lO9w=",
728
403
"owner": "oxalica",
729
404
"repo": "rust-overlay",
730
-
"rev": "769156779b41e8787a46ca3d7d76443aaf68be6f",
405
+
"rev": "383a4acfd11d778d5c2efcf28376cbd845eeaedf",
731
406
"type": "github"
732
407
},
733
408
"original": {
···
736
411
"type": "github"
737
412
}
738
413
},
739
-
"sops-nix": {
414
+
"rust-overlay_2": {
740
415
"inputs": {
416
+
"flake-utils": [
417
+
"lanzaboote",
418
+
"flake-utils"
419
+
],
741
420
"nixpkgs": [
421
+
"lanzaboote",
742
422
"nixpkgs"
743
423
]
744
424
},
745
425
"locked": {
746
-
"lastModified": 1767499857,
747
-
"narHash": "sha256-0zUU/PW09d6oBaR8x8vMHcAhg1MOvo3CwoXgHijzzNE=",
748
-
"owner": "Mic92",
749
-
"repo": "sops-nix",
750
-
"rev": "ecc41505948ec2ab0325f14c9862a4329c2b4190",
426
+
"lastModified": 1682129965,
427
+
"narHash": "sha256-1KRPIorEL6pLpJR04FwAqqnt4Tzcm4MqD84yhlD+XSk=",
428
+
"owner": "oxalica",
429
+
"repo": "rust-overlay",
430
+
"rev": "2c417c0460b788328220120c698630947547ee83",
751
431
"type": "github"
752
432
},
753
433
"original": {
754
-
"owner": "Mic92",
755
-
"repo": "sops-nix",
434
+
"owner": "oxalica",
435
+
"repo": "rust-overlay",
756
436
"type": "github"
757
437
}
758
438
},
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"
439
+
"sops-nix": {
440
+
"inputs": {
441
+
"nixpkgs": [
442
+
"nixpkgs"
443
+
],
444
+
"nixpkgs-stable": "nixpkgs-stable_3"
766
445
},
767
-
"original": {
768
-
"type": "tarball",
769
-
"url": "https://sqlite.org/2024/sqlite-amalgamation-3450100.zip"
770
-
}
771
-
},
772
-
"systems": {
773
446
"locked": {
774
-
"lastModified": 1681028828,
775
-
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
776
-
"owner": "nix-systems",
777
-
"repo": "default",
778
-
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
447
+
"lastModified": 1693898833,
448
+
"narHash": "sha256-OIrMAGNYNeLs6IvBynxcXub7aSW3GEUvWNsb7zx6zuU=",
449
+
"owner": "Mic92",
450
+
"repo": "sops-nix",
451
+
"rev": "faf21ac162173c2deb54e5fdeed002a9bd6e8623",
779
452
"type": "github"
780
453
},
781
454
"original": {
782
-
"owner": "nix-systems",
783
-
"repo": "default",
455
+
"owner": "Mic92",
456
+
"repo": "sops-nix",
784
457
"type": "github"
785
458
}
786
459
},
787
-
"systems_2": {
460
+
"systems": {
788
461
"locked": {
789
462
"lastModified": 1681028828,
790
463
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
···
796
469
"original": {
797
470
"owner": "nix-systems",
798
471
"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
472
"type": "github"
962
473
}
963
474
}
+39
-93
flake.nix
+39
-93
flake.nix
···
3
3
4
4
nixConfig = {
5
5
extra-substituters = [
6
-
"https://cache.soopy.moe"
6
+
"https://nonbunary.soopy.moe/gensokyo-global"
7
+
"https://nonbunary.soopy.moe/gensokyo-systems"
7
8
];
8
9
9
10
extra-trusted-public-keys = [
10
-
"cache.soopy.moe-1:0RZVsQeR+GOh0VQI9rvnHz55nVXkFardDqfm4+afjPo="
11
+
"gensokyo-global:XiCN0D2XeSxF4urFYTprR+1Nr/5hWyydcETwZtPG6Ec="
12
+
"gensokyo-systems:r/Wx649dPuQrCN9Pgh3Jic526zQNk3oWMqYJHnob/Ok="
11
13
];
14
+
12
15
fallback = true;
13
16
};
14
17
15
18
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
-
};
19
+
nixpkgs.url = "nixpkgs/master";
29
20
30
21
home-manager = {
31
-
# sync with nixpkgs!
32
-
url = "github:nix-community/home-manager/release-25.11";
22
+
url = "github:nix-community/home-manager/release-23.05";
33
23
inputs.nixpkgs.follows = "nixpkgs";
34
24
};
35
25
36
-
whitelisted-web = {
37
-
url = "https://patchy.soopy.moe/soopyc/whitelisted-web/archive/main.tar.gz";
26
+
lanzaboote = {
27
+
url = "github:nix-community/lanzaboote/v0.3.0";
38
28
inputs.nixpkgs.follows = "nixpkgs";
39
29
};
40
30
41
-
lanzaboote = {
42
-
url = "github:nix-community/lanzaboote/v1.0.0";
31
+
attic = {
32
+
url = "github:zhaofengli/attic";
43
33
inputs.nixpkgs.follows = "nixpkgs";
44
34
};
45
35
···
48
38
inputs.nixpkgs.follows = "nixpkgs";
49
39
};
50
40
51
-
arion = {
52
-
url = "github:hercules-ci/arion";
41
+
mystia = {
42
+
url = "github:soopyc/mystia";
53
43
inputs.nixpkgs.follows = "nixpkgs";
54
44
};
45
+
};
55
46
56
-
tangled-core = {
57
-
url = "git+https://tangled.org/tangled.sh/core";
58
-
inputs.nixpkgs.follows = "nixpkgs";
59
-
};
47
+
outputs = {
48
+
nixpkgs,
49
+
home-manager,
50
+
...
51
+
} @ inputs: let
52
+
utils = import ./global/utils.nix;
53
+
lib = nixpkgs.lib;
60
54
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";
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;};
70
65
};
71
-
};
72
66
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";
67
+
devShells = forAllSystems (pkgs: {
68
+
default = pkgs.mkShell {
69
+
packages = [
70
+
(pkgs.python311.withPackages (p: [p.requests]))
71
+
];
96
72
};
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
-
};
73
+
});
112
74
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
-
};
75
+
formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.alejandra;
76
+
};
131
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
-
{
1
+
{pkgs, ...}: {
7
2
imports = [
8
3
./upgrade-diff.nix
4
+
./system
9
5
];
10
-
11
6
# Set default i18n configuration
12
7
i18n.defaultLocale = "en_US.UTF-8";
13
8
console = {
14
9
font = "Lat2-Terminus16";
15
10
keyMap = "us";
16
11
};
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
12
35
13
time.timeZone = "Asia/Hong_Kong";
36
14
-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
···
1
-
{ ... }:
2
-
{
1
+
{...}: {
3
2
imports = [
4
-
./nix
5
-
3
+
./nix.nix
6
4
./editors.nix
7
5
./shells.nix
8
6
./multiplexers.nix
9
7
10
-
./compat.nix
8
+
./compilers.nix
11
9
12
-
./networking.nix
13
10
./ssh.nix
14
11
./scm.nix
15
12
16
-
./security
13
+
./gpg.nix
17
14
18
-
./system-manager
19
15
./misc.nix
20
16
];
21
17
}
+2
-8
global/programs/editors.nix
+2
-8
global/programs/editors.nix
···
1
-
{ pkgs, ... }:
2
-
{
1
+
{...}: {
3
2
programs.neovim = {
4
3
enable = true;
5
-
defaultEditor = false;
4
+
defaultEditor = true;
6
5
viAlias = true;
7
6
vimAlias = true;
8
7
};
9
-
10
-
environment.systemPackages = with pkgs; [
11
-
helix
12
-
];
13
-
environment.variables.EDITOR = "hx";
14
8
}
+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
-
{
1
+
{pkgs, ...}: {
3
2
# Miscellaneous packages that do not have an option.
4
3
# It is recommended to use packages.<package>.enable when possible.
5
4
5
+
# To search for a specific package, run this command.
6
+
# $ nix search wget
6
7
environment.systemPackages = with pkgs; [
7
-
# junk
8
8
wget
9
9
curl
10
-
xh
11
-
gh
12
-
nil
13
-
nvd
14
-
nix-output-monitor
15
-
python3
16
-
ffmpeg-full
17
-
ghostty.terminfo
18
10
19
-
# irc
20
-
catgirl
21
-
pounce
22
-
23
-
# basic sysadmin utils
24
-
jq
25
11
file
26
12
ripgrep
27
13
ack
28
-
dust
29
-
parallel
30
-
cryptsetup
31
-
borgbackup
32
-
doggo
33
-
libarchive
34
-
unar
35
-
man-pages
36
-
htop-vim
37
14
38
-
# security
39
-
openssl
40
-
yubikey-manager
41
-
sops
42
-
opensc
43
-
44
-
# deno
45
15
deno
46
16
47
-
# command runners and utilities
17
+
nvd
48
18
just
49
-
inotify-tools
19
+
20
+
attic
21
+
git-crypt
50
22
];
51
23
52
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
-
{
1
+
{...}: {
3
2
programs.git = {
4
3
enable = true;
5
4
config = {
6
5
init.defaultBranch = "main";
7
6
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
7
};
15
8
};
16
9
}
-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
-
{
1
+
{pkgs, ...}: {
3
2
users.defaultUserShell = pkgs.zsh;
4
3
programs.zsh = {
5
4
enable = true;
···
23
22
enable = true;
24
23
settings = builtins.fromTOML (builtins.readFile ./starship.toml);
25
24
};
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
25
}
+1
-39
global/programs/ssh.nix
+1
-39
global/programs/ssh.nix
···
1
-
{ config, ... }:
2
-
let
3
-
nixos = config.system.nixos;
4
-
in
5
-
{
1
+
{...}: {
6
2
# Enable the OpenSSH daemon.
7
3
services.openssh = {
8
4
enable = true;
9
5
settings = {
10
6
PermitRootLogin = "no";
11
7
PasswordAuthentication = false;
12
-
PubkeyAcceptedAlgorithms = "sk-ssh-ed25519@openssh.com,ssh-ed25519";
13
8
};
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
9
};
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
10
}
+15
-50
global/programs/starship.toml
+15
-50
global/programs/starship.toml
···
3
3
4
4
# Inserts a blank line between shell prompts
5
5
add_newline = true
6
-
right_format = """$os $shell $direnv"""
7
6
8
7
# Replace the 'โฏ' symbol in the prompt with 'โ'
9
8
[character] # The name of the module we are configuring is 'character'
10
9
success_symbol = '[โ](bold green)' # The 'success_symbol' segment is being set to 'โ' with the color 'bold green'
11
10
error_symbol = '[โ](bold red)'
12
11
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
12
[username]
31
13
show_always = true
32
14
···
37
19
map_symbol = true
38
20
pipestatus = true
39
21
40
-
sigint_symbol = '๎'
41
-
not_executable_symbol = "๏"
42
-
not_found_symbol = '๏จ'
43
-
signal_symbol = '๏ง'
22
+
sigint_symbol = '^C'
23
+
not_found_symbol = '?'
24
+
signal_symbol = 'SIG'
44
25
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
26
+
[[battery.display]]
27
+
threshold = 100
28
+
style = "bold green"
61
29
62
30
[time]
63
31
disabled = false
64
32
65
33
[cmd_duration]
66
34
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
35
77
36
[aws]
78
37
symbol = "๎ฝ "
···
121
80
122
81
[hg_branch]
123
82
symbol = "๏ "
83
+
84
+
[hostname]
85
+
ssh_symbol = "๎ฌ "
86
+
ssh_only = false
87
+
124
88
[java]
125
89
symbol = "๎ "
126
90
···
138
102
139
103
[nim]
140
104
symbol = "๓ฐฅ "
105
+
106
+
[nix_shell]
107
+
symbol = "๏ "
141
108
142
109
[nodejs]
143
110
symbol = "๎ "
···
186
153
[package]
187
154
symbol = "๓ฐ "
188
155
189
-
[pijul_channel] # ????
156
+
[pijul_channel]
190
157
symbol = "๐ชบ "
191
158
192
159
[python]
···
206
173
207
174
[spack]
208
175
symbol = "๐
ข "
209
-
210
-
# vim:foldmethod=marker
-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
1
# Thank you https://github.com/luishfonseca/dotfiles/blob/ab7625ec406b48493eda701911ad1cd017ce5bc1/modules/upgrade-diff.nix
2
-
{
3
-
lib,
4
-
pkgs,
5
-
...
6
-
}:
7
-
{
2
+
{pkgs, ...}: {
8
3
system.activationScripts.diff = {
9
4
supportsDryActivation = true;
10
5
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
6
+
${pkgs.nvd}/bin/nvd --nix-bin-dir=${pkgs.nix}/bin diff /run/current-system "$systemConfig"
16
7
'';
17
8
};
18
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
1
+
# see /docs/utils.md for a usage guide
6
2
{
7
3
inputs,
8
4
system,
9
5
...
10
-
}:
11
-
let
12
-
pkgs = inputs.nixpkgs.legacyPackages.${system};
13
-
lib = pkgs.lib;
14
-
in
15
-
rec {
16
-
mkVhost =
17
-
opts:
6
+
}: let
7
+
lib = inputs.nixpkgs.lib;
8
+
in rec {
9
+
mkVhost = opts:
18
10
lib.mkMerge [
19
11
{
20
12
forceSSL = lib.mkDefault true;
21
13
useACMEHost = lib.mkDefault "global.c.soopy.moe";
22
14
kTLS = lib.mkDefault true;
23
-
quic = lib.mkDefault true;
24
15
25
16
locations."/_cgi/error/" = {
26
17
alias = "${inputs.mystia.packages.${system}.staticly}/nginx_error_pages/";
27
18
};
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
19
extraConfig = ''
40
20
error_page 503 /_cgi/error/503.html;
41
21
error_page 502 /_cgi/error/502.html;
42
22
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
23
'';
46
24
}
47
25
opts
48
26
];
49
27
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
28
+
mkSimpleProxy = {
29
+
port,
30
+
protocol ? "http",
31
+
location ? "/",
32
+
websockets ? false,
33
+
extraConfig ? {},
34
+
}:
35
+
mkVhost (lib.mkMerge [
36
+
extraConfig
142
37
{
143
-
alias = contentDir;
144
-
tryFiles = "${filename} =500"; # if it can't find the file something has gone wrong.
38
+
locations."${location}" = {
39
+
proxyPass = "${protocol}://localhost:${toString port}";
40
+
proxyWebsockets = websockets;
41
+
};
145
42
}
146
-
);
43
+
]);
147
44
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
-
);
45
+
genSecrets = namespace: files: value:
46
+
lib.genAttrs (
47
+
map (x: namespace + lib.optionalString (lib.stringLength namespace != 0) "/" + x) files
48
+
) (_: value);
159
49
}
+13
-79
justfile
+13
-79
justfile
···
1
1
# friendship ended with Makefile
2
2
# I LOVE justFILE!!!!!!
3
3
4
-
# modules are unstable atm
5
-
# mod utils
6
-
7
-
true := "true"
8
-
9
4
# 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
5
+
build:
6
+
nixos-rebuild build --flake .#
18
7
19
8
# 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
9
+
test:
10
+
nixos-rebuild test --flake .#
28
11
29
12
# 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
13
+
switch:
14
+
nixos-rebuild switch --flake .#
51
15
52
16
# 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/
17
+
utils recipe="list":
18
+
@echo "Running utils/{{recipe}}"
19
+
@cd utils && just {{recipe}}
60
20
61
21
# update an input in the flake lockfile
62
22
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
23
+
nix flake lock --update-input {{input}}
81
24
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
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
-
{
1
+
{...}: {
2
2
imports = [
3
3
./global.nix
4
-
# ./postgresql.nix
4
+
./postgresql.nix
5
5
./fediverse.nix
6
-
./bsky-pds.nix
7
-
./breezewiki.nix
8
-
./garage-s3.nix
9
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
+
};
10
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
-
{
1
+
{config, ...}: {
5
2
# PostgreSQL only certificate
6
3
security.acme.certs."phant.soopy.moe" = {
7
4
group = "postgres";
···
12
9
13
10
# https://nixos.org/manual/nixos/stable/#module-security-acme-root-owned
14
11
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
-
];
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
+
];
24
19
};
25
20
}
+21
-18
systems/koumakan/configuration.nix
+21
-18
systems/koumakan/configuration.nix
···
1
-
{ inputs, ... }:
2
-
{
1
+
{inputs, ...}: {
3
2
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
-
3
+
# Include the results of the hardware scan.
11
4
./hardware-configuration.nix
5
+
6
+
../../global/core.nix
7
+
../../global/programs
12
8
13
9
./networking
14
10
./certificates
15
11
./security
16
12
./services
17
-
18
-
./administration
19
13
];
20
14
21
-
gensokyo.traits = {
22
-
sensitive = true;
23
-
};
24
-
gensokyo.presets.secureboot = true;
25
-
gensokyo.presets.certificates = true;
15
+
nixpkgs.overlays = import ../../global/overlays inputs;
26
16
27
17
boot.loader = {
28
18
efi = {
29
19
canTouchEfiVariables = true;
30
-
efiSysMountPoint = "/boot";
20
+
efiSysMountPoint = "/boot/efi";
31
21
};
32
22
systemd-boot = {
33
23
enable = true;
34
24
graceful = true;
35
-
# netbootxyz.enable = true;
25
+
netbootxyz.enable = true;
36
26
};
37
27
grub.enable = false;
38
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;
39
42
40
43
# Just don't change this :p
41
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
4
{
5
5
config,
6
6
lib,
7
+
pkgs,
7
8
modulesPath,
8
9
...
9
-
}:
10
-
{
10
+
}: {
11
11
imports = [
12
12
(modulesPath + "/installer/scan/not-detected.nix")
13
13
];
14
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 = [ ];
15
+
boot.initrd.availableKernelModules = ["xhci_pci" "ahci" "usbhid" "sr_mod"];
16
+
boot.initrd.kernelModules = ["dm-snapshot"];
17
+
boot.kernelModules = ["kvm-intel"];
18
+
boot.extraModulePackages = [];
27
19
28
20
fileSystems."/" = {
29
-
device = "/dev/disk/by-uuid/738969fe-b2a0-4fa1-9ac5-69f2a25536e7";
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";
30
37
fsType = "btrfs";
31
38
};
32
39
33
40
fileSystems."/boot" = {
34
-
device = "/dev/disk/by-uuid/62FD-C60A";
41
+
device = "/dev/disk/by-uuid/9E0F-3FDE";
35
42
fsType = "vfat";
36
-
options = [
37
-
"fmask=0022"
38
-
"dmask=0022"
39
-
];
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";
40
53
};
41
54
42
-
fileSystems."/var/lib/garage/data" = {
43
-
device = "/dev/disk/by-uuid/99607c97-0dc6-403e-b09a-7b40735f9176";
44
-
fsType = "xfs";
55
+
fileSystems."/home" = {
56
+
device = "/dev/disk/by-uuid/50165105-6b82-4228-9640-2d32ce45f76e";
57
+
fsType = "btrfs";
45
58
};
46
59
47
60
swapDevices = [
48
-
{ device = "/dev/disk/by-uuid/902b902d-3486-49de-9a58-7a079c9a090d"; }
61
+
{device = "/dev/disk/by-uuid/efd68464-2e0c-4aaf-8264-519dd7d05ddf";}
49
62
];
50
63
51
64
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
···
53
66
# still possible to use this option, but it's recommended to use it in conjunction
54
67
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
55
68
networking.useDHCP = lib.mkDefault true;
69
+
# networking.interfaces.br0.useDHCP = lib.mkDefault true;
56
70
# networking.interfaces.eno1.useDHCP = lib.mkDefault true;
57
71
58
72
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
73
+
powerManagement.cpuFreqGovernor = lib.mkDefault "ondemand";
59
74
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
60
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
-
{
1
+
{...}: {
3
2
networking.firewall = {
4
3
enable = true;
5
4
allowedTCPPorts = [
5
+
22 # ssh
6
6
80
7
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
8
];
43
9
};
44
-
45
-
# allow openssh
46
-
services.openssh.openFirewall = lib.mkForce true;
47
10
}
+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
-
{
1
+
{pkgs, ...}: {
7
2
services.postgresql = {
8
3
enable = true;
9
4
10
5
package = pkgs.postgresql_15;
11
6
dataDir = "/var/lib/postgresql/15";
7
+
logLinePrefix = "%m [%p] %h ";
12
8
13
-
authentication = lib.mkForce ''
9
+
authentication = ''
14
10
# unix socket connection
15
-
local hydra all ident map=hydra-users
16
11
local all all peer
17
12
# local ipv4/6 tcp connection
18
13
host all all 127.0.0.1/32 scram-sha-256
19
14
host all all ::1/128 scram-sha-256
15
+
# world (encrypted) tcp traffic
16
+
hostssl all all all scram-sha-256
20
17
'';
21
18
22
-
settings = {
19
+
settings = let
20
+
credsDir = "/run/credentials/postgresql.service";
21
+
in {
23
22
listen_addresses = pkgs.lib.mkForce "*";
24
23
max_connections = 200;
25
24
password_encryption = "scram-sha-256";
26
25
27
-
log_line_prefix = "%m [%p] %h ";
28
-
# ssl = "on";
29
-
# ssl_cert_file = "${credsDir}/cert.pem";
30
-
# ssl_key_file = "${credsDir}/key.pem";
26
+
ssl = "on";
27
+
ssl_cert_file = "${credsDir}/cert.pem";
28
+
ssl_key_file = "${credsDir}/key.pem";
31
29
32
30
log_hostname = true;
33
31
datestyle = "iso, dmy";
34
32
log_timezone = "Asia/Hong_Kong";
35
33
timezone = "Asia/Hong_Kong";
36
-
default_text_search_config = "pg_catalog.english";
34
+
default_text_search_config = "pc_catalog.english";
37
35
38
36
max_wal_size = "2GB";
39
37
min_wal_size = "80MB";
40
38
};
41
39
};
42
-
43
-
users.users.postgres.useDefaultShell = lib.mkForce false;
44
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
-
{
1
+
{...}: {
3
2
imports = [
4
3
./nginx.nix
5
-
./anubis.nix
6
4
7
-
# "containers" in a burning text gif
8
-
./arion
5
+
./databases
9
6
10
-
# Gensokyo local stuff
11
-
./ftp.nix
7
+
./attic.nix
12
8
13
9
# fediverse
14
10
./matrix
15
11
./fediverse
16
-
./feeds
17
12
18
-
./ci
19
-
./databases
20
-
./games
21
-
./mirror
22
-
# ./notifications
23
13
./proxies
24
-
./scm
25
-
./security
26
14
./static-sites
27
-
./storage
28
-
./telemetry
29
15
];
30
16
}
+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
1
{
2
2
_utils,
3
3
pkgs,
4
-
lib,
5
4
config,
6
-
inputs,
7
5
...
8
-
}:
9
-
let
10
-
getSocket = file: "/run/matrix-synapse/${file}.sock";
11
-
staticly = inputs.mystia.packages.${pkgs.system}.staticly;
12
-
in
13
-
{
6
+
}: {
14
7
sops.secrets."synapse.yaml" = {
15
8
mode = "0400";
16
9
owner = config.users.users.matrix-synapse.name;
···
21
14
owner = config.users.users.matrix-synapse.name;
22
15
};
23
16
24
-
users.users.matrix-synapse.shell = lib.mkForce pkgs.shadow;
17
+
users.users.matrix-synapse.extraGroups = [config.users.groups.keys.name];
25
18
26
19
services.matrix-synapse = {
27
20
enable = true;
28
-
enableRegistrationScript = false;
29
-
configureRedisLocally = true; # workers support
30
-
31
21
withJemalloc = true;
32
22
extras = [
33
23
"jwt"
···
38
28
"/run/secrets/synapse.yaml"
39
29
];
40
30
41
-
workers = {
42
-
federation-sender-0 = { };
43
-
pusher-0 = { };
44
-
};
45
-
46
31
settings = {
47
32
server_name = "nue.soopy.moe";
48
33
serve_server_wellknown = true;
49
34
allow_public_rooms_over_federation = true;
50
35
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
36
# TODO: Setup TURN servers
79
37
# TODO: Setup OIDC providers
80
38
# TODO: Configure email
39
+
# TODO: Setup opentracing
81
40
url_preview_enabled = true;
82
41
enable_registration = false;
83
42
session_lifetime = "99y";
···
90
49
system_mxid_display_name = "Server Notices";
91
50
room_name = "Server Notices";
92
51
};
93
-
94
-
allow_device_name_lookup_over_federation = true;
95
52
96
53
trusted_key_servers = [
97
54
{
···
115
72
};
116
73
117
74
services.postgresql = {
118
-
ensureDatabases = [ "synapse" ];
75
+
ensureDatabases = ["synapse"];
119
76
ensureUsers = [
120
77
{
121
78
name = "synapse";
122
-
ensureDBOwnership = true;
79
+
ensurePermissions = {
80
+
"database \"synapse\"" = "all privileges";
81
+
};
123
82
}
124
83
];
125
84
};
126
85
127
-
users.users.nginx.extraGroups = [ "matrix-synapse" ];
128
86
services.nginx.virtualHosts."nue.soopy.moe" = _utils.mkVhost {
129
-
extraConfig = ''
130
-
access_log off;
131
-
'';
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
+
};
132
94
133
-
locations."= /.well-known/matrix/server" = _utils.mkNginxJSON "server" {
134
-
"m.server" = "nue.soopy.moe:443";
95
+
locations."= /.well-known/matrix/server" = {
96
+
return = "200 '{\"m.server\": \"nue.soopy.moe:443\"}'";
135
97
};
136
98
137
-
locations."~ ^(/_matrix|/_synapse/client|/health)" = {
138
-
proxyPass = "http://unix:${getSocket "mistress"}";
99
+
locations."~ ^(/_matrix|/_synapse/client)" = {
100
+
proxyPass = "http://localhost:8008";
139
101
extraConfig = ''
140
102
client_max_body_size 100M;
141
103
'';
142
104
};
143
105
144
106
locations."= /.well-known/matrix/client" = {
145
-
alias = "${staticly}/configs/matrix/";
107
+
alias = "${pkgs.staticly}/configs/matrix/";
146
108
tryFiles = "stable.json =404";
147
109
};
148
110
149
111
locations."/" = {
150
-
root = "${staticly}/pages/matrix/landing/";
112
+
root = "${pkgs.staticly}/pages/matrix/landing/";
151
113
tryFiles = "$uri $uri/index.html $uri.html =404";
152
114
};
153
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" ];
1
+
{pkgs, ...}: {
6
2
services.nginx = {
7
3
enable = true;
4
+
enableReload = true;
5
+
package = pkgs.nginxMainline;
6
+
8
7
clientMaxBodySize = "50m";
9
8
9
+
statusPage = true;
10
+
11
+
recommendedTlsSettings = true;
12
+
recommendedProxySettings = true;
10
13
additionalModules = with pkgs.nginxModules; [
11
14
fancyindex
12
15
brotli
13
16
];
14
17
};
15
-
16
-
# necessary for stuff like backup-public.nix and user.nix
17
-
systemd.services.nginx.serviceConfig.ProtectHome = "tmpfs";
18
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
-
{ _utils, ... }:
2
1
{
3
-
services.nginx.virtualHosts."nitter.soopy.moe" = _utils.mkVhost {
4
-
locations."/".return = "301 https://twiiit.com$request_uri";
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;
5
30
};
6
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
-
{
1
+
{...}: {
2
2
imports = [
3
-
./assets.nix
4
-
./backup-public.nix
5
-
./nonbunary.nix
6
-
./user.nix
7
-
./verification.nix
3
+
./keine.nix
8
4
];
9
5
10
-
# Fallback site
11
6
services.nginx.virtualHosts."_" = {
12
7
default = true;
13
8
useACMEHost = "global.c.soopy.moe";
14
9
forceSSL = true;
10
+
# locations."/".return = "301 https://gensokyo.soopy.moe";
15
11
12
+
# TODO: remove after bringing back up all the services.
16
13
locations = {
17
-
"/".root = "/srv/www/fallback";
14
+
"/".return = "503";
15
+
"~ ^/(index.html|splash.png)".root = "/srv/www/maintenance";
18
16
};
17
+
extraConfig = ''
18
+
error_page 503 /index.html;
19
+
'';
19
20
};
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
1
python_executable := if os() == "android" { "python3" } else { "nix develop ..# -c python3" }
2
2
3
3
list:
4
-
just -l
4
+
just -l
5
5
6
6
# grab a new nitter guest account and save it
7
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
8
+
{{python_executable}} nitter-guest-account.py tokens.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
-
})